语音控制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类库。

speech_1

三、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();
        }

Demo下载

posted @ 2011-05-25 11:16  DeeRoad  阅读(1384)  评论(0编辑  收藏  举报