基于Delphi的英文发音教学软件的实现

转载 2006年05月20日 23:50:00

介绍了美国微软公司的全程语音TTS技术,并且在Borland Delphi 7.0可视化编成工具中利用MSTTS技术开发出能够进行英文朗读功能的应用软件

 

摘 要 介绍了美国微软公司的全程语音TTS技术,并且在Borland Delphi 7.0可视化编成工具中利用MSTTS技术开发出能够进行英文朗读功能的应用软件,从而总结了利用MSTTS技术开发英语教学软件的有效方法。

  关键词 MSTTS引擎;MS Speech API;英文朗读

  引言

  MSTTS(Microsoft Text-To-Speech)是微软公司研制的一套功能强大的英文文字朗读引擎,它可以将文档中的英文文字信息转换成计算机语音信息,通过计算机声卡发音将内容朗读出来。利用它和相关的语音接口开发出英语发音教学软件,可以实现英文单词发音及整段英文的流利朗读示范。从而,可以使学生在课下或者没有教师的情况下,从软件中获得标准的英文发音的辅助,这对于一些发音不好的英语学习者有极大的帮助。

  MSTTS引擎简介

  要在软件的开发过程中使用MSTTS技术,必须安装MSTTS引擎。MSTTS引擎的安装包可以在微软公司的官方网站下载,也可以在“金山词霸”软件的安装盘中找到。运行安装包后,MSTTS引擎将被安装在系统之中,同时,在操作系统控制面板的“添加/删除”程序中会出现“Microsoft Text-to-speech Engine”卸载项。在安装好MSTTS引擎之后,就可以利用的Borland Delphi平台使用MSTTS技术开发相应的英语教学软件,实现英文朗读等功能。

  设计原理

  1、软件设计原理

  软件在Delphi平台中的设计原理是通过调用微软语音接口(MS Speech API)来实现英文文字朗读功能的。安装MS Speech API的方法和MSTTS引擎相同,亦可以在微软官方网站或者在“金山词霸”安装盘中找到。运行spchapi.exe后,Windows目录中会生成一个Speech子目录,其中有一个Vtxtauto.tlb文件,它是相应的类型库,对服务器的接口给出了与语言无关的描述;Vcmd.exe作为进程外的自动化服务器,提供将文本转换为语音的服务。

  软件的功能分三大模块:语音显示模块、语音控制模块和编辑模块。语音显示模块中,将动态显示朗读对象,即语音自动化服务器的处理对象;语音操作模块中,提供一系列的语音操作,即对语音服务进行动态的个性化处理;编辑模块是对文本内容的个性设定,满足特殊用户的需求。软件的原理如图1所示。

 

     图1 软件原理图

  2、VtxtAuto接口说明

  Delphi中使用MSTTS引擎的类型库名为VtxtAuto,通过分析,可以了解VtxtAuto的相关成员函数和属性。

  2.1 Speak函数

  procedure Speak(const pszBuffer: WideString; dwFlags: Integer); safecall;

  Speak函数用于实现朗读功能,它有两个参数,第一个参数向MSTTS引擎传递需要朗读的文字,第二个参数由指定朗读时使用的语气和优先级的两个符号合并而成。

  2.2 Register函数

  procedure Register(const pszSite: WideString; const pszApp: WideString);safecall;

  Register函数用于实现接口的注册。在软件的初始化时,Register操作是必须的,因为在操作系统中可能有多个类似的程序在使用MSTTS引擎,通过Register操作可以对每一个使用MSTTS引擎的软件进行设置和区分。

  2.3 IsSpeaking属性

  property IsSpeaking: WordBool read Get_IsSpeaking;

  IsSpeaking属性是一个布尔函数,通过这个属性可以取得当前程序的状态,

  2.4朗读操作成员函数

  VtxtAuto对象有一系列的成员函数,通过这些成员函数,可以实现对朗读功能的各种操作、控制,具体函数如表1所示。


表1 VtxtAuto对象的成员函数


函数命令形式

函数说明

VtxtAuto.AudioResume

用于朗读状态的恢复操作

VtxtAuto.StopSpeaking

用于实现停止朗读

VtxtAuto.AudioPause

用于实现暂停朗读

VtxtAuto.AudioFastForward

用于实现向前跳过一句朗读

