Start · Sprachen · JavaScript · Referenz · AudioPlaybackStats.minimumLatency

AudioPlaybackStats.minimumLatency

Eigenschaft

Schreibgeschützte Zahl mit der kleinsten gemessenen Ausgabelatenz (in Sekunden) seit Start des <code>AudioContext</code> bzw. seit dem letzten <code>resetLatency()</code>.

seit JavaScript Experimentell: Chromium-basierte Browser (ca. Chro Kategorie: webapi

Signatur

get AudioPlaybackStats.minimumLatency

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

Typ
number
Beschreibung
Die kleinste gemessene Wiedergabelatenz in Sekunden (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);
});
Minimale Latenz: 21.3 ms

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);
min 20.8 ms | avg 23.4 ms | max 31.0 ms | Schwankung 10.2 ms

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);
};
Neues Minimum: 0.0105 s

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);
}
Min. Latenz (s): 0.0213

// Wichtig · Fallstricke

  • Experimentell: AudioPlaybackStats gibt 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 suspended ist, 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.outputLatency solltest du kennen: outputLatency ist eine aktuelle Schätzung. minimumLatency ist ein Messwert über ein ganzes Zeitintervall.