Start · Sprachen · JavaScript · Referenz · AudioSinkInfo.type

AudioSinkInfo.type

Eigenschaft

Schreibgeschützte Eigenschaft, die den Typ des Audioausgabegeräts eines <code>AudioSinkInfo</code>-Objekts als String zurückgibt. Aktuell ist nur <code>"none"</code> möglich.

seit JavaScript Experimentell: Chrome/Edge 110+, nicht in Firefox Kategorie: webapi

Signatur

AudioSinkInfo.type

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

Typ
string
Beschreibung
Der Typ des Audioausgabegeräts. Aktuell ist nur "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);
object none

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);
Aktueller Sink-Typ: none

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));
Standardgerät

// Wichtig · Fallstricke

  • Experimentell: Bislang gibt es die Eigenschaft nur in Chromium-Browsern (Chrome/Edge ab 110). Firefox und Safari kennen weder AudioSinkInfo noch AudioContext.setSinkId(). Nutze eine Feature-Erkennung wie 'setSinkId' in AudioContext.prototype.
  • Typ prüfen: ctx.sinkId ist nur dann ein AudioSinkInfo, wenn der Typ "none" gesetzt wurde. Sonst ist es ein String, und ctx.sinkId.type ergibt undefined.
  • 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. über getUserMedia oder die Permissions Policy speaker-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 mit resume() gestartet werden.