不能使用流,这是 getusermedia 外部功能的承诺

cant use stream which is promise of getusermedia outside function

我正在尝试使用此 tutorial

在网络浏览器中录制音频

我正在使用 getusermedia。

我无法在功能外使用 micstream。

var rec
var context = new AudioContext();

document.querySelector('#startrecord').addEventListener('click', () => {
navigator.mediaDevices.getUserMedia({
        audio: true,
        video: false
    }).then((micStream) => {
        var microphone = context.createMediaStreamSource(micStream);
        rec = new Recorder(microphone, {
            numChannels: 1
        });
        rec.record();
        console.log('Started recording');
    });
});

document.querySelector('#stoprecord').addEventListener('click', stopRecording);
function stopRecording(){
    rec.stop(); //stop recording
    console.log('Stopped recording.');

    micStream.getAudioTracks()[0].stop();   //turn off mic
    rec.exportWAV(shareAudio);      //wave encode and share
}

function shareAudio(blob){
    //send blob over to python using web sockets
}

我的控制台输出是

Started recording(index):28 
Stopped recording.(index):35 
Uncaught ReferenceError: micStream is not defined
    at HTMLButtonElement.stopRecording ((index):37)

索引 37 是 micStream.getAudioTracks()[0].stop(); //turn off mic

你可以用 rec 和录音机做同样的事情:

var rec, mic;
...
    }).then((micStream) => {
        mic = micStream;//now available outside function scope like rec
...
       mic.getAudioTracks()[0].stop();   //turn off mic