AudioParam: value-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.
Die Web Audio API
Eigenschaft des Interfaces AudioParam
value
ermittelt oder setzt den Wert dieses AudioParam
zur aktuellen Zeit. Anfangs ist der Wert auf AudioParam.defaultValue
gesetzt.
Das Setzen von value
hat die gleiche Wirkung wie der Aufruf von AudioParam.setValueAtTime
mit der Zeit, die von der Eigenschaft currentTime
des AudioContext
zurückgegeben wird.
Wert
Hinweis zur Verwendung
Wertpräzision und -variation
Der intern zur Speicherung von value
verwendete Datentyp ist eine einfachgenaue (32-Bit) Gleitkommazahl, während JavaScript 64-Bit doppelgenaue Gleitkommazahlen verwendet. Daher entspricht der Wert, den Sie aus der Eigenschaft value
lesen, möglicherweise nicht immer genau dem, was Sie gesetzt haben.
Betrachten Sie folgendes Beispiel:
const source = new AudioBufferSourceNode(/* … */);
const rate = 5.3;
source.playbackRate.value = rate;
console.log(source.playbackRate.value === rate);
Die Protokollausgabe wird false
sein, da der Abspielratenparameter, rate
, in die 32-Bit-Gleitkommazahl umgewandelt wurde, die 5.3 am nächsten kommt, was 5.300000190734863 ergibt. Eine Lösung besteht darin, die Methode Math.fround()
zu verwenden, die den einfachgenauen Wert zurückgibt, der dem angegebenen 64-Bit-JavaScript-Wert entspricht, wenn value
gesetzt wird, wie folgt:
const source = new AudioBufferSourceNode(/* … */);
const rate = Math.fround(5.3);
source.playbackRate.value = rate;
console.log(source.playbackRate.value === rate);
In diesem Fall wird die Protokollausgabe true
sein.
Wert einer sich über die Zeit ändernden Eigenschaft
Der value
eines AudioParam
kann entweder fest oder sich im Laufe der Zeit ändernd sein. Dies wird durch den value
-Getter widergespiegelt, der den Wert des Parameters basierend auf dem jüngsten Render-Quantum der Audio-Rendering-Engine zurückgibt, also dem Moment, an dem Audiopuffer verarbeitet und aktualisiert werden. Zusätzlich zur Verarbeitung von Audiopuffern aktualisiert jedes Render-Quantum den value
jedes AudioParam
nach Bedarf, basierend auf der aktuellen Zeit und allen festgelegten zeitbasierten Parameterwertänderungen.
Beim ersten Erstellen des Parameters ist sein Wert auf seinen Standardwert gesetzt, der von AudioParam.defaultValue
vorgegeben ist. Dies ist der Wert des Parameters zum Zeitpunkt von 0,0 Sekunden und bleibt der Wert des Parameters bis zum ersten Render-Quantum, in dem der Wert geändert wird.
Während jedes Render-Quanta führt der Browser folgende Aufgaben im Zusammenhang mit der Verwaltung des Wertes eines Parameters aus:
- Wenn der
value
-Setter verwendet wurde, wird der Wert des Parameters auf den angegebenen Wert geändert. - Wenn die aktuelle Zeit gleich oder größer ist als die durch einen vorherigen Aufruf von
setValueAtTime()
angegebene Zeit, wird dervalue
auf den Wert geändert, der insetValueAtTime()
übergeben wurde. - Wenn Methoden zum Ändern von Werten mit schrittweisem oder Rampeffekt aufgerufen wurden und die aktuelle Zeit innerhalb des Zeitbereichs liegt, über den die schrittweise Änderung erfolgen soll, wird der Wert basierend auf dem entsprechenden Algorithmus aktualisiert. Diese Methoden zum Ändern von Werten mit Rampeffekt oder schrittweise sind unter anderem
linearRampToValueAtTime()
,setTargetAtTime()
undsetValueCurveAtTime()
.
Somit wird der value
eines Parameters so verwaltet, dass er den Zustand des Parameters im Laufe der Zeit genau widerspiegelt.
Beispiele
Dieses Beispiel ändert sofort die Lautstärke eines GainNode
auf 40 %.
const audioCtx = new AudioContext();
const gainNode = audioCtx.createGain();
gainNode.gain.value = 0.4;
// which is identical to:
gainNode.gain.setValueAtTime(0.4, audioCtx.currentTime);
Spezifikationen
Specification |
---|
Web Audio API # dom-audioparam-value |
Browser-Kompatibilität
BCD tables only load in the browser
Beim Ändern des Gain-Werts eines GainNode
führte Google Chrome vor Version 64 (Januar 2018) eine glatte Interpolation durch, um Entzerrung zu verhindern. Ab Version 64 wird der Wert sofort geändert, um mit der Web-Audio-Spezifikation übereinzustimmen. Einzelheiten finden Sie im Chrome Platform Status.