Signatur
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
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);
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`);
}
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);
// 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/removetrackhören. - Reihenfolge nicht garantiert: Verlass dich nicht darauf, dass
[0]immer dasselbe Gerät ist. Prüfe im Zweifeltrack.idodertrack.getSettings().deviceId. enabledoderstop(): Mitenabled = falsewird nur stummgeschaltet, Mikrofon-Anzeige und Berechtigung bleiben aktiv. Erststop()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 mitremoveTrack()entfernt wurden. getUserMedia/getDisplayMediafunktionieren nur in einem sicheren Kontext (HTTPS oder localhost). BeigetDisplayMediaunterstützen nicht alle Browser und Betriebssysteme eine Audiofreigabe, das Array kann also leer sein.- Die Methode selbst wird von allen modernen Browsern unterstützt.