Start · Sprachen · JavaScript · Referenz · DelayNode.delayTime

DelayNode.delayTime

Eigenschaft

Schreibgeschützte Referenz auf einen a-rate <code>AudioParam</code>, der die Verzögerung einer <code>DelayNode</code> in Sekunden festlegt.

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

Signatur

DelayNode.delayTime

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

Typ
AudioParam
Beschreibung
Ein a-rate 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);
0.30000001192092896 2

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.3 bedeutet 300 ms – nicht Millisekunden angeben.
  • Werte über maxDelayTime werden auf den Maximalwert begrenzt. maxDelayTime lä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.5 hat keine Wirkung, richtig ist delay.delayTime.value = 0.5.
  • Springt der Wert abrupt, sind Knackser möglich. Nutze stattdessen setTargetAtTime() oder linearRampToValueAtTime().
  • In Rückkopplungsschleifen (Zyklen) muss eine DelayNode enthalten 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 als createDelay(), in aktuellen Browsern aber ebenfalls verfügbar. Ein AudioContext startet meist erst nach einer Nutzerinteraktion (Autoplay-Richtlinie).