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-AudioNode
s automatisiert werden, und ihre berechneten Werte können in der process
-Methode Ihres AudioWorkletProcessor
verwendet werden.
Beispiele
Um die Erstellung und Verwendung benutzerdefinierter AudioParam
s 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.
// 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.
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:
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