VtxtAuto.AudioRewind

用于实现向后跳过一句朗读


  此外,还有一个属性Speed,通过读写Speed属性可以取得或设置朗读的语速,其单位是“字数/分钟”,缺省值为170。

  软件功能的实现

  1、VtxtAuto类型库的导入

  首先,在Borland Delphi平台上,新建一个Application,然后从Project菜单的“Import Type Library...”中选择“Add...”,浏览到Windows目录下的Speech子目录里,打开vtxtauto.tlb,可以看到下面Class names中会出现我们需要的接口的包装类“TVTxtAuto”文件。选中对话框底部的Generate Component Wrapper,点击Create Unit就可以打开一个名为VTxtAuto_TLB的Unit。

 

  2、程序界面的设计

  在窗体Form1上添加如下控件:1个Memo文本控件,1个TrackBar滚动条控件和8个按钮控件。将这些控件合理安排,软件主界面如图2所示。然后,对各个控件的属性进行设置。

                       图2 软件主界面

  文本控件用于显示和编辑朗读内容;滚动条控件用于动态设定语速,其MAX属性设置为300;第一个按钮的Caption属性设为“朗读”,它的功能是当用户点击按钮时进行朗读;第二个按钮控件的Caption属性设为“停止”,它的功能是当软件处于朗读状态时停止朗读;第三个按钮控件的Caption属性设为“暂停”,它的功能是当软件处于朗读状态时暂停朗读;第四个按钮控件的Caption属性设为“恢复”,它的功能是当软件处于暂停状态时恢复朗读;第五个按钮控件的Caption属性设为“向前”,它的功能是当软件处于朗读状态时快速跳转到下一句;第六个按钮控件的Caption属性设为“向后”,它的功能是当软件处于朗读状态时快速回退到上一句;第七个按钮控件的Caption属性设为“导入”,它的功能是向文本控件导入新的朗读内容;第八个按钮控件的Caption属性设为“导出”,它的功能是把编辑好的朗读内容进行保存操作。

  3、代码的实现

  3.1 VtxtAuto的注册

  首先声明全局变量:

  var TTS:IVTxtAuto;

  然后,在FormCreate中用VtxtAuto类型库的Register函数注册软件。同时,初始化滚动条控件,用于设定系统语速状态。

procedure TForm1.FormCreate(Sender: TObject);
begin
 TTS:=CoVtxtAuto_.Create;//产生自动化对象
 TTS.Register('WingRocWords','WingRocWords');//向服务器注册
 suiTrackBar.Position:=TTS.Get_Speed;//获得语音速度
 speedtext.Caption:='当前速度:'+IntToStr(TTS.Speed)+' 字/分钟'; //显示语音速度
end;
  
  3.2 朗读按钮代码的实现

procedure TForm1.ReadClick(Sender: TObject);
begin
 TTS.Speak(TxtMemo.Lines.Text,vtxtst_READING);//朗读文本控件中的内容
end;

  3.3 停止按钮代码的实现

procedure TForm1.StopClick(Sender: TObject);
begin
 TTS.StopSpeaking;//停止朗读
end;

  3.4 暂停按钮代码的实现

procedure TForm1.PauseClick(Sender: TObject);
begin
 if TTS.IsSpeaking//判断系统是否处于朗读状态
 then
  TTS.AudioPause;//如果为真,暂停朗读
 else
  ShowMessaget('未在朗读状态!');//如果为假,显示错误信息
end;

  3.5 恢复按钮代码的实现

procedure TForm1. ResumeClick(Sender: TObject);
begin
 TTS.AudioResume;//恢复朗读状态
end;

  3.6 向前按钮代码的实现

procedure TForm1. FastForwardClick(Sender: TObject);
begin
 TTS.AudioFastForward;//向前跳转一句
end;

  3.7 向后按钮代码的实现

procedure TForm1. RewindClick(Sender: TObject);
begin
 TTS.AudioRewind;//向后跳转一句
end;

  3.8 导入按钮代码的实现

procedure TForm1.InputClick(Sender: TObject);
begin
 if OpenDialog.Execute //激活OpenDialog控件
 then
  TxtMemo.Lines.LoadFromFile(OpenDialog.FileName); //向文本控件中导入朗读内容
