WEB开发网
开发学院软件开发Delphi 在程序中加入英文朗读功能 阅读

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

 2006-02-04 13:25:41 来源:WEB开发网   
核心提示: 金山词霸2000的奂文全文朗读功能相信一定给尝试过的用户留下了很深刻的印象,而作为一个程序设计者,在程序中加入英文朗读功能,你一定也想在自己的程序中加入类似的功能吧,因为那将让自己的程序增色不少,有兴趣的朋友可以为其加入监视剪贴板,热键激活等功能, 其实这并不是一件困难的事,因为金山词霸实际上也只是直接使用了MS的T
 金山词霸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环境下调试通过。

Tags:程序 加入 英文

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接