Web音频API:阻止通过扬声器播放麦克风输入

问题描述:

我使用Recorder.JS将音频录制在HTML应用程序中。总的来说,这个工作正常,除了麦克风输入通过扬声器回声(如果我不使用耳机会产生回声)。Web音频API:阻止通过扬声器播放麦克风输入

我发现的各种帖子表明这是因为输入连接到AudioContext目的地 - 但这不适用于我的情况。

而且,如果我运行Recorder.JS例子,我没有得到任何回音等(同一台机器,同一个浏览器),即使代码是相同的,据我可以告诉:

// At the top of the script: 
var recorder = null; 

// in DOMContentLoaded: 
navigator.getUserMedia({ video: true, audio: true }, function(stream) { 
    // Video stuff. 
    var audioContext = new AudioContext(); 
    var microphone = audioContext.createMediaStreamSource(stream); 
    recorder = new Recorder(microphone, { numChannels: 1, sampleRate: 16000 }); 
}, onError); 

// In start button handler: 
recorder.record(); 

// And in the stop button handler: 
recorder.stop(); 
recorder.exportWAV(function(audio) { /* omited */ }); 

真的很奇怪,我认为是完全相同的代码有这种不同的行为 - 欣赏任何指针。

这将是一个盲目的尝试,但我相当确信你在你的评论中隐藏的内容是你问题的根源。

何时,如果您确实将数据流加载到<video>元素中,那么您会将整个gUM流附加到其src视频和音频通道中。

所以当你做play()的视频流,音频也播放。

所以如果我的假设是正确的,你只需要静音视频元素感谢其muted属性。

video.src = URL.createObjectURL(stream); 
video.muted = true; 
video.play(); 

注意we should be able调用MediaStream()构造函数只有VideoStreamTrack因此视频没有得到访问的音频流。

但截至今日,只有Firefox似乎支持它。

navigator.mediaDevices.getUserMedia({ video: true, audio: true }) 
    .then(function(stream) { 
     var videoStream = stream.getVideoTracks()[0]; 
     var mediaStream = new MediaStream([videoStream]) ; 
     v.src = URL.createObjectURL(mediaStream); 
     v.play(); 
     // audio stuff 
     });