ScriptProcessorNode:audioprocess 事件

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

ScriptProcessorNode 接口的 audioprocess 事件在脚本处理器的输入缓冲区准备就绪以进行处理时触发。

注意: 此功能已被 AudioWorkletsAudioWorkletNode 接口取代。

此事件不可取消且不冒泡。

事件类型

事件属性

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

playbackTime 只读

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

inputBuffer 只读

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

outputBuffer 只读

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

示例

js
scriptNode.addEventListener("audioprocess", (audioProcessingEvent) => {
  // The input buffer is a song we loaded earlier
  const inputBuffer = audioProcessingEvent.inputBuffer;

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

  // Loop through the output channels (in this case there is only one)
  for (let channel = 0; channel < outputBuffer.numberOfChannels; channel++) {
    const inputData = inputBuffer.getChannelData(channel);
    const 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.2;
    }
  }
});

你也可以使用 onaudioprocess 属性设置事件处理程序

js
scriptNode.onaudioprocess = (audioProcessingEvent) => {
  // ...
};

规范

自 2014 年 8 月 29 日 Web 音频 API 规范 发布以来,此功能已被弃用。它不再处于成为标准的轨道上。

它已被 AudioWorkletsAudioWorkletNode 接口取代。

浏览器兼容性

BCD 表只在浏览器中加载

另请参阅