Start · Sprachen · JavaScript · Referenz · SpeechRecognitionResult.length

SpeechRecognitionResult.length

Eigenschaft

Schreibgeschützte Eigenschaft, die angibt, wie viele <code>SpeechRecognitionAlternative</code>-Objekte (Erkennungsvarianten) ein <code>SpeechRecognitionResult</code> enthält.

seit JavaScript Web Speech API – Chrome/Edge (mit Präfix webkit), Kategorie: webapi

Signatur

SpeechRecognitionResult.length

Beschreibung

Ein SpeechRecognitionResult steht für ein einzelnes Erkennungsergebnis der Web Speech API und verhält sich wie ein Array aus SpeechRecognitionAlternative-Objekten. Jede Alternative ist eine mögliche Deutung des Gesprochenen mit einem transcript und einem confidence-Wert. Die Eigenschaft length gibt an, wie viele dieser Alternativen vorhanden sind.

Wie viele Alternativen höchstens geliefert werden, legst du über SpeechRecognition.maxAlternatives fest (Standard: 1). Die Erkennungs-Engine kann aber auch weniger Alternativen liefern, als angefordert wurden. Deshalb solltest du beim Durchlaufen der Alternativen immer length abfragen, statt von maxAlternatives auszugehen.

In der Praxis brauchst du length vor allem, wenn du mehrere Deutungen anbieten willst, etwa für eine „Meinten Sie …?“-Auswahl oder für einen Abgleich mit einer festen Liste von Sprachbefehlen. Die Alternativen sind in der Regel nach Konfidenz absteigend sortiert, Index 0 ist also die wahrscheinlichste.

Rückgabewert

Typ
number
Beschreibung
Eine nicht-negative ganze Zahl: die Anzahl der SpeechRecognitionAlternative-Objekte in diesem Ergebnis. Der Wert ist schreibgeschützt.

Beispiele

Anzahl der Alternativen ausgeben

const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
recognition.lang = 'de-DE';
recognition.maxAlternatives = 3;

recognition.addEventListener('result', (event) => {
  const result = event.results[0];
  console.log(`Alternativen: ${result.length}`);
});

recognition.start();
Alternativen: 3

Alle Alternativen mit Konfidenz auflisten

const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
recognition.lang = 'de-DE';
recognition.maxAlternatives = 5;

recognition.onresult = (event) => {
  const result = event.results[event.results.length - 1];
  for (let i = 0; i < result.length; i++) {
    const { transcript, confidence } = result[i];
    console.log(`${i + 1}. "${transcript}" (${(confidence * 100).toFixed(1)} %)`);
  }
};

recognition.start();
1. "Licht an" (92.4 %) 2. "Licht aus" (4.1 %) 3. "Nicht an" (1.8 %)

Sprachbefehl über alle Alternativen abgleichen

const commands = ['licht an', 'licht aus', 'musik stopp'];
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
recognition.lang = 'de-DE';
recognition.maxAlternatives = 5;

recognition.onresult = (event) => {
  const result = event.results[0];
  // Array.from nutzt length intern
  const match = Array.from(result)
    .map((alt) => alt.transcript.trim().toLowerCase())
    .find((text) => commands.includes(text));

  console.log(match ? `Befehl erkannt: ${match}` : `Kein Befehl unter ${result.length} Alternativen`);
};

recognition.start();
Befehl erkannt: licht aus

// Wichtig · Fallstricke

  • Weniger als angefordert: length kann kleiner als maxAlternatives sein. Viele Engines (z. B. Chrome bei Zwischenergebnissen mit interimResults = true) liefern nur eine einzige Alternative.
  • Nicht verwechseln: event.results.length (SpeechRecognitionResultList) zählt die Ergebnisse, event.results[i].length dagegen die Alternativen innerhalb eines Ergebnisses.
  • Kein echtes Array: SpeechRecognitionResult hat keine Methoden wie map oder filter. Nutze eine for-Schleife mit length oder Array.from().
  • Browser-Unterstützung: In Chromium-Browsern nur mit dem Präfix webkitSpeechRecognition verfügbar, Firefox unterstützt die Spracherkennung nicht. In Chrome wird der Ton an einen Server übertragen, daher braucht es eine Netzwerkverbindung. Außerdem ist ein sicherer Kontext (HTTPS) mit Mikrofonfreigabe nötig.