Signatur
Beschreibung
Die Methode resetLatency() des Interfaces AudioPlaybackStats beginnt die Latenzmessung neu. Danach beziehen sich averageLatency, minimumLatency und maximumLatency nur noch auf den Zeitraum ab dem Wert von BaseAudioContext.currentTime zum Zeitpunkt des Aufrufs. Das Objekt erhältst du über AudioContext.playbackStats.
Ohne Zurücksetzen fassen die Latenzwerte die gesamte Laufzeit des Kontexts zusammen. Ausreißer vom Anfang, etwa beim Hochfahren des Audiogeräts, verzerren dann dauerhaft Minimum, Maximum und Durchschnitt. Mit resetLatency() kannst du gezielt einzelne Phasen messen: nach einem Wechsel des Ausgabegeräts, nach dem Laden eines aufwendigen Audiographen oder in festen Zeitfenstern für ein Monitoring-Dashboard.
Die Methode wirkt nur auf die Latenzwerte. underrunDuration, underrunEvents und totalDuration laufen weiter und werden nicht zurückgesetzt.
Rückgabewert
undefined).Beispiele
Latenzmessung nach der Anlaufphase neu starten
const ctx = new AudioContext();
const osc = new OscillatorNode(ctx, { frequency: 440 });
osc.connect(ctx.destination);
osc.start();
// Erst 2 Sekunden laufen lassen, damit Werte aus dem Hochfahren wegfallen
setTimeout(() => {
if (!('playbackStats' in ctx)) {
console.log('AudioPlaybackStats wird nicht unterstützt');
return;
}
ctx.playbackStats.resetLatency();
console.log('Messung neu gestartet bei', ctx.currentTime.toFixed(2), 's');
}, 2000);
Latenz in festen 10-Sekunden-Fenstern protokollieren
const ctx = new AudioContext();
const logWindow = () => {
const stats = ctx.playbackStats;
if (!stats) return;
const ms = (s) => (s * 1000).toFixed(1);
console.log(
`Ø ${ms(stats.averageLatency)} ms | min ${ms(stats.minimumLatency)} ms | max ${ms(stats.maximumLatency)} ms`
);
// Nächstes Fenster beginnt jetzt
stats.resetLatency();
};
const timer = setInterval(logWindow, 10_000);
// Später beenden: clearInterval(timer);
Nach Wechsel des Ausgabegeräts neu messen
const ctx = new AudioContext();
const switchOutput = async (deviceId) => {
await ctx.setSinkId(deviceId);
// Werte des alten Geräts nicht mit denen des neuen mischen
ctx.playbackStats?.resetLatency();
console.log('Neues Gerät aktiv, Latenzmessung zurückgesetzt');
};
// Beispielaufruf mit dem Standardgerät
switchOutput('');
// Wichtig · Fallstricke
- Experimentell:
AudioPlaybackStatsundAudioContext.playbackStatssind eine neue Ergänzung der Web Audio API und bisher nur in einzelnen Chromium-Browsern verfügbar. Prüfe vor der Nutzung, ob die Funktion vorhanden ist, z. B. mit'playbackStats' in ctxoderctx.playbackStats?.resetLatency(). - Nur die Latenzwerte werden zurückgesetzt. Underrun-Zähler und
totalDurationlaufen weiter. Brauchst du Underruns pro Zeitfenster, merke dir die vorherigen Werte selbst und bilde die Differenz. - Der Zeitpunkt richtet sich nach
currentTime. Ist der Kontext angehalten (state === 'suspended'), bleibt dieser Wert stehen, und es werden keine neuen Latenzwerte erfasst, bis der Kontext weiterläuft. - Direkt nach dem Aufruf gibt es für das neue Intervall eventuell noch keine aussagekräftigen Werte. Browser aktualisieren die Statistiken oft nur in groben Abständen, zum Teil absichtlich, damit sie sich nicht zum Fingerprinting eignen. Lies die Werte deshalb erst nach einer gewissen Wartezeit aus.