2016-01-08 293 views
1

我使用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 */ }); 

真的很奇怪,我認爲是完全相同的代碼有這種不同的行爲 - 欣賞任何指針。

回答

2

這將是一個盲目的嘗試,但我相當確信你在你的評論中隱藏的內容是你問題的根源。

何時,如果您確實將數據流加載到<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 
     }); 
相關問題