如何使用微软的TTS(语音合成)??

hujun4u 2003-07-25 05:07:48

我下载了MSTTS.EXE 和SPCHAPI.EXE
却不知如何使用!!
请大侠指教!!
...全文
875 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wildhorse01 2003-07-29
  • 打赏
  • 举报
回复
是可以说中文的,我试过
chinabcb有例子代码
hujun4u 2003-07-29
  • 打赏
  • 举报
回复
再次请问大侠们
如何设置说中文!!
据说是可以说中文的,但不知如何实现
hujun4u 2003-07-29
  • 打赏
  • 举报
回复
wildhorse01(ChinaBCB之雨中漫步) :

能否讲的再详细点,我么有找到!!
  • 打赏
  • 举报
回复
再看看这个,我对TTS没什么兴趣,只好你自己安装TTS后调试了:
 回复人: wjzhuang(痛苦中的程序猪)运行通过,不过小弟的声卡刚好坏掉。那位兄弟帮我试试看效果如何。有问题的话请告诉我。
//Unit.h
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include
//---------------------------------------------------------------------------
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
#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*)&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
#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), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
//---------------------------------------------------------------------------
 回复人: wjzhuang(痛苦中的程序猪)
我原来的CoCreateInsance参数错了
改为:
OleCheck(CoCreateInstance(CLSID_VTxtAuto_,0,CLSCTX_ALL,IID_IVTxtAuto, (LPVOID*)&IVTxtAuto1));
就可以了,小小一个参数竟然...@#$%^&*()_+!
 回复人: SSTS(铁冰)
IVTxtAuto *TTS;
CoVTxtAuto_ aa;
TTS=aa.Create();
TTS->Register(上面有);
TTS->set_Speed(150);
TTS->Speak(上面有);
  • 打赏
  • 举报
回复
(我不想侵犯别人的“知识产权”)
回复人: fleamboy(fleamboy) 得0分
本人有一个dephi的列子,大家看看,很好改为BCB,等我该好了铁出来:
     在程序中加入英文朗读功能
----金山词霸2000的英文全文朗读功能相信一定给尝试过的用户留下了很深刻的印象,而作为一个程序设计者,你一定也想在自己的程序中加入类似的功能吧,因为那将让自己的程序增色不少。

----其实这并不是一件困难的事,因为金山词霸实际上也只是直接使用了MS的TTS(Text-to-Speech)技术而已,通过对MS Speech API 的编程,我们完全可以实现比其更强大的功能。下面,让我们在Delphi环境下实际尝试一下。

----首先从金山词霸的光盘上\ciba目录下运行并安装mstts.exe(MS TTS engine)和spchapi.exe(MS Speech API)。

----再在Delphi里新建一个Application。

----然后从Delphi的菜单Project/Import Type Library... 中选击Add...,浏览到Windows目录下的Speech子目录里,打开vtxtauto.tlb,可以看到下面Class names中会出现我们需要的接口的包装类的名字TVTxtAuto,注意对话框底部的Generate Component Wrapper需要被选中,点击Create Unit就可以打开一个名为VTxtAuto_TLB的Unit。

----至此,我们就可以开始实际编程了。

----首先在Form的OnCreate中对需要使用接口初
始化并进行注册:
...
procedure TfrmMain.FormCreate(Sender: TObject);
begin
FISpeech := CoVTxtAuto_.Create;
FISpeech.Register(‘Demo Site',‘Demo App');
end;
...


----由于Delphi对接口进行了良好的包装,因此只需直接建立包装类,其他后台的操作如接口的查询、释放等交给Delphi在后台自动完成。

----注意这里的Register操作是必不可少的,因为能有多个程序不同设置使用TTS引擎。

----然后在MainForm上放一个TMemo和若干个TButton,并在其OnClick中加入对应的代码。

Form定义如下:
object frmMain: TfrmMain
Left = 296
Top = 187
BorderStyle = bsDialog
Caption =‘英文全文朗读演示'
ClientHeight = 185
ClientWidth = 456
Color = clBtnFace
Font.Charset = GB2312_CHARSET
Font.Color = clWindowText
Font.Height =-12
Font.Name =‘宋体'
Font.Style = []
OldCreateOrder = False
Position = poDesktopCenter
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 12
object memText: TMemo
Left = 8
Top = 8
Width = 361
Height = 169
ScrollBars = ssVertical
TabOrder = 0
end
object btnRead: TButton
Left = 376
Top = 8
Width = 75
Height = 25
Caption =‘朗读(&R)'
TabOrder = 1
OnClick = btnReadClick
end
object btnPause: TButton
Left = 376
Top = 40
Width = 75
Height = 25
Caption =‘暂停(&P)'
Enabled = False
TabOrder = 2
OnClick = btnPauseClick
end
object btnStop: TButton
Left = 376
Top = 72
Width = 75
Height = 25
Caption =‘停止(&S)'
Enabled = False
TabOrder = 3
OnClick = btnStopClick
end
object btnForward: TButton
Left = 376
Top = 120
Width = 75
Height = 25
Caption =‘下一句(&N)'
Enabled = False
TabOrder = 4
OnClick = btnForwardClick
end
object btnRewind: TButton
Left = 376
Top = 152
Width = 75
Height = 25
Caption =‘上一句(&W)'
Enabled = False
TabOrder = 5
OnClick = btnRewindClick
end
end


----关键代码段如下:

---- 1.朗读与停止
...
procedure TfrmMain.btnReadClick(Sender: TObject);
begin
FISpeech.Speak(memText.Lines.Text, vtxtst_
READING);
btnPause.Enabled := True;
btnStop.Enabled := True;
end;

procedure TfrmMain.btnStopClick(Sender: TObject);
begin
FISpeech.StopSpeaking;
btnPause.Enabled := False;
btnStop.Enabled := False;
btnPause.Caption :=‘暂停(&P)';
end;
...


----Speak成员函数的第一个参数向TTS引擎传递需要朗读的文字,第二个参数由指定朗读时使用的语气和优先级的两个符号合并而成。

---- 2.暂停与恢复
...
procedure TfrmMain.btnPauseClick(Sender: TObject);
begin
with FISpeech do
if IsSpeaking then
begin
AudioPause;
btnPause.Caption :=‘恢复(&R)';
end
else
begin
AudioResume;
btnPause.Caption :=‘暂停(&P)';
end;
end;
...


----这里通过IsSpeaking属性可以取得当前状态,
然后通过AudioPause和AudioResume暂停和恢复朗读。

----另外用成员函数AudioFastForward和AudioRewind 可以向前和后跳过一句朗读,通过读写Speed属性还可以取得或设置朗读的语速,单位是字/分,缺省值为170。

----注意Speed和Enabled属性缺省设置是只写的,但实际上IVTxtAuto提供了Get_Speed和Get_Enabled函数,所以我们只要把VTxtAuto_TLB 单元中的声明修改一下,如:
...
IVTxtAuto = interface(IDispatch)
...
property Speed: Integer read Get_Speed write Set_Speed;
property Enabled: Integer read Get_Enabled write Set_Enabled;
...
end;
...
wenyongjie 2003-07-25
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1832/1832887.xml?temp=.1852533
http://expert.csdn.net/Expert/topic/1813/1813125.xml?temp=.1555292
看一下这两个帖子,可能对你有帮助.

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