Signatur
Beschreibung
Die Eigenschaft delayTime einer DelayNode gibt ein AudioParam-Objekt zurück. Es bestimmt, um wie viele Sekunden das Eingangssignal verzögert wird, bevor es am Ausgang erscheint. Der Standardwert ist 0. Der Maximalwert entspricht dem maxDelayTime, das beim Erzeugen des Knotens angegeben wurde (Standard: 1 Sekunde, höchstens knapp unter 180 Sekunden).
Weil es sich um einen a-rate-Parameter handelt, wird der Wert für jedes einzelne Sample neu berechnet. Deshalb eignet sich delayTime nicht nur für statische Echos, sondern auch für modulierte Effekte wie Chorus, Flanger oder Vibrato. Dafür verbindet man z. B. einen OscillatorNode (LFO) über einen GainNode direkt mit dem Parameter.
Die Eigenschaft selbst kannst du nicht neu zuweisen, wohl aber ihren Wert über delayTime.value ändern oder zeitgesteuert mit Methoden wie setValueAtTime(), linearRampToValueAtTime() oder setTargetAtTime() automatisieren.
Rückgabewert
AudioParam mit defaultValue 0, minValue 0 und maxValue gleich dem maxDelayTime des Knotens (in Sekunden).Beispiele
Einfaches Echo mit fester Verzögerung
const ctx = new AudioContext();
const osc = new OscillatorNode(ctx, { frequency: 440 });
const delay = new DelayNode(ctx, { maxDelayTime: 2 });
// 300 ms Verzögerung setzen
delay.delayTime.value = 0.3;
// Trockenes und verzögertes Signal mischen
osc.connect(ctx.destination);
osc.connect(delay).connect(ctx.destination);
osc.start();
osc.stop(ctx.currentTime + 0.2);
console.log(delay.delayTime.value, delay.delayTime.maxValue);
Feedback-Echo mit Regler aus einem Range-Input
const ctx = new AudioContext();
const audio = document.querySelector('audio');
const source = ctx.createMediaElementSource(audio);
const delay = ctx.createDelay(5);
const feedback = new GainNode(ctx, { gain: 0.4 });
source.connect(ctx.destination);
source.connect(delay);
delay.connect(feedback).connect(delay); // Rückkopplungsschleife
delay.connect(ctx.destination);
document.querySelector('#delay').addEventListener('input', (e) => {
// sanft zum neuen Wert gleiten, um Knackser zu vermeiden
delay.delayTime.setTargetAtTime(Number(e.target.value), ctx.currentTime, 0.05);
});
Chorus-/Vibrato-Effekt per LFO-Modulation
const ctx = new AudioContext();
const osc = new OscillatorNode(ctx, { type: 'sawtooth', frequency: 220 });
const delay = new DelayNode(ctx, { delayTime: 0.015, maxDelayTime: 0.05 });
// LFO: 5 Hz, Tiefe ±3 ms
const lfo = new OscillatorNode(ctx, { frequency: 5 });
const depth = new GainNode(ctx, { gain: 0.003 });
lfo.connect(depth).connect(delay.delayTime);
osc.connect(delay).connect(ctx.destination);
osc.start();
lfo.start();
// Wichtig · Fallstricke
- Einheit Sekunden:
0.3bedeutet 300 ms – nicht Millisekunden angeben. - Werte über
maxDelayTimewerden auf den Maximalwert begrenzt.maxDelayTimelässt sich nach dem Erzeugen nicht mehr ändern, wähle ihn also groß genug (bei Modulation: Grundwert + Modulationstiefe). - Die Eigenschaft ist schreibgeschützt:
delay.delayTime = 0.5hat keine Wirkung, richtig istdelay.delayTime.value = 0.5. - Springt der Wert abrupt, sind Knackser möglich. Nutze stattdessen
setTargetAtTime()oderlinearRampToValueAtTime(). - In Rückkopplungsschleifen (Zyklen) muss eine
DelayNodeenthalten sein; dort beträgt die minimale wirksame Verzögerung einen Render-Block (128 Samples). - Kompatibilität: Wird von allen modernen Browsern unterstützt. Der Konstruktor
new DelayNode()ist neuer alscreateDelay(), in aktuellen Browsern aber ebenfalls verfügbar. EinAudioContextstartet meist erst nach einer Nutzerinteraktion (Autoplay-Richtlinie).