Я пытался захватить громкость в реальном времени с входа микрофона через webaudio api. После прочтения некоторых статей я думал, что что-то работает, но кажется, что объем возвращаемого из анализатора и scriptprocessor всегда равен 0.Объем входного микрофона для webaudio всегда 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();
Спасибо, что нашли время, чтобы взглянуть на то, что я делаю неправильно, веб-аудио еще очень новое для меня :)
Спасибо, я переименовал свою переменную в «микрофон» и действительно увидел, что я не использовал это как источник медиаистории. – Jorre
любая идея, почему анализатор останавливается через пару секунд или я должен открыть для него новые вопросы? – Jorre
Я ожидаю, что это связано с тем, что ваш анализатор и javascriptNode объявлены внутри функции processAudio, и они в конечном итоге собирают мусор - попробуйте объявить их глобально. – cwilso