AudioWorkletNode

Baseline 已廣泛支援

此特性已得到良好支援,可在多種裝置和瀏覽器版本上使用。自 2021 年 4 月起,所有瀏覽器均已支援此特性。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

注意:雖然該介面可在 安全上下文外部使用,但 BaseAudioContext.audioWorklet 屬性不行,因此自定義 AudioWorkletProcessor 無法在安全上下文外部定義。

AudioWorkletNode 介面是 Web Audio API 的一部分,它代表了一個使用者定義的 AudioNode 的基類,可以與圖中的其他節點連線。它關聯著一個 AudioWorkletProcessor,該處理器在 Web Audio 渲染執行緒中執行實際的音訊處理。

EventTarget AudioNode AudioWorkletNode

建構函式

AudioWorkletNode()

建立一個新的 AudioWorkletNode 物件例項。

例項屬性

也繼承自其父類 AudioNode 的屬性.

AudioWorkletNode.port 只讀

返回一個 MessagePort,用於節點與其關聯的 AudioWorkletProcessor 之間的雙向通訊。另一端可透過處理器的 port 屬性訪問。

AudioWorkletNode.parameters 只讀

返回一個 AudioParamMap,這是一個 AudioParam 物件的集合。它們在底層 AudioWorkletProcessor 建立期間被例項化。如果 AudioWorkletProcessor 有一個靜態的 parameterDescriptors getter,則從中返回的 AudioParamDescriptor 陣列將用於在 AudioWorkletNode 上建立 AudioParam 物件。透過這種機制,您可以使自己的 AudioParam 物件可從您的 AudioWorkletNode 訪問。然後,您可以在關聯的 AudioWorkletProcessor 中使用它們的值。

事件

processorerror

當關聯的 AudioWorkletProcessor 中丟擲錯誤時觸發。一旦觸發,該處理器及其產生的節點將在其整個生命週期內輸出靜音。

例項方法

也繼承自其父類 AudioNode 的方法.

AudioWorkletNode 介面本身不定義任何方法。

示例

在此示例中,我們建立一個自定義 AudioWorkletNode 來輸出隨機噪聲。

首先,我們需要定義一個自定義的 AudioWorkletProcessor,它將輸出隨機噪聲,並註冊它。請注意,這應該在一個單獨的檔案中完成。

js
// random-noise-processor.js
class RandomNoiseProcessor 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("random-noise-processor", RandomNoiseProcessor);

接下來,在我們的主指令碼檔案中,我們將載入處理器,建立一個 AudioWorkletNode 例項,並將處理器的名稱傳遞給它,然後將該節點連線到音訊圖。

js
const audioContext = new AudioContext();
await audioContext.audioWorklet.addModule("random-noise-processor.js");
const randomNoiseNode = new AudioWorkletNode(
  audioContext,
  "random-noise-processor",
);
randomNoiseNode.connect(audioContext.destination);

規範

規範
Web Audio API
# AudioWorkletNode

瀏覽器相容性

另見