AudioProcessingEvent

已弃用:此功能不再推荐。尽管某些浏览器可能仍然支持它,但它可能已从相关的 Web 标准中删除,可能正在被删除,或者可能仅出于兼容性目的而保留。避免使用它,并尽可能更新现有代码;请参阅此页面底部的兼容性表以指导您的决策。请注意,此功能可能随时停止工作。

AudioProcessingEvent 接口是Web 音频 API的一部分,它表示当ScriptProcessorNode输入缓冲区准备好进行处理时发生的事件。

当需要音频处理时,具有此接口的audioprocess事件将在ScriptProcessorNode上触发。在音频处理期间,读取输入缓冲区并进行处理以生成输出音频数据,然后将其写入输出缓冲区。

警告:此功能已弃用,应替换为AudioWorklet

Event AudioProcessingEvent

构造函数

AudioProcessingEvent() 已弃用

创建一个新的AudioProcessingEvent对象。

实例属性

还实现了从其父级Event继承的属性.

playbackTime 只读 已弃用

一个双精度数,表示音频将播放的时间,由AudioContext.currentTime的时间定义。

inputBuffer 只读 已弃用

一个AudioBuffer,它是包含要处理的输入音频数据的缓冲区。通道数定义为工厂方法AudioContext.createScriptProcessor()的参数numberOfInputChannels。请注意,返回的AudioBuffer仅在事件处理程序的范围内有效。

outputBuffer 只读 已弃用

一个AudioBuffer,它是应该写入输出音频数据的缓冲区。通道数定义为工厂方法AudioContext.createScriptProcessor()的参数numberOfOutputChannels。请注意,返回的AudioBuffer仅在事件处理程序的范围内有效。

示例

使用脚本处理器添加白噪声

以下示例演示了如何使用ScriptProcessorNode来获取通过AudioContext.decodeAudioData()加载的音轨,对其进行处理,向输入音轨(缓冲区)的每个音频样本添加少量白噪声,并通过AudioDestinationNode播放它。对于每个通道和每个样本帧,scriptNode.onaudioprocess函数获取关联的audioProcessingEvent并使用它循环遍历输入缓冲区的每个通道以及每个通道中的每个样本,并添加少量白噪声,然后将该结果设置为每个情况下的输出样本。

注意:有关完整的示例,请参阅我们的script-processor-node GitHub 存储库。(您还可以访问源代码。)

js
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();
  }
});

浏览器兼容性

BCD 表仅在启用

另请参阅