AudioWorkletNode: port 屬性

Baseline 已廣泛支援

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

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

AudioWorkletNode 介面中只讀的 port 屬性會返回關聯的 MessagePort。它可以用於節點與其關聯的 AudioWorkletProcessor 之間進行通訊。

注意: 通道另一端的埠可以透過處理器(processor)的 port 屬性訪問。

連線 AudioWorkletNode 及其關聯 AudioWorkletProcessorMessagePort 物件。

示例

為了演示雙向通訊能力,我們將建立一個 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

瀏覽器相容性

另見