Start · Sprachen · JavaScript · Referenz · new ChannelSplitterNode()

new ChannelSplitterNode()

Methode

Erstellt einen <code>ChannelSplitterNode</code>, der ein mehrkanaliges Audiosignal in einzelne Mono-Ausgänge aufteilt, einen pro Kanal.

seit JavaScript Baseline: alle modernen Browser (seit ca. 2020) Kategorie: webapi

Signatur

new ChannelSplitterNode(context, options)

Beschreibung

Der Konstruktor ChannelSplitterNode() erzeugt einen Knoten der Web Audio API, der ein Eingangssignal mit mehreren Kanälen (z. B. Stereo oder 5.1) in separate Mono-Ausgänge zerlegt. Ausgang 0 enthält den ersten Kanal (bei Stereo: links), Ausgang 1 den zweiten (rechts) und so weiter.

Typische Einsatzfälle sind die getrennte Bearbeitung einzelner Kanäle – etwa unterschiedliche Lautstärke oder Effekte für links und rechts, Kanaltausch, Pegelanzeigen pro Kanal oder die Analyse mit einem AnalyserNode je Kanal. Meist wird er zusammen mit einem ChannelMergerNode genutzt, der die Kanäle wieder zusammenführt.

Der Konstruktor ist die moderne Alternative zur Fabrikmethode BaseAudioContext.createChannelSplitter() und erlaubt, alle Optionen direkt beim Erzeugen zu setzen. Die Eigenschaften channelCountMode ("explicit") und channelInterpretation ("discrete") sind bei diesem Knoten fest vorgegeben; channelCount entspricht immer numberOfOutputs.

Parameter

Name Typ Default Beschreibung
$context Pflicht BaseAudioContext Der AudioContext oder OfflineAudioContext, zu dem der Knoten gehören soll.
$options Object {} Optionales Konfigurationsobjekt (ChannelSplitterOptions).
$options.numberOfOutputs number 6 Anzahl der Ausgänge (= Kanäle), zwischen 1 und 32. Kanäle über dieser Anzahl werden verworfen; fehlende Kanäle liefern Stille.
$options.channelCount number numberOfOutputs Muss gleich numberOfOutputs sein, sonst wird ein InvalidStateError ausgelöst.
$options.channelCountMode string "explicit" Nur "explicit" ist erlaubt; andere Werte führen zu einem InvalidStateError.
$options.channelInterpretation string "discrete" Nur "discrete" ist erlaubt; andere Werte führen zu einem InvalidStateError.

Rückgabewert

Typ
ChannelSplitterNode
Beschreibung
Eine neue ChannelSplitterNode-Instanz mit einem Eingang und numberOfOutputs Mono-Ausgängen.

Beispiele

Stereo-Splitter erzeugen

const ctx = new AudioContext();
const splitter = new ChannelSplitterNode(ctx, { numberOfOutputs: 2 });

console.log(splitter.numberOfInputs);   // 1
console.log(splitter.numberOfOutputs);  // 2
console.log(splitter.channelCountMode); // "explicit"
1 2 explicit

Linken und rechten Kanal getrennt regeln

const ctx = new AudioContext();
const audio = document.querySelector('audio');
const source = new MediaElementAudioSourceNode(ctx, { mediaElement: audio });

const splitter = new ChannelSplitterNode(ctx, { numberOfOutputs: 2 });
const merger = new ChannelMergerNode(ctx, { numberOfInputs: 2 });
const leftGain = new GainNode(ctx, { gain: 1.0 });
const rightGain = new GainNode(ctx, { gain: 0.3 });

source.connect(splitter);
// Ausgang 0 = links, Ausgang 1 = rechts
splitter.connect(leftGain, 0);
splitter.connect(rightGain, 1);
// Wieder zu Stereo zusammenführen
leftGain.connect(merger, 0, 0);
rightGain.connect(merger, 0, 1);
merger.connect(ctx.destination);

document.querySelector('#play').addEventListener('click', async () => {
  await ctx.resume();
  audio.play();
});

Pegelanzeige pro Kanal mit AnalyserNode

const ctx = new AudioContext();
const osc = new OscillatorNode(ctx, { frequency: 440 });
const panner = new StereoPannerNode(ctx, { pan: -0.8 }); // stark nach links
const splitter = new ChannelSplitterNode(ctx, { numberOfOutputs: 2 });

const analysers = [0, 1].map(() => new AnalyserNode(ctx, { fftSize: 256 }));
osc.connect(panner).connect(splitter);
analysers.forEach((a, i) => splitter.connect(a, i));
osc.start();

const rms = (analyser) => {
  const data = new Float32Array(analyser.fftSize);
  analyser.getFloatTimeDomainData(data);
  return Math.sqrt(data.reduce((s, v) => s + v * v, 0) / data.length);
};

setTimeout(() => {
  console.log('Links:', rms(analysers[0]).toFixed(2));
  console.log('Rechts:', rms(analysers[1]).toFixed(2));
}, 500);
Links: 0.70 (ungefähr) Rechts: 0.11 (ungefähr)

// Wichtig · Fallstricke

  • Standardwert von numberOfOutputs ist 6, nicht 2 – bei Stereo-Material sollte man den Wert explizit setzen, um unnötige, stille Ausgänge zu vermeiden.
  • Werte außerhalb von 1–32 lösen einen IndexSizeError aus; abweichende Werte für channelCount, channelCountMode oder channelInterpretation einen InvalidStateError.
  • Beim Verbinden muss der Ausgangsindex als zweites Argument von connect() angegeben werden (splitter.connect(ziel, 1)); ohne Angabe wird nur Ausgang 0 verbunden.
  • Jeder Ausgang ist mono. Wird ein Ausgang direkt mit ctx.destination verbunden, wird das Signal hochgemischt und auf beiden Lautsprechern hörbar.
  • Browser-Kompatibilität: Der Konstruktor wird von allen aktuellen Browsern unterstützt; in sehr alten Safari-Versionen steht nur createChannelSplitter() zur Verfügung.
  • Ein AudioContext startet wegen Autoplay-Richtlinien oft im Zustand "suspended" und muss per Benutzergeste mit resume() gestartet werden.