Signatur
Beschreibung
Der Konstruktor ConstantSourceNode() erstellt einen Quellknoten der Web Audio API, dessen Ausgabe ein konstantes Signal ist. Jedes Sample hat den Wert des AudioParam offset (Standard 1). Damit entspricht der Knoten einer Gleichspannungsquelle, wie man sie aus modularen Synthesizern kennt.
Richtig nützlich wird er, wenn du seine Ausgabe mit einem oder mehreren AudioParams verbindest. So steuerst du mit einem einzigen Parameter (offset) gleichzeitig mehrere Werte, z. B. die Lautstärke mehrerer GainNodes oder die Frequenz mehrerer Filter, und kannst dafür die Automatisierungsmethoden wie linearRampToValueAtTime() verwenden.
Als Alternative zum Konstruktor gibt es die Fabrikmethode BaseAudioContext.createConstantSource(). Der Konstruktor hat den Vorteil, dass du offset direkt über das Optionsobjekt setzen kannst. Wie bei jedem AudioScheduledSourceNode musst du start() aufrufen, bevor der Knoten ein Signal ausgibt. Nach stop() lässt er sich nicht erneut starten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $context Pflicht | BaseAudioContext | Der AudioContext oder OfflineAudioContext, zu dem der Knoten gehören soll. |
|
| $options | Object | {} | Optionales Konfigurationsobjekt. Eigenschaft offset (number, Standard 1): der konstante Ausgabewert als Startwert des offset-AudioParams. |
Rückgabewert
ConstantSourceNode, der mit einem Kanal ausgibt.Beispiele
Knoten erzeugen und offset auslesen
const ctx = new AudioContext();
const constant = new ConstantSourceNode(ctx, { offset: 0.5 });
console.log(constant.offset.value);
console.log(constant.numberOfOutputs);
Mehrere Lautstärken mit einem Regler steuern
const ctx = new AudioContext();
// Zwei Oszillatoren mit je eigenem GainNode
const osc1 = new OscillatorNode(ctx, { frequency: 220 });
const osc2 = new OscillatorNode(ctx, { frequency: 330 });
const gain1 = new GainNode(ctx, { gain: 0 }); // Basiswert 0
const gain2 = new GainNode(ctx, { gain: 0 });
osc1.connect(gain1).connect(ctx.destination);
osc2.connect(gain2).connect(ctx.destination);
// Konstante Quelle steuert beide gain-Parameter
const master = new ConstantSourceNode(ctx, { offset: 0.2 });
master.connect(gain1.gain);
master.connect(gain2.gain);
[osc1, osc2, master].forEach((node) => node.start());
// Ein Aufruf regelt beide Stimmen
document.querySelector('#volume').addEventListener('input', (e) => {
master.offset.setTargetAtTime(Number(e.target.value), ctx.currentTime, 0.05);
});
Filterfrequenz sanft automatisieren (offline gerendert)
const ctx = new OfflineAudioContext(1, 44100 * 2, 44100);
const noise = ctx.createBuffer(1, ctx.length, ctx.sampleRate);
const data = noise.getChannelData(0);
for (let i = 0; i < data.length; i++) data[i] = Math.random() * 2 - 1;
const src = new AudioBufferSourceNode(ctx, { buffer: noise });
const filter = new BiquadFilterNode(ctx, { type: 'lowpass', frequency: 0 });
const sweep = new ConstantSourceNode(ctx, { offset: 200 });
sweep.connect(filter.frequency);
src.connect(filter).connect(ctx.destination);
sweep.offset.linearRampToValueAtTime(5000, 2);
src.start();
sweep.start();
const rendered = await ctx.startRendering();
console.log(rendered.duration);
// Wichtig · Fallstricke
- Kein Ton ohne
start(): Wie jede Quelle ist der Knoten nach dem Erzeugen stumm. Nachstop()kannst du ihn nicht erneut starten, sondern musst einen neuen Knoten erzeugen. - Signale werden addiert: Verbindest du den Knoten mit einem
AudioParam, wird sein Signal zum Eigenwert des Parameters addiert. Setze diesen Eigenwert (z. B.gain) meist auf0, sonst bekommst du unerwartete Summen. - Autoplay-Richtlinie: Ein
AudioContextstartet in Browsern oft im Zustandsuspended. Rufectx.resume()nach einer Nutzeraktion auf. - Fehlerfälle: Ohne
newwird einTypeErrorgeworfen, ebenso bei fehlendem oder ungültigemcontext. - Browser-Kompatibilität: Chrome/Edge 56+, Firefox 52+ und Safari 14.1+ unterstützen den Knoten. Ältere Safari-Versionen kennen ihn nicht. Prüfe das bei Bedarf mit
'ConstantSourceNode' in window.