AudioWorkletNode: port-Eigenschaft
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Die schreibgeschützte port
-Eigenschaft der AudioWorkletNode
-Schnittstelle gibt den zugehörigen MessagePort
zurück. Er kann verwendet werden, um zwischen dem Knoten und seinem zugehörigen AudioWorkletProcessor
zu kommunizieren.
Hinweis: Der Port am anderen Ende des Kanals ist unter der port
-Eigenschaft des Prozessors verfügbar.
Wert
Das MessagePort
-Objekt, das die Verbindung zwischen dem AudioWorkletNode
und seinem zugehörigen AudioWorkletProcessor
herstellt.
Beispiele
Um die bidirektionalen Kommunikationsfähigkeiten zu demonstrieren, erstellen wir einen AudioWorkletProcessor
, der Stille ausgibt und auf Ping-Anfragen von seinem AudioWorkletNode
reagiert.
Zuerst müssen wir einen benutzerdefinierten AudioWorkletProcessor
definieren und registrieren. Beachten Sie, dass dies in einer separaten Datei erfolgen sollte.
// 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);
Nun laden wir in unserer Hauptskriptdatei den Prozessor, erstellen eine Instanz von AudioWorkletNode
unter Angabe des Prozessornamens und verbinden den Knoten mit einem Audiographen.
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);
Dies wird jede Sekunde die Strings "ping"
und "pong"
in die Konsole ausgeben.
Spezifikationen
Specification |
---|
Web Audio API # dom-audioworkletnode-port |
Browser-Kompatibilität
BCD tables only load in the browser