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

BCD tables only load in the browser

Siehe auch