Start · Sprachen · JavaScript · Referenz · DynamicsCompressorNode.threshold

DynamicsCompressorNode.threshold

Eigenschaft

Schreibgeschützter k-rate <code>AudioParam</code>, der den Pegel in Dezibel (dB) festlegt, ab dem der Kompressor das Signal abschwächt.

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

Signatur

DynamicsCompressorNode.threshold

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

Typ
AudioParam
Beschreibung
Ein k-rate 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);
-24 -30 -100 0

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);
Pegelreduktion: -3.2 dB (je nach Eingangssignal)

// Wichtig · Fallstricke

  • Du kannst compressor.threshold = -30 nicht direkt zuweisen, weil die Eigenschaft schreibgeschützt ist. Setze stattdessen threshold.value oder 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 threshold keine sample-genaue Modulation. Auch ein Versuch, automationRate auf "a-rate" umzustellen, führt zu einem InvalidStateError.
  • Ändert sich threshold.value abrupt, 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 funktioniert createDynamicsCompressor(). Wegen der Autoplay-Richtlinien startet ein AudioContext erst nach einer Nutzeraktion, zum Beispiel mit ctx.resume().