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.

image

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="http://www.w3.org/2001/06/grammar"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/06/grammar
                             http://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 Smiley

Download der Sourcen