Web Audio API, получить getByteTimeDomainData для левого / правого канала в двух массивах.
В настоящее время я пытаюсь создать аудио-визуализацию, используя веб-аудио API, а именно, я пытаюсь создать фигуры Лиссажу из данного аудиоисточника.
Я наткнулся на этот пост, но мне не хватает некоторых предварительных условий. Как я могу получить данные временной области для левого / правого каналов? В настоящее время кажется, что я получаю только объединенные данные.
Любая помощь или подсказка будет высоко ценится.
$(document).ready(function () {
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var audioElement = document.getElementById('audioElement');
var audioSrc = audioCtx.createMediaElementSource(audioElement);
var analyser = audioCtx.createAnalyser();
// Bind analyser to media element source.
audioSrc.connect(analyser);
audioSrc.connect(audioCtx.destination);
//var timeDomainData = new Uint8Array(analyser.frequencyBinCount);
var timeDomainData = new Uint8Array(200);
// loop and update time domain data array.
function renderChart() {
requestAnimationFrame(renderChart);
// Copy frequency data to timeDomainData array.
analyser.getByteTimeDomainData(timeDomainData);
// debugging: print to console
console.log(timeDomainData);
}
// Run the loop
renderChart();
});
2 ответа
Наблюдение правильное, форма волны - результат пониженного микширования. Из текущей спецификации (мой акцент):
Копирует текущие данные во временной области с пониженным микшированием в волновой массив без знака. [...]
Чтобы обойти это, вы можете использовать разветвитель канала (createChannelSplitter()
) и назначить каждый канал двум отдельным узлам анализатора.
Для более подробной информации о createChannelSplitter()
смотрите эту ссылку.
Мы можем добиться этого, используя pan
вариант:
Число с плавающей запятой в диапазоне [-1,1], указывающее положение AudioNode в выходном изображении. Значение -1 соответствует полному левому краю, а 1 — полному правому. Значение по умолчанию — 0.
Веб-радио с 2-канальным стереофоническим измерителем уровня громкости
В следующей демонстрации всемирное радио BBC разделено на два левых и правых канала. Эти каналы затем направляются на свои собственные анализаторы, которые передают значения индикаторам выполнения. Зацикливание осуществляется с использованием кадров анимации и таймеров.
StereoPannerNode
https://developer.mozilla.org/en-US/docs/Web/API/StereoPannerNode/StereoPannerNode