我整天都被困在这一天。尝试从getUserMedia中分离源并分别显示左右声道。无论我做什么,每个可视化器都卡在单声道中。我正在使用的源是立体声(如果我在windows中听它,它显然是立体声)。复制所需的最低要求。
navigator.getUserMedia({audio: true}, analyse, function(e) {
alert('Error getting audio');
console.log(e);
});
}
function analyse(stream){
window.stream = stream;
var input = audioContext.createMediaStreamSource(stream);
splitter = audioContext.createChannelSplitter(2),
lAnalyser = audioContext.createAnalyser(),
rAnalyser = audioContext.createAnalyser();
input.connect(splitter);
splitter.connect(lAnalyser, 0, 0);
splitter.connect(rAnalyser, 1, 0);
var lArray = new Uint8Array(lAnalyser.frequencyBinCount),
rArray = new Uint8Array(rAnalyser.frequencyBinCount);
updateAnalyser()
function updateAnalyser(){
requestAnimationFrame(updateAnalyser);
lAnalyser.getByteFrequencyData(lArray);
rAnalyser.getByteFrequencyData(rArray);
}
}
lArray和rArray将是相同的,即使我将左声道或右声道静音。难道我做错了什么?我也尝试过输入> splitter-> leftmerger / rightmerger-> leftanalyser / rightanalyser。
http://www.smartjava.org/content/exploring-html5-web-audio-visualizing-sound 是我能找到的最接近的东西,它是相似的,但它没有使用用户输入并处理音频缓冲区。
答案 0 :(得分:1)
根据https://code.google.com/p/chromium/issues/detail?id=387737
预期会有这种行为。在M37中,我们将音频处理从对等连接移动到getUserMedia,如果没有指定" echoCancellation:false"则默认打开音频处理。在getUserMedia约束中,由于音频处理仅支持单声道,我们必须在传递数据进行处理之前将音频采样到单声道。
如果要避免向下采样,请将约束传递给getUserMedia,例如: var constraints = {audio:{mandatory:{echoCancellation:false,googAudioMirroring:true}}}; getUserMedia(constraints,gotStream,gotStreamFailed);
将约束设置为{audio: { mandatory: { echoCancellation: false}}
会停止输入缩混。