Signatur
Beschreibung
Die schreibgeschützte Eigenschaft maximumLatency der Schnittstelle AudioPlaybackStats gibt die höchste Wiedergabelatenz in Sekunden an, die im Messzeitraum aufgetreten ist. Die Latenz ist die Zeit zwischen dem Moment, in dem der Audio-Graph ein Audiosignal erzeugt, und dem Moment, in dem es am Ausgabegerät hörbar wird. An das AudioPlaybackStats-Objekt kommst du über AudioContext.playbackStats.
Der Messzeitraum beginnt, sobald der AudioContext läuft. Er startet neu, wenn du AudioPlaybackStats.resetLatency() aufrufst. Danach beziehen sich minimumLatency, averageLatency und maximumLatency nur noch auf das neue Zeitfenster. So kannst du die Latenz für einzelne Abschnitte messen, zum Beispiel pro Spielrunde, pro Musikstück oder nach einem Gerätewechsel.
Brauchbar ist der Wert vor allem für Überwachung und Diagnose: in Anwendungen für Echtzeit-Audio wie Web-DAWs, Spielen, Videokonferenzen oder Musik-Lernprogrammen. Ein hoher Maximalwert bei niedrigem Durchschnitt zeigt kurze Latenzspitzen. Die entstehen oft durch Bluetooth-Kopfhörer, Last im System oder Wechsel des Ausgabegeräts. Solche Werte kannst du an eine Telemetrie melden oder damit die Synchronisation zwischen Audio und Bild nachregeln.
Rückgabewert
0.042 für 42 ms) seit dem Start des Kontexts oder seit dem letzten resetLatency(). Ist noch nichts gemessen, ist der Wert typischerweise 0.Beispiele
Maximale Latenz auslesen (mit Feature-Erkennung)
const ctx = new AudioContext();
// Kurzen Ton abspielen, damit der Kontext läuft
const osc = new OscillatorNode(ctx, { frequency: 440 });
osc.connect(ctx.destination);
osc.start();
osc.stop(ctx.currentTime + 2);
setTimeout(() => {
if (!('playbackStats' in ctx)) {
console.log('AudioPlaybackStats wird nicht unterstützt');
return;
}
const maxMs = ctx.playbackStats.maximumLatency * 1000;
console.log(`Maximale Latenz: ${maxMs.toFixed(1)} ms`);
}, 2000);
Latenzspitzen im Verhältnis zum Durchschnitt überwachen
const ctx = new AudioContext();
const pruefeLatenz = () => {
const stats = ctx.playbackStats;
if (!stats) return;
const { averageLatency, maximumLatency } = stats;
// Spitze deutlich über dem Durchschnitt? Dann warnen
if (averageLatency > 0 && maximumLatency > averageLatency * 2) {
console.warn(
`Latenzspitze: max ${(maximumLatency * 1000).toFixed(0)} ms, ` +
`Ø ${(averageLatency * 1000).toFixed(0)} ms`
);
}
};
setInterval(pruefeLatenz, 5000);
Messfenster pro Abschnitt mit resetLatency() neu starten
const ctx = new AudioContext();
const messwerte = [];
const abschnittBeenden = (name) => {
const stats = ctx.playbackStats;
if (!stats) return;
messwerte.push({ name, maxMs: Math.round(stats.maximumLatency * 1000) });
// Maximum für den nächsten Abschnitt zurücksetzen
stats.resetLatency();
};
// z. B. am Ende jeder Spielrunde aufrufen
abschnittBeenden('Runde 1');
console.table(messwerte);
// Wichtig · Fallstricke
- Einheit: Der Wert ist in Sekunden angegeben, nicht in Millisekunden. Für die Anzeige mit 1000 multiplizieren.
- Kompatibilität: Die API ist experimentell und bisher nur in Chromium-basierten Browsern verfügbar. Prüfe immer vorher, ob sie vorhanden ist, etwa mit
'playbackStats' in audioContext. Für den Einsatz in Produktion gibt es noch keine Unterstützung in allen Browsern. - Keine Echtzeitwerte: Zum Schutz vor Fingerprinting aktualisiert der Browser die Statistiken nur in größeren Abständen und nicht bei jedem Audio-Block. Für eine exakte Synchronisation einzelner Frames eignet sich der Wert deshalb nicht. Dafür gibt es
AudioContext.outputLatencyundgetOutputTimestamp(). - Nur ein
AudioContextmit Wiedergabe hat aussagekräftige Werte. EinOfflineAudioContexthat keineplaybackStats. Ein Kontext im Zustand"suspended"(zum Beispiel wegen der Autoplay-Richtlinie) sammelt keine Messwerte. resetLatency()setzt nur die Latenzwerte zurück (minimale, mittlere und maximale Latenz). Die Werte zu Aussetzern (Underruns) werden nicht zurückgesetzt.