Spec-Zone.ru › Web APIs

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() процессора, чтобы вы могли соответствующим образом сформировать выходной сигнал узла.

Обработка аудио

Пример алгоритма создания пользовательского механизма обработки аудио:

  1. Создайте отдельный файл;

  2. В файле:

    1. Расширьте класс AudioWorkletProcessor (см. раздел "Производные классы") и предоставьте свой собственный метод process() в нём;
    2. Зарегистрируйте процессор, используя метод AudioWorkletGlobalScope.registerProcessor();
  3. Загрузите файл с помощью метода addModule() свойства audioWorklet вашего контекста аудио;

  4. Создайте AudioWorkletNode на основе процессора. Процессор будет создан внутри конструктором AudioWorkletNode.

  5. Подключите узел к другим узлам.

Примеры

В примере ниже мы создаем пользовательский 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

См. также

  • Web Audio API
  • Использование Web Audio API
  • Использование AudioWorklet

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API