Signatur
Beschreibung
Mit start() beginnt eine Spracherkennungssitzung einer SpeechRecognition-Instanz. Ohne Argument nutzt der Browser das Standard-Mikrofon. Beim ersten Aufruf fragt er dafür die Mikrofon-Berechtigung ab. Wenn die Aufnahme beginnt, feuern nacheinander die Events start, audiostart, soundstart und speechstart. Die erkannten Texte kommen asynchron über das Event result an.
Die Methode selbst gibt nichts zurück und ist kein Promise. Wie die Sitzung läuft, verfolgst du über die Events result, nomatch, error und end. Vor dem Aufruf von start() kannst du Eigenschaften wie lang, continuous, interimResults und maxAlternatives setzen. Sie gelten dann für die ganze Sitzung.
In neueren Chromium-Versionen kannst du optional eine Audio-MediaStreamTrack übergeben, zum Beispiel aus getUserMedia() oder aus einem WebRTC-Stream. Dann wird statt des Standard-Mikrofons diese Spur ausgewertet. Die Sitzung endet mit stop() (vorhandenes Audio wird noch ausgewertet) oder mit abort() (sofortiger Abbruch ohne Ergebnis). Sie endet auch automatisch nach einer Sprechpause, wenn continuous auf false steht.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $audioTrack | MediaStreamTrack | Optional. Eine Audio-Spur (kind === "audio"), die statt des Standard-Mikrofons ausgewertet wird. Bisher nur in neueren Chromium-Versionen unterstützt. Eine Spur, die kein Audio ist, führt zu einem TypeError. |
Rückgabewert
undefined). Die Ergebnisse kommen asynchron über das result-Event.Beispiele
Einfache Spracheingabe per Button
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
if (!SpeechRecognition) {
console.warn('Spracherkennung wird in diesem Browser nicht unterstützt.');
} else {
const recognition = new SpeechRecognition();
recognition.lang = 'de-DE';
recognition.interimResults = false;
recognition.maxAlternatives = 1;
recognition.addEventListener('result', (event) => {
const { transcript, confidence } = event.results[0][0];
console.log(`Erkannt: "${transcript}" (${(confidence * 100).toFixed(0)} %)`);
});
recognition.addEventListener('error', (event) => {
console.error('Fehler:', event.error);
});
document.querySelector('#mic').addEventListener('click', () => {
recognition.start(); // fragt beim ersten Mal die Mikrofon-Berechtigung ab
});
}
Diktierfunktion mit Zwischenergebnissen und Schutz vor Doppelstart
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SR();
recognition.lang = 'de-DE';
recognition.continuous = true;
recognition.interimResults = true;
let isListening = false;
const output = document.querySelector('#text');
recognition.onstart = () => { isListening = true; };
recognition.onend = () => { isListening = false; };
recognition.onresult = (event) => {
let finalText = '';
let interimText = '';
for (const result of event.results) {
if (result.isFinal) finalText += result[0].transcript;
else interimText += result[0].transcript;
}
output.textContent = finalText + interimText;
};
const toggle = () => {
if (isListening) {
recognition.stop();
return;
}
try {
recognition.start();
} catch (err) {
// InvalidStateError, falls bereits eine Sitzung läuft
console.warn(err.name, err.message);
}
};
document.querySelector('#toggle').addEventListener('click', toggle);
Erkennung auf einer bestimmten MediaStreamTrack (Chromium)
const startFromTrack = async () => {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const [track] = stream.getAudioTracks();
const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
recognition.lang = 'de-DE';
recognition.onresult = (e) => console.log(e.results[0][0].transcript);
recognition.onend = () => track.stop(); // Mikrofon freigeben
recognition.start(track);
};
document.querySelector('#go').addEventListener('click', startFromTrack);
// Wichtig · Fallstricke
- InvalidStateError: Wenn du
start()aufrufst, während schon eine Sitzung läuft, wirft die Methode eineDOMExceptionmit dem NamenInvalidStateError. Starte also erst neu, wenn dasend-Event gefeuert hat, oder fange den Fehler mittry/catchab. - Browser-Kompatibilität: In Chrome, Edge und Safari gibt es die Klasse nur als
webkitSpeechRecognition. Firefox unterstützt die Spracherkennung nicht. Prüfe deshalb immer vorher, ob die Funktion vorhanden ist. Der ParameteraudioTrackist neu und bisher nur in Chromium verfügbar. - Berechtigungen und Kontext: Die Methode braucht einen sicheren Kontext (HTTPS oder
localhost) und die Mikrofon-Berechtigung. Wird sie verweigert, feuerterrormitnot-allowed. Manche Browser verlangen, dass der Aufruf durch eine Benutzeraktion ausgelöst wird, etwa einen Klick. - Datenschutz: Chrome schickt die Audiodaten standardmäßig zur Erkennung an Google-Server. Ohne Netzwerk kommt es zum Fehler
network. Bei sensiblen Anwendungen solltest du die Nutzer darauf hinweisen. - Automatisches Ende: Auch mit
continuous = truebeendet Chrome die Sitzung nach einiger Zeit ohne Sprache. Für eine Dauererkennung rufst dustart()imend-Handler erneut auf.