webaudio麦克风输入音量始终为0
问题描述:
我一直试图通过webaudio api从麦克风输入中获取实时音量。阅读一些文章后,我认为我有什么工作,但它似乎是从分析仪和scriptprocessor返回音量始终为0webaudio麦克风输入音量始终为0
更新,使“麦克风”作为数据源
// detect support for different browsers
navigator.getUserMedia = (navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
var Mosquito = {
setup : function(){
// ask permission to grab the mic
var stream = navigator.getUserMedia({ audio: true }, Mosquito.successCallback, Mosquito.errorCallback);
},
successCallback : function(localMediaStream){
var audioContext = new AudioContext();
// hook up the mic to the mediaStreamSource in audioContext
var microphone = audioContext.createMediaStreamSource(localMediaStream);
Mosquito.processAudio(microphone, audioContext);
},
processAudio : function(microphone, audioContext){
// analyze a piece of the signal
var analyser = audioContext.createAnalyser();
analyser.smoothingTimeConstant = 0.3; // make it less jizzy
analyser.fftSize = 512;
// create a scriptProcessor in order to read out the analyser data
var javascriptNode = audioContext.createScriptProcessor(2048, 1, 1);
// connect all the things
microphone.connect(analyser);
analyser.connect(javascriptNode);
javascriptNode.connect(audioContext.destination);
javascriptNode.onaudioprocess = function(e){
var array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(array);
console.log(array);
var average = Mosquito.getAverageVolume(array);
console.log(average);
Mosquito.drawMeters(average);
};
},
drawMeters : function(average){
document.getElementById("meter").innerHTML = average;
},
getAverageVolume : function(array){
var values = 0;
var average;
var length = array.length;
// get all the frequency amplitudes
for (var i = 0; i < length; i++) {
values += array[i];
}
average = values/length;
return average;
},
errorCallback : function(){
console.log('nope');
}
}
Mosquito.setup();
感谢您花时间看看我做错了什么,网络音频对我来说还是很新颖:)
答
为什么你要创建一个buffersource?您应该只连接mediastreamsource(目前未连接,这就是您没有收到任何数据的原因)。
谢谢,我已将我的变量重命名为“麦克风”,并确实看到我没有将它用作mediastreamsource。 – Jorre
任何想法为什么分析仪停止几秒钟后,或者我应该为此打开一个新的问题? – Jorre
我期望它与你的分析器和javascriptNode在processAudio函数中被声明有关,并且它们最终会被垃圾收集 - 尝试在全局声明它们。 – cwilso