读书人

关于BCB下使用TTS(需要哪些的相关安装

发布时间: 2012-03-07 09:13:51 作者: rapoo

关于BCB下使用TTS(需要哪些的相关安装东西) - C++ Builder / Windows SDK/API
希望在BCB下使用TTS,但按照以下步骤:
启动BCB,打开菜单项PROJECT->Import Type Library...,在弹出的对话框中单击Add,选择windows\speech目录下的Vtxtauto.tlb,加入VtxtAuto[Version 1.0]一项。单击OK,BCB就会自动生成一个VtxtAuto_TLB.cpp文件。
过程中,不能找到speech目录,然后本人找了个spchapi.exe安装之后能于bcb Imports文件夹下生成VtxtAuto_TLB.cpp等文件,调试程序来测试能否发音又不能成功发音。实在搞不懂为何。
注:安装了 windows sdk 1.5;
安装TTS_51_eng.msi文件的时候一闪就完,不知道是不是不能安装。
电脑上有安装谷歌金山词霸,词霸里面能发音。
希望有高手能给点建议,帮助实现BCB下使用TTS,分数有限,万分感谢。

[解决办法]
http://w.xue163.com/html/20091214/2810661.html
[解决办法]
需要一个BCB的 sapi.lib 文件,然后采用COM就行啦,不需要PROJECT->Import Type Library...,

这个BCB的 sapi.lib 文件可以从 http://downloads.sourceforge.net/project/bccsdk 找到bccsdk_0_0_7_2.zip (9.8M)下载的包内找到



A. 如何使用?

C/C++ code
#include <Sapi.h>//----------------------------------#pragma comment(lib,"hhctrl.lib")//----------------------------------void __fastcall TextSpeak(UnicodeString AText, Word ARate, Word AVolume){    ISpVoice * pVoice;    if ( SUCCEEDED(::CoInitialize(NULL)) )    {        if (::CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL,            IID_ISpVoice, (void **)&pVoice) == S_OK)        try        {            pVoice->SetRate(ARate);  // 语速 0 -> 20 ,-般在15左右            pVoice->SetVolume(AVolume); // 音量 0 -> 100             pVoice->Speak(AText.c_str(), 0, NULL);        }        __finally        {            pVoice->Release();        }        ::CoUninitialize();    }}
[解决办法]
用Import Type Library的方法可以的,按install后最好into new packge
编译安装控件,它会在控件的activeX栏中生成多个控件,在程序中直接用TSpVoice就可以
你可以选择你本机的自带的语音,我以前的测试程序你可参考一下:
//---------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "speektest.h"
//---------------------------------------
#pragma package(smart_init)
#pragma link "SpeechLib_OCX"
#pragma link "TntStdCtrls"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}



int TForm1::InitSpeek()
{
String s;
try {

ISpeechObjectTokensPtr p= SpVoice1->GetVoices(L"",L"") ;
sp[0]=sp[1]=NULL;
long n;
p->get_Count(&n);
for (int i=0;i<n;i++)
{
ISpeechObjectToken *m=p->Item(i);
s=m->get_Id();
if (s.Pos("MSSam")!=0)
sp[0]=m;
if (s.Pos("MSSimplifiedChineseVoice")!=0)
sp[1]=m;
}
}
catch(...)
{
return 1;
}
return 0;

}

int TForm1::Speek(String s,int c_e,int disperr)
{
if(sp[c_e]==NULL)
{
if (disperr)
ShowMessage("ûÕÒµ½¸ÃÓïÒôÖ§³ÖÎļþ");
return 1;
}
try
{
SpVoice1->_set_Voice(sp[c_e]);
SpVoice1->Speak(WideString(s),1);
}
catch(...)
{
if (disperr)
ShowMessage("ÓïÒôÖ§³Öʧ°Ü");
return 1;
}
return 0;
}

void test(String s)
{
String s1;
int stat;



stat=((s[1] & 0x80)==0x80)?1:0;
s1="";
for(int i=1;i<s.Length();i++)
{
if ((s[i] & 0x80)==0x80)
{
if (stat==1)
s1+= s[i];
else
{
// Form1->Memo1->Lines->Add(s1);
Form1->Speek(s1,stat,0);
s1=s[i];
stat=1;
}
}
else
{
if (stat==0)
s1+= s[i];
else
{
Form1->Speek(s1,stat,0);
// Form1->Memo1->Lines->Add(s1);
s1=s[i];
stat=0;
}
}

}
if (s1!="")
{
// Form1->Memo1->Lines->Add(s1);
Form1->Speek(s1,stat,0);
}
}
//---------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{

InitSpeek();
test(Memo1->Text);



}
//---------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
String s;
ISpeechObjectTokensPtr p= SpVoice1->GetVoices(L"",L"") ;
sp[0]=sp[1]=NULL;
long n;
p->get_Count(&n);
for (int i=0;i<n;i++)
{
ISpeechObjectToken *m=p->Item(i);
s=m->get_Id();
wchar_t *wc;
m-> GetDescription(0,&wc);
s_ct->AddItem(wc,(TObject *)m);
Memo1->Lines->Add(s);
}
s_ct->ItemIndex=0;
}
//---------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
if (s_ct->ItemIndex==-1)
{
ShowMessage("ÇëÑ¡ÔñÓïÒô");
return;
}
SpVoice1->Speak(WideString(Memo1->Text),1);
s_ctSelect(Sender);
}
//---------------------------------------

void __fastcall TForm1::s_ctSelect(TObject *Sender)
{
if (s_ct->ItemIndex==-1)
return;

SpVoice1->Pause();
ISpeechObjectToken *m = (ISpeechObjectToken *)
s_ct->Items->Objects[s_ct->ItemIndex] ;
SpVoice1->_set_Voice(m);
SpVoice1->Resume();

}
//---------------------------------------

读书人网 >C++ Builder

热点推荐