Требуются ли для подключения к сценариям WebAudio scriptProcessorNodes * выходные данные?
Вот ссылка на простой jsFiddle, который измеряет громкость живого ввода с помощью веб-аудио (выводит значения в процентах на консоль).
Я планировал иметь один вход и никаких выходов, так как нет необходимости задерживать мой аудиосигнал, ожидая, пока мой пользовательский узел завершит обработку громкости.
Однако стало очевидно, что scriptProcessor регистрирует значения, только если он подключен к context.destination
, Я делаю что-то неправильно? Или это ошибка? Или это ожидаемое поведение?
function gotStream(stream) {
var mediaStreamSource = context.createMediaStreamSource(stream);
var gainNode = context.createGain();
gainNode.gain.value = 3;
var levelChecker = context.createScriptProcessor(2048);
mediaStreamSource.connect(gainNode);
gainNode.connect(levelChecker);
//Commenting out the line directly below stops the script processor from working!
levelChecker.connect(context.destination);
levelChecker.onaudioprocess = process;
}
function process(e) {
var buffer = e.inputBuffer.getChannelData(0);
var maxVal = 0;
for (var i = 0; i < buffer.length; i++) {
if (maxVal < buffer[i]) {
maxVal = buffer[i];
}
}
console.log(Math.round(maxVal * 100) + "%");
}
1 ответ
Это ошибка в реализациях Blink & Webkit. Из спецификации: "События аудиопроцесса отправляются только в том случае, если ScriptProcessorNode имеет хотя бы один вход или один выход". Это не нужно обоим.
Пока просто подключите его к GainNode с нулевым усилением, подключенному к audiocontext.destination.