Start · Sprachen · JavaScript · Referenz · ConstantSourceNode

ConstantSourceNode

Schnittstelle

Eine Audioquelle der Web Audio API, die ein konstantes Signal ausgibt. Der Wert wird über den <code>AudioParam</code> <code>offset</code> gesteuert.

seit JavaScript Baseline: alle modernen Browser (seit 2021, Safari Kategorie: webapi

Signatur

interface ConstantSourceNode extends AudioScheduledSourceNode

Beschreibung

ConstantSourceNode ist eine Audioquelle, die an jedem Abtastpunkt denselben Wert ausgibt. Man kann sie sich wie eine Gleichspannung vorstellen. Der ausgegebene Wert kommt aus dem AudioParam offset (Standardwert 1). Der Knoten erbt von AudioScheduledSourceNode und hat deshalb auch start(), stop() und das Ereignis ended.

Am häufigsten dient er als gemeinsame Steuerquelle: Man verbindet den Ausgang mit mehreren AudioParams, zum Beispiel mit den gain-Werten mehrerer GainNodes. Ändert man dann nur offset, ändern sich alle angeschlossenen Parameter gleichzeitig und exakt synchron. Automatisierungen wie linearRampToValueAtTime() wirken dabei auf alle Ziele zugleich.

Weitere Einsatzgebiete:

  • einem Signal einen Gleichanteil (DC-Offset) hinzufügen
  • Steuersignale für Modulationen erzeugen
  • in Tests ein definiertes Signal einspeisen

Der Knoten hat keine Eingänge und genau einen Ausgang mit einem Kanal (Mono). Er kann wie jede geplante Quelle nur einmal gestartet werden.

Parameter

Name Typ Default Beschreibung
$context Pflicht BaseAudioContext Konstruktor-Argument: der AudioContext oder OfflineAudioContext, zu dem der Knoten gehört.
$options { offset?: number } { offset: 1 } Konstruktor-Optionen: offset legt den Startwert des gleichnamigen AudioParam fest.
$offset AudioParam 1 Eigenschaft, nur lesbar: der AudioParam mit dem ausgegebenen Wert. Er ist vom Typ a-rate, lässt sich automatisieren und kann auch selbst ein Audiosignal als Eingang erhalten.

Rückgabewert

Typ
ConstantSourceNode
Beschreibung
new ConstantSourceNode(context, options) und context.createConstantSource() geben jeweils einen neuen, noch nicht gestarteten Knoten zurück.

Beispiele

Knoten erzeugen und starten

const ctx = new AudioContext();

// Variante 1: Konstruktor mit Optionen
const dc = new ConstantSourceNode(ctx, { offset: 0.5 });

// Variante 2: Fabrikmethode
const dc2 = ctx.createConstantSource();

console.log(dc.offset.value, dc2.offset.value);
dc.start();
0.5 1

Lautstärke mehrerer Oszillatoren gemeinsam steuern

const ctx = new AudioContext();
const control = new ConstantSourceNode(ctx, { offset: 0.2 });

const frequencies = [220, 277.18, 329.63]; // A-Dur-Akkord
frequencies.forEach((freq) => {
  const osc = new OscillatorNode(ctx, { frequency: freq });
  const gain = new GainNode(ctx, { gain: 0 }); // Grundwert 0, Steuersignal wird addiert
  control.connect(gain.gain);
  osc.connect(gain).connect(ctx.destination);
  osc.start();
});
control.start();

// Alle drei Töne gleichzeitig in 2 Sekunden ausblenden
control.offset.linearRampToValueAtTime(0, ctx.currentTime + 2);

Offset per Schieberegler steuern und Quelle sauber beenden

const ctx = new AudioContext();
const dc = ctx.createConstantSource();
const gain = new GainNode(ctx, { gain: 0 });
const osc = new OscillatorNode(ctx);

dc.connect(gain.gain);
osc.connect(gain).connect(ctx.destination);

document.querySelector('#volume').addEventListener('input', (e) => {
  // setTargetAtTime vermeidet Knackgeräusche
  dc.offset.setTargetAtTime(Number(e.target.value), ctx.currentTime, 0.02);
});

document.querySelector('#play').addEventListener('click', async () => {
  await ctx.resume();
  osc.start();
  dc.start();
  dc.stop(ctx.currentTime + 5);
});

dc.addEventListener('ended', () => console.log('Steuerquelle beendet'));
Steuerquelle beendet

// Wichtig · Fallstricke

  • Nur einmal startbar: Ein zweiter Aufruf von start() wirft einen InvalidStateError. Wenn Sie die Quelle erneut brauchen, erzeugen Sie einen neuen Knoten.
  • Signale werden addiert: Ist der Ausgang mit einem AudioParam verbunden, wird sein Wert zum Eigenwert des Parameters addiert. Setzen Sie deshalb zum Beispiel gain auf 0, sonst ist die Lautstärke ungewollt um 1 zu hoch.
  • Ohne start() gibt der Knoten Stille aus. Ein AudioContext startet wegen der Autoplay-Regeln der Browser oft im Zustand suspended. Rufen Sie daher ctx.resume() nach einer Nutzeraktion auf.
  • Direkt mit destination verbunden erzeugt der Knoten einen reinen Gleichanteil. Das ist unhörbar, kann aber Lautsprecher belasten.
  • Kompatibilität: Chrome 56+, Firefox 52+, Safari 14.1+. Ältere Safari-Versionen kennen den Knoten nicht. Prüfen Sie die Unterstützung mit 'ConstantSourceNode' in window.