in src/js/client/microphone.ts [59:106]
async setupMicrophone() {
let me = this;
me.audioContext = new AudioContext();
me.setupButtons();
this.audioElement =
<HTMLAudioElement>document.querySelector(SELECTORS.AUDIO_ELEMENT);
me.meta.sampleHerz = me.audioContext.sampleRate;
me.meta.channels = me.audioContext.destination.numberOfInputs;
await navigator.mediaDevices.getUserMedia({ audio: {
deviceId: 'mic',
} })
.then(function(s: MediaStream) {
me.mediaStream = s;
me.mediaRecorder = new MediaRecorder(me.mediaStream);
me.getMicStream();
me.mediaRecorder.addEventListener('start', (e:any) => {
me.outputChunks = [];
let event = new CustomEvent('start', {
detail: 'start'
});
window.dispatchEvent(event);
me.source = me.audioContext.createMediaStreamSource(me.mediaStream);
me.source.connect(me.scriptProcessor);
me.scriptProcessor.connect(me.audioContext.destination);
});
me.mediaRecorder.addEventListener('stop', (e:any) => {
// TODO problem in IOS
// after you disconnect the audionode and script processor
// the buffer will be nulled out.
me.source.disconnect(me.scriptProcessor);
me.scriptProcessor.disconnect(me.audioContext.destination);
});
}).catch(function(e){
console.log(e);
});
/*return new Promise(resolve => {
resolve(me.meta);
});*/
return me.meta;
}