I've been trying to get the data from the media stream of a microphone when a user speaks into it. My goal is to continually send that data over to a web server as until the user closes the mic by a button. I've tried a lot like this from mdn unfortunately its in javascript and I try to rewrite it in typescript which I think is where my problem arises. At the moment this is what I have mediaRecorder?: MediaRecorder chunks: any = [] dest?: MediaStreamAudioDestinationNode constraints = { audio:true, video: false } async record_audio() { if (navigator.mediaDevices){ var $this = this; navigator.mediaDevices.getUserMedia(this.constraints).then((stream)=>{ this.mediaRecorder = new MediaRecorder(stream) this.mediaRecorder.start(); //this.mediaRecorder.ondataavailable = this.pushChunks; this.mediaRecorder.ondataavailable = function (e) { console.log("pushing chunk") $this.chunks.push(e.data); }; console.log('starting recorder...') }) } else { alert('getUserMedia not supported.'); } } The method is called but the mediaRecorder.ondataavailable is never called. I don't know if the method gets destroyed after it exits or something. How do I continually get the data in this stream so I can upload it to a web server? Continue reading...