Я работаю с веб-аудио api и requestAnimationFrame для визуализации аудиовхода с микрофона. Я могу успешно визуализировать частотные данные во временной области, но проблема в том, что, поскольку веб-аудио api вычисляет время в секундах, каждую секунду мой интерфейс изменяется в зависимости от того, что такое вход.обработка в реальном времени веб-аудио api
Итак, мой вопрос в том, как я могу визуализировать звук и отображать график на экране, таким образом, я могу видеть все свои частотные данные за определенный промежуток времени (скажем, я говорю, а между тем визуализую на холсте всего за 5 секунд).
Я использую следующий код (взял из примеров here):
MicrophoneSample.prototype.visualize = function() {
this.canvas.width = this.WIDTH;
this.canvas.height = this.HEIGHT;
var drawContext = this.canvas.getContext('2d');
var times = new Uint8Array(this.analyser.frequencyBinCount);
this.analyser.getByteTimeDomainData(times);
for (var i = 0; i < times.length; i++) {
var value = times[i];
var percent = value/256;
var height = this.HEIGHT * percent;
var offset = this.HEIGHT - height - 1;
var barWidth = this.WIDTH/times.length;
drawContext.fillStyle = 'purple';
drawContext.fillRect(i * barWidth, offset, 1, 1);
}
requestAnimFrame(this.visualize.bind(this));
}
Rq: изменение размера холста/получение контекста на каждом вызове является излишним: сделайте это один раз и сохраните ctx. Разве нет необходимости подключать ваш источник звука к анализатору, чтобы получить частоты? – GameAlchemist
Вход уже подключен к анализатору, и я также могу получить значения формы волны или другие звуковые свойства. Главная проблема заключается в том, как сделать визуализацию их резидентом? – user2039789