C# - Tanítsuk meg beszélni alkalmazásainkat!

forráskód letöltése
E példában annak járunk utána, hogy miként tudjuk fel használni a Microsoft Speech API-t, melynek segítségével tetszőleges szövegeket olvastathatunk fel programunkkal. Ennek segítségével lehetőségünk van arra is, hogy beszédfelismeréssel lássuk el alkalmazásainkat.
E lehetőség használatához szükséges lehet a Microsoft Speech SDK telepítése gépünkre (http://microsoft.com/speech). A Windows 2000, illetve Windows XP-től kezdve a beszédfelolvasás lehetőségét az operációs rendszer telepítésvél együtt megkapjuk, de csak szűkített lehetőségekkel. Így ezen operációs rendszerektől kezdve már nem működőképes lesz alkalmazásunk a Speech SDK telepítése nélkül is, ennek ellenére nem árt, ha itt is elvégezzük a telepítést. Ekkor például nem csak a Microsoft Sam hang lesz a rendszerünkben, mely képes a felolvasásra hanem több hang közül is választhatunk.
Az alapvető beállításokat elvégezhetjük a Vezérlő pult - Beszéd elemét választva.
A Win95-öt leszámítva minden ennél újabb operációs rendszerben már használhatjuk a Speech SDK-t. Használatához szükséges az IE 5.0-s vagy frissebb verziójának a megléte is. Hardver oldalon 233 MHz-en futó Pentium II-es processzor a minimum, 128 MB RAM kíséretében.
Programunk használatához a SpeechLib névtér elérése lesz szükségünk, melyhez válasszuk a Project - Add reference menüpontot, majd a megjelenő ablakban a COM lapon keressük elő a Microsoft Speech Object Library elemet és adjuk hozzá projektünkhöz.
Ezt követően már igen egyszerű a dolgunk: létrehozunk egy új példányt az SpVoice osztályból, majd meghívjuk a Speak függvényét, melynek első paraméterében átadott sztring kerül majd felolvasásra. A második paraméterben egy SpeechVoiceSpeakFlags típusú paramétert kell megadni, melyben arról rendelkezünk, hogy a lejátszás párhuzamosan történjen esetleges más hangeszközökkel.
      SpVoice speech = new SpVoice();
      SpeechVoiceSpeakFlags vsf = SpeechVoiceSpeakFlags.SVSFlagsAsync;
      speech.Speak(textBox1.Text, vsf);
Lehetőségünk van arra is, hogy ne csak felolvastassuk a szöveget, hanem egy hang állományba le is mentsük későbbi felhasználás céljából. Ahhoz, hogy ezt megtehessük és létrejöjjön egy WAV állomány a következő lépésekre van szükség: ismét egy SpVoice osztály létrehozásával kezdjük.
      SpVoice speech = new SpVoice();
      SpeechVoiceSpeakFlags vsf = SpeechVoiceSpeakFlags.SVSFlagsAsync;
Szükségünk lesz egy SpFileStream osztály létrehozására is, mely jelen esetben a WAV állományt kezeli. Meg is nyitjuk írásra a még nem létező Speech.wav állományt az Open függvénnyel. Mivel nem létezik az állomány, az automatikusan létrehozásra kerül az íráskor.
      SpFileStream fs = new SpFileStream();
      fs.Open(Application.StartupPath+"\\speech.wav", SpeechStreamFileMode.SSFMCreateForWrite, false);
Az SpVoice osztály AudioOutputStream property-én keresztül tudjuk beállítani, hogy a kimeneti adatfolyam melyik állományba kerüljön. Itt megadjuk az imént létrehozott SpFileStream osztályunk példányát. Ezt követően felolvastatjuk a szükséges szöveget és a WaitUntilDone függvény hívásával várakozásra bírjuk alkalmazásunkat, amíg a felolvasás véget nem ér. Ekkor nincs más teendőnk mint zárjuk a létrehozott állományt.
      speech.AudioOutputStream = fs;
      speech.Speak(textBox1.Text, vsf);
      speech.WaitUntilDone(Timeout.Infinite);
      fs.Close();
A Microsoft Speech technológia használatával jelenleg csak egy fontos hiányosság állapítható meg, mégpedig az, hogy se a felolvasás, se beszédfelismerés nem működik magyar nyelven - egyelőre.