以下是VS2013下测试通过的完整代码
Public Class Form1
Public Voice As New SpeechLib.SpVoice
' Public Voice As SpVoice '引用Sapi.dll
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Button1_Click(1, e)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TextBox1.Text = "Hello word!... 欢迎试用ABC 100!"
'Me.Text = "[默认语音库:" & Voice.GetVoices.Item(0).GetDescription & "]" ' 注册表项:Voice.GetVoices.Item(0).Id,描述:Voice.GetVoices.Item(0).GetDescription,语音类型总数:Voice.GetVoices.Count
Voice.Volume = 100 '设置音量,0到100
Voice.Rate = Val(0) '速度范围-10~+10,数字越小速度越慢
Voice.Voice = Voice.GetVoices([String].Empty, [String].Empty).Item(0) 'Item(0)中文,Item(1)英文
Voice.Speak(TextBox1.Text, SpeechLib.SpeechVoiceSpeakFlags.SVSFlagsAsync)
'SpeechVoiceSpeakFlags参数
'SVSFDefault:默认值 0
' 读取给定的文本,被SVSFlagsAsync(异步)重写。
' 在播放期间的请求不会被清空,被SVSFPurgeBeforeSpeak重写。
' 只有当指定的文本以“<”开头才会使用XML方式解析,被SVSFIsXML和SVSFIsNotXML重写。
' 不保留全局XML状态变化...,被SVSFPersistXML重写。
' 标点符号不扩展为单词,被SVSFNLPSpeakPunc重写。
'SVSFlagsAsync:播报调用为异步,所以播报请求一发送,就马上回应。1(指定的讲调用应该是异步的。也就是说,它会立即返回排队的讲请求后。)
'SVSFPurgeBeforeSpeak:在播报期间,不接受其他的播报请求。2(清除所有悬而未决的发言请求,在此之前讲的呼叫。)
'SVSFIsFilename:说话方式传递的字符串是一个文件名,而不是文字。其结果,没有发言字符串本身而是该文件的路径,该路径是口头的处理。4
'SVSFIsXML:文本以XML形式解析。8
'SVSFIsNotXML:文本不以XML形式解析。16
'SVSFPersistXML:XML标记的全局状态的变化将持续到说话的呼叫。32
'SVSFNLPSpeakPunc:把标点符号也读出来。64 标点符号应扩大到字(例如:“这是什么。”将成为“这是这期”)。
'SVSFVoiceMask:此面膜具有每一个标志位设置。 127
'SVSFUnusedFlags:此面膜具有每一个未使用的位集。128
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
If Button2.Text = "暂停" Then
Button2.Text = "继续"
Voice.Pause()
Else
Button2.Text = "暂停"
Voice.Resume()
End If
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Voice.Speak(String.Empty, SpeechLib.SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak)
End Sub
End Class
Public Class Form1
Public Voice As New SpeechLib.SpVoice
' Public Voice As SpVoice '引用Sapi.dll
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Button1_Click(1, e)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TextBox1.Text = "Hello word!... 欢迎试用ABC 100!"
'Me.Text = "[默认语音库:" & Voice.GetVoices.Item(0).GetDescription & "]" ' 注册表项:Voice.GetVoices.Item(0).Id,描述:Voice.GetVoices.Item(0).GetDescription,语音类型总数:Voice.GetVoices.Count
Voice.Volume = 100 '设置音量,0到100
Voice.Rate = Val(0) '速度范围-10~+10,数字越小速度越慢
Voice.Voice = Voice.GetVoices([String].Empty, [String].Empty).Item(0) 'Item(0)中文,Item(1)英文
Voice.Speak(TextBox1.Text, SpeechLib.SpeechVoiceSpeakFlags.SVSFlagsAsync)
'SpeechVoiceSpeakFlags参数
'SVSFDefault:默认值 0
' 读取给定的文本,被SVSFlagsAsync(异步)重写。
' 在播放期间的请求不会被清空,被SVSFPurgeBeforeSpeak重写。
' 只有当指定的文本以“<”开头才会使用XML方式解析,被SVSFIsXML和SVSFIsNotXML重写。
' 不保留全局XML状态变化...,被SVSFPersistXML重写。
' 标点符号不扩展为单词,被SVSFNLPSpeakPunc重写。
'SVSFlagsAsync:播报调用为异步,所以播报请求一发送,就马上回应。1(指定的讲调用应该是异步的。也就是说,它会立即返回排队的讲请求后。)
'SVSFPurgeBeforeSpeak:在播报期间,不接受其他的播报请求。2(清除所有悬而未决的发言请求,在此之前讲的呼叫。)
'SVSFIsFilename:说话方式传递的字符串是一个文件名,而不是文字。其结果,没有发言字符串本身而是该文件的路径,该路径是口头的处理。4
'SVSFIsXML:文本以XML形式解析。8
'SVSFIsNotXML:文本不以XML形式解析。16
'SVSFPersistXML:XML标记的全局状态的变化将持续到说话的呼叫。32
'SVSFNLPSpeakPunc:把标点符号也读出来。64 标点符号应扩大到字(例如:“这是什么。”将成为“这是这期”)。
'SVSFVoiceMask:此面膜具有每一个标志位设置。 127
'SVSFUnusedFlags:此面膜具有每一个未使用的位集。128
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
If Button2.Text = "暂停" Then
Button2.Text = "继续"
Voice.Pause()
Else
Button2.Text = "暂停"
Voice.Resume()
End If
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Voice.Speak(String.Empty, SpeechLib.SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak)
End Sub
End Class

