用金山词霸2000进行查字典时,可以同时读出相应的英文单词,这大大方便了用户的使用。其实,我们也可以在自己的应用程序中加入这种功能。金山词霸2000中利用的语音发声就是微软的Text To Speech技术,简称为MSTTS。在金山词霸2000的安装过程中,将自动安装MSTTS,我们也可以利用金山词霸2000安装光盘中的MSTTS.EXE文件单独安装。安装成功后,系统的Windows目录下将有一个Speech子目录,其中安装了相应的支持文件。其中的Vcmd.exe作为进程外的自动化服务器,提供将文本转换为语音的服务。Vtxtauto.tlb为相应的类型库,对服务器的接口给出了与语言无关的描述。在注册表中注册了相应的接口和自动化对象Speech.VoiceText.1。下面给出一个使用Delphi利用相应接口进行开发的简单例子,程序可以读出一个文本编辑控件中的文本。例子主要利用Win32的COM API进行编程,该方法同样适用于VC等开发语言。    首先,选择Project|Import Type Library菜单项检查是否注册了相应的类型库文件Vtxtauto.tlb,如果没有,选择安装目录下的Vtxtauto.tlb文件进行注册,此时,Delphi将在Import子目录下生成该类型库的Object Pascal"包装"文件VtxtAuto_TLB.Pas,打开该文件可以看到该自动化对象支持的接口较为简单,只有一个IVTxtAuto接口,下面是该接口的说明:    IVTxtAuto = interface(IDispatch)    [‘{FF2C7A50-78F9-11CE-B762-00AA004CD65C}']    procedure Register(const pszSite: WideString; const pszApp: WideString);safecall;    procedure Speak(const pszBuffer: WideString; dwFlags: Integer); safecall    procedure StopSpeaking; safecall;    procedure AudioPause; safecall;    procedure AudioResume; safecall;    procedure AudioRewind; safecall;    procedure AudioFastForward; safecall;    procedure Set_Callback(const Param1: WideString); safecall;    procedure Set_Speed(pdwSpeed: Integer); safecall;    function Get_Speed: Integer; safecall;    procedure Set_Enabled(pdwEnabled: Integer);safecall;    function Get_Enabled: Integer; safecall;    function Get_IsSpeaking: WordBool; safecall;    property Callback: WideString write Set_Callback;    property Speed: Integer write Set_Speed;    property Enabled: Integer write Set_Enabled;    property IsSpeaking: WordBool read Get_IsSpeaking;    end;    新建一个应用程序,在新建的工程中加入VtxtAuto_TLB.Pas,并在主窗体单元中引用该文件。在主窗体中加入一个编辑控件(TEdit)和一个按钮(TButton),在主窗体单元中说明全局变量IVTxtAuto1:IVTxtAuto。在主窗体的创建过程中加入如下代码:IVTxtAuto1:=nill;    CoInitialize(nil);//初始化COM库    OleCheck(CoCreateInstance(CLASS_VTxtAuto_,nil,CLSCTX_ALL,ⅡD_IVTxtAuto,IVTxtAuto1));//创建IVTxtAuto接口 IVTxtAuto1.Register(‘Demo1',‘Project1.Exe');//向服务器注册    IVTxtAuto1.Set_Enabled(1);//使能TTS功能    IVTxtAuto1.Set_Speed(150);//设置语音速度    IVTxtAuto1.Speak(‘Hi,I am trying to speak to you, Do you hear me?',vtxtsp_VERYHIGH);//发声    在Button1的Click事件处理过程中加入如下的代码:    if IVTxtAuto1<>nil then    IVTxtAuto1.Speak(Edit1.Text,vtxtsp_VERYHIGH)    Else    ShowMessage( ‘服务器没用初始化成功');    编译运行程序就可以听到相应的Edit1编辑控件中文本的发音了。对于接口的其他方法可以参照类型库的说明进行使用,另外,也可以利用注册的OLE自动化对象Speech.VoiceText.1进行更为简洁的开发。声明变量msttsServer:OleVariant,利用如下的语句产生自动化对象,msttsServer:=CreateOleObject(‘Speech.VoiceText.1')。接着利用msttsServer自动化对象同样可以调用前面介绍的接口方法,这和通常利用自动化对象对MS Word等进行编程的方法一样。    利用相应的屏幕取词技术,我们同样可以实现金山词霸2000的功能。以上程序在Win98和Delphi5.0下调试运行通过。

解决方案 »

  1.   

    我知道,我刚刚做了一个,可以给你发音部分的原代码。可以给我发 E-mail: [email protected]
      

  2.   

    补充:不用向那为大虾说的那样烦琐,我经过改写的TTS引擎只需几个函数如:
    创建TTS: createtts;
    发音:sondstr(text:string);
    选择声音:changmodel(index:integer);
    怎么样是不是非常好用。那就发电邮吧,还等什么?
      

  3.   

    to Essence_zhx(艺森):
    我的email:[email protected] 请寄给我
      

  4.   

    Essence_zhx(艺森):
    能给我发一份吗?衷心感谢![email protected]
      

  5.   

     tts , ctts ,microsoft speech
    最后一个挺好用,但大了一点,你可以下载需要驱动和补丁将近200兆
      

  6.   

    by the way:the speech id ver 5.1
      

  7.   

    to Essence_zhx(艺森):
    我的email:[email protected] 请寄给我