小弟初学,请大家多多指点 怎样使用金山词霸的语音库 最好有源码 ,谢先(100分)

  • 主题发起人 主题发起人 lijun_snut
  • 开始时间 开始时间
L

lijun_snut

Unregistered / Unconfirmed
GUEST, unregistred user!
我在作多媒体程序,需要使用语音技术,虽然读录好的wav文件比较流畅,但是扩充性不好,问题很多。想用语音库技术,这方面我一窍不通,请大家指点
 
金山用的是微软的tts,win2000自带tts4,xp带的是tts5,而Agent精灵用的是tts4,你想玩哪个?
 
关注ing
等等下文。请介绍一下tts5如何用delphi调用。如何?
 
在C++Builder使用TTS(Text To Speech)
作者: wjzhuang ,如转载请保证本文档的完整性,并注明出处。
欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=124
启动BCB,打开菜单项PROJECT->Import Type Library...,在弹出的对话框中单击Add,选择windows/speech目录下的Vtxtauto.tlb,加入VtxtAuto[Version 1.0]一项。单击OK,BCB就会自动生成一个VtxtAuto_TLB.cpp文件。这个文件包含了TTS引擎的COM类接口,可以用来与DLL文件通信。新建一个工程,将这个文件包含进来:
源码如下:
//Unit.h

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TEdit *Edit1;
TButton *Button1;
void __fastcall FormCreate(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//Unit.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "wstring.h"
#include "VTxtAuto_TLB.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
IVTxtAuto *IVTxtAuto1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
WideString a = "Demo1";
WideString b = "Project1.exe";
WideString c= "Hi,I am trying to speak to you,Do you hear me?";

IVTxtAuto1 = NULL;
CoInitialize(NULL);
OleCheck(CoCreateInstance(CLSID_VTxtAuto_,0,CLSCTX_ALL,IID_IVTxtAuto, (LPVOID*)&amp;IVTxtAuto1));
IVTxtAuto1->Register(a,b);
IVTxtAuto1->set_Enabled(1);
IVTxtAuto1->set_Speed(150);
IVTxtAuto1->Speak(c,vtxtsp_VERYHIGH);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(IVTxtAuto1 != NULL)
{
IVTxtAuto1->Speak((WideString)Edit1->Text,vtxtsp_VERYHIGH);
ShowMessage("OK");//我的调试语句(没声卡)
}else
{
ShowMessage("服务器没有初始化成功");
}
}
//---------------------------------------------------------------------------
//Project.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
USERES("Project1.res");
USEFORM("Unit1.cpp", Form1);
USEUNIT("D:/Borland/CBuilder5/Imports/VTxtAuto_TLB.CPP");
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &amp;Form1);
Application->Run();
}
catch (Exception &amp;exception)
{
Application->ShowException(&amp;exception);
}
return 0;
}
//---------------------------------------------------------------------------
 
金山词霸还有自己的语音库?
大家说,有没有?
其实就tts。
 
[返回]
计算机世界2000年第7期

利用Text To Speech技术编程

国防科技大学 孟兵

  用金山词霸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,
  IID_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 下调试运行通过。 
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
719
import
I
I
回复
0
查看
774
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部