Start · Sprachen · JavaScript · Referenz · BaseAudioContext.createDelay()

BaseAudioContext.createDelay()

Methode

Erzeugt einen <code>DelayNode</code>, der das eingehende Audiosignal um eine einstellbare Zeit verzögert, z. B. für Echo-, Chorus- oder Flanger-Effekte.

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

Signatur

BaseAudioContext.prototype.createDelay(maxDelayTime)

Beschreibung

Die Methode createDelay() eines AudioContext oder OfflineAudioContext erzeugt einen DelayNode. Dieser Knoten gibt sein Eingangssignal zeitversetzt wieder aus. Wie lange verzögert wird, legt der AudioParam delayTime fest (in Sekunden). Er lässt sich zur Laufzeit ändern und auch automatisieren.

Verzögerungen sind ein Grundbaustein vieler Audioeffekte: Echo (Verzögerung mit Rückkopplung über einen GainNode), Slapback, Chorus und Flanger (per LFO modulierte, kurze Verzögerungszeiten) sowie der Ausgleich von Laufzeitunterschieden zwischen Signalwegen.

Mit dem optionalen Parameter maxDelayTime legst du beim Erzeugen fest, wie weit delayTime höchstens eingestellt werden kann. Der Browser reserviert dafür einen internen Puffer. Wähle den Wert deshalb nur so groß wie nötig. Seit new DelayNode(context, options) verfügbar ist, gibt es auch einen Konstruktor. Beide Wege sind gleichwertig.

Parameter

Name Typ Default Beschreibung
$maxDelayTime number 1 Größtmögliche Verzögerung in Sekunden. Muss größer als 0 und kleiner als 180 (3 Minuten) sein, sonst wird ein NotSupportedError ausgelöst.

Rückgabewert

Typ
DelayNode
Beschreibung
Ein neuer DelayNode. Sein delayTime-AudioParam hat den Startwert 0 und ist nach oben durch maxDelayTime begrenzt.

Beispiele

Einfache Verzögerung eines Oszillators

const ctx = new AudioContext();
const osc = ctx.createOscillator();
const delay = ctx.createDelay(2); // bis zu 2 Sekunden

delay.delayTime.value = 0.5; // 500 ms Verzögerung

osc.connect(delay).connect(ctx.destination);
osc.start();
osc.stop(ctx.currentTime + 0.2);

console.log(delay.delayTime.value, delay.delayTime.maxValue);
0.5 2

Echo-Effekt mit Rückkopplung

const ctx = new AudioContext();
const audio = document.querySelector('audio');
const source = ctx.createMediaElementSource(audio);

const delay = ctx.createDelay(1);
const feedback = ctx.createGain();
const wet = ctx.createGain();

delay.delayTime.value = 0.35;
feedback.gain.value = 0.4; // < 1, sonst schaukelt sich das Signal auf
wet.gain.value = 0.5;

// Trockenes Signal direkt ausgeben
source.connect(ctx.destination);
// Nasses Signal: Quelle -> Delay -> Wet -> Ausgang
source.connect(delay);
delay.connect(wet).connect(ctx.destination);
// Rückkopplungsschleife: Delay -> Feedback -> Delay
delay.connect(feedback).connect(delay);

audio.addEventListener('play', () => ctx.resume());

Flanger: Verzögerungszeit per LFO modulieren

const ctx = new AudioContext();
const osc = ctx.createOscillator();
osc.type = 'sawtooth';

const delay = ctx.createDelay(0.02);
delay.delayTime.value = 0.005; // 5 ms Grundverzögerung

const lfo = ctx.createOscillator();
const lfoDepth = ctx.createGain();
lfo.frequency.value = 0.25;   // langsame Modulation
lfoDepth.gain.value = 0.003;  // ±3 ms
lfo.connect(lfoDepth).connect(delay.delayTime);

osc.connect(ctx.destination);
osc.connect(delay).connect(ctx.destination);

osc.start();
lfo.start();
osc.stop(ctx.currentTime + 4);
lfo.stop(ctx.currentTime + 4);

Verzögerungszeit sanft ändern

const ctx = new AudioContext();
const delay = ctx.createDelay(5);

// Harte Sprünge erzeugen Knackser, deshalb rampen
const setDelay = (seconds) => {
  delay.delayTime.setTargetAtTime(seconds, ctx.currentTime, 0.05);
};

setDelay(1.2);

try {
  ctx.createDelay(200); // zu groß
} catch (err) {
  console.log(err.name);
}
NotSupportedError

// Wichtig · Fallstricke

  • Obergrenze festlegen: maxDelayTime lässt sich nach dem Erzeugen nicht mehr ändern. Werte für delayTime oberhalb dieser Grenze werden stillschweigend auf das Maximum gekappt. Werte ≤ 0 oder ≥ 180 lösen einen NotSupportedError aus.
  • Rückkopplungsschleifen: In der Web Audio API sind Zyklen im Audiographen nur erlaubt, wenn ein DelayNode in der Schleife liegt. Hält der Feedback-Gain nicht unter 1, schaukelt sich das Signal auf und übersteuert.
  • Mindestverzögerung im Zyklus: Liegt der DelayNode in einer Rückkopplungsschleife, beträgt die Verzögerung mindestens einen Render-Block (128 Samples), auch wenn delayTime kleiner ist.
  • Knackser vermeiden: Sprünge in delayTime während der Wiedergabe erzeugen Artefakte. Nutze stattdessen setTargetAtTime() oder linearRampToValueAtTime().
  • Autoplay-Richtlinien: Browser starten einen AudioContext oft im Zustand suspended. Rufe ctx.resume() nach einer Nutzeraktion auf.
  • Kompatibilität: Wird von allen modernen Browsern unterstützt. Sehr alte WebKit-Versionen kannten nur das Präfix webkitAudioContext.