Start · Sprachen · JavaScript · Referenz · MediaStream.getAudioTracks()

MediaStream.getAudioTracks()

Methode

Gibt ein Array aller <code>MediaStreamTrack</code>-Objekte des Streams zurück, deren <code>kind</code> den Wert <code>"audio"</code> hat.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

MediaStream.prototype.getAudioTracks()

Beschreibung

getAudioTracks() liefert eine Momentaufnahme aller Audiospuren eines MediaStream als gewöhnliches Array. Jedes Element ist ein MediaStreamTrack mit kind === "audio". Enthält der Stream keine Audiospuren, bekommst du ein leeres Array zurück, niemals null.

Typische Anwendungsfälle sind das Stummschalten des Mikrofons in Videokonferenzen (über track.enabled), das Auslesen von Geräteinformationen über track.label oder track.getSettings(), das gezielte Beenden der Mikrofonaufnahme mit track.stop() sowie das Weiterreichen einzelner Spuren an RTCPeerConnection.addTrack() oder an einen neuen MediaStream.

Das zurückgegebene Array ist nicht live. Kommen später Spuren hinzu (etwa über addTrack() oder bei einem entfernten WebRTC-Stream) oder werden welche entfernt, ändert sich ein bereits erhaltenes Array nicht. Rufe die Methode dann erneut auf oder reagiere auf die Events addtrack und removetrack. Die Reihenfolge der Spuren ist laut Spezifikation nicht festgelegt und kann sich zwischen Aufrufen unterscheiden.

Rückgabewert

Typ
MediaStreamTrack[]
Beschreibung
Ein neues Array mit allen Audiospuren des Streams. Es ist leer, wenn der Stream keine Audiospuren enthält.

Beispiele

Mikrofon anfordern und Spurinfos ausgeben

const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const [micTrack] = stream.getAudioTracks();

console.log(micTrack.kind);   // "audio"
console.log(micTrack.label);  // z. B. "Internes Mikrofon"
console.log(micTrack.getSettings().sampleRate);
audio Internes Mikrofon 48000

Stummschalten (Mute-Button) in einer Videokonferenz

const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true });
const muteButton = document.querySelector('#mute');

muteButton.addEventListener('click', () => {
  const tracks = stream.getAudioTracks();
  const isMuted = !tracks[0]?.enabled;
  // enabled = false sendet Stille, die Spur bleibt aber aktiv
  tracks.forEach((track) => { track.enabled = isMuted; });
  muteButton.textContent = isMuted ? 'Stumm schalten' : 'Ton an';
});

Nur Audio aus einer Bildschirmfreigabe übernehmen

const display = await navigator.mediaDevices.getDisplayMedia({ video: true, audio: true });
const audioTracks = display.getAudioTracks();

if (audioTracks.length === 0) {
  console.warn('Keine Audiospur freigegeben.');
} else {
  const audioOnly = new MediaStream(audioTracks);
  const recorder = new MediaRecorder(audioOnly);
  recorder.start();
  console.log(`Aufnahme von ${audioTracks.length} Audiospur(en) gestartet`);
}
Aufnahme von 1 Audiospur(en) gestartet

Mikrofon vollständig freigeben

const stopMicrophone = (stream) => {
  stream.getAudioTracks().forEach((track) => track.stop());
};

const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
// ... später:
stopMicrophone(stream);
console.log(stream.getAudioTracks()[0].readyState);
ended

// Wichtig · Fallstricke

  • Momentaufnahme: Das Array aktualisiert sich nicht von selbst. Bei entfernten WebRTC-Streams kommen Spuren oft erst später an, deshalb besser auf addtrack/removetrack hören.
  • Reihenfolge nicht garantiert: Verlass dich nicht darauf, dass [0] immer dasselbe Gerät ist. Prüfe im Zweifel track.id oder track.getSettings().deviceId.
  • enabled oder stop(): Mit enabled = false wird nur stummgeschaltet, Mikrofon-Anzeige und Berechtigung bleiben aktiv. Erst stop() gibt das Gerät frei, und die Spur lässt sich danach nicht wieder starten.
  • Durch stop() beendete Spuren (readyState === "ended") sind weiterhin im Array enthalten, solange sie nicht mit removeTrack() entfernt wurden.
  • getUserMedia/getDisplayMedia funktionieren nur in einem sicheren Kontext (HTTPS oder localhost). Bei getDisplayMedia unterstützen nicht alle Browser und Betriebssysteme eine Audiofreigabe, das Array kann also leer sein.
  • Die Methode selbst wird von allen modernen Browsern unterstützt.