Start · Sprachen · JavaScript · Referenz · AudioParam.maxValue

AudioParam.maxValue

Eigenschaft

Schreibgeschützte Gleitkommazahl mit der Obergrenze des nominalen (effektiven) Wertebereichs eines <code>AudioParam</code>.

seit JavaScript Baseline: alle modernen Browser (Web Audio API) Kategorie: webapi

Signatur

AudioParam.maxValue

Beschreibung

Jeder AudioParam hat einen nominalen Wertebereich zwischen minValue und maxValue. Die Eigenschaft maxValue gibt die Obergrenze dieses Bereichs zurück. Den Wert legt die Spezifikation des jeweiligen Audioknotens fest. Er lässt sich nicht verändern.

Wo die Spezifikation keine engere Grenze vorgibt, ist maxValue die größte darstellbare 32-Bit-Gleitkommazahl (3.4028234663852886e+38). Das gilt zum Beispiel für GainNode.gain und BiquadFilterNode.Q. Frequenzparameter wie OscillatorNode.frequency oder BiquadFilterNode.frequency sind dagegen durch die Nyquist-Frequenz begrenzt (sampleRate / 2). StereoPannerNode.pan reicht nur bis 1, und DelayNode.delayTime endet bei der maxDelayTime, die beim Erzeugen des Knotens angegeben wurde.

Die Eigenschaft ist nützlich, wenn man Bedienelemente wie Schieberegler automatisch passend einstellen oder Benutzereingaben prüfen will, bevor sie in value oder Automationsmethoden wie setValueAtTime() landen. Liegen Werte außerhalb des nominalen Bereichs, werden sie bei der Audioverarbeitung auf den Bereich begrenzt.

Rückgabewert

Typ
number
Beschreibung
Eine Gleitkommazahl (intern 32 Bit) mit der Obergrenze des nominalen Bereichs. Den Wert kann man nur lesen.

Beispiele

Obergrenzen verschiedener Parameter auslesen

const ctx = new AudioContext({ sampleRate: 48000 });
const osc = ctx.createOscillator();
const gain = ctx.createGain();
const panner = ctx.createStereoPanner();

console.log(osc.frequency.maxValue);  // Nyquist-Frequenz
console.log(gain.gain.maxValue);      // größte float32-Zahl
console.log(panner.pan.maxValue);     // ganz rechts
24000 3.4028234663852886e+38 1

Schieberegler automatisch an einen Filter anpassen

const ctx = new AudioContext();
const filter = ctx.createBiquadFilter();
const slider = document.querySelector('#cutoff');

// Grenzen des Reglers aus dem AudioParam übernehmen
slider.min = filter.frequency.minValue;
slider.max = filter.frequency.maxValue;
slider.value = filter.frequency.value;

slider.addEventListener('input', () => {
  filter.frequency.setTargetAtTime(Number(slider.value), ctx.currentTime, 0.02);
});

Eingabe vor dem Setzen begrenzen

const clampToParam = (param, v) =>
  Math.min(param.maxValue, Math.max(param.minValue, v));

const ctx = new AudioContext();
const delay = ctx.createDelay(2); // maxDelayTime = 2 s

const wunsch = 5;
delay.delayTime.value = clampToParam(delay.delayTime, wunsch);
console.log(delay.delayTime.maxValue, delay.delayTime.value);
2 2

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung wie param.maxValue = 10 wird im normalen Modus stillschweigend ignoriert. Im Strict Mode löst sie einen TypeError aus.
  • Ist maxValue die größte darstellbare float32-Zahl, gibt es praktisch keine Obergrenze. Als max eines Schiebereglers taugt dieser Wert nicht, dann sollte man eine sinnvolle eigene Grenze wählen.
  • Werte oberhalb von maxValue lösen keinen Fehler aus. Das Ergebnis wird bei der Verarbeitung auf den Bereich begrenzt, und manche Browser geben dazu eine Warnung in der Konsole aus. Wer den Bereich überschreitet, erhält deshalb unter Umständen nicht das erwartete Klangverhalten.
  • Frequenzgrenzen hängen von AudioContext.sampleRate ab und unterscheiden sich darum je nach Gerät, zum Beispiel 22050 bei 44,1 kHz und 24000 bei 48 kHz.
  • Die Eigenschaft wird von allen modernen Browsern unterstützt. Sehr alte WebKit-Versionen mit webkitAudioContext meldeten teilweise abweichende Grenzen.