Signatur
Beschreibung
Die statische Methode SpeechRecognition.available() der Web Speech API gibt an, ob die Spracherkennung für eine oder mehrere Sprachen genutzt werden kann. Mit der Option processLocally lässt sich gezielt abfragen, ob die Erkennung auf dem Gerät stattfinden kann, also ohne dass Audiodaten an einen Clouddienst gehen.
Das Ergebnis ist ein Promise, das mit einem von vier Statuswerten erfüllt wird: "available" (sofort nutzbar), "downloadable" (kann mit SpeechRecognition.install() heruntergeladen werden), "downloading" (Download läuft) oder "unavailable" (wird nicht unterstützt).
Rufe die Methode vor dem Start einer Erkennungssitzung auf. So kannst du deine Oberfläche anpassen, etwa einen Mikrofon-Knopf ausblenden, einen Download des Sprachpakets anbieten oder auf Cloud-Erkennung umschalten. Das ist besonders nützlich für datenschutzkritische Anwendungen, die nur lokal arbeiten dürfen, und für Szenarien ohne Netzwerk.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $options Pflicht | Object | Konfigurationsobjekt mit den folgenden Eigenschaften. | |
| $options.langs Pflicht | Array<string> | Liste von BCP-47-Sprach-Tags, z. B. ["de-DE", "en-US"]. Der Status "available" kommt nur zurück, wenn alle Sprachen verfügbar sind. |
|
| $options.processLocally | boolean | false | Bei true wird nur die Verfügbarkeit der lokalen Erkennung auf dem Gerät geprüft. Bei false zählt auch die Erkennung über einen Server. |
Rückgabewert
Promise, das mit einem Statuswert zur Verfügbarkeit der angefragten Sprachen erfüllt wird.Beispiele
Verfügbarkeit einer Sprache prüfen
const Recognition = window.SpeechRecognition ?? window.webkitSpeechRecognition;
if (Recognition && typeof Recognition.available === 'function') {
const status = await Recognition.available({ langs: ['de-DE'] });
console.log(`Deutsch: ${status}`);
} else {
console.log('available() wird nicht unterstützt');
}
Lokale Erkennung prüfen und bei Bedarf installieren
const Recognition = window.SpeechRecognition ?? window.webkitSpeechRecognition;
const options = { langs: ['de-DE'], processLocally: true };
const ensureOnDevice = async () => {
const status = await Recognition.available(options);
if (status === 'available') return true;
if (status === 'downloadable' || status === 'downloading') {
// install() muss durch eine Nutzeraktion ausgelöst werden
return Recognition.install(options);
}
return false;
};
document.querySelector('#mic').addEventListener('click', async () => {
const ok = await ensureOnDevice();
if (!ok) {
console.log('Lokale Erkennung nicht möglich');
return;
}
const rec = new Recognition();
rec.lang = 'de-DE';
rec.processLocally = true;
rec.onresult = (e) => console.log(e.results[0][0].transcript);
rec.start();
});
Mehrere Sprachen für die Oberfläche auswerten
const Recognition = window.SpeechRecognition ?? window.webkitSpeechRecognition;
const candidates = ['de-DE', 'en-US', 'fr-FR'];
const results = await Promise.all(
candidates.map(async (lang) => [
lang,
await Recognition.available({ langs: [lang], processLocally: true })
])
);
console.table(Object.fromEntries(results));
// Wichtig · Fallstricke
- Experimentell: Zurzeit nur in Chromium-basierten Browsern (ab etwa Version 139) vorhanden. Firefox unterstützt
SpeechRecognitionstandardmäßig nicht. Safari stellt nurwebkitSpeechRecognitionohneavailable()bereit. Prüfe daher immer vorher mittypeof Recognition.available === 'function'. - Die Methode ist statisch. Ein Aufruf auf einer Instanz (
new SpeechRecognition().available()) schlägt fehl. - Stehen mehrere Sprachen in
langs, ist das Ergebnis nur"available", wenn alle verfügbar sind. Für einzelne Aussagen jede Sprache getrennt abfragen. - Ein leeres oder ungültiges
langs-Array kann dazu führen, dass das Promise abgelehnt wird. Den Aufruf deshalb intry/catchkapseln. - Ohne
processLocally: truekann die Erkennung über Server des Browserherstellers laufen. Das ist für den Datenschutz relevant (DSGVO). - Das Ergebnis kann der Seite Rückschlüsse auf installierte Sprachpakete erlauben (Fingerprinting). Browser können die Antwort deshalb einschränken oder vereinheitlichen.