AudioWorkletNode: port 屬性
AudioWorkletNode 介面中只讀的 port 屬性會返回關聯的 MessagePort。它可以用於節點與其關聯的 AudioWorkletProcessor 之間進行通訊。
注意: 通道另一端的埠可以透過處理器(processor)的 port 屬性訪問。
值
連線 AudioWorkletNode 及其關聯 AudioWorkletProcessor 的 MessagePort 物件。
示例
為了演示雙向通訊能力,我們將建立一個 AudioWorkletProcessor,它將輸出靜音並響應其 AudioWorkletNode 的 ping 請求。
首先,我們需要定義一個自定義的 AudioWorkletProcessor 並註冊它。請注意,這應該在一個單獨的檔案中完成。
js
// ping-pong-processor.js
class PingPongProcessor extends AudioWorkletProcessor {
constructor(...args) {
super(...args);
this.port.onmessage = (e) => {
console.log(e.data);
this.port.postMessage("pong");
};
}
process(inputs, outputs, parameters) {
return true;
}
}
registerProcessor("ping-pong-processor", PingPongProcessor);
現在,在我們的主指令碼檔案中,我們將載入處理器,建立 AudioWorkletNode 例項(傳入處理器的名稱),並將節點連線到音訊圖。
js
const audioContext = new AudioContext();
await audioContext.audioWorklet.addModule("ping-pong-processor.js");
const pingPongNode = new AudioWorkletNode(audioContext, "ping-pong-processor");
// send the message containing 'ping' string
// to the AudioWorkletProcessor from the AudioWorkletNode every second
setInterval(() => pingPongNode.port.postMessage("ping"), 1000);
pingPongNode.port.onmessage = (e) => console.log(e.data);
pingPongNode.connect(audioContext.destination);
這將每秒向控制檯輸出 "ping" 和 "pong" 字串。
規範
| 規範 |
|---|
| Web Audio API # dom-audioworkletnode-port |
瀏覽器相容性
載入中…