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

BaseAudioContext.createConstantSource()

Methode

Erstellt einen <code>ConstantSourceNode</code>, der kontinuierlich ein Mono-Signal mit konstantem, über <code>offset</code> steuerbarem Wert ausgibt.

seit JavaScript Baseline: alle modernen Browser (Chrome 56+, Firef Kategorie: webapi

Signatur

BaseAudioContext.prototype.createConstantSource()

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

Typ
ConstantSourceNode
Beschreibung
Ein neuer, noch nicht gestarteter 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);
1 0 1

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();
0.25 0.25

// Wichtig · Fallstricke

  • Vergessenes start(): Ohne start() gibt der Knoten nur Stille (0) aus, und verbundene Parameter behalten ihren Eigenwert.
  • Werte werden addiert: Ein Signal, das an einen AudioParam geht, wird zu dessen eigenem value addiert. Wenn der Knoten den Parameter allein steuern soll, setze dessen Basiswert auf 0.
  • Nur einmal startbar: Wer nach stop() erneut start() aufruft, bekommt einen InvalidStateError.
  • Autoplay-Regeln: Ein AudioContext startet in vielen Browsern im Zustand suspended. Nach einer Nutzeraktion muss dann ctx.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 AudioBufferSourceNode spielt dann in Schleife einen Puffer, der nur Einsen enthält.
  • Lautstärke: Bei direkter Verbindung zu destination kann ein hoher offset übersteuern und Knackgeräusche an Lautsprechern verursachen.