关于语音朗读TTS的问题

神秘_博士 神秘_博士 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include "SpeechLib_OCX.h"
#include "SpeechLib_TLB.h"

TSpVoice *SpVoice1;
ISpeechObjectTokensPtr sots;

DWORD __stdcall TreadPlay(LPVOID lpParametr)
{
WideString con=Form1->Memo1->Text;
::CoInitialize(NULL);
SpVoice1->Speak(con, SVSFDefault);
::CoUninitialize();
return 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
SpVoice1=new TSpVoice(this);
sots=SpVoice1->GetVoices(WideString("Language=804"), (wchar_t*)"");
if(sots->get_Count() == 0)
{
MessageBox(Handle, "没有安装中文朗读语音库!", "警告", MB_OK +
MB_ICONWARNING);
Close();
}
//列出所有语音库
ComboBox1->Items->Clear();
for(int i=0;i<sots->get_Count();i++)
{
ComboBox1->Items->Add(sots->Item(i)->GetDescription(NULL));
}
ComboBox1->ItemIndex = 0;
SpVoice1->_set_Voice(sots->Item(0));//设置发音
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)//播放按钮
{
CreateThread(NULL,0,TreadPlay,this,0,NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)//继续按钮
{
SpVoice1->Resume();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Change(TObject *Sender)//更换发音
{
SpVoice1->_set_Voice(sots->Item(Form1->ComboBox1->ItemIndex));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::trckbr1Change(TObject *Sender)//音量
{
SpVoice1->set_Volume(trckbr1->Position);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::trckbr2Change(TObject *Sender)//语速
{
SpVoice1->set_Rate(trckbr2->Position);
}
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
SpVoice1->Pause();//关闭时先停止,因为不知道停止怎么实现,先用暂停代替
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
delete SpVoice1;
}
//---------------------------------------------------------------------------

问题:
1、怎么判断机子是否安装了微软的tts引擎呢?
2、怎么判断当前说话结束没有?上面只是部分代码,因为我想说话结束前,“播放”按钮不可用,播放完才可用。
3、怎么实现停止功能?TSpVoice 只有pause()和resume()函数,好像没有停止。
4、怎么实现播放过程中改变发音、音量、语速?上面更改了,但是只有本次播放完,对下次播放才能生效。
...全文

相关推荐

评论 9
收藏 已收藏
分享
返回顶部