Signatur
Beschreibung
Die Eigenschaft minimumLatency des AudioPlaybackStats-Interfaces gibt die kleinste Wiedergabelatenz an, die seit der Erstellung des zugehörigen AudioContext oder seit dem letzten Aufruf von AudioPlaybackStats.resetLatency() gemessen wurde. Der Wert wird als Gleitkommazahl in Sekunden angegeben. Gemeint ist die Zeit, die ein Audio-Frame vom Übergeben an den Audio-Stack bis zur Ausgabe am Gerät braucht.
Du erreichst das Statistikobjekt über audioContext.playbackStats. Zusammen mit averageLatency und maximumLatency kannst du damit die Schwankung der Latenz einschätzen. Das ist z. B. bei Musik-Apps, Web-DAWs, Spielen oder Echtzeitkommunikation wichtig, wenn Ton und Bild synchron laufen müssen.
Wenn du nur bestimmte Zeitfenster messen willst, etwa nach einem Wechsel des Ausgabegeräts oder nach dem Laden einer neuen Szene, rufe vorher resetLatency() auf. Danach beginnen Minimum, Maximum und Durchschnitt wieder beim aktuellen Latenzwert.
Rückgabewert
double) im aktuellen Messintervall.Beispiele
Minimale Latenz auslesen
const ctx = new AudioContext();
// Nach einer Nutzeraktion starten (Autoplay-Richtlinien)
document.querySelector('#start').addEventListener('click', async () => {
await ctx.resume();
const osc = new OscillatorNode(ctx, { frequency: 440 });
osc.connect(ctx.destination);
osc.start();
// Kurz warten, damit Messwerte vorliegen
setTimeout(() => {
const { minimumLatency } = ctx.playbackStats;
console.log(`Minimale Latenz: ${(minimumLatency * 1000).toFixed(1)} ms`);
}, 2000);
});
Latenzschwankung überwachen (Jitter)
const ctx = new AudioContext();
const logLatency = () => {
const s = ctx.playbackStats;
const spanne = (s.maximumLatency - s.minimumLatency) * 1000;
console.log(
`min ${(s.minimumLatency * 1000).toFixed(1)} ms | ` +
`avg ${(s.averageLatency * 1000).toFixed(1)} ms | ` +
`max ${(s.maximumLatency * 1000).toFixed(1)} ms | ` +
`Schwankung ${spanne.toFixed(1)} ms`
);
};
const timer = setInterval(logLatency, 5000);
Messintervall nach Gerätewechsel zurücksetzen
const ctx = new AudioContext();
const wechsleAusgabe = async (deviceId) => {
if ('setSinkId' in ctx) await ctx.setSinkId(deviceId);
// Alte Werte verwerfen, neue Messung beginnt beim aktuellen Wert
ctx.playbackStats.resetLatency();
setTimeout(() => {
console.log('Neues Minimum:', ctx.playbackStats.minimumLatency, 's');
}, 3000);
};
Feature-Erkennung
const ctx = new AudioContext();
if ('playbackStats' in ctx) {
console.log('Min. Latenz (s):', ctx.playbackStats.minimumLatency);
} else {
// Fallback: nur statische Schätzwerte verfügbar
console.log('Fallback outputLatency (s):', ctx.outputLatency);
}
// Wichtig · Fallstricke
- Experimentell:
AudioPlaybackStatsgibt es bisher nur in Chromium-basierten Browsern. Firefox und Safari unterstützen es nicht. Prüfe vorher mit'playbackStats' in audioContext, ob die Eigenschaft vorhanden ist. - Einheit Sekunden: Der Wert ist in Sekunden angegeben, nicht in Millisekunden. Für die Anzeige musst du ihn mit 1000 multiplizieren.
- Grobe Aktualisierung: Aus Datenschutzgründen (Schutz vor Fingerprinting) werden die Werte nur in groben Abständen aktualisiert, etwa einmal pro Sekunde. Sehr häufiges Abfragen bringt also keine genaueren Werte.
- Solange der Kontext im Zustand
suspendedist, also noch nicht durch eine Nutzeraktion gestartet wurde, können die Werte 0 sein oder noch nichts aussagen. resetLatency()setzt nur die Latenzwerte zurück (Minimum, Maximum, Durchschnitt). Die Werte zu Aussetzern (underrunDuration,underrunEvents) werden dabei nicht zurückgesetzt.- Den Unterschied zu
AudioContext.outputLatencysolltest du kennen:outputLatencyist eine aktuelle Schätzung.minimumLatencyist ein Messwert über ein ganzes Zeitintervall.