Start · Sprachen · JavaScript · Referenz · AudioParam.minValue

AudioParam.minValue

Eigenschaft

Schreibgeschützte Zahl mit dem kleinsten Wert des nominalen (wirksamen) Bereichs eines <code>AudioParam</code>, z. B. <code>-1</code> für <code>StereoPannerNode.pan</code>.

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

Signatur

AudioParam.minValue

Beschreibung

Die schreibgeschützte Eigenschaft minValue eines AudioParam gibt die untere Grenze des nominalen Bereichs an. Nur innerhalb dieses Bereichs wirkt der Parameter. Den Wert legt der Audio-Knoten fest, zu dem der Parameter gehört. Zusammen mit maxValue beschreibt er, welche Werte bei der Audioberechnung tatsächlich ankommen.

Typische Werte sind:

  • StereoPannerNode.pan: -1
  • BiquadFilterNode.frequency und DelayNode.delayTime: 0
  • OscillatorNode.frequency: die negative Nyquist-Frequenz, also -sampleRate / 2
  • GainNode.gain: der kleinste 32-Bit-Gleitkommawert, etwa -3.4028234663852886e38. Der Bereich ist damit praktisch unbegrenzt.

Nützlich ist minValue vor allem beim Bau von Bedienelementen, etwa wenn Schieberegler ihren Bereich automatisch vom Parameter übernehmen. Auch zum Prüfen von Eingaben und zum sicheren Begrenzen von Automationswerten eignet sich die Eigenschaft. Setzt man einen Wert unterhalb von minValue, wird er bei der Berechnung auf den nominalen Bereich begrenzt. Das gilt für direkte Zuweisungen an value, für Automation und für angeschlossene Modulationssignale.

Rückgabewert

Typ
number
Beschreibung
Eine Gleitkommazahl (32 Bit, als number geliefert) mit dem kleinsten Wert des nominalen Bereichs. Sie ist schreibgeschützt und ändert sich während der Lebensdauer des Knotens nicht.

Beispiele

Minimalwerte verschiedener Parameter auslesen

const ctx = new AudioContext();

const panner = new StereoPannerNode(ctx);
const filter = new BiquadFilterNode(ctx);
const osc = new OscillatorNode(ctx);
const gain = new GainNode(ctx);

console.log('pan:', panner.pan.minValue);
console.log('filter.frequency:', filter.frequency.minValue);
console.log('osc.frequency:', osc.frequency.minValue, `(sampleRate ${ctx.sampleRate})`);
console.log('gain:', gain.gain.minValue);
pan: -1 filter.frequency: 0 osc.frequency: -24000 (sampleRate 48000) gain: -3.4028234663852886e+38

Schieberegler automatisch an den Parameterbereich anpassen

const ctx = new AudioContext();
const panner = new StereoPannerNode(ctx);

// <input type="range" id="pan"> muss im HTML vorhanden sein
const slider = document.querySelector('#pan');
const param = panner.pan;

slider.min = param.minValue;
slider.max = param.maxValue;
slider.step = 0.01;
slider.value = param.value;

slider.addEventListener('input', () => {
  // Sanfter Übergang, damit keine Knackgeräusche entstehen
  param.setTargetAtTime(Number(slider.value), ctx.currentTime, 0.01);
});

Benutzereingaben vor der Automation begrenzen

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

const ctx = new AudioContext();
const filter = new BiquadFilterNode(ctx, { type: 'lowpass' });

const userInput = -500; // ungültige Frequenz aus einem Formular
const safe = clampToParam(filter.frequency, userInput);

filter.frequency.linearRampToValueAtTime(safe, ctx.currentTime + 0.5);
console.log(safe);

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung an minValue wird im nicht-strikten Modus stillschweigend ignoriert und löst im strikten Modus einen TypeError aus. Einen eigenen Bereich muss man selbst im Code begrenzen, etwa mit Math.max.
  • Begrenzung statt Fehler: Werte unterhalb von minValue lösen keine Ausnahme aus. Sie werden bei der Berechnung einfach begrenzt. Chrome gibt dabei zusätzlich eine Warnung in der Konsole aus. Der Getter value kann trotzdem den ursprünglich gesetzten Wert zurückgeben.
  • Abhängig von der Abtastrate: Bei Frequenz-Parametern wie OscillatorNode.frequency hängt minValue von AudioContext.sampleRate ab. Er ist daher nicht in jedem Kontext gleich.
  • Praktisch unbegrenzte Bereiche: Bei GainNode.gain ist minValue ein extremer Wert von etwa -3.4e38. Für Schieberegler taugt er nicht, dort sollte man einen sinnvollen eigenen Bereich festlegen.
  • Kompatibilität: Wird von allen aktuellen Browsern unterstützt. Sehr alte Safari-Versionen mit dem Präfix webkitAudioContext liefern die Eigenschaft teilweise nicht.