Public Class ks
創(chuàng)新互聯(lián)專注于太平企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城系統(tǒng)網(wǎng)站開(kāi)發(fā)。太平網(wǎng)站建設(shè)公司,為太平等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站策劃,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
Inherits System.Windows.Forms.Form
#Region " Windows 窗體設(shè)計(jì)器生成的代碼 "
Public Sub New()
MyBase.New()
'該調(diào)用是 Windows 窗體設(shè)計(jì)器所必需的。
InitializeComponent()
'在 InitializeComponent() 調(diào)用之后添加任何初始化
End Sub
'窗體重寫(xiě) dispose 以清理組件列表。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Windows 窗體設(shè)計(jì)器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下過(guò)程是 Windows 窗體設(shè)計(jì)器所必需的
'可以使用 Windows 窗體設(shè)計(jì)器修改此過(guò)程。
'不要使用代碼編輯器修改它。
Friend WithEvents tx As System.Windows.Forms.TextBox
Friend WithEvents ty As System.Windows.Forms.TextBox
Friend WithEvents tz As System.Windows.Forms.TextBox
Friend WithEvents ok As System.Windows.Forms.Button
Friend WithEvents l1 As System.Windows.Forms.Label
Friend WithEvents l2 As System.Windows.Forms.Label
Friend WithEvents l3 As System.Windows.Forms.Label
System.Diagnostics.DebuggerStepThrough() Private Sub InitializeComponent()
Me.l1 = New System.Windows.Forms.Label
Me.l2 = New System.Windows.Forms.Label
Me.l3 = New System.Windows.Forms.Label
Me.tx = New System.Windows.Forms.TextBox
Me.ty = New System.Windows.Forms.TextBox
Me.tz = New System.Windows.Forms.TextBox
Me.ok = New System.Windows.Forms.Button
Me.SuspendLayout()
'
'l1
'
Me.l1.BackColor = System.Drawing.Color.FromArgb(CType(192, Byte), CType(192, Byte), CType(255, Byte))
Me.l1.Location = New System.Drawing.Point(8, 8)
Me.l1.Name = "l1"
Me.l1.Size = New System.Drawing.Size(200, 16)
Me.l1.TabIndex = 0
'
'l2
'
Me.l2.BackColor = System.Drawing.Color.FromArgb(CType(192, Byte), CType(192, Byte), CType(255, Byte))
Me.l2.Location = New System.Drawing.Point(8, 32)
Me.l2.Name = "l2"
Me.l2.Size = New System.Drawing.Size(200, 16)
Me.l2.TabIndex = 1
'
'l3
'
Me.l3.BackColor = System.Drawing.Color.FromArgb(CType(192, Byte), CType(192, Byte), CType(255, Byte))
Me.l3.Location = New System.Drawing.Point(8, 56)
Me.l3.Name = "l3"
Me.l3.Size = New System.Drawing.Size(200, 16)
Me.l3.TabIndex = 2
'
'tx
'
Me.tx.Location = New System.Drawing.Point(8, 80)
Me.tx.Name = "tx"
Me.tx.Size = New System.Drawing.Size(200, 25)
Me.tx.TabIndex = 3
Me.tx.Text = "請(qǐng)輸入x"
'
'ty
'
Me.ty.Location = New System.Drawing.Point(8, 104)
Me.ty.Name = "ty"
Me.ty.Size = New System.Drawing.Size(200, 25)
Me.ty.TabIndex = 4
Me.ty.Text = "請(qǐng)輸入y"
'
'tz
'
Me.tz.Location = New System.Drawing.Point(8, 128)
Me.tz.Name = "tz"
Me.tz.Size = New System.Drawing.Size(200, 25)
Me.tz.TabIndex = 5
Me.tz.Text = "請(qǐng)輸入z"
'
'ok
'
Me.ok.BackColor = System.Drawing.Color.FromArgb(CType(192, Byte), CType(192, Byte), CType(255, Byte))
Me.ok.Location = New System.Drawing.Point(8, 160)
Me.ok.Name = "ok"
Me.ok.Size = New System.Drawing.Size(200, 64)
Me.ok.TabIndex = 6
Me.ok.Text = "ok"
'
'ks
'
Me.AutoScaleBaseSize = New System.Drawing.Size(8, 18)
Me.BackColor = System.Drawing.Color.FromArgb(CType(128, Byte), CType(128, Byte), CType(255, Byte))
Me.ClientSize = New System.Drawing.Size(216, 232)
Me.Controls.Add(Me.ok)
Me.Controls.Add(Me.tz)
Me.Controls.Add(Me.ty)
Me.Controls.Add(Me.tx)
Me.Controls.Add(Me.l3)
Me.Controls.Add(Me.l2)
Me.Controls.Add(Me.l1)
Me.Name = "ks"
Me.Text = "考試"
Me.ResumeLayout(False)
End Sub
#End Region
Dim x, y, z, a, b, c, d, aa, bb, cc As Single
Dim tts, alls As Single
Private Sub ks_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
x = Int(1 + 30 * Rnd())
y = Int(1 + 20 * Rnd())
z = Int(1 + 25 * Rnd())
a = Int(2 + 4 * Rnd())
b = Int(1 + a * 2 * Rnd())
c = Int(1 + b * 2 * Rnd())
d = Int(1 + c * 3 * Rnd())
aa = x + y + z
bb = a * x + b * y + c * z
cc = b * x + c * y + d * z
l1.Text = "x+y+z=" Str(aa)
l2.Text = Str(a) "x+" Str(b) "y+" Str(c) "z=" Str(bb)
l3.Text = Str(b) "x+" Str(c) "y+" Str(d) "z=" Str(cc)
End Sub
Private Sub ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ok.Click
If Val(tx.Text) = x And Val(ty.Text) = y And Val(tz.Text) = z Then
tts = tts + 1
End If
alls = alls + 1
tx.Text = ""
ty.Text = ""
tz.Text = ""
x = Int(1 + (1000 ^ 0.5) * Rnd())
y = Int(1 + (10000 ^ 0.4) * Rnd())
z = Int(1 + (100000 ^ 0.3) * Rnd())
a = Int(2 + 4 * Rnd())
b = Int(1 + a * 2 * Rnd())
c = Int(1 + b * 2 * Rnd())
d = Int(1 + c * 3 * Rnd())
aa = x + y + z
bb = a * x + b * y + c * z
cc = b * x + c * y + d * z
l1.Text = "x+y+z=" Str(aa)
l2.Text = Str(a) "x+" Str(b) "y+" Str(c) "z=" Str(bb)
l3.Text = Str(b) "x+" Str(c) "y+" Str(d) "z=" Str(cc)
End Sub
Private Sub ks_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click
Dim lv As Single
If Not (alls = 0) Then
lv = Int(tts * 100000 / alls) / 1000
MsgBox(Str(lv) "%", , "正確率")
tx.Visible = False
ty.Visible = False
tz.Visible = False
ok.Visible = False
l1.Visible = False
l2.Visible = False
l3.Visible = False
Else
MsgBox("答題!", , "答題!")
End If
End Sub
End Class
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim s As Object
s = CreateObject("sapi.spvoice")
s.speak("speak")
End Sub
安裝了sdk后應(yīng)該可以在控件箱單擊鼠標(biāo)右鍵,然后選擇部件,在彈出的列表中應(yīng)該可以找到microsoft tts engine或之類的東西,選擇后就可以吧tts engine作為控件放到窗體上。 調(diào)用貌似是用.speak(String)實(shí)現(xiàn)的。 由于我是很久以前用的,所以也記得不是很清楚了,你可以找找看。
給你個(gè)TTS有關(guān)的東西,就是文字轉(zhuǎn)換語(yǔ)音的,不知道適合你不,不用wav文件了。
____________________________________________________________________
在VB中使用文字朗讀引擎(TTS)技術(shù)
現(xiàn)今市面上流行的一些英語(yǔ)學(xué)習(xí)軟件,在廣告詞上經(jīng)常說(shuō)自己使用了國(guó)際頂尖的全程語(yǔ)音TTS技術(shù),能進(jìn)行整段英文的流利朗讀,并能自由調(diào)節(jié)朗讀的速度與頻率等。那么,這個(gè)神奇的TTS究竟是什么東西呢?
其實(shí),TTS是微軟出品的一套文字朗讀引擎(Text-To-Speech Engine),這些英語(yǔ)軟件就是調(diào)用它來(lái)進(jìn)行英文朗讀的。我們?cè)谟⒄Z(yǔ)學(xué)習(xí)軟件的編程開(kāi)發(fā)中也可使用TTS技術(shù),下面筆者將利用Visual Basic 5.0來(lái)揭開(kāi)TTS神秘的面紗。
一、安裝TTS引擎
TTS引擎所需的Microsoft Text-to-Speech Engine與Microsoft Speech API軟件都可到微軟的站點(diǎn)去下載,也可以在“金山詞霸2000”或“金山詞霸.net”的安裝光盤(pán)上找到(文件名為MSTTS.EXE與SPCHAPI.EXE)。安裝了TTS引擎后,在Windows所在目錄下會(huì)生成一個(gè)SPEECH目錄,其中有一個(gè)Vtxtauto.tlb文件,在編程時(shí)我們需要調(diào)用它。
二、在VB中引入Vtxtauto.tlb文件
進(jìn)入VB 5.0,執(zhí)行選單命令“文件/新建工程/標(biāo)準(zhǔn)EXE”并確定,然后執(zhí)行選單“工程”中的“引用”,單擊“瀏覽”按鈕到Windows目錄下的SPEECH子目錄,打開(kāi)Vtxtauto.tlb文件,將“VoiceText 1.0 Type Library”添加到引用列表中,選中它并單擊確定。將庫(kù)Vtxtauto引入VB后,我們可以通過(guò)選單“視圖”中的“對(duì)象瀏覽器”來(lái)了解它所封裝的類,以及各類成員函數(shù)的屬性的意義、使用格式等信息。一些主要的方法與屬性意義,筆者在下面的源程序中將給出注釋,在這里就不詳細(xì)列出,請(qǐng)參見(jiàn)附圖1。
三、設(shè)置控件及屬性
在FORM1上添加三個(gè)Label控件、一個(gè)TextBox控件、一個(gè)HScrollBar控件和六個(gè)CommandButton控件。窗體及各控件的主要屬性設(shè)置如下:
FORM1:Caption=“英文朗讀”
LABEL1:Caption=“請(qǐng)輸入英文文檔”
LABEL2:Caption=“朗讀速度”
LABEL3:Caption=“ ”
(LABEL3標(biāo)簽用來(lái)顯示朗讀速度值)
TEXT1:Text=“Please input english text”;ToolTiptext=“請(qǐng)輸入或粘貼英文文檔”; MultiLine=True;ScrollBars=3-Both
HSCROLL1:名稱=SpeedChange;Min=90;Max=300(Min與Max屬性值分別用來(lái)限定可調(diào)節(jié)的語(yǔ)速的最小與最大值)
COMMAND1:名稱=read;Caption=“朗讀”
COMMAND2:名稱=pause;Caption=“暫停”
COMMAND3:名稱=stop;Caption=“停止”
COMMAND4:名稱=prev;Caption=“上一句”
COMMAND5:名稱=next;Caption=“下一句”
COMMAND6:名稱=quit;Caption=“退出”
四、編寫(xiě)代碼
下面我們就可以一步步地編寫(xiě)代碼,具體代碼如下:
'在窗體裝載時(shí)調(diào)用Register方法注冊(cè),括號(hào)內(nèi)的兩個(gè)參數(shù)是字符串
Private Sub Form_Load()
Call VTxtAuto.VTxtAuto.Register(Space(8), Space(8))
'因?yàn)檎Z(yǔ)速的默認(rèn)值為170,故水平滾動(dòng)條的初值也設(shè)為170
SpeedChange.Value = 170
End Sub
'設(shè)置朗讀速度調(diào)節(jié)代碼,當(dāng)水平滾動(dòng)條的值Value發(fā)生變化時(shí)將其賦給控制語(yǔ)速的Speed屬性
Private Sub SpeedChange_Change()
VTxtAuto.VTxtAuto.Speed=SpeedChange.Value
Label3.Caption = SpeedChange.Value
End Sub
'設(shè)置“朗讀”按鈕代碼
Private Sub read_Click()
'如果朗讀出錯(cuò),則轉(zhuǎn)到出錯(cuò)處理標(biāo)記模塊ErrorHandler
On Error GoTo ErrorHandler
'調(diào)用方法Speak進(jìn)行朗讀,第一個(gè)參數(shù)是要朗讀的文本,第二個(gè)參數(shù)是設(shè)置朗讀風(fēng)格
Call VTxtAuto.VTxtAuto.speak(Trim(Text1.Text), vtxtsp_VERYHIGH + vtxtst_READING)
Exit Sub
ErrorHandler:
MsgBox "只能朗讀英文文檔,不能朗讀漢字字符!", , "出錯(cuò)信息"
End Sub
'設(shè)置“暫停”按鈕代碼
Private Sub pause_Click()
If VTxtAuto.VTxtAuto.IsSpeaking Then
'如果屬性IsSpeaking為真,則表示正在朗讀,調(diào)用AudioPause方法暫停朗讀
Call VTxtAuto.VTxtAuto.AudioPause
pause.Caption = "恢復(fù)"
Else
'如果已經(jīng)處于暫停狀態(tài)則調(diào)用AudioResume方法恢復(fù)朗讀
Call VTxtAuto.VTxtAuto.AudioResume
pause.Caption = "暫停"
End If
End Sub
'設(shè)置“停止”按鈕代碼,調(diào)用StopSpeaking方法停止當(dāng)前朗讀
Private Sub stop_Click()
Call VTxtAuto.VTxtAuto.StopSpeaking
End Sub
'設(shè)置“上一句”按鈕代碼,調(diào)用AudioRewind方法往后跳過(guò)一句
Private Sub prev_Click()
Call VTxtAuto.VTxtAuto.AudioRewind
End Sub
'設(shè)置“下一句”按鈕代碼,調(diào)用AudioFastForward方法向前跳過(guò)一句
Private Sub next_Click()
Call VTxtAuto.VTxtAuto.AudioFastForward
End Sub
'設(shè)置“退出”按鈕代碼
Private Sub quit_Click()
Unload Me
End Sub
本程序在中文Windows 95/98、VB 5.0環(huán)境下運(yùn)行通過(guò)。運(yùn)行時(shí)在文本編輯框中輸入或粘貼英文文檔,然后單擊“朗讀”按鈕就可播放讀音,運(yùn)行界面如圖2。
五、程序改進(jìn)思路
本文對(duì)在VB編程中使用TTS技術(shù)只是起個(gè)拋磚引玉的作用,熟悉VB編程的電腦愛(ài)好者來(lái)可以對(duì)本程序作一些改進(jìn),例如增加對(duì)聲卡和TTS引擎是否安裝的檢測(cè)、增加從文本文件或數(shù)據(jù)庫(kù)中讀取文檔的功能、增加讓用戶選擇朗讀的優(yōu)先級(jí)和發(fā)聲音量調(diào)節(jié)等功能。這些功能實(shí)現(xiàn)起來(lái)較為復(fù)雜,感興趣的讀者可進(jìn)行深入研究。
首先添加一個(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倍.從閱讀到偵聽(tīng)都好很多.然后就可以在你需要閱讀的地方使用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)試試作用.以上為閱讀部分.如果需要程序聽(tīng)你說(shuō)話,則需要聲明一個(gè)偵聽(tīng)類dim RG As SpeechLib.ISpeechRecoGrammar在初始化時(shí)將之與上面的RC建立關(guān)系,此時(shí)則必須要用withevent來(lái)聲明上面的RC,因?yàn)樯婕半娔X聽(tīng)到你的語(yǔ)音后,會(huì)觸發(fā)一個(gè)事件,并將聽(tīng)到的內(nèi)容傳遞到該事件.其次,要讓系統(tǒng)聽(tīng)到的解析為命令,就必須準(zhǔn)備一個(gè)XML結(jié)構(gòu)的文件來(lái)保存那些固定的命令.如果電腦在XML文件中找不到那些固定命令或同時(shí)不屬于系統(tǒng)命令,電腦將會(huì)將其解釋為聽(tīng)寫(xiě).RG = RC.CreateGrammar '(0)
RG.CmdLoadFromFile("聽(tīng)到.xml", SpeechLib.SpeechLoadOption.SLODynamic)
RG.CmdSetRuleIdState(0, SpeechLib.SpeechRuleState.SGDSActive)然后寫(xiě)一個(gè)過(guò)程來(lái)處理聽(tīng)到的事件Private Sub 聽(tīng)到命令(ByVal StreamNumber As Integer, ByVal StreamPosition As Object, ByVal RecognitionType As SpeechLib.SpeechRecognitionType, ByVal 話語(yǔ) As SpeechLib.ISpeechRecoResult) Handles RC.Recognition RC.Voice.Speak("我聽(tīng)到了" 話語(yǔ).PhraseInfo.GetText, 11)End Sub以上為偵聽(tīng)部分.下面列一個(gè)XML的例文?xml version="1.0" encoding="gb2312"?
GRAMMAR LANGID="804"
RULE NAME="命令" TOPLEVEL="ACTIVE"
L
P打開(kāi)播放器
P上我的QQ
P關(guān)閉你自己 /L
/RULE
/GRAMMAR要讓系統(tǒng)正確地偵聽(tīng)到你說(shuō)的話,前提你必須運(yùn)行語(yǔ)音識(shí)別程序并讓其激活到"正在聆聽(tīng)"狀態(tài).并且你必須有一個(gè)能正常使用的話筒而且保證話筒已經(jīng)打開(kāi).(廢話-_-|||)以上就是用VB.NET語(yǔ)音識(shí)別的最基本的一些操作.希望對(duì)你有幫助.更深入的內(nèi)容有興趣的話可以和我一起研究.
以下是一個(gè)TTS語(yǔ)音的示例程序,它可以識(shí)別中文跟英文的文本,通過(guò)此程序可以幫助編程者快速的熟悉VB下TTS的編程,
也可根據(jù)這個(gè)示例進(jìn)一步開(kāi)發(fā)有關(guān)英文小精靈之類的軟件??!
運(yùn)行之前必須安裝microsoft中文引擎,附錄在程序所在的文件夾里面?。?/p>
本站提供TTS_forVB免費(fèi)下載,版權(quán)歸該下載資源的合法擁有者所有。