当前位置:编程学习 > VB >>

vb.net怎么做中文语音识别程序

答案:首先添加一个系统的语音COM组件的引用

microsoft speech object library

然后在程序中声明一个语音类

dim RC As SpeechLib.SpSharedRecoContext

这个类有一些事件,如果你要处理它的一些事件,可以用withevent来声明

然后在窗体LOAD事件或你需要的地方先创建一个实例

RC = New SpeechLib.SpSharedRecoContext

当一个RC被实例化后,系统就会运行语音识别程序.前提是你的系统已经正确安装这个功能.一般默认就已经安装好的.其次提醒一下,WIN7的语音识别比XP的好N倍.从阅读到侦听都好很多.

然后就可以在你需要阅读的地方使用

RC.Voice.Speak("hello 我", 11)

11那里是一些枚举,用来标识系统用前台还是后台或其他方式来阅读文字,简单的来说就是阅读的时候不会卡住你的程序.你可以选其他的枚举来试试作用.

以上为阅读部分.

如果需要程序听你说话,则需要声明一个侦听类

dim RG As SpeechLib.ISpeechRecoGrammar

在初始化时将之与上面的RC建立关系,此时则必须要用withevent来声明上面的RC,因为涉及电脑听到你的语音后,会触发一个事件,并将听到的内容传递到该事件.其次,要让系统听到的解析为命令,就必须准备一个XML结构的文件来保存那些固定的命令.如果电脑在XML文件中找不到那些固定命令或同时不属于系统命令,电脑将会将其解释为听写.

RG = RC.CreateGrammar '(0)
RG.CmdLoadFromFile("听到.xml", SpeechLib.SpeechLoadOption.SLODynamic)
RG.CmdSetRuleIdState(0, SpeechLib.SpeechRuleState.SGDSActive)

然后写一个过程来处理听到的事件

Private Sub 听到命令(ByVal StreamNumber As Integer, ByVal StreamPosition As Object, ByVal RecognitionType As SpeechLib.SpeechRecognitionType, ByVal 话语 As SpeechLib.ISpeechRecoResult) Handles RC.Recognition

        RC.Voice.Speak("我听到了" & 话语.PhraseInfo.GetText, 11)

End Sub

以上为侦听部分.

下面列一个XML的例文

<?xml version="1.0" encoding="gb2312"?>
<GRAMMAR LANGID="804">
  <RULE NAME="命令" TOPLEVEL="ACTIVE">
    <L>
      <P>打开播放器</P>
      <P>上我的QQ</P>
      <P>关闭你自己</P>

    </L>
  </RULE>
</GRAMMAR>

要让系统正确地侦听到你说的话,前提你必须运行语音识别程序并让其激活到"正在聆听"状态.并且你必须有一个能正常使用的话筒而且保证话筒已经打开.(废话-_-|||)

以上就是用VB.NET语音识别的最基本的一些操作.希望对你有帮助.更深入的内容有兴趣的话可以和我一起研究.

这就要调用API函数了 给你代码吧  记得给点分啊

    Private Const KeysM = &H8000
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
    Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        Me.Text = e.KeyValue
        If e.KeyValue = Keys.ShiftKey And GetAsyncKeyState(160) And KeysM Then
            MsgBox("你按的是左SHIFT")
        ElseIf e.KeyValue = Keys.ShiftKey And GetAsyncKeyState(161) And KeysM Then
            MsgBox("你按的是右SHIFT")
        End If
    End Sub

上一个:vb中如何实现文件拖动复制
下一个:VB 数据库 依次输出某一列的数据

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,