Start · Sprachen · JavaScript · Referenz · AudioSession.state

AudioSession.state

Eigenschaft

Die schreibgeschützte Eigenschaft <code>state</code> gibt den aktuellen Zustand der Audio-Session der Seite zurück: <code>"inactive"</code>, <code>"active"</code> oder <code>"interrupted"</code>.

seit JavaScript Experimentell: Audio Session API (W3C-Entwurf), bi Kategorie: webapi

Signatur

get AudioSession.state

Beschreibung

Die Eigenschaft AudioSession.state gehört zur Audio Session API. Über das Objekt navigator.audioSession erfährt eine Webseite, ob ihre Audio-Ausgabe gerade vom Betriebssystem zugelassen wird. Das ist vor allem auf Mobilgeräten wichtig: Dort können eingehende Anrufe, Wecker oder andere Apps die Wiedergabe einer Seite jederzeit unterbrechen.

Mögliche Werte:

  • "inactive" – Die Seite gibt gerade kein Audio aus bzw. nimmt keins auf. Die Session belegt keine Audio-Ressourcen.
  • "active" – Die Seite spielt Audio ab oder nimmt es auf (z. B. über <audio>, <video> oder die Web Audio API).
  • "interrupted" – Das System hat die Session unterbrochen, z. B. wegen eines Telefonanrufs. Die Wiedergabe ist pausiert, bis die Unterbrechung endet.

Die Eigenschaft ist schreibgeschützt: Der Zustand ergibt sich aus der tatsächlichen Mediennutzung und aus Eingriffen des Systems. Auf Änderungen reagiert man mit dem Ereignis statechange (addEventListener("statechange", …) oder onstatechange). So kann man die Oberfläche anpassen, etwa ein Pause-Symbol anzeigen oder nach einer Unterbrechung einen Button zum Fortsetzen einblenden.

Wie sich eine Seite gegenüber anderen Audioquellen verhält (mischen, ausblenden, exklusiv abspielen), legt man mit der beschreibbaren Eigenschaft AudioSession.type fest.

Rückgabewert

Typ
"inactive" | "active" | "interrupted"
Beschreibung
Ein String aus der Aufzählung AudioSessionState, der den aktuellen Zustand der Audio-Session beschreibt.

Beispiele

Aktuellen Zustand mit Funktionsprüfung abfragen

if ('audioSession' in navigator) {
  console.log('Audio-Session-Zustand:', navigator.audioSession.state);
} else {
  console.log('Audio Session API wird nicht unterstützt');
}
Audio-Session-Zustand: inactive

Oberfläche bei Unterbrechung anpassen (statechange)

const player = document.querySelector('audio');
const hinweis = document.querySelector('#hinweis');

const aktualisiereUI = () => {
  const { state } = navigator.audioSession;
  switch (state) {
    case 'active':
      hinweis.textContent = 'Wiedergabe läuft';
      break;
    case 'interrupted':
      hinweis.textContent = 'Wiedergabe durch das System unterbrochen';
      break;
    default:
      hinweis.textContent = 'Kein Audio aktiv';
  }
};

if ('audioSession' in navigator) {
  navigator.audioSession.addEventListener('statechange', aktualisiereUI);
  aktualisiereUI();
}

Nach Unterbrechung Fortsetzen anbieten (onstatechange)

const player = document.querySelector('audio');
const weiterBtn = document.querySelector('#weiter');
let warUnterbrochen = false;

navigator.audioSession.type = 'playback';

navigator.audioSession.onstatechange = () => {
  const { state } = navigator.audioSession;
  if (state === 'interrupted') {
    warUnterbrochen = true;
    weiterBtn.hidden = false;
  } else if (state === 'inactive' && warUnterbrochen) {
    // Unterbrechung vorbei – Nutzer entscheidet über das Fortsetzen
    weiterBtn.hidden = false;
  } else if (state === 'active') {
    warUnterbrochen = false;
    weiterBtn.hidden = true;
  }
};

weiterBtn.addEventListener('click', async () => {
  await player.play(); // Nutzergeste erlaubt die erneute Wiedergabe
});

// Wichtig · Fallstricke

  • Kompatibilität: Die Audio Session API ist ein experimenteller W3C-Entwurf. navigator.audioSession gibt es bisher nur in WebKit/Safari (ab 16.4, zunächst mit type). Die Unterstützung für state und statechange kann je nach Version fehlen. Prüfe deshalb immer mit 'audioSession' in navigator und 'state' in navigator.audioSession. Chromium und Firefox unterstützen die API derzeit nicht.
  • Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wie navigator.audioSession.state = 'active' wird still ignoriert bzw. löst im Strict Mode einen TypeError aus.
  • Nach dem Ende einer Unterbrechung geht der Zustand in der Regel auf "inactive" zurück. Die Wiedergabe startet nicht automatisch neu. Wegen der Autoplay-Regeln braucht ein erneutes play() oft eine Nutzergeste.
  • Der Zustand gilt für die gesamte Seite bzw. das Dokument, nicht für einzelne Medienelemente.