Signatur
Beschreibung
Die Eigenschaft attack eines DynamicsCompressorNode legt fest, wie schnell der Kompressor reagiert, sobald das Eingangssignal den Schwellwert (threshold) überschreitet. Der Wert gibt die Zeit in Sekunden an, die nötig ist, um die Verstärkung um 10 dB zu reduzieren.
Die Eigenschaft selbst ist schreibgeschützt und liefert ein AudioParam-Objekt. Den eigentlichen Wert änderst du über attack.value oder über Automatisierungsmethoden wie setValueAtTime() oder linearRampToValueAtTime(). Da es sich um einen k-rate-Parameter handelt, wird der Wert nur einmal pro Render-Quantum (128 Samples) übernommen, nicht pro Sample.
Einsatzbereiche:
- Kurze Attack-Zeiten (z. B. 0,001–0,005 s) fangen Transienten wie Schlagzeug-Anschläge ab, eignen sich also als Limiter oder Schutz vor Übersteuerung.
- Längere Attack-Zeiten (z. B. 0,02–0,1 s) lassen Transienten durch und sorgen so für mehr „Punch“, während der Rest des Signals trotzdem verdichtet wird.
Der Standardwert ist 0.003, der zulässige Bereich reicht von 0 bis 1.
Rückgabewert
AudioParam mit defaultValue 0.003, minValue 0 und maxValue 1. Die Einheit ist Sekunden.Beispiele
Kompressor mit schneller Attack-Zeit erzeugen
const ctx = new AudioContext();
const compressor = ctx.createDynamicsCompressor();
// Sehr schnelle Reaktion, um Pegelspitzen abzufangen
compressor.threshold.value = -24;
compressor.ratio.value = 12;
compressor.attack.value = 0.001;
compressor.release.value = 0.1;
console.log(compressor.attack.value);
console.log(compressor.attack.defaultValue, compressor.attack.minValue, compressor.attack.maxValue);
Attack über den Konstruktor setzen und ein Audio-Element komprimieren
const ctx = new AudioContext();
const audioEl = document.querySelector('audio');
const source = ctx.createMediaElementSource(audioEl);
// Längere Attack-Zeit: Transienten bleiben erhalten
const compressor = new DynamicsCompressorNode(ctx, {
threshold: -30,
ratio: 4,
attack: 0.03,
release: 0.25
});
source.connect(compressor).connect(ctx.destination);
document.querySelector('#play').addEventListener('click', async () => {
await ctx.resume();
audioEl.play();
});
Attack-Zeit per Schieberegler live anpassen
const ctx = new AudioContext();
const compressor = ctx.createDynamicsCompressor();
const slider = document.querySelector('#attack'); // <input type="range" min="0" max="100">
const label = document.querySelector('#attack-label');
slider.addEventListener('input', () => {
const seconds = Number(slider.value) / 1000; // Millisekunden -> Sekunden
// Sanfter Übergang ohne Knacksen
compressor.attack.setTargetAtTime(seconds, ctx.currentTime, 0.01);
label.textContent = `${slider.value} ms`;
});
// Wichtig · Fallstricke
- Nicht direkt zuweisen:
compressor.attack = 0.01hat keine Wirkung, denn die Eigenschaft ist schreibgeschützt. Setze stattdessencompressor.attack.value. - Einheit Sekunden: Viele Audio-Programme (DAWs) geben Attack-Zeiten in Millisekunden an. Rechne vor dem Setzen um, also 5 ms entsprechen
0.005. - Wertebereich: Werte außerhalb von 0–1 werden stillschweigend auf diesen Bereich begrenzt (geclampt). Es gibt keine Fehlermeldung.
- Gleitkommagenauigkeit:
AudioParamspeichert Werte als 32-Bit-Float. Beim Auslesen erscheint deshalb z. B.0.0010000000474974513statt0.001. - k-rate: Eine Verbindung eines Audio-Signals mit
attackoder eine sehr feine Automatisierung wirkt nur einmal pro Block von 128 Samples. - Autoplay-Richtlinie: Ein
AudioContextstartet oft im Zustandsuspendedund muss nach einer Benutzeraktion mitresume()gestartet werden. - Kompatibilität: Wird in allen modernen Browsern unterstützt. Ältere Safari-Versionen brauchen
webkitAudioContextund kennen den Konstruktornew DynamicsCompressorNode()nicht; dort funktioniert nurcreateDynamicsCompressor().