Signatur
Beschreibung
createConstantSource() ist eine Fabrikmethode von BaseAudioContext und damit sowohl in AudioContext als auch in OfflineAudioContext verfügbar. Sie erzeugt einen ConstantSourceNode: eine Audioquelle ohne Eingänge, die bei jedem Sample denselben Wert ausgibt, nämlich den Wert ihres AudioParam offset (Standard: 1).
Im Alltag wird der Knoten selten direkt hörbar gemacht, weil ein Gleichspannungssignal nicht zu hören ist. Er dient vor allem als Steuersignal: Man verbindet seinen Ausgang mit mehreren AudioParams, zum Beispiel mit dem gain mehrerer GainNodes oder der frequency mehrerer Oszillatoren. Wenn man dann nur offset ändert oder automatisiert, ändern sich alle verbundenen Parameter gleichzeitig und sampelgenau.
Weil der Knoten von AudioScheduledSourceNode erbt, muss er wie jede Quelle mit start() gestartet werden und lässt sich mit stop() anhalten. Ein gestoppter Knoten kann nicht neu gestartet werden. Für einen neuen Start braucht man eine neue Instanz.
Die Methode entspricht dem Konstruktor new ConstantSourceNode(context, options). Der Konstruktor ist die modernere Variante und nimmt gleich einen Startwert für offset entgegen.
Rückgabewert
ConstantSourceNode mit offset.value === 1, einem Ausgang und keinem Eingang.Beispiele
Einfacher Aufruf und Offset setzen
const ctx = new AudioContext();
const constant = ctx.createConstantSource();
console.log(constant.offset.value); // Standardwert
constant.offset.value = 0.5;
console.log(constant.numberOfInputs, constant.numberOfOutputs);
Mehrere Lautstärken mit einem Regler steuern
const ctx = new AudioContext();
// Zwei Oszillatoren mit eigenem GainNode
const makeVoice = (freq) => {
const osc = ctx.createOscillator();
osc.frequency.value = freq;
const gain = ctx.createGain();
gain.gain.value = 0; // Basiswert 0, der Constant-Source addiert sich dazu
osc.connect(gain).connect(ctx.destination);
osc.start();
return gain;
};
const g1 = makeVoice(220);
const g2 = makeVoice(330);
// Ein gemeinsames Steuersignal für beide gain-Parameter
const master = ctx.createConstantSource();
master.offset.value = 0.2;
master.connect(g1.gain);
master.connect(g2.gain);
master.start();
// Beide Stimmen zusammen in 2 Sekunden ausblenden
master.offset.linearRampToValueAtTime(0, ctx.currentTime + 2);
Steuersignal im OfflineAudioContext auslesen
const run = async () => {
const offline = new OfflineAudioContext(1, 44100, 44100);
const src = offline.createConstantSource();
src.offset.setValueAtTime(0.25, 0);
src.connect(offline.destination);
src.start();
const buffer = await offline.startRendering();
const data = buffer.getChannelData(0);
console.log(data[0], data[data.length - 1]);
};
run();
// Wichtig · Fallstricke
- Vergessenes
start(): Ohnestart()gibt der Knoten nur Stille (0) aus, und verbundene Parameter behalten ihren Eigenwert. - Werte werden addiert: Ein Signal, das an einen
AudioParamgeht, wird zu dessen eigenemvalueaddiert. Wenn der Knoten den Parameter allein steuern soll, setze dessen Basiswert auf0. - Nur einmal startbar: Wer nach
stop()erneutstart()aufruft, bekommt einenInvalidStateError. - Autoplay-Regeln: Ein
AudioContextstartet in vielen Browsern im Zustandsuspended. Nach einer Nutzeraktion muss dannctx.resume()aufgerufen werden. - Kompatibilität: Wird von allen modernen Browsern unterstützt. Safari kann den Knoten erst ab Version 14.1. Für sehr alte Umgebungen lässt sich das Verhalten nachbauen: Ein
AudioBufferSourceNodespielt dann in Schleife einen Puffer, der nur Einsen enthält. - Lautstärke: Bei direkter Verbindung zu
destinationkann ein hoheroffsetübersteuern und Knackgeräusche an Lautsprechern verursachen.