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

BaseAudioContext.createChannelMerger()

Methode

Erzeugt einen <code>ChannelMergerNode</code>, der mehrere Mono-Eingänge zu einem einzigen mehrkanaligen Audiostrom zusammenführt.

seit JavaScript Baseline: alle modernen Browser (Web Audio API) Kategorie: webapi

Signatur

BaseAudioContext.prototype.createChannelMerger(numberOfInputs)

Beschreibung

createChannelMerger() ist eine Fabrikmethode von BaseAudioContext (und damit von AudioContext und OfflineAudioContext). Sie erzeugt einen ChannelMergerNode mit einer festen Anzahl von Eingängen. Jeder Eingang wird zu genau einem Kanal des Ausgangs: Eingang 0 wird Kanal 0 (links), Eingang 1 wird Kanal 1 (rechts) und so weiter.

Typischerweise nutzt man den Knoten zusammen mit einem ChannelSplitterNode: Zuerst wird ein Stereo- oder Mehrkanalsignal in einzelne Kanäle zerlegt, jeder Kanal wird getrennt bearbeitet (z. B. mit unterschiedlicher Lautstärke, Verzögerung oder Filterung), und am Ende setzt der Merger die Kanäle wieder zusammen. Ebenso lässt sich damit aus zwei Mono-Quellen ein Stereosignal bauen oder ein Kanal gezielt nur auf einen Lautsprecher legen.

Wichtig: Jeder Eingang des Mergers ist auf einen Kanal festgelegt (channelCount = 1, channelCountMode = "explicit"). Liegt an einem Eingang ein Stereosignal an, wird es vorher zu Mono heruntergemischt. Um einen bestimmten Eingang anzusprechen, übergibt man bei connect() den Eingangsindex als dritten Parameter: source.connect(merger, outputIndex, inputIndex).

Als moderne Alternative gibt es den Konstruktor new ChannelMergerNode(context, { numberOfInputs }), der gleichwertig ist und zusätzliche Optionen erlaubt.

Parameter

Name Typ Default Beschreibung
$numberOfInputs number 6 Anzahl der Eingänge (und damit der Ausgangskanäle). Muss zwischen 1 und 32 liegen; sonst wird ein IndexSizeError geworfen.

Rückgabewert

Typ
ChannelMergerNode
Beschreibung
Ein neuer ChannelMergerNode mit numberOfInputs Eingängen und einem Ausgang, dessen Kanalanzahl numberOfInputs entspricht.

Beispiele

Zwei Oszillatoren zu einem Stereosignal zusammenführen

const ctx = new AudioContext();

const left = new OscillatorNode(ctx, { frequency: 440 });
const right = new OscillatorNode(ctx, { frequency: 660 });

// Merger mit genau zwei Eingängen = Stereo-Ausgang
const merger = ctx.createChannelMerger(2);

// Ausgang 0 der Quelle -> Eingang 0 (links) bzw. 1 (rechts)
left.connect(merger, 0, 0);
right.connect(merger, 0, 1);

merger.connect(ctx.destination);

console.log(merger.numberOfInputs, merger.channelCount);

left.start();
right.start();
left.stop(ctx.currentTime + 2);
right.stop(ctx.currentTime + 2);
2 1

Stereokanäle vertauschen (Splitter + Merger)

const ctx = new AudioContext();
const audio = document.querySelector('audio');
const source = ctx.createMediaElementSource(audio);

const splitter = ctx.createChannelSplitter(2);
const merger = ctx.createChannelMerger(2);

source.connect(splitter);

// Linker Kanal (0) wird rechts (1), rechter Kanal (1) wird links (0)
splitter.connect(merger, 0, 1);
splitter.connect(merger, 1, 0);

merger.connect(ctx.destination);

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

Nur den linken Kanal leiser machen

const ctx = new AudioContext();

const response = await fetch('/sounds/musik.mp3');
const buffer = await ctx.decodeAudioData(await response.arrayBuffer());
const source = new AudioBufferSourceNode(ctx, { buffer });

const splitter = ctx.createChannelSplitter(2);
const merger = ctx.createChannelMerger(2);
const leftGain = new GainNode(ctx, { gain: 0.3 });

source.connect(splitter);
splitter.connect(leftGain, 0);      // linker Kanal über Gain
leftGain.connect(merger, 0, 0);
splitter.connect(merger, 1, 1);     // rechter Kanal unverändert

merger.connect(ctx.destination);
source.start();

// Wichtig · Fallstricke

  • Standardwert 6: Ohne Argument entsteht ein 6-Kanal-Ausgang (5.1). Wird dieser an ein Stereo-Ziel angeschlossen, greift das Downmixing der Web Audio API – das Ergebnis klingt oft anders als erwartet. Für Stereo immer explizit createChannelMerger(2) verwenden.
  • Eingänge sind Mono: channelCount ist fest 1 und channelCountMode fest "explicit"; Änderungsversuche werfen einen InvalidStateError. Stereo-Signale an einem Eingang werden zu Mono zusammengemischt.
  • Eingangsindex nicht vergessen: connect(merger) ohne dritten Parameter verbindet immer mit Eingang 0 – alle Quellen landen dann im linken Kanal.
  • Unverbundene Eingänge liefern Stille im entsprechenden Kanal.
  • Werte außerhalb von 1–32 führen zu einem IndexSizeError.
  • Kompatibilität: In allen aktuellen Browsern verfügbar; sehr alte Safari-Versionen benötigten webkitAudioContext. Ein AudioContext startet wegen Autoplay-Richtlinien oft im Zustand "suspended" und muss nach einer Nutzerinteraktion mit resume() fortgesetzt werden.