Signatur
Beschreibung
Die Eigenschaft threshold eines DynamicsCompressorNode ist der Schwellenwert des Kompressors. Signalanteile, deren Pegel über diesem Wert liegt, werden gemäß dem Verhältnis ratio abgeschwächt. Pegel darunter bleiben unverändert. Der Wert wird in Dezibel relativ zur Vollaussteuerung (dBFS) angegeben. Der Standardwert ist -24, der zulässige Bereich reicht von -100 bis 0.
Die Eigenschaft selbst ist schreibgeschützt. Sie gibt ein AudioParam-Objekt zurück, dessen value du setzt oder mit Automatisierungsmethoden wie setValueAtTime() oder linearRampToValueAtTime() zeitgesteuert änderst. Da es ein k-rate-Parameter ist, wird der Wert nur einmal pro Render-Block von 128 Samples ausgewertet und nicht für jedes einzelne Sample.
Typische Anwendungen sind das Angleichen von Lautstärkeunterschieden (z. B. bei Sprache oder Podcasts), ein Limiter kurz vor dem Ausgang, der Übersteuerung verhindert, und dezentes Komprimieren von Musik. Je niedriger (negativer) der Schwellenwert ist, desto mehr vom Signal wird komprimiert.
Rückgabewert
AudioParam mit defaultValue -24, minValue -100 und maxValue 0 (Einheit: dB).Beispiele
Schwellenwert setzen und auslesen
const ctx = new AudioContext();
const compressor = ctx.createDynamicsCompressor();
console.log(compressor.threshold.defaultValue); // Standardwert
compressor.threshold.value = -30;
console.log(compressor.threshold.value);
console.log(compressor.threshold.minValue, compressor.threshold.maxValue);
Kompressor über den Konstruktor für eine Sprachaufnahme
const ctx = new AudioContext();
const audio = document.querySelector('audio');
const source = ctx.createMediaElementSource(audio);
const compressor = new DynamicsCompressorNode(ctx, {
threshold: -40, // früh eingreifen, um leise und laute Passagen anzugleichen
knee: 10,
ratio: 6,
attack: 0.005,
release: 0.2
});
source.connect(compressor).connect(ctx.destination);
audio.addEventListener('play', () => ctx.resume());
Schwellenwert zeitgesteuert absenken
const ctx = new AudioContext();
const osc = new OscillatorNode(ctx, { frequency: 220 });
const compressor = new DynamicsCompressorNode(ctx);
osc.connect(compressor).connect(ctx.destination);
const now = ctx.currentTime;
compressor.threshold.setValueAtTime(0, now);
// innerhalb von 3 Sekunden immer stärker komprimieren
compressor.threshold.linearRampToValueAtTime(-60, now + 3);
osc.start(now);
osc.stop(now + 4);
Schwellenwert mit Schieberegler steuern und Pegelreduktion anzeigen
const ctx = new AudioContext();
const compressor = ctx.createDynamicsCompressor();
const slider = document.querySelector('#threshold'); // <input type="range" min="-100" max="0">
slider.addEventListener('input', () => {
// setTargetAtTime vermeidet hörbare Sprünge
compressor.threshold.setTargetAtTime(Number(slider.value), ctx.currentTime, 0.02);
});
setInterval(() => {
console.log(`Pegelreduktion: ${compressor.reduction.toFixed(1)} dB`);
}, 500);
// Wichtig · Fallstricke
- Du kannst
compressor.threshold = -30nicht direkt zuweisen, weil die Eigenschaft schreibgeschützt ist. Setze stattdessenthreshold.valueoder nutze die Automatisierungsmethoden. - Werte außerhalb von -100 bis 0 werden auf den gültigen Bereich begrenzt. Browser können dabei eine Konsolenwarnung ausgeben.
- Als k-rate-Parameter verarbeitet
thresholdkeine sample-genaue Modulation. Auch ein Versuch,automationRateauf"a-rate"umzustellen, führt zu einemInvalidStateError. - Ändert sich
threshold.valueabrupt, können Klickgeräusche entstehen.setTargetAtTime()sorgt für weiche Übergänge. - Der Kompressor wendet eine automatische Aufholverstärkung (Makeup Gain) an. Ein niedrigerer Schwellenwert kann das Signal deshalb insgesamt lauter klingen lassen.
- Browser-Kompatibilität: Die Eigenschaft wird in allen modernen Browsern unterstützt. Der Konstruktor
new DynamicsCompressorNode()fehlt in sehr alten Safari-Versionen. Dort funktioniertcreateDynamicsCompressor(). Wegen der Autoplay-Richtlinien startet einAudioContexterst nach einer Nutzeraktion, zum Beispiel mitctx.resume().