Start · Sprachen · JavaScript · Referenz · AudioPlaybackStats.resetLatency()

AudioPlaybackStats.resetLatency()

Methode

Setzt den Startpunkt des Messintervalls für die Latenzstatistiken (<code>averageLatency</code>, <code>minimumLatency</code>, <code>maximumLatency</code>) auf die aktuelle <code>currentTime</code> des Audiokontexts.

seit JavaScript Experimentell: bisher nur in einzelnen Chromium-Ve Kategorie: webapi

Signatur

AudioPlaybackStats.prototype.resetLatency()

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

Typ
undefined
Beschreibung
Kein 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);
Messung neu gestartet bei 2.00 s

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);
Ø 21.3 ms | min 20.0 ms | max 26.7 ms

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('');
Neues Gerät aktiv, Latenzmessung zurückgesetzt

// Wichtig · Fallstricke

  • Experimentell: AudioPlaybackStats und AudioContext.playbackStats sind 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 ctx oder ctx.playbackStats?.resetLatency().
  • Nur die Latenzwerte werden zurückgesetzt. Underrun-Zähler und totalDuration laufen 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.