回复 楼主 igaoyuan
给你提供一些资料
微软语音库使用实例代码
*!* 语音库:使用示例
*!* 此程序的运行依赖于Microsoft Speech SDK 5.0 或
Microsoft Speech SDK 5.1 的安装
*!* 作
者:TLDS_ZGM
*----------------------------------------------------------
* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\MSSam
男_英文
* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\MSMike
男_英文
* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\MSMary
女_英文
* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\MSSimplifiedChineseVoice
中文
* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\SampleTTSVoice
男_???
*!*常用属性和方法
*----------------------------------------------------------
* speak("中文发音",n)
&& 朗读(n=0,2),停止(n=1,3) 此处解释*****有错误
* pause()
&& 暂停
* resume()
&& 恢复
* Volume =100
&& 音量(0__100)
* Rate =0
&& 语速(越大越快)
* GetVoices.Count
&& 语音库数量
* getvoices.item(i)
&& 第I个语音库
*!*实例:(注意:标点符号应与文字之间有间隔,否则可能会朗读标点)
*----------------------------------------------------------
RUN /N REGSVR32 /S COMCTL32.OCX
LOVOICE=CREATEOBJECT('sapi.spvoice')
&& 建立对象
DIMENSION 语音库(lovoice.GetVoices.Count)
FOR i=0 TO lovoice.GetVoices.Count-1
&& 用于枚举语音库
语音库(i+1)=lovoice.getvoices.item(i).id
&& 语音库标志
ENDFOR
FM_DWJESET=CREATEOBJECT('DWJESET_FORM')
FM_DWJESET.SHOW(1)
DEFI CLASS DWJESET_FORM AS FORM
WIDTH =600
HEIGHT=400
AUTOCENTER=.T.
BORDERSTYLE=1
CAPTION='
语音识别'
ADD OBJECT 表单边框
AS SHAPE
WITH TOP=5
,LEFT=5,
WIDTH=590,HEIGHT=390 ,SPECIALEFFECT=0
&& 大线框
ADD OBJECT 提示信息
AS LABEL
WITH TOP=20 ,LEFT=20, AUTOSIZE=.T.,CAPTION='朗读内容:',BACKSTYLE=0
ADD OBJECT 朗读内容
AS EDITBOX
WITH TOP=35 ,LEFT=15, WIDTH=400,HEIGHT=350,value="Enter text you wish spoken here."&& text you wish spoken here.'&&ControlSource='内容'&&,READONLY=.T.
ADD OBJECT 开始朗读
AS COMMANDBUTTON WITH TOP=230,LEFT=450,WIDTH=110,HEIGHT=24,CAPTION='开 始 朗 读'
ADD OBJECT 停止朗读
AS COMMANDBUTTON WITH TOP=270,LEFT=450,WIDTH=110,HEIGHT=24,CAPTION='停 止 朗 读'
ADD OBJECT 暂停朗读
AS COMMANDBUTTON WITH TOP=310,LEFT=450,WIDTH=110,HEIGHT=24,CAPTION='暂 停 朗 读'
ADD OBJECT 退出程序
AS COMMANDBUTTON WITH TOP=350,LEFT=450,WIDTH=110,HEIGHT=24,CAPTION='退 出 程 序'
ADD OBJECT 音库信息
AS LABEL
WITH TOP=35 ,LEFT=430, AUTOSIZE=.T.,CAPTION='当前语音库:',BACKSTYLE=0
ADD OBJECT 语速信息
AS LABEL
WITH TOP=93 ,LEFT=430, AUTOSIZE=.T.,CAPTION='语速:',BACKSTYLE=0
ADD OBJECT 音量信息
AS LABEL
WITH TOP=153,LEFT=430, AUTOSIZE=.T.,CAPTION='音量:',BACKSTYLE=0
ADD OBJECT 语音库表
AS COMBOBOX
WITH RowSource=[语音库],TOP=54,LEFT=430,WIDTH=150,HEIGHT=22,ROWSOURCETYPE=5,STYLE=2,TABSTOP=.F.,value=1
ADD OBJECT 语速控件
AS OLECONTROL
WITH OLECLASS='MSComctlLib.Slider.2',TOP=110,LEFT=420,WIDTH=165,HEIGHT=22,ENABLED=.T.
ADD OBJECT 音量控件
AS OLECONTROL
WITH OLECLASS='MSComctlLib.Slider.2',TOP=170,LEFT=420,WIDTH=165,HEIGHT=22,ENABLED=.T.
PROCEDURE 语音库表.InteractiveChange
lovoice.voice=lovoice.getvoices.item(THISFORM.语音库表.value-1)
ENDPROC
PROCEDURE 语速控件.INIT
THISFORM.语速控件.MIN=-10
THISFORM.语速控件.MAX=10
THISFORM.语速控件.value=0
ENDPROC
PROCEDURE 语速控件.CHANGE
LOVOICE.RATE=THISFORM.语速控件.value
ENDPROC
PROCEDURE 音量控件.INIT
THISFORM.音量控件.MIN=0
THISFORM.音量控件.MAX=100
THISFORM.音量控件.value=100
ENDPROC
PROCEDURE 音量控件.CHANGE
LOVOICE.VOLUME=THISFORM.音量控件.value
ENDPROC
PROCEDURE 开始朗读.CLICK
LOVOICE.SPEAK(THISFORM.朗读内容.value,3) &&(为1\3时在朗读时也响应其他事件)&&有6个选项(0=)
ENDPROC
PROCEDURE 停止朗读.CLICK
LOVOICE.SPEAK('',2)
ENDPROC
PROCEDURE 暂停朗读.CLICK
IF THISFORM.暂停朗读.CAPTION='暂 停 朗 读'
LOVOICE.PAUSE()
&& 暂停
THISFORM.暂停朗读.CAPTION='继 续 朗 读'
ELSE
LOVOICE.RESUME()
&& 恢复
THISFORM.暂停朗读.CAPTION='暂 停 朗 读'
ENDIF
ENDPROC
PROCEDURE 退出程序.CLICK
THISFORM.RELEASE
ENDPROC
ENDDEFI
/*
ISpVoice//成员函数
ISpEventSource继承方法 :ISpEventSource的所有方法都可以从该接口访问
SetOutput :设置当前的输出对象。可以使用NULL值来选择默认音频设备。
GetOutputObjectToken :检索当前音频输出对象的对象标记。
GetOutputStream :检索当前输出流的指针。
Pause :将声音暂停在最近的警报边界并关闭输出设备。
Resume : 将输出设备设置为RUN状态并恢复渲染。
SetVoice :设置用于文本合成的声音的身份。默认情况下,ISPVoice将使用“控制面板”中“语音”属性中设置的语音信息。
GetVoice :检索标识文本合成中使用的声音的对象标记。
Speak :说出文本字符串或文件的内容。
SpeakStream :说出流的内容。
GetStatus :检索与此ISpVoice实例关联的当前呈现和事件状态。
Skip :导致语音向前或向后跳过当前通话文本内的指定数量的项目。
SetPriority :设置语音的优先级。正常,警报,结束。
GetPriority :检索当前语音优先级。
SetAlertBoundary :指定哪个事件应该用作警报的插入点。
GetAlertBoundary :检索当前正用作警报插入点的事件。
SetRate :实时设置文本渲染速率调整。
GetRate :检索当前文本渲染速率调整。
SetVolume :实时设定合成器的输出音量。
GetVolume :检索合成器的当前输出音量。
WaitUntilDone :阻止呼叫者,直到语音完成说话或指定的时间间隔过去了。
SetSyncSpeakTimeout :设置以毫秒为单位的超时时间间隔,此语音同步Speak和SpeakStream调用此超时。
GetSyncSpeakTimeout :检索此ISpVoice实例的同步语音操作的超时间隔。
SpeakCompleteEvent :返回一个事件句柄,当语音完成后,将发出所有待处理的请求信号。
IsUISupported :确定是否支持指定类型的UI。
DisplayUI :显示所请求的UI。
*/
sp = createobject("sapi.spvoice")
spfs = CREATEOBJECT("Sapi.SpFileStream")
spfs.Open("d:\abc.wav", 3, .f.)
sp.AudioOutputStream = spfs
sp.Speak("hello word", 1)
sp.WaitUntilDone(-1)
spfs.Close
&&=== tts word2wav
xx=NEWOBJECT("Sapi.SpVoice")
mfs=NEWOBJECT("SAPI.SpFileStream")
mfs.Format.Type = 4
mfs.Open(this.wavfile,3,0)
*
Set the .wav file stream as the output for the Voice object
xx.AudioOutputStream = mfs
xx.Rate =
10
xx.Volume =
99
xx.Speak("hello word",0)
wait 'a moment!'
mfs.Close
release xx