AudioWorkletProcessor
AudioWorkletProcessor 介面是 Web Audio API 的一部分,它代表了自定義 AudioWorkletNode 後面進行音訊處理的程式碼。它存在於 AudioWorkletGlobalScope 中,並在 Web Audio 渲染執行緒上執行。相應地,基於它的 AudioWorkletNode 執行在主執行緒上。
建構函式
注意: AudioWorkletProcessor 及其派生類不能直接從使用者提供的程式碼中例項化。相反,它們只能由關聯的 AudioWorkletNode 建立。派生類的建構函式會接收一個選項物件,因此您可以執行自定義的初始化操作 — 有關詳細資訊,請參閱建構函式頁面。
AudioWorkletProcessor()-
建立一個
AudioWorkletProcessor物件的新的例項。
例項屬性
port只讀-
返回一個
MessagePort,用於處理器與其所屬的AudioWorkletNode之間的雙向通訊。另一端可以透過節點的port屬性訪問。
例項方法
AudioWorkletProcessor 介面本身不定義任何方法。但是,您必須提供一個 process() 方法,該方法在需要處理音訊流時被呼叫。
事件
AudioWorkletProcessor 介面不響應任何事件。
用法說明
派生類
要定義自定義音訊處理程式碼,您必須從 AudioWorkletProcessor 介面派生一個類。儘管介面中未定義,但派生類必須具有 process 方法。此方法在每個 128 幀的音訊塊被處理時呼叫,並接收輸入和輸出陣列以及自定義 AudioParam(如果定義了)的計算值作為引數。您可以使用輸入和音訊引數值來填充輸出陣列,輸出陣列預設包含靜音。
可選地,如果您希望在節點上擁有自定義 AudioParam,您可以將 parameterDescriptors 屬性作為處理器上的一個靜態 getter 提供。返回的 AudioParamDescriptor 物件陣列將用於在例項化 AudioWorkletNode 時內部建立 AudioParam。
生成的 AudioParam 物件位於節點的 parameters 屬性中,可以使用標準方法(如 linearRampToValueAtTime)進行自動化。它們的計算值將作為引數傳遞給處理器的 process() 方法,以便您相應地塑造節點的輸出。
處理音訊
建立自定義音訊處理機制的一個示例演算法是:
-
建立一個單獨的檔案;
-
在該檔案中
- 擴充套件
AudioWorkletProcessor類(參見 “派生類”部分),並在其中提供您自己的process()方法; - 使用
AudioWorkletGlobalScope.registerProcessor()方法註冊處理器;
- 擴充套件
-
使用音訊上下文的
audioWorklet屬性上的addModule()方法載入該檔案; -
建立一個基於該處理器的
AudioWorkletNode。該處理器將由AudioWorkletNode建構函式在內部例項化。 -
將節點連線到其他節點。
示例
在下面的示例中,我們將建立一個輸出白噪聲的自定義 AudioWorkletNode。
首先,我們需要定義一個輸出白噪聲的自定義 AudioWorkletProcessor 並註冊它。請注意,這應該在一個單獨的檔案中完成。
// white-noise-processor.js
class WhiteNoiseProcessor 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("white-noise-processor", WhiteNoiseProcessor);
接下來,在我們的主指令碼檔案中,我們將載入該處理器,建立一個 AudioWorkletNode 例項(將處理器的名稱傳遞給它),然後將該節點連線到音訊圖。
const audioContext = new AudioContext();
await audioContext.audioWorklet.addModule("white-noise-processor.js");
const whiteNoiseNode = new AudioWorkletNode(
audioContext,
"white-noise-processor",
);
whiteNoiseNode.connect(audioContext.destination);
規範
| 規範 |
|---|
| Web Audio API # AudioWorkletProcessor |
瀏覽器相容性
載入中…