Start · Sprachen · JavaScript · Referenz · AudioTrackList.length

AudioTrackList.length

Eigenschaft

Gibt die Anzahl der <code>AudioTrack</code>-Objekte in einer <code>AudioTrackList</code> zurück, also wie viele Audiospuren ein Medienelement hat.

seit JavaScript Eingeschränkt: Safari; in Chrome/Edge und Firefox Kategorie: webapi

Signatur

get AudioTrackList.length

Beschreibung

Die schreibgeschützte Eigenschaft length einer AudioTrackList gibt an, wie viele Audiospuren (AudioTrack) das zugehörige <audio>- oder <video>-Element enthält. Die Liste bekommt man über HTMLMediaElement.audioTracks.

Man braucht length vor allem, um mit einer klassischen for-Schleife über die Spuren zu gehen (die Liste ist kein echtes Array), um zu prüfen, ob es überhaupt mehrere Sprachfassungen, Audiodeskriptionen oder Kommentarspuren gibt, und um danach etwa ein Menü zur Sprachauswahl ein- oder auszublenden.

Der Wert kann sich ändern: Solange die Metadaten des Mediums noch nicht geladen sind, ist er meist 0. Kommen Spuren dazu oder fallen welche weg, löst die Liste die Ereignisse addtrack bzw. removetrack aus. Wer auf die aktuelle Anzahl angewiesen ist, sollte sie deshalb erst nach loadedmetadata oder in diesen Ereignissen abfragen.

Rückgabewert

Typ
number
Beschreibung
Nicht negative ganze Zahl mit der Anzahl der Audiospuren in der Liste. 0, wenn es keine Spuren gibt oder die Metadaten noch nicht geladen sind.

Beispiele

Anzahl der Audiospuren nach dem Laden der Metadaten

const video = document.querySelector('video');

video.addEventListener('loadedmetadata', () => {
  // Unterstützung prüfen, weil audioTracks nicht überall verfügbar ist
  if (!video.audioTracks) {
    console.log('AudioTrackList wird nicht unterstützt');
    return;
  }
  console.log(`Audiospuren: ${video.audioTracks.length}`);
});
Audiospuren: 2

Sprachauswahl nur bei mehreren Spuren anzeigen

const video = document.querySelector('#film');
const select = document.querySelector('#sprache');

video.addEventListener('loadedmetadata', () => {
  const tracks = video.audioTracks;
  if (!tracks || tracks.length < 2) {
    select.hidden = true;
    return;
  }

  for (let i = 0; i < tracks.length; i++) {
    const track = tracks[i];
    const option = new Option(track.label || track.language || `Spur ${i + 1}`, track.id);
    option.selected = track.enabled;
    select.append(option);
  }
  select.hidden = false;
});

select.addEventListener('change', () => {
  const tracks = video.audioTracks;
  for (let i = 0; i < tracks.length; i++) {
    tracks[i].enabled = tracks[i].id === select.value;
  }
});

Änderungen der Spuranzahl verfolgen

const audio = document.querySelector('audio');
const tracks = audio.audioTracks;

const logCount = (event) => {
  console.log(`${event.type}: jetzt ${tracks.length} Spur(en)`);
};

tracks.addEventListener('addtrack', logCount);
tracks.addEventListener('removetrack', logCount);
addtrack: jetzt 1 Spur(en) addtrack: jetzt 2 Spur(en)

// Wichtig · Fallstricke

  • Browser-Unterstützung: audioTracks und damit AudioTrackList.length gibt es von Haus aus nur in Safari. In Chrome/Edge muss man „Experimental Web Platform features“ einschalten, in Firefox die Einstellung media.track.enabled. Prüfe deshalb immer zuerst mit if (media.audioTracks), ob die Liste existiert.
  • Schreibgeschützt: Eine Zuweisung wie tracks.length = 0 bewirkt nichts (im Strict Mode gibt es einen TypeError). Spuren lassen sich auf diesem Weg weder entfernen noch hinzufügen.
  • Zeitpunkt: Vor loadedmetadata ist der Wert meist 0, auch wenn die Datei mehrere Spuren hat.
  • Kein Array: AudioTrackList hat kein map und kein forEach. Nimm eine Indexschleife mit length oder vorher Array.from(tracks).
  • Viele Container (z. B. einfache MP3-Dateien) haben genau eine Spur. Mehrere Spuren kommen meist bei MP4/HLS-Streams mit mehreren Sprachfassungen vor.