AudioWorkletNode: port プロパティ
AudioWorkletNode インターフェイスの読み取り専用プロパティ port は、関連付けられた MessagePort を返します。これにより、ノードと対応する AudioWorkletProcessor の間で双方向通信ができます。
メモ: チャネルのもう一方の端にあるポートは、処理器の port プロパティから参照できます。
値
この AudioWorkletNode と対応する AudioWorkletProcessor を繋ぐ MessagePort オブジェクトです。
例
双方向通信でできることのデモのため、無音を出力し、AudioWorkletNode からの ping 要求に応える AudioWorkletProcessor を作成します。
まず、独自の 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");
// 毎秒、AudioWorkletNode から
// 文字列 'ping' が入ったメッセージを AudioWorkletProcessor に送る
setInterval(() => pingPongNode.port.postMessage("ping"), 1000);
pingPongNode.port.onmessage = (e) => console.log(e.data);
pingPongNode.connect(audioContext.destination);
このプログラムは、コンソールに毎秒文字列 "ping" と "pong" を出力します。
仕様書
| Specification |
|---|
| Web Audio API # dom-audioworkletnode-port |
ブラウザーの互換性
BCD tables only load in the browser