end;

  3.9 导出按钮代码的实现

procedure TForm1.OutputClick(Sender: TObject);
begin
 if SaveDialog.Execute //激活SaveDialog控件
 then
  TxtMemo.Lines.SaveToFile(SaveDialog.FileName); //保存编辑好的朗读内容
end;

  4、软件生成和测试

  当程序代码编写好后,在Delphi平台上运行程序,Delphi会自动生成可执行文件。运行可执行程序,导入英文文档,点击朗读等按钮进行测试。软件中的各项功能运行良好,并且兼容Windows所有版本。

  结束语

  在英语教学中,“发音”是十分重要的一个环节,让计算机实现辅助教师对学生的发音教学工作显得尤为重要。在本文中,对利用MSTTS技术开发软件进行了深入的研究和实践,突破了以往的软件只能针对单词发音以及无法控制发音状态的缺陷,在Delphi平台上开发了功能全面的英文发音教学软件,不仅可以实现模仿真人的标准发音功能和对多文档的连续朗读,而且还可以对朗读的语速、语调等自由设定。

jeyor的英文读音

jeyor的用英文这么读:
  • jeyor
  • jeyor
  • 2010年05月27日 15:49
  • 383

英语中容易混淆的单词发音: 一

创建此贴的原因是发现经常有点单词容易混淆,分不清他们的发音,所以借助此贴悉心收集的容易混淆的单词发音。持续更新中... 1. worn--warn     发音一样,都发[wɔ:n],所以需要结合...
  • hailanzhijia
  • hailanzhijia
  • 2012年01月07日 19:01
  • 5865

英语知识系列:26个字母在单词中的发音总结

整理了26个字母在单词中的发音,如下(仅供参考) 元音为绿色 字母[字母音] 其他发音 A[ei]          ei/æ/a B[bi:]          b C[si:]       ...
  • RadianceBlau
  • RadianceBlau
  • 2017年06月29日 00:17
  • 660

Android利用有道API播放英文发音

定义一个Service 例如AudioService 继承自android.app.ServiceAudioService.javapackage com.outsider.service;impo...
  • tz_yhj
  • tz_yhj
  • 2017年01月16日 21:35
  • 724

python爬取20000个单词音频

这篇博客将从找目标到代码完整的记录此过程。 真实需求: 下载了20000个单词,结果只有单词没有音频,这怎么行呢? 作为一名喜欢自动化的童鞋来说,才不会再去网上找音频,所以干脆写个程序吧。 步骤...
  • jimo_lonely
  • jimo_lonely
  • 2017年02月24日 10:37
  • 1227

超级实用的数学软件,老师最爱!

随着科技的进步,传统化的教育教学方式已经很难适应现代化的教学进程,多媒体教学似乎已经完全普及的同时,现代化的教学方式要摆脱展示性的功能,进而发展到更快捷,更形象,更高效的教育模式,相关的辅助工具软件就...
  • EducationSoft
  • EducationSoft
  • 2016年04月15日 11:05
  • 1963

springcloud相关词语英文读法

最近在学springcloud,遇到大量新名词。这里统一收集,方便忘了怎么读的时候看看...
  • Failure_Lee
  • Failure_Lee
  • 2017年10月24日 10:26
  • 377

英文符号的英语发音

-     Dash _    Underscore $    Dollar sign #    Number sign %    Percent sign *     asterisk//     ...
  • hollson
  • hollson
  • 2004年12月24日 09:20
  • 1588

[iOS]《美式英语发音》version 1.0 完成

《美式英语发音》version 1.0 完成 前文提到将开发一个美式英语发音的 app,经过半个月的业余开发,version 1.0 终于完成。 我已经将源码开源放在 Github 上...
  • kesalin
  • kesalin
  • 2011年08月06日 21:08
  • 6531

Java实现带发音的简易电子词典

Java实现带发音的简易电子词典(以下所有内容均属作者原创,使用请注明出处!)最近我们在做Java的综合实训,我的题目比较简单,是做一个带有发音功能的简易电子词典。 要求:设计一个发音电子词典,具有...
  • qq_35524157
  • qq_35524157
  • 2017年06月28日 21:10
  • 774
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于Delphi的英文发音教学软件的实现
举报原因:
原因补充:

(最多只允许输入30个字)