AudioWorkletProcessor
Baseline Широко доступен
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2021 года.
Интерфейс AudioWorkletProcessor Web Audio API представляет собой код обработки звука, работающий за пользовательским AudioWorkletNode. Он находится в AudioWorkletGlobalScope и выполняется в потоке рендеринга Web Audio. В свою очередь, AudioWorkletNode на его основе выполняется в главном потоке.
Конструктор
Примечание: AudioWorkletProcessor и классы, производные от него, не могут быть созданы напрямую пользователем. Вместо этого они создаются только внутри при создании связанного AudioWorkletNode. Конструктор производного класса вызывается с объектом опций, что позволяет выполнить пользовательскую процедуру инициализации — см. страницу конструктора для подробностей.
AudioWorkletProcessor()-
Создает новый экземпляр объекта
AudioWorkletProcessor.
Свойства экземпляра
-
portТолько для чтения -
Возвращает
MessagePort, используемый для двусторонней связи между процессором иAudioWorkletNode, к которому он принадлежит. Другой конец доступен через свойствоportузла.
Методы экземпляра
Интерфейс AudioWorkletProcessor не определяет собственных методов. Однако вы должны предоставить метод process(), который вызывается для обработки потока аудио.
События
Интерфейс AudioWorkletProcessor не реагирует ни на какие события.
Примечания по использованию
Производные классы
Чтобы определить пользовательский код обработки звука, необходимо создать класс, производный от интерфейса AudioWorkletProcessor. Несмотря на то, что он не определен в интерфейсе, производный класс должен иметь метод process. Этот метод вызывается для каждого блока из 128 кадров образцов и принимает массивы входных и выходных данных, а также вычисленные значения пользовательских AudioParam (если они определены) в качестве параметров. Вы можете использовать входные данные и значения параметров аудио для заполнения массива выходов, который по умолчанию содержит тишину.
Если вы хотите использовать пользовательские AudioParam в узле, вы можете указать свойство parameterDescriptors в качестве статического геттера процессора. Массив объектов на основе AudioParamDescriptor, возвращаемых этим свойством, используется внутри для создания AudioParam во время создания AudioWorkletNode.
Полученные AudioParam находятся в свойстве parameters узла и могут быть автоматизированы с помощью стандартных методов, таких как linearRampToValueAtTime. Их вычисленные значения передаются в метод process() процессора, чтобы вы могли соответствующим образом сформировать выходной сигнал узла.
Обработка аудио
Пример алгоритма создания пользовательского механизма обработки аудио:
-
Создайте отдельный файл;
-
В файле:
- Расширьте класс
AudioWorkletProcessor(см. раздел "Производные классы") и предоставьте свой собственный методprocess()в нём; - Зарегистрируйте процессор, используя метод
AudioWorkletGlobalScope.registerProcessor();
- Расширьте класс
-
Загрузите файл с помощью метода
addModule()свойстваaudioWorkletвашего контекста аудио; -
Создайте
AudioWorkletNodeна основе процессора. Процессор будет создан внутри конструкторомAudioWorkletNode. -
Подключите узел к другим узлам.
Примеры
В примере ниже мы создаем пользовательский AudioWorkletNode, который выводит белый шум.
Сначала нам нужно определить пользовательский AudioWorkletProcessor, который будет выводить белый шум, и зарегистрировать его. Обратите внимание, что это должно быть сделано в отдельном файле.
// white-noise-processor.js
class WhiteNoiseProcessor extends AudioWorkletProcessor {
process(inputs, outputs, parameters) {
const output = outputs[0];
output.forEach((channel) => {
for (let i = 0; i < channel.length; i++) {
channel[i] = Math.random() * 2 - 1;
}
});
return true;
}
}
registerProcessor("white-noise-processor", WhiteNoiseProcessor);
Далее, в нашем основном файле сценария мы загрузим процессор, создадим экземпляр AudioWorkletNode, передав ему имя процессора, а затем подключим узел к графу аудио.
const audioContext = new AudioContext();
await audioContext.audioWorklet.addModule("white-noise-processor.js");
const whiteNoiseNode = new AudioWorkletNode(
audioContext,
"white-noise-processor",
);
whiteNoiseNode.connect(audioContext.destination);
Спецификации
| Спецификация |
|---|
| Web Audio API # AudioWorkletProcessor |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
AudioWorkletProcessor |
64 | 79 | 76 | 51 | 14.1 | 64 | 79 | 47 | 14.5 | 9.0 | 64 |
AudioWorkletProcessor |
64 | 79 | 76 | 51 | 14.1 | 64 | 79 | 47 | 14.5 | 9.0 | 64 |
port |
64 | 79 | 76 | 51 | 14.1 | 64 | 79 | 47 | 14.5 | 9.0 | 64 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/AudioWorkletProcessor