工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > VC > 正文
VC+Delphi编程实现英文文章语音输出
[文章信息]
作者:中国电子科技集团公司第二十二研究所青岛分所郎锐
时间:2004-10-26
出处:天极网
责任编辑:方舟
[文章导读]
为实现TTS技术,一个必要的前提条件是系统中要有MS TTS引擎,可以通过查看Windows目录下是否有speech的目录来判断是否安装过该引擎
advertisement
热点推荐
· 真没想到VB也可以这样用之指针技术
· 禁止QQ登录的方法
· 给你的XML文件做个数字签名
· ImageReady制作“焰火”小动画
· Java加密和数字签名编程快速入门
[正文]

1 2  下一页

  引言

  现在有些软件尤其是翻译类软件多提供有语音输出的功能,比较有名的有《金山词霸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。


1 2  下一页

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • 在VC++中使用OpenGL绘制典型曲面
  • VC下动态数据交换技术之执行远程命令
  • VC下动态数据交换技术之永久数据链路
  • 向ATL的DLL中传递C++对象参数
  • VC下动态数据交换技术之DDE数据传送
  • 民营家电商排队造手机 设备商全面杀入
  • 英特尔澄清杨旭任职传闻 官方没宣布此消息
  • 国资委河北密制联通拆分方案
  • 垃圾邮件害人害企害国 清除垃圾邮件不手软
  • 中兴携手阿尔卡特 全球逐鹿CDMA
  • 用友总裁王文京:誓将ERP变成“大众消费”
  • 香港消费者委员会:数码相机最贵未必最好
  • 外电称中兴正评估西门子手机业务 或能并购
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 老板电话
    冲动的惩罚 七里香
    我不是黄蓉 女生撒娇
    盛夏的果实 坚持到底
    孤单北半球 眉飞色舞
    挪威的森林 可爱女人
    最浪漫的事 老板电话

    CSEEK搜索