Start · Sprachen · JavaScript · Referenz · AudioNode.channelInterpretation

AudioNode.channelInterpretation

Eigenschaft

Legt fest, wie ein <code>AudioNode</code> Eingangskanäle auf Ausgangskanäle abbildet, wenn Up- oder Down-Mixing nötig ist: <code>"speakers"</code> oder <code>"discrete"</code>.

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

Signatur

AudioNode.channelInterpretation

Beschreibung

Die Eigenschaft channelInterpretation eines AudioNode ist ein String aus einer festen Werteliste (Enum). Sie bestimmt, wie Kanäle gemischt werden, wenn die Kanalzahl einer Eingangsverbindung nicht zur Kanalzahl passt, mit der der Knoten intern rechnet. Wie viele Kanäle das sind, ergibt sich aus channelCount und channelCountMode.

Es gibt zwei Werte:

  • "speakers" (Standard): Es gelten die Mischregeln der Spezifikation für die üblichen Lautsprecher-Layouts Mono (1), Stereo (2), Quad (4) und 5.1 (6). Beim Up-Mixing von Mono auf Stereo wird das Signal zum Beispiel auf L und R kopiert. Beim Down-Mixing von Stereo auf Mono gilt 0.5 * (L + R). Passt die Kanalzahl zu keinem dieser Layouts, wird automatisch wie bei "discrete" gemischt.
  • "discrete": Die Kanäle werden der Reihe nach einander zugeordnet. Beim Up-Mixing werden fehlende Kanäle mit Stille aufgefüllt, beim Down-Mixing werden überzählige Kanäle einfach weggelassen.

"discrete" brauchen Sie immer dann, wenn Kanäle keine Lautsprecherpositionen darstellen: bei Mehrkanal-Aufnahmen mit getrennten Mikrofonspuren, bei Ambisonics-Signalen, bei Steuersignalen oder beim gezielten Zusammenführen mit ChannelMergerNode bzw. Aufteilen mit ChannelSplitterNode. Für normale Wiedergabe über Lautsprecher bleibt "speakers" die richtige Wahl.

Parameter

Name Typ Default Beschreibung
$value "speakers" | "discrete" "speakers" Neuer Wert beim Setzen der Eigenschaft. Andere Strings werden ohne Fehlermeldung ignoriert.

Rückgabewert

Typ
string
Beschreibung
Der aktuelle Mischmodus: "speakers" oder "discrete".

Beispiele

Aktuellen Wert auslesen und ändern

const ctx = new AudioContext();
const gain = ctx.createGain();

console.log(gain.channelInterpretation);

// Kanäle ohne Lautsprecher-Mischregeln zuordnen
gain.channelInterpretation = 'discrete';
console.log(gain.channelInterpretation);
speakers discrete

Mono-Quelle nur auf den linken Kanal legen

const ctx = new AudioContext();
const osc = ctx.createOscillator(); // Mono-Ausgang

const gain = ctx.createGain();
gain.channelCount = 2;
gain.channelCountMode = 'explicit';
// discrete: Mono -> Kanal 0 (links), Kanal 1 bleibt still
gain.channelInterpretation = 'discrete';

osc.connect(gain).connect(ctx.destination);
osc.start();
osc.stop(ctx.currentTime + 1);

Unerwünschtes Mischen ungültiger Werte erkennen

const ctx = new OfflineAudioContext(2, 44100, 44100);
const node = ctx.createGain();

node.channelInterpretation = 'surround'; // ungültig, wird ignoriert
console.log(node.channelInterpretation);

const setInterpretation = (n, v) => {
  n.channelInterpretation = v;
  if (n.channelInterpretation !== v) {
    throw new TypeError(`Ungültiger Wert: ${v}`);
  }
};

try {
  setInterpretation(node, 'surround');
} catch (e) {
  console.log(e.message);
}
speakers Ungültiger Wert: surround

// Wichtig · Fallstricke

  • Nur beim Mischen wirksam: Stimmen Eingangs- und Rechenkanalzahl überein, hat die Eigenschaft keine Wirkung. Wie viele Kanäle intern verwendet werden, steuern Sie über channelCount und channelCountMode.
  • Ungültige Werte: Nach den WebIDL-Regeln für Enums löst das Zuweisen eines unbekannten Strings keinen Fehler aus. Die Zuweisung wird einfach ignoriert.
  • Einschränkungen bei einzelnen Knoten: Bei ChannelSplitterNode ist der Wert fest auf "discrete" gesetzt. Jeder Versuch, ihn zu ändern, löst einen InvalidStateError aus.
  • Automatischer Wechsel: Auch bei "speakers" wird wie bei "discrete" gemischt, wenn die Kanalzahl kein Standard-Layout ist (z. B. 3 oder 8 Kanäle).
  • Kompatibilität: Die Eigenschaft wird in allen aktuellen Browsern (Chrome, Firefox, Safari, Edge) unterstützt. Sehr alte Safari-Versionen brauchen webkitAudioContext. In Node.js gibt es sie nur über Zusatzbibliotheken wie node-web-audio-api.