Start · Sprachen · JavaScript · Referenz · AnalyserNode.minDecibels

AnalyserNode.minDecibels

Eigenschaft

Liest oder setzt den unteren Dezibel-Grenzwert, der bei <code>getByteFrequencyData()</code> auf den Byte-Wert 0 abgebildet wird. Standardwert: <code>-100</code>.

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

Signatur

AnalyserNode.minDecibels

Beschreibung

Die Eigenschaft minDecibels eines AnalyserNode ist eine Gleitkommazahl vom Typ double. Sie legt den unteren Rand des Dezibel-Bereichs fest, in den die FFT-Frequenzdaten eingeordnet werden, bevor sie in vorzeichenlose 8-Bit-Werte (0–255) umgerechnet werden. Zusammen mit maxDecibels ergibt sich daraus der dargestellte Dynamikbereich.

Wenn getByteFrequencyData() aufgerufen wird, wird jeder Frequenzwert (in dBFS) linear auf das Intervall [minDecibels, maxDecibels] abgebildet: Werte bei oder unter minDecibels ergeben 0, Werte bei oder über maxDecibels ergeben 255. Die Formel lautet ungefähr b = 255 / (max - min) * (dB - min), das Ergebnis wird auf 0–255 begrenzt.

Die Eigenschaft ist vor allem bei Spektrum-Visualisierungen wichtig. Ein höherer Wert (z. B. -80 statt -100) blendet leises Rauschen aus und lässt die Balken „sauberer“ aussehen. Ein niedrigerer Wert zeigt dagegen auch sehr leise Anteile. getFloatFrequencyData() ist davon nicht betroffen, denn es liefert immer die rohen Dezibelwerte.

Parameter

Name Typ Default Beschreibung
$value number -100 Beim Setzen: neuer unterer Grenzwert in dBFS. Muss kleiner als maxDecibels sein.

Rückgabewert

Typ
number
Beschreibung
Der aktuelle untere Dezibel-Grenzwert als double (Standard: -100).

Beispiele

Standardwert auslesen und anpassen

const audioCtx = new AudioContext();
const analyser = audioCtx.createAnalyser();

console.log(analyser.minDecibels); // Standard
analyser.minDecibels = -90;
console.log(analyser.minDecibels, analyser.maxDecibels);
-100 -90 -30

Dynamikbereich im Konstruktor festlegen

const audioCtx = new AudioContext();
const analyser = new AnalyserNode(audioCtx, {
  fftSize: 2048,
  minDecibels: -85,
  maxDecibels: -10,
  smoothingTimeConstant: 0.8
});

console.log(`Bereich: ${analyser.minDecibels} bis ${analyser.maxDecibels} dB`);
Bereich: -85 bis -10 dB

Spektrum-Visualisierung per Mikrofon mit Canvas

const canvas = document.querySelector('canvas');
const ctx2d = canvas.getContext('2d');

document.querySelector('#start').addEventListener('click', async () => {
  const audioCtx = new AudioContext();
  const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
  const source = audioCtx.createMediaStreamSource(stream);

  const analyser = audioCtx.createAnalyser();
  analyser.fftSize = 256;
  analyser.minDecibels = -90; // leises Rauschen ausblenden
  analyser.maxDecibels = -10;
  source.connect(analyser);

  const data = new Uint8Array(analyser.frequencyBinCount);

  const draw = () => {
    requestAnimationFrame(draw);
    analyser.getByteFrequencyData(data); // 0 = minDecibels, 255 = maxDecibels
    ctx2d.fillStyle = '#111';
    ctx2d.fillRect(0, 0, canvas.width, canvas.height);
    const barWidth = canvas.width / data.length;
    data.forEach((v, i) => {
      const h = (v / 255) * canvas.height;
      ctx2d.fillStyle = `hsl(${i * 2}, 80%, 55%)`;
      ctx2d.fillRect(i * barWidth, canvas.height - h, barWidth - 1, h);
    });
  };
  draw();
});

Ungültige Werte abfangen

const analyser = new AudioContext().createAnalyser();

try {
  analyser.minDecibels = -20; // größer als maxDecibels (-30)
} catch (err) {
  console.log(err.name);
}
console.log(analyser.minDecibels);
IndexSizeError -100

// Wichtig · Fallstricke

  • Ist minDecibels größer oder gleich maxDecibels, wird ein IndexSizeError (DOMException) ausgelöst. Wenn du beide Werte änderst, achte auf die Reihenfolge. Sonst kann der erste Schritt schon scheitern (z. B. erst maxDecibels anheben und danach minDecibels). Alternativ setzt du beide über das Options-Objekt des Konstruktors.
  • Die Eigenschaft wirkt nur auf getByteFrequencyData(). getFloatFrequencyData() und die Zeitbereichsdaten (getByteTimeDomainData()) sind davon unabhängig.
  • Die Werte sind dBFS und damit in der Regel negativ. 0 dB entspricht der vollen Aussteuerung.
  • Ein AudioContext startet in vielen Browsern erst nach einer Nutzerinteraktion (Autoplay-Richtlinie). Mikrofonzugriff braucht außerdem HTTPS und die Zustimmung des Nutzers.
  • Die Unterstützung in Chrome, Firefox, Safari und Edge ist seit Langem gegeben. Sehr alte Safari-Versionen brauchen das Präfix webkitAudioContext.