Signatur
Beschreibung
Die Eigenschaft knee eines DynamicsCompressorNode bestimmt, wie „weich“ der Kompressor einsetzt. Sie gibt in Dezibel an, über welchen Pegelbereich oberhalb der Schwelle (threshold) die Kennlinie allmählich von linear (keine Kompression) in das volle Verhältnis (ratio) übergeht. Ein Wert von 0 ergibt ein Hard Knee, bei dem die Kompression abrupt einsetzt. Größere Werte ergeben ein Soft Knee mit einem natürlicheren, weniger hörbaren Übergang.
Die Eigenschaft selbst ist schreibgeschützt: Sie liefert ein AudioParam-Objekt, dessen value du setzt oder das du mit Methoden wie setValueAtTime() oder linearRampToValueAtTime() automatisierst. Der Standardwert ist 30, der gültige Bereich reicht von 0 bis 40 dB.
Da es sich um einen k-rate-Parameter handelt, wird der Wert nur einmal pro Render-Block (128 Samples) ausgewertet, nicht für jedes Sample. Für typische Mix-Einstellungen ist das unproblematisch. Sehr schnelle Automationen werden dadurch aber nur blockweise umgesetzt.
In der Praxis nutzt du knee zusammen mit threshold, ratio, attack und release. Ein Soft Knee eignet sich für Sprache und Musik-Mastering. Ein Hard Knee eignet sich für einen Limiter-artigen Schutz vor Übersteuerung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $knee.value | number | 30 | Übergangsbereich in Dezibel (dB), gültig von 0 bis 40. Werte außerhalb dieses Bereichs werden auf die Grenzen begrenzt. |
Rückgabewert
AudioParam mit defaultValue 30, minValue 0 und maxValue 40 (Einheit: dB).Beispiele
Kompressor mit Soft Knee erzeugen
const ctx = new AudioContext();
const compressor = ctx.createDynamicsCompressor();
// Weicher Einsatz der Kompression über 20 dB
compressor.threshold.value = -24;
compressor.knee.value = 20;
compressor.ratio.value = 4;
console.log(compressor.knee.value, compressor.knee.defaultValue);
Wertebereich und Begrenzung prüfen
const ctx = new AudioContext();
const comp = new DynamicsCompressorNode(ctx, { knee: 10 });
console.log(comp.knee.minValue, comp.knee.maxValue); // 0 40
// Werte außerhalb des Bereichs werden bei der Verarbeitung begrenzt
comp.knee.value = 100;
console.log(comp.knee.value);
Audio-Element komprimieren und Knee automatisieren
const ctx = new AudioContext();
const audio = document.querySelector('audio');
const source = ctx.createMediaElementSource(audio);
const comp = new DynamicsCompressorNode(ctx, {
threshold: -30,
knee: 0, // zunächst Hard Knee
ratio: 8
});
source.connect(comp).connect(ctx.destination);
document.querySelector('#play').addEventListener('click', async () => {
await ctx.resume();
audio.play();
// Innerhalb von 3 Sekunden auf ein weiches Knee überblenden
const now = ctx.currentTime;
comp.knee.setValueAtTime(0, now);
comp.knee.linearRampToValueAtTime(35, now + 3);
});
// Wichtig · Fallstricke
kneeselbst lässt sich nicht neu zuweisen (compressor.knee = 10hat keine Wirkung). Setze stattdessencompressor.knee.value.- Als k-rate-Parameter wird
kneenur pro Render-Block von 128 Samples ausgewertet. Wenn du einen anderenAudioNodemitkneeverbindest (Audio-Rate-Modulation), wird dessen Signal ebenfalls nur blockweise übernommen. - Die Wirkung hängt stark von
thresholdundratioab. Beiratio = 1hatkneekeinen hörbaren Effekt. - Die genaue Kennlinie und das Aufholen der Lautstärke (Makeup Gain) unterscheiden sich leicht zwischen Browser-Implementierungen. Kritische Einstellungen solltest du deshalb in mehreren Browsern gegenhören.
- Browser-Kompatibilität: wird in allen modernen Browsern unterstützt. Ein
AudioContextstartet wegen der Autoplay-Richtlinien oft im Zustandsuspendedund muss nach einer Nutzeraktion mitresume()gestartet werden.