AudioWorkletNode
注意:雖然該介面可在 安全上下文外部使用,但 BaseAudioContext.audioWorklet 屬性不行,因此自定義 AudioWorkletProcessor 無法在安全上下文外部定義。
AudioWorkletNode 介面是 Web Audio API 的一部分,它代表了一個使用者定義的 AudioNode 的基類,可以與圖中的其他節點連線。它關聯著一個 AudioWorkletProcessor,該處理器在 Web Audio 渲染執行緒中執行實際的音訊處理。
建構函式
AudioWorkletNode()-
建立一個新的
AudioWorkletNode物件例項。
例項屬性
也繼承自其父類 AudioNode 的屬性.
AudioWorkletNode.port只讀-
返回一個
MessagePort,用於節點與其關聯的AudioWorkletProcessor之間的雙向通訊。另一端可透過處理器的port屬性訪問。 AudioWorkletNode.parameters只讀-
返回一個
AudioParamMap,這是一個AudioParam物件的集合。它們在底層AudioWorkletProcessor建立期間被例項化。如果AudioWorkletProcessor有一個靜態的parameterDescriptorsgetter,則從中返回的AudioParamDescriptor陣列將用於在AudioWorkletNode上建立AudioParam物件。透過這種機制,您可以使自己的AudioParam物件可從您的AudioWorkletNode訪問。然後,您可以在關聯的AudioWorkletProcessor中使用它們的值。
事件
processorerror-
當關聯的
AudioWorkletProcessor中丟擲錯誤時觸發。一旦觸發,該處理器及其產生的節點將在其整個生命週期內輸出靜音。
例項方法
也繼承自其父類 AudioNode 的方法.
AudioWorkletNode 介面本身不定義任何方法。
示例
在此示例中,我們建立一個自定義 AudioWorkletNode 來輸出隨機噪聲。
首先,我們需要定義一個自定義的 AudioWorkletProcessor,它將輸出隨機噪聲,並註冊它。請注意,這應該在一個單獨的檔案中完成。
// 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 例項,並將處理器的名稱傳遞給它,然後將該節點連線到音訊圖。
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 |
瀏覽器相容性
載入中…