欢迎光临
我们一直在努力

在程序中加入英文朗读功能_delphi教程

建站超值云服务器,限时71元/月

 金山词霸2000的奂文全文朗读功能相信一定给尝试过的用户留下了很深刻的印象,而作为一个程序设计者,你一定也想在自己的程序中加入类似的功能吧,因为那将让自己的程序增色不少。

其实这并不是一件困难的事,因为金山词霸实际上也只是直接使用了MS的TTS(Text-to-Speech)技术而已,通过对MS Speech API 的编程,我们完全可以实现比其更强大的功能。下面,让我们在Delphi环境下实际尝试一下。


首先从金山词霸的光盘上\ ciba目录下运行并安装mstts. Exe(MS TTs engine)和spchapi. Exe (MS Speech API).


再在Delphi 里新建一个application。


然后从Delphi的菜单Project/Import Type Library. . .中选击Add. . .,浏览到Windows目录下的Speech子目录里,打开vtxtauto. Tlb,可以看到下面Class names中会出现我们需要的接口的包装类的名字TVTxtAuto,注意对话框底部的Generate Component Wrapper需要被选中,点击Create Unit 就可以打开一个名为VtxtAuTo_TLB的Unit。


至此,我们就可以开始实际编程了。


首先在Form的OnCreate中对需要使用接口初始化并进行注册:


...


Procedure TfrmMain. FormCreate (Sender. Tobject); begin


FISpeech: = CoVTxtAuto_Create;


FISpeech. Register (“Demo Site’, ‘Demo App’); end;


...


由于Delphi对接口进行了良好的包装,因此,只需直接建立包装类,其他后台的操作如接口的查询、释放等交给Delphi在后台自动完成。


注意这里的Register操作是必不可少的,因为可能有多个程序不同设置使用TIS引擎。


然后在MainForm上放一个Tmemo和若干个Tbutton,并在其OnClick中加入对应的代码。


Form定义如下:


Object frmMain: TfrmMain


Left = 296


Top = 187


BorderStyle = bsDialog


Caption = ‘英文全文朗读演示’


ClientHeight = 185


ClientWidth = 456


Color = clBtnFace


Font. Charset = GB2312_CHARSET


Font. Color = clWindowText


Font. Height = -12


Font. Name = ‘宋体’


Font. Style = [ ]


OldCreateOrder = False


Position = poDesktopCenter


OnCreate = FormCreate


PixelsPerInch = 96


TexHeight = 12


Object memText: Tmemo


Left =8


Top = 8


Width = 361


Height = 169


ScrollBars = ssVertical


TabOrder = 0


End


Object btnRead: Tbutton


Left = 376


Top = 8


Width = 75


Height = 25


Caption = ‘朗读(&R)’


TabOrder = 1


OnClick = btnReadClick


End


Object btnPause: Tbutton


Left = 376


Top = 40


Width = 75


Height = 25


Caption = ‘暂停(&P)’


Enabled = False


TabOrder = 2


OnClick = btnPauseClick


End


Object btnStop: Tbutton


Left = 376


Top = 72


Width = 75


Height = 25


Caption = ‘停止(&S)’


Enabled = False


TabOrder = 3


OnClick = btnStopClick


End


Object btnForward: Tbrtton


Left = 376


Top = 120


Width = 75


Height = 25


Caption = ‘下一句(&N)’


Enabled = False


TabOrder =4


OnClick = btnForwardClick


End


Object btnRewind: Tbutton


Left = 376


Top = 152


Width = 75


Height = 25


Caption = ‘上一句(&W)’


Enabled = false


TabOrder = 5


OnClick = btnRewindClick


End


End


关键代码段如下:


1.朗读与停止


...


procedure TfrmMain. BtnReadClick (Sender: Tobject); begin


FISpeech. Speak (memText. Lines. Text, vtxtst_READING0;


BtnPause. Enabled : = True;


BtuStop. Enabled : = True;


End;


Procedure TfrmMain. BtnStopClicl (Sender: Tobject); begin


FISpeech. StopSpeaking;


BtnPause. Enabled : = False;


BtnStop. Enabled : = False;


BtnPause. Caption : = ‘暂停(&P)’;end;


...


speak成员函数的第一个参数向TTS引擎传递需要朗读的文字,第二个参数由指定朗读时使用的语气和优先级的两个符号合并而成。


















































 

符号



意义


语气


 


vtxtst_STATEMENT


$00000001

平常说话的语气(缺省)

vtxtst_QUESTION


$00000002

提问的语气

vtxtst_COMMAND


$00000004

命令的语气

vtxtst_WARNING


$00000008

警告的语气

vtxtst_READING


$00000010

阅读文档时的语气

vtxtst_NUMBERS


$00000020

适合阅读数字的语气

vtxtst_SPREADSHEET


$00000040

适合阅读电子表格中元素的语气

优先级


vtxtsp_VERYHING


$00000080

立即读出,可打断正在读的内容

vtxtsp_HIGH


$00000100

尽快读出,加入播放队列开始

vtxtsp_NORMAL


$00000200

仅仅加入播放队列末尾(缺省)

 


2.暂停为与恢复


...


procedure TfrmMain. BtnPauseClick (Sender: Tobject);


begin


with FISpeech do


if IsSpeaking then


begin


AudioPause;


BtnPause. Caption : = ‘恢复(&R)’;


End


Else


Begin


AudioResume;


BtnPause. Caption : = ‘暂停(&R)’;


End;


End;


...


这里通过IsSpeaking属性可以取得当前状态,然后通过audioPause和AudioResume暂停和恢复朗读。


另外用成员函数AudioFastForward和AudioRewind可以向前和后跳过一句朗读,通过读写speed属性还可以取得或调协朗读的语速,单位是字/分,缺省值为170。


注意speed和Enabled属性缺省设置是只写的,但实际上IVTxtAuto提供了Get_Speed和Get_Enabled函数,所以我们只要把VtxtAuto_TLB单元中的声明修改一下,如:


...


IVTxtAuto = interface (Idispatch)


...


property Speed: Integer read Get_Speed write Set_Speed;


propert Enabled: Integer read Get_Speed write Set_Speed;


...


end;


...


即可正常使用Speed和enabled属性了。


至此,一个简单的英文全文朗读器就完成了,有兴趣的朋友可以为其加入监视剪贴板,热键激活等功能。


本文程序在win NT/98 + Delphi 4/5环境下调试通过。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 在程序中加入英文朗读功能_delphi教程
分享到: 更多 (0)

相关推荐

  • 暂无文章