Хорошо, поэтому я пытаюсь определить интенсивность (в дБ) сэмплов аудиофайла, записанного браузером пользователя.
Я смог записать его и воспроизвести черезЭлемент HTML.Но когда я пытаюсь использовать этот элемент в качестве источника и подключить его к AnalyserNode, AnalyserNode.getFloatFrequencyData всегда возвращает массив, полный -Infinity, getByteFrequencyData всегда возвращает нули, getByteTimeDomainData - 128.
Вот мой код:
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var source;
var analyser = audioCtx.createAnalyser();
var bufferLength = analyser.frequencyBinCount;
var data = new Float32Array(bufferLength);
mediaRecorder.onstop = function(e) {
var blob = new Blob(chunks, { 'type' : 'audio/ogg; codecs=opus' });
chunks = [];
var audioURL = window.URL.createObjectURL(blob);
// audio is an HTML audio element
audio.src = audioURL;
audio.addEventListener("canplaythrough", function() {
source = audioCtx.createMediaElementSource(audio);
source.connect(analyser);
analyser.connect(audioCtx.destination);
analyser.getFloatFrequencyData(data);
console.log(data);
});
}
Есть идеи, почему AnalyserNode ведет себя так, что источник пуст / отключен?Я также пытался поместить поток в качестве источника во время записи, с тем же результатом.