AudioWorkletGlobalScope: registerProcessor() 方法

Baseline 已廣泛支援

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

AudioWorkletGlobalScope 介面的 registerProcessor 方法會根據指定的 name 註冊一個派生自 AudioWorkletProcessor 介面的類建構函式。

語法

js
registerProcessor(name, processorCtor)

引數

name

一個代表處理器註冊名稱的字串。

processorCtor

派生自 AudioWorkletProcessor 介面的類的建構函式。

注意: 在處理器註冊後,一個 { name: constructor } 鍵值對會被儲存在 AudioWorkletGlobalScope 內部。建立基於已註冊處理器的 AudioWorkletNode 時會引用 name。內部會建立一個具有給定名稱的新處理器並將其與新節點關聯。

返回值

無(undefined)。

異常

NotSupportedError DOMException

在以下情況下會丟擲異常

  • name 為空字串。
  • 具有給定 name 的建構函式已被註冊。不允許重複註冊相同的名稱。
TypeError

在以下情況下會丟擲異常

  • processorCtor 不是一個可呼叫的建構函式。
  • 建構函式的 parameterDescriptors 屬性存在,但未返回一個 AudioParamDescriptor 型別的物件的陣列。

示例

在此示例中,我們建立一個自定義的 AudioWorkletNode 來輸出靜音。

首先,我們需要定義一個自定義的 AudioWorkletProcessor 並進行註冊。請注意,這應該在一個單獨的檔案中完成。

js
// test-processor.js
class TestProcessor extends AudioWorkletProcessor {
  process(inputs, outputs, parameters) {
    return true;
  }
}

registerProcessor("test-processor", TestProcessor);

接下來,在我們的主指令碼檔案中,我們將載入處理器,建立一個 AudioWorkletNode 例項(在呼叫 registerProcessor 時傳入我們使用的處理器名稱),並將其連線到音訊圖。

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

規範

規範
Web Audio API
# dom-audioworkletglobalscope-registerprocessor

瀏覽器相容性

另見