您的位置: 旅游网 > 女人

VC+Delphi编程实现英文文章语音输出

发布时间:2019-09-12 17:23:29

引言

现在有些软件尤其是翻译类软件多提供有语音输出的功能,比较有名的有《金山词霸2000》、《不知不觉背单词》等,他们所提供的英文朗读功能是通过直接使用了Microsoft的TTS(Text-to-Speech)全程化语音技术来实现的。我们也可以在自己的程序中通过对MS Speech API 的调用来增加语音输出功能,尤其是对于翻译类软件,如果没有语音功能可以说这个软件是不完备的。

为实现TTS技术,一个必要的前提条件是系统中要有MS TTS引擎,可以通过查看Windows目录下是否有speech的目录来判断是否安装过该引擎。如果没有,可以从《金山词霸2000》光盘上的ciba子目录下的mstts.exe来安装MS TTS引擎和spchapi(MS Speech API)或是直接从互连网上下载:可以从http://bcbsrc.home.chinaren.com/ttsapi.exe下载语音接口程序TTSapi.exe; 可以从http://bcbsrc.home.chinaren.com/ttssetup.exe下载男声语音引擎程序TTSSetup.exe;可以从http://bcbsrc.home.chinaren.com/ttssetup2.exe下载女声语音引擎程序TTSSetup2.exe。

在整个设计过程中,主要是围绕着Vtxtauto.tlb这个类型库展开的,由于在VC下实现类型库比较烦琐,我们选择使用TLB类型库比较方便的Delphi来同Vtxtauto.tlb进行交互,并将几个主要的功能如“朗读”、“暂停”、“恢复”、“停止”等用几个相应的功能函数来实现,最终通过DLL(动态链接库)将其封装在内,对外则仅提供几个简单接口,可以很方便的为Delphi或其他语言调用。在此我们通过采用VC++6.0来调用这个由Delphi开发的拥有TTS技术的动态链接库来实现英文文本的语音输出。

Delphi动态链接库的实现

首先用Delphi创建一动态连接库工程:选择“File”、“New…”,在“New Items”对话框中选择“DLL”,新建一动态连接库工程Project1。继续选择“File”、“New…”,在“New Items”中选择“Unit”,新建一单元TTSDLL。接下来把类型库添加到工程,选择“Project”、“Import Type Library…”,点击“Add”按钮,选择C:\windows\speech\目录下的Vtxtauto.tlb类型库,便将其添加到工程中来了。最后,编辑TTSDll单元如下:

unit TTSDLL;

interface

uses VtxtAuto_TLB;

procedure Create;export; {待导出的过程和函数}

procedure Read(text:PChar);export;

procedure Pause;export;

procedure Resume;export;

procedure Stop;export;

function IsSpeaking:Boolean;export;

procedure Destory;export;

var

TTS: IVTxtauto;

implementation

procedure Create;

begin

TTS:=CoVTxtAuto.Create; {创建对象}

TTS.Register('Project1','Project1'); {注册 }

end;

procedure Read(text:PChar);

begin

TTS.Speak(text,vtxtst_READING);

{朗读函数。第一参数是待朗读的文本。第二参数用于控制朗读的语气和优先级,主要有以下几种,可以根据需要灵活选择,如需多种选择将其进行或运算即可:

vtxtst_STATEMENT = 1;平时说话时语气,默认。

vtxtst_QUESTION = 2; 提问的语气。

vtxtst_COMMAND = 4; 命令的语气。

vtxtst_WARNING = 8; 警告的语气。

vtxtst_READING = 16; 阅读文档时的语气。

vtxtst_NUMBERS = 32; 阅读数字时的语气。

vtxtst_SPREADSHEET = 64; 阅读电子表格中元素时的语气。

vtxtsp_VERYHIGH = 128; 立即读出,可以打断当前正读的内容。

vtxtsp_HIGH = 256; 尽快读出,加入播放队列开始。

vtxtsp_NORMAL = 512; 默认,加入播放队列末尾。}

end;

procedure Pause;

begin

TTS.AudioPause; {暂停朗读}

end;

procedure Stop;

begin

TTS.StopSpeaking;{终止朗读}

end;

procedure Resume;

begin

TTS.AudioResume;{恢复朗读}

end;

function IsSpeaking:Boolean;

var

Check:Boolean;

begin

if TTS.IsSpeaking then {判断当前状态}

begin

Check:=TRUE;{当前正在朗读}

end

else

begin

Check:=FALSE;{当前没有朗读}

end;

Result:=Check;{返回状态值}

end;

procedure Destory;

begin

TTS:=nil;{释放对象}

end;

end.

在Project1.dpr的begin前面添加如下待导出过程函数列表:

exports

Create index 1,

Read index 2,

Pause index 3,

Resume index 4,

Stop index 5,

IsSpeaking index 6,

Destory index 7;

编译通过后即可得到封装有TTS语音接口的动态链接库: Project1.dll。

小孩便秘怎么马上通便
小孩流鼻血
宝宝不消化食疗法
小孩营养不良怎么补
猜你会喜欢的
猜你会喜欢的