AudioWorkletNode: parameters-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 parameters-Eigenschaft der AudioWorkletNode-Schnittstelle gibt die zugehörige AudioParamMap zurück — also eine Map-ähnliche Sammlung von AudioParam-Objekten. Diese werden während der Erstellung des zugrunde liegenden AudioWorkletProcessor gemäß seinem parameterDescriptors statischen Getter instanziiert.

Wert

Das AudioParamMap-Objekt, das AudioParam-Instanzen enthält. Sie können auf die gleiche Weise wie bei Standard-AudioNodes automatisiert werden, und ihre berechneten Werte können in der process-Methode Ihres AudioWorkletProcessor verwendet werden.

Beispiele

Um die Erstellung und Verwendung benutzerdefinierter AudioParams zu demonstrieren, erweitern wir das Beispiel von der AudioWorkletNode-Seite. Dort haben wir einen einfachen Knoten erstellt, der weißes Rauschen ausgibt. Hier werden wir zusätzlich einen benutzerdefinierten Gain-Parameter erstellen, damit wir die Lautstärke des Outputs direkt ändern können (obwohl Sie dafür auch GainNode verwenden könnten).

Zuerst müssen wir einen benutzerdefinierten AudioWorkletProcessor definieren und registrieren. Beachten Sie, dass dies in einer separaten Datei erfolgen sollte.

Wir erweitern den Prozessor, indem wir einen statischen parameterDescriptors Getter hinzufügen. Dieser wird intern vom AudioWorkletNode-Konstruktor verwendet, um seine parameters mit instanziierten AudioParam-Objekten zu füllen.

js
// white-noise-processor.js
class WhiteNoiseProcessor extends AudioWorkletProcessor {
  static get parameterDescriptors() {
    return [
      {
        name: "customGain",
        defaultValue: 1,
        minValue: 0,
        maxValue: 1,
        automationRate: "a-rate",
      },
    ];
  }

  process(inputs, outputs, parameters) {
    const output = outputs[0];
    output.forEach((channel) => {
      for (let i = 0; i < channel.length; i++) {
        channel[i] =
          (Math.random() * 2 - 1) *
          (parameters["customGain"].length > 1
            ? parameters["customGain"][i]
            : parameters["customGain"][0]);
        // note: a parameter contains an array of 128 values (one value for each of 128 samples),
        // however it may contain a single value which is to be used for all 128 samples
        // if no automation is scheduled for the moment.
      }
    });
    return true;
  }
}

registerProcessor("white-noise-processor", WhiteNoiseProcessor);

Als nächstes laden wir in unserer Hauptskriptdatei den Prozessor, erstellen eine Instanz von AudioWorkletNode, übergeben ihm den Namen des Prozessors und verbinden den Knoten mit einem Audiographen.

js
const audioContext = new AudioContext();
await audioContext.audioWorklet.addModule("white-noise-processor.js");
const whiteNoiseNode = new AudioWorkletNode(
  audioContext,
  "white-noise-processor",
);
whiteNoiseNode.connect(audioContext.destination);

Nun können wir den Gain am Knoten so ändern:

js
const gainParam = whiteNoiseNode.parameters.get("customGain");
gainParam.setValueAtTime(0, audioContext.currentTime);
gainParam.linearRampToValueAtTime(0.5, audioContext.currentTime + 0.5);

Spezifikationen

Specification
Web Audio API
# dom-audioworkletnode-parameters

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
parameters

Legend

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

Full support
Full support

Siehe auch