Signatur
Beschreibung
AudioDestinationNode ist der letzte Knoten jedes Audiografen der Web Audio API. Sie erzeugen ihn nicht selbst, sondern greifen über context.destination auf ihn zu. Jeder BaseAudioContext hat genau einen solchen Knoten. Alle Signale, die hörbar sein oder in einem OfflineAudioContext gerendert werden sollen, müssen (direkt oder über Zwischenknoten) mit ihm verbunden sein.
Der Knoten hat einen Eingang und keinen Ausgang (numberOfInputs = 1, numberOfOutputs = 0). Ihn mit connect() weiterzuverbinden, ist also nicht möglich. Bei einem AudioContext entspricht er dem Standard-Ausgabegerät des Systems. Bei einem OfflineAudioContext landet das Signal im AudioBuffer, den startRendering() liefert.
Die einzige eigene Eigenschaft ist maxChannelCount. Sie gibt an, wie viele Kanäle die Hardware höchstens unterstützt. Über die geerbte Eigenschaft channelCount können Sie z. B. auf Mehrkanal-Ausgabe (5.1) umschalten, solange der Wert maxChannelCount nicht übersteigt.
maxChannelCount(number, nur lesbar): Höchstzahl der Kanäle, die das Ausgabegerät unterstützt.- Geerbt von
AudioNode:context,numberOfInputs,numberOfOutputs,channelCount,channelCountMode,channelInterpretation.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $maxChannelCount | number | Nur lesbare Eigenschaft: Höchstzahl der Kanäle des physischen Ausgabegeräts. Bei OfflineAudioContext entspricht sie der Kanalzahl, die beim Erzeugen des Kontexts angegeben wurde. |
|
| $channelCount | number | 2 | Geerbte Eigenschaft: Anzahl der Ausgabekanäle. Sie darf zwischen 1 und maxChannelCount liegen, sonst wird ein IndexSizeError ausgelöst. |
Rückgabewert
BaseAudioContext.destination abgerufen. Es gibt keinen öffentlichen Konstruktor.Beispiele
Oszillator an die Lautsprecher anschließen
const button = document.querySelector('#play');
button.addEventListener('click', async () => {
const ctx = new AudioContext();
await ctx.resume(); // Autoplay-Richtlinie: erst nach Nutzerinteraktion
const osc = new OscillatorNode(ctx, { frequency: 440, type: 'sine' });
const gain = new GainNode(ctx, { gain: 0.2 });
// Graph: Oszillator -> Lautstärke -> Lautsprecher
osc.connect(gain).connect(ctx.destination);
osc.start();
osc.stop(ctx.currentTime + 1);
console.log(ctx.destination instanceof AudioDestinationNode);
});
Kanal-Fähigkeiten des Ausgabegeräts abfragen
const ctx = new AudioContext();
const dest = ctx.destination;
console.log('Eingänge:', dest.numberOfInputs);
console.log('Ausgänge:', dest.numberOfOutputs);
console.log('Max. Kanäle:', dest.maxChannelCount);
// Auf 5.1-Surround umschalten, falls die Hardware das unterstützt
if (dest.maxChannelCount >= 6) {
dest.channelCount = 6;
dest.channelInterpretation = 'speakers';
}
console.log('Aktive Kanäle:', dest.channelCount);
Offline-Rendering in einen AudioBuffer
const render = async () => {
// 2 Kanäle, 1 Sekunde bei 44,1 kHz
const offline = new OfflineAudioContext(2, 44100, 44100);
const osc = new OscillatorNode(offline, { frequency: 220 });
osc.connect(offline.destination);
osc.start();
console.log('Max. Kanäle:', offline.destination.maxChannelCount);
const buffer = await offline.startRendering();
console.log('Gerenderte Samples:', buffer.length);
};
render();
// Wichtig · Fallstricke
- Kein Konstruktor:
new AudioDestinationNode()löst einenTypeErroraus. Verwenden Sie immercontext.destination. - Keine Ausgänge:
ctx.destination.connect(...)löst einenIndexSizeErroraus. Wenn Sie aufnehmen oder analysieren wollen, zweigen Sie das Signal vorher ab, z. B. mitAnalyserNodeoderMediaStreamAudioDestinationNode. - Autoplay: Browser starten einen
AudioContextoft im Zustand"suspended". Bisresume()nach einer Nutzerinteraktion aufgerufen wird, ist am Ziel nichts zu hören. maxChannelCountgibt häufig nur 2 zurück, selbst bei Mehrkanal-Hardware. Das hängt von Browser und Betriebssystem ab. EinchannelCountgrößer alsmaxChannelCountlöst einenIndexSizeErroraus.- Das Ausgabegerät wählen Sie nicht über diesen Knoten aus. In Chromium-Browsern geht das mit
AudioContext.setSinkId(), die Unterstützung ist aber noch nicht überall vorhanden. - Kompatibilität: Der Knoten wird in allen modernen Browsern unterstützt. Sehr alte Safari-Versionen brauchen
webkitAudioContext.