Windows 7: Spracherkennung und–Ausgabe
Die Spracherkennung und -ausgabe von Windows 7 ist sehr ausgereift. Mit sehr wenigen Zeilen-Code ist es möglich, das der Computer Texte "aussprechen" kann und auch erkennen kann. Dieses Video demonstriert eine Beispielanwendung und wie diese implementiert wurde.
Der einziger Wehrmutstropfen der Speech API besteht darin, daß die Sprachausgabe nur eine englische Stimme unterstützt.
Wie implementiert man nun die Spracherkennung in eigenen Anwendungen?
Einbinden der System.Speech-Bibliothek
Damit man die Funktionen der Spracherkennung verwenden kann muss man die Bibliothek System.Speech aus dem .NET Framework als Referenz zu einem neuen .NET Projekt hinzufügen.
Anschließend steht der Anwendung die Funktionalität der Sprachausgaben zur Verfügung.
Sprache ausgeben
Mit den folgenden zwei Zeilen Code bewegt man den Computer zur Sprachausgabe.
System.Speech.Synthesis.SpeechSynthesizer synthesizer =
new System.Speech.Synthesis.SpeechSynthesizer();
synthesizer.Speak("Hello World");
Grammar/Grammatik definieren
Damit der Computer weiß, welche Wörter er erkennen soll, benötigt die Anwendung eine Liste von Wörtern, auf die gehört werden soll.
Diese Liste definiert man am einfachsten über eine XML-Datei:
<grammar xmlns="https://www.w3.org/2001/06/grammar"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.w3.org/2001/06/grammar
https://www.w3.org/TR/speech-grammar/grammar.xsd"
xml:lang="de-DE"
version="1.0">
<rule id="thema"
scope="public">
<one-of>
<item>Rechts</item>
<item>Links</item>
<item>Hoch</item>
<item>Runter</item>
<item>Windows</item>
<item>Programmierer</item>
<item>Visual Studio</item>
<item>Feierabend</item>
<item>Hallo</item>
<item>Guten Tag</item>
<item>Guten Abend</item>
<item>Auf Wiedersehen</item>
<item>Servus</item>
</one-of>
</rule>
</grammar>
Dadurch weiß die Anwendung, welche Wörter zu erkennen sind.
Sprache erkennen
Damit die Anwendung nun auch auf “Wort” gehorcht, benötigt man eine Instanz der SpeechRecognitionEngine.
recognizer = new SpeechRecognitionEngine();
recognizer.SetInputToDefaultAudioDevice();
Grammar grammar = new Grammar("grammar.xml", "thema");
recognizer.UnloadAllGrammars();
recognizer.LoadGrammar(grammar);
recognizer.SpeechRecognized += (s, e1) =>
{
string text = e1.Result.Text;
_recognizedText.Text = text;
};
recognizer.RecognizeAsync(RecognizeMode.Multiple);
Wenn das nur immer so einfach wäre, jemand dazu zu bewegen einem zu zu hören