У меня есть audioContext, который получает медиа из createMediaElementSource. Я хочу анализировать этот звук на ходу в AudioBuffers или что-то подобное, что я могу отправить другому клиенту через веб-сокеты.

let audioElement = document.querySelector('video')
let audioContext = new window.AudioContext()
let source = audioContext.createMediaElementSource(audioElement)
source.connect(deliverToOtherClientOrSomething)

Я попытался создать AudioWorkletNode, но проблема с этим подходом в том, что он не позволяет мне закончить цепочку на этом, но заставляет меня пересылать звук в какой-то другой элемент AudioContext, что нежелательно.

1
sava 15 Апр 2020 в 00:47

1 ответ

Лучший ответ

Итак, в конце концов, эта проблема была решена с помощью узла звукового рабочего листа. При создании AudioWorkletNode можно передавать ему параметры. Один из вариантов - numberOfOutputs. Таким образом, я получил полный ответ на мой вопрос.

Mainfile

const sendProcessor = new AudioWorkletNode(audioContext, 'send-processor', {numberOfOutputs:0})
sendProcessor.port.onmessage = (event) => {
    callback(event.data);
}

Файл процессора

process(inputs, outputs) {
    this.port.postMessage(inputs[0][0]);
    return true;
}
0
sava 4 Май 2020 в 23:44