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.

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);

Nun laden wir in unserer Hauptskriptdatei den Prozessor, erstellen eine Instanz von AudioWorkletNode unter Angabe des Prozessornamens und verbinden den Knoten mit einem Audiographen.

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);

Dies wird jede Sekunde die Strings "ping" und "pong" in die Konsole ausgeben.

Spezifikationen

Specification
Web Audio API
# dom-audioworkletnode-port

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
port

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Siehe auch