首先添加一個(gè)系統(tǒng)的語(yǔ)音COM組件的引用microsoft speech object library然后在程序中聲明一個(gè)語(yǔ)音類dim RC As SpeechLib.SpSharedRecoContext這個(gè)類有一些事件,如果你要處理它的一些事件,可以用withevent來(lái)聲明然后在窗體LOAD事件或你需要的地方先創(chuàng)建一個(gè)實(shí)例RC = New SpeechLib.SpSharedRecoContext當(dāng)一個(gè)RC被實(shí)例化后,系統(tǒng)就會(huì)運(yùn)行語(yǔ)音識(shí)別程序.前提是你的系統(tǒng)已經(jīng)正確安裝這個(gè)功能.一般默認(rèn)就已經(jīng)安裝好的.其次提醒一下,WIN7的語(yǔ)音識(shí)別比XP的好N倍.從閱讀到偵聽都好很多.然后就可以在你需要閱讀的地方使用RC.Voice.Speak("hello 我", 11)11那里是一些枚舉,用來(lái)標(biāo)識(shí)系統(tǒng)用前臺(tái)還是后臺(tái)或其他方式來(lái)閱讀文字,簡(jiǎn)單的來(lái)說(shuō)就是閱讀的時(shí)候不會(huì)卡住你的程序.你可以選其他的枚舉來(lái)試試作用.以上為閱讀部分.如果需要程序聽你說(shuō)話,則需要聲明一個(gè)偵聽類dim RG As SpeechLib.ISpeechRecoGrammar在初始化時(shí)將之與上面的RC建立關(guān)系,此時(shí)則必須要用withevent來(lái)聲明上面的RC,因?yàn)樯婕半娔X聽到你的語(yǔ)音后,會(huì)觸發(fā)一個(gè)事件,并將聽到的內(nèi)容傳遞到該事件.其次,要讓系統(tǒng)聽到的解析為命令,就必須準(zhǔn)備一個(gè)XML結(jié)構(gòu)的文件來(lái)保存那些固定的命令.如果電腦在XML文件中找不到那些固定命令或同時(shí)不屬于系統(tǒng)命令,電腦將會(huì)將其解釋為聽寫.RG = RC.CreateGrammar '(0)
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請(qǐng)域名、虛擬空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、漢壽網(wǎng)站維護(hù)、網(wǎng)站推廣。
RG.CmdLoadFromFile("聽到.xml", SpeechLib.SpeechLoadOption.SLODynamic)
RG.CmdSetRuleIdState(0, SpeechLib.SpeechRuleState.SGDSActive)然后寫一個(gè)過(guò)程來(lái)處理聽到的事件Private Sub 聽到命令(ByVal StreamNumber As Integer, ByVal StreamPosition As Object, ByVal RecognitionType As SpeechLib.SpeechRecognitionType, ByVal 話語(yǔ) As SpeechLib.ISpeechRecoResult) Handles RC.Recognition RC.Voice.Speak("我聽到了" 話語(yǔ).PhraseInfo.GetText, 11)End Sub以上為偵聽部分.下面列一個(gè)XML的例文?xml version="1.0" encoding="gb2312"?
GRAMMAR LANGID="804"
RULE NAME="命令" TOPLEVEL="ACTIVE"
L
P打開播放器
P上我的QQ
P關(guān)閉你自己 /L
/RULE
/GRAMMAR要讓系統(tǒng)正確地偵聽到你說(shuō)的話,前提你必須運(yùn)行語(yǔ)音識(shí)別程序并讓其激活到"正在聆聽"狀態(tài).并且你必須有一個(gè)能正常使用的話筒而且保證話筒已經(jīng)打開.(廢話-_-|||)以上就是用VB.NET語(yǔ)音識(shí)別的最基本的一些操作.希望對(duì)你有幫助.更深入的內(nèi)容有興趣的話可以和我一起研究.
1.用Win32 API PlaySound
PlaySound位于"winmm.dll"中,可以根據(jù)輸入?yún)?shù)的不同,播放WAV類型的音樂(lè)。在VB.NET中調(diào)用跟VB6中差不多:
先聲明:
Private Declare Auto Function PlaySound Lib "winmm.dll" (ByVal lpszSoundName As String, ByVal hModule As Integer, ByVal dwFlags As Integer) As Integer
Const SND_FILENAME As Integer = H20000
Const SND_ALIAS As Integer = H10000
Const SND_SYNC As Integer = H0
具體還有很多常量,不一一列舉,下面是播放一個(gè)wav文件的例子
Dim mstrfileName As String = "c:\eagle2.wav"
PlaySound(mstrfileName, 0, SND_FILENAME)
注意上面的播放是非同步的,就是說(shuō)它并不會(huì)播放完畢才結(jié)束。如果把上面的代碼寫在一個(gè)Button.Click的事件處理程序中,第二次點(diǎn)擊的時(shí)候它會(huì)打斷第一次的播放,重新開始。
當(dāng)然我們也可以調(diào)用系統(tǒng)的聲音:
PlaySound("SystemStart", 0, SND_ALIAS Or SND_SYNC)
' 以同步的方式調(diào)用系統(tǒng)啟動(dòng)時(shí)候的聲音。
2. 調(diào)用媒體播放器控件
VB.NET中并沒(méi)有提供媒體播放器的.NET組件,沒(méi)辦法我們還是調(diào)用以前Com組件Windows Media Player。當(dāng)然除了聲音外,還可以播放視頻文件。
首先把媒體播放器控件加到工具欄中,調(diào)用還是簡(jiǎn)單的寫一下吧:)
Private Sub playMediaFile(ByVal mediaFileName As String)
With MediaPlayer1
.Stop()
.FileName = "c:\mp3\愛(ài)不愛(ài)我.mp3"
.Play()
End With
End Sub
方法一:調(diào)用系統(tǒng)DLL(這個(gè)有點(diǎn)不完善,也就是播放聲音時(shí)窗體無(wú)法控制,效果相當(dāng)于Enabled=true,但音頻播放完畢后就沒(méi)事了)
Private?Declare?Function?sndPlaySound?Lib?"Winmm.dll"?Alias?"sndPlaySoundA"?(ByVal?lpszSoundName?As?String,?ByVal?uFlags?As?Long)?As?Long
Private?Sub?Button1_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button1.Click
Dim?SoundFile?As?String,?Result?As?Long
SoundFile?=?"D:\KuGou\Pianoboy?-?第105天.wav"?'此處為路徑
Result?=?sndPlaySound(SoundFile,?0)
End?Sub
方法二:使用WindowsMediaPlayer(WindowsMediaPlayer1的可見為False)
先添加一個(gè)windowsmediaplayer控件(工具箱里沒(méi)有,需要手動(dòng)添加)
Private?Sub?Button1_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button1.Click
WindowsMediaPlayer1.visible=False
Me.WindowsMediaPlayer1.URL?=?"D:\KuGou\Pianoboy?-?第105天.mp3"
End?Sub
上面的都是點(diǎn)擊button1(按鈕1)后播放聲音,若是鼠標(biāo)移動(dòng)到某控件上發(fā)出聲音的話改一下觸發(fā)事件就OK了。