语音控制PPT
昨天看到博比123写的《语音控制程序操作》,于是自己也手筋发痒。正好最近办公室墙上刚挂了一个42寸显示器,用来显示日常的一些事务,主要是用PPT显示,目前是用罗技摄像头+QQ手势达人配合使用,虽然识别率不高,但够酷呀,惹得其他办公室的时不时地来串门。罗技摄像头上还自带麦克风,作为一位程序员,咱可不能浪费了,开工~
一、测试环境
Win7旗舰版(非旗舰版不带语音识别功能!)、.NET4.0(这个无所谓)
二、语音识别
首先附上主要code:
Choices choices = new Choices(); string[] basicCommands = new string[] { textNext, textPreview }; choices.Add(basicCommands); Grammar grammer = new Grammar(new GrammarBuilder(choices)); speechRecognizer = new SpeechRecognizer(); speechRecognizer.LoadGrammar(grammer); speechRecognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(speechRecognizer_SpeechRecognized);
textNext, textPreview是自定义的“下一页”“上一页”语音识别单词,可以自定义,具体可以参照Demo,注意语音识别的单词需要添加到“语音词典”当中,最好添加自己的录音以便提高识别率,别忘了引用System.Speech.dll类库。
三、PPT控制
说到控制PPT,最容易想到的就是使用COM接口直接控制,这当然是一种非常可行的办法,但我查阅了一下资料发现使用COM控制的话必须知道指定PPT文档的句柄,但我的情况是PPT已经由QQ手势达人打开了,我只是在它的基础上附加个语音控制功能,因此我绕道而行,采用了一个简便的方法,模拟按键!也就是PageDown(下一页)和PageUp(上一页),希望大家能给出更好的解决方案。
public class KeyEmulator { [DllImport("user32.dll")] static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo); public static void Emulate(byte key) { keybd_event(key, 0, 0, 0); } public static void PgUp() { Emulate(33); } public static void PgDn() { Emulate(34); } }
void speechRecognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) { if (e.Result.Text == textNext) KeyEmulator.PgDn(); else if (e.Result.Text == textPreview) KeyEmulator.PgUp(); }