Signatur
Beschreibung
Die schreibgeschützte Eigenschaft type des Interfaces AudioSinkInfo gibt an, welche Art von Audioausgabegerät (auch „Sink“ genannt) ein AudioContext verwendet. Ein AudioSinkInfo-Objekt bekommst du über AudioContext.sinkId, und zwar nur dann, wenn der Kontext mit der Option { type: "none" } erstellt oder über setSinkId({ type: "none" }) umgestellt wurde.
Derzeit sieht die Spezifikation nur den Wert "none" vor. Er bedeutet, dass der Audiograph ganz normal weiterläuft, aber nichts an ein physisches Gerät ausgegeben wird. Das ist praktisch, wenn du Audio nur analysieren willst, etwa mit einem AnalyserNode oder in einem AudioWorklet, wenn du im Hintergrund verarbeitest oder wenn du die Ausgabe gezielt stummschalten willst, ohne den Graphen umzubauen.
Wird dagegen ein echtes Gerät genutzt, gibt sinkId einen String zurück: einen leeren String für das Standardgerät oder eine deviceId aus MediaDevices.enumerateDevices(). Deshalb solltest du vor dem Zugriff auf type immer prüfen, ob sinkId überhaupt ein Objekt ist.
Rückgabewert
"none" definiert: Audio wird verarbeitet, aber nicht hörbar ausgegeben.Beispiele
AudioContext ohne Ausgabegerät erstellen und Typ auslesen
const ctx = new AudioContext({ sinkId: { type: 'none' } });
// sinkId ist hier ein AudioSinkInfo-Objekt
console.log(typeof ctx.sinkId);
console.log(ctx.sinkId.type);
Ausgabe zur Laufzeit stummschalten und prüfen
const ctx = new AudioContext();
const osc = new OscillatorNode(ctx, { frequency: 440 });
osc.connect(ctx.destination);
osc.start();
const muteOutput = async () => {
if (!('setSinkId' in AudioContext.prototype)) {
console.warn('setSinkId wird nicht unterstützt');
return;
}
await ctx.setSinkId({ type: 'none' });
console.log('Aktueller Sink-Typ:', ctx.sinkId.type);
};
document.querySelector('#mute').addEventListener('click', muteOutput);
Sicherer Helfer zur Beschreibung des aktuellen Sinks
const describeSink = (ctx) => {
const { sinkId } = ctx;
if (typeof sinkId === 'object' && sinkId !== null) {
return `Kein Ausgabegerät (type: ${sinkId.type})`;
}
return sinkId === '' ? 'Standardgerät' : `Gerät mit ID ${sinkId}`;
};
const ctx = new AudioContext();
console.log(describeSink(ctx));
// Wichtig · Fallstricke
- Experimentell: Bislang gibt es die Eigenschaft nur in Chromium-Browsern (Chrome/Edge ab 110). Firefox und Safari kennen weder
AudioSinkInfonochAudioContext.setSinkId(). Nutze eine Feature-Erkennung wie'setSinkId' in AudioContext.prototype. - Typ prüfen:
ctx.sinkIdist nur dann einAudioSinkInfo, wenn der Typ"none"gesetzt wurde. Sonst ist es ein String, undctx.sinkId.typeergibtundefined. - Nur ein Wert: Aktuell ist nur
"none"definiert. Frage im Code trotzdem ausdrücklich auf diesen Wert ab (=== "none"), damit er auch mit späteren Erweiterungen der Spezifikation funktioniert. - Für
setSinkId()mit einer echten Geräte-ID braucht es je nach Browser eine Berechtigung (z. B. übergetUserMediaoder die Permissions Policyspeaker-selection) und einen sicheren Kontext (HTTPS). Für{ type: "none" }ist keine Berechtigung nötig. - Auch ohne Ausgabegerät gilt die Autoplay-Richtlinie: Der Kontext kann im Zustand
"suspended"starten und muss dann nach einer Nutzeraktion mitresume()gestartet werden.