Signatur
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
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);
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`);
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);
// Wichtig · Fallstricke
- Ist
minDecibelsgrößer oder gleichmaxDecibels, wird einIndexSizeError(DOMException) ausgelöst. Wenn du beide Werte änderst, achte auf die Reihenfolge. Sonst kann der erste Schritt schon scheitern (z. B. erstmaxDecibelsanheben und danachminDecibels). 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
AudioContextstartet 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.