Signatur
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
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
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);
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
param.maxValue = 10wird im normalen Modus stillschweigend ignoriert. Im Strict Mode löst sie einenTypeErroraus. - Ist
maxValuedie größte darstellbare float32-Zahl, gibt es praktisch keine Obergrenze. Alsmaxeines Schiebereglers taugt dieser Wert nicht, dann sollte man eine sinnvolle eigene Grenze wählen. - Werte oberhalb von
maxValuelö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.sampleRateab und unterscheiden sich darum je nach Gerät, zum Beispiel22050bei 44,1 kHz und24000bei 48 kHz. - Die Eigenschaft wird von allen modernen Browsern unterstützt. Sehr alte WebKit-Versionen mit
webkitAudioContextmeldeten teilweise abweichende Grenzen.