Spec-Zone.ru › Web APIs

AudioProcessingEvent

Устаревший: Эта функция больше не рекомендуется. Хотя некоторые браузеры всё ещё могут её поддерживать, она может быть уже удалена из соответствующих веб-стандартов, может быть в процессе удаления или поддерживаться только для совместимости. Избегайте её использования и обновите существующий код, если это возможно; см. таблицу совместимости внизу этой страницы, чтобы принять решение. Имейте в виду, что эта функция может перестать работать в любой момент.

Интерфейс AudioProcessingEvent API Веб-аудио представляет события, возникающие при готовности буфера ввода ScriptProcessorNode для обработки.

Событие audioprocess с этим интерфейсом генерируется узлом ScriptProcessorNode при необходимости обработки звука. Во время обработки звука буфер ввода считывается и обрабатывается для создания выходных аудиоданных, которые затем записываются в буфер вывода.

Предупреждение: Эта функция устарела и должна быть заменена AudioWorklet.

Событие AudioProcessingEvent

Конструктор

AudioProcessingEvent() Устаревший

Создаёт новый объект AudioProcessingEvent.

Свойства экземпляра

Также реализует свойства, унаследованные от родительского класса, Event.

playbackTime Только для чтения Устаревший

Число с плавающей запятой, представляющее время воспроизведения, как определено временем AudioContext.currentTime.

inputBuffer Только для чтения Устаревший

Объект AudioBuffer, который представляет буфер, содержащий входные аудиоданные, подлежащие обработке. Количество каналов определено как параметр numberOfInputChannels, метода-фабрики AudioContext.createScriptProcessor(). Обратите внимание, что возвращаемый AudioBuffer действителен только в контексте обработчика событий.

outputBuffer Только для чтения Устаревший

Объект AudioBuffer, который представляет буфер, в который должны быть записаны выходные аудиоданные. Количество каналов определено как параметр numberOfOutputChannels, метода-фабрики AudioContext.createScriptProcessor(). Обратите внимание, что возвращаемый AudioBuffer действителен только в контексте обработчика событий.

Примеры

Добавление белого шума с помощью узла Script Processor

Следующий пример показывает, как использовать узел ScriptProcessorNode для обработки дорожки, загруженной с помощью AudioContext.decodeAudioData(), добавив немного белого шума к каждому аудиообразцу входной дорожки (буфера) и воспроизведя её через AudioDestinationNode. Функция scriptNode.onaudioprocess для каждого канала и каждого кадра образца принимает соответствующий audioProcessingEvent и использует его для перебора каждого канала входного буфера и каждого образца в каждом канале, добавляя небольшое количество белого шума, прежде чем установить этот результат в качестве выходного образца в каждом случае.

Примечание: Полный рабочий пример см. в нашем репозитории GitHub script-processor-node. (Вы также можете получить доступ к исходному коду.)

const myScript = document.querySelector("script");
const myPre = document.querySelector("pre");
const playButton = document.querySelector("button");

// Create AudioContext and buffer source
let audioCtx;

async function init() {
  audioCtx = new AudioContext();
  const source = audioCtx.createBufferSource();

  // Create a ScriptProcessorNode with a bufferSize of 4096 and
  // a single input and output channel
  const scriptNode = audioCtx.createScriptProcessor(4096, 1, 1);

  // Load in an audio track using fetch() and decodeAudioData()
  try {
    const response = await fetch("viper.ogg");
    const arrayBuffer = await response.arrayBuffer();
    source.buffer = await audioCtx.decodeAudioData(arrayBuffer);
  } catch (err) {
    console.error(
      `Unable to fetch the audio file: ${name} Error: ${err.message}`,
    );
  }

  // Give the node a function to process audio events
  scriptNode.addEventListener("audioprocess", (audioProcessingEvent) => {
    // The input buffer is the song we loaded earlier
    let inputBuffer = audioProcessingEvent.inputBuffer;

    // The output buffer contains the samples that will be modified
    // and played
    let outputBuffer = audioProcessingEvent.outputBuffer;

    // Loop through the output channels (in this case there is only one)
    for (let channel = 0; channel < outputBuffer.numberOfChannels; channel++) {
      let inputData = inputBuffer.getChannelData(channel);
      let outputData = outputBuffer.getChannelData(channel);

      // Loop through the 4096 samples
      for (let sample = 0; sample < inputBuffer.length; sample++) {
        // make output equal to the same as the input
        outputData[sample] = inputData[sample];

        // add noise to each output sample
        outputData[sample] += (Math.random() * 2 - 1) * 0.1;
      }
    }
  });

  source.connect(scriptNode);
  scriptNode.connect(audioCtx.destination);
  source.start();

  // When the buffer source stops playing, disconnect everything
  source.addEventListener("ended", () => {
    source.disconnect(scriptNode);
    scriptNode.disconnect(audioCtx.destination);
  });
}

// wire up play button
playButton.addEventListener("click", () => {
  if (!audioCtx) {
    init();
  }
});

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
AudioProcessingEvent 57 79 Нет 44 14.1 57 Нет 43 14.5 7.0 57
AudioProcessingEvent 14 12 25 15 6 18 25 14 6 1.0 4.4
inputBuffer 14 12 25 15 6 18 25 14 6 1.0 4.4
outputBuffer 14 12 25 15 6 18 25 14 6 1.0 4.4
playbackTime 14 12 25 15 6 18 25 14 6 1.0 ≤37

См. также

  • Использование API Веб-аудио

© 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/AudioProcessingEvent

Spec-Zone.ru

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