《MFC让你的应用发声(TTS)》要点:
本文介绍了MFC让你的应用发声(TTS),希望对您有用。如果有疑问,可以联系我们。
WIN7之后,Windows系统自带微软语音库,使用语音库变得非常的简单,精简版就不必定了
对于win7及以上版本直接包括头文件和链接库
#include "sapi.h" #include "sphelper.h" #pragma comment(lib, "sapi.lib")
//界说三个变量
ISpVoice *m_pISpVoice = NULL;//初始化COM
IEnumSpObjectTokens *m_pIEnumSpObjectTokens=NULL;
ISpObjectToken *m_pISpObjectToken=NULL;
/*
* 函数功效 : 初始化语言包选择组合框控件
*/
void CVoiceTDlg::InitVoicePackageSelComboxCtrl(void)
{
//初始化COM组件
if(FAILED(::CoInitialize(NULL)))
{
MessageBox("初始化COM组件失败!", "提示", MB_OK|MB_ICONWARNING);
return;
}
//枚举所有语音Token
if(SUCCEEDED(SpEnumTokens(SPCAT_VOICES, NULL, NULL, &m_pIEnumSpObjectTokens)))
{
//获得所有语音Token的个数
ULONG ulTokensNumber = 0;
m_pIEnumSpObjectTokens->GetCount(&ulTokensNumber);
//检测该机械是否安装有语音包
if(ulTokensNumber == 0)
{
MessageBox("该机械没有安装语音包!", "提示", MB_OK|MB_ICONWARNING);
return;
}
//将语音包的名字参加组合框控件
CString strVoicePackageName = _T("");
CString strTokenPrefixText = _T("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\");
for(ULONG i=0; i<ulTokensNumber; i++)
{
m_pIEnumSpObjectTokens->Item(i, &m_pISpObjectToken);
WCHAR* pChar;
m_pISpObjectToken->GetId(&pChar);
strVoicePackageName = pChar;
strVoicePackageName.Delete(0, strTokenPrefixText.GetLength());
m_ComboxVoiceSel.InsertString(i, strVoicePackageName);
}
//设置默认的语音包选择
m_ComboxVoiceSel.SetCurSel(0);
}
}
void CVoiceTDlg::OnBnClickedButton2()
{
InitVoicePackageSelComboxCtrl();
UpdateData(true);
//获取ISpVoice接口
if(FAILED(CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_INPROC_SERVER, IID_ISpVoice, (void**)&m_pISpVoice)))
{
MessageBox("获取ISpVoice接口失败!", "提示", MB_OK|MB_ICONWARNING);
return;
}
//设置语言
m_pIEnumSpObjectTokens->Item(m_ComboxVoiceSel.GetCurSel(), &m_pISpObjectToken);
m_pISpVoice->SetVoice(m_pISpObjectToken);
//设置播放速度
m_pISpVoice->SetRate(/*m_SliderVoiceSpeed.GetPos()*/ 5);
//设置音量年夜小
m_pISpVoice->SetVolume(100 /*- m_SliderVoiceSize.GetPos()*/);
//检测朗读内容是否为空
if(m_EditContent.IsEmpty())
{
MessageBox("朗读内容不克不及为空!", "提示", MB_OK|MB_ICONWARNING);
return;
}
//开端进行朗读
m_pISpVoice->Speak(m_EditContent.AllocSysString(), SPF_ASYNC, NULL);
}
/*
* 函数功效 : 播放语音
*/
void CVoiceTDlg::OnBnClickedButton3()
{
//生成WAV文件
CComPtr<ISpStream> cpISpStream;
CComPtr<ISpStreamFormat> cpISpStreamFormat;
CSpStreamFormat spStreamFormat;
m_pISpVoice->GetOutputStream(&cpISpStreamFormat);
spStreamFormat.AssignFormat(cpISpStreamFormat);
HRESULT hResult = SPBindToFile("C:\Users\Administrator\Desktop\Test\test.wav",
SPFM_CREATE_ALWAYS,
&cpISpStream,
&spStreamFormat.FormatId(),
spStreamFormat.WaveFormatExPtr());
if(SUCCEEDED(hResult))
{
m_pISpVoice->SetOutput(cpISpStream, TRUE);
m_pISpVoice->Speak(m_EditContent.AllocSysString(), SPF_DEFAULT, NULL);
MessageBox("生成WAV文件胜利!", "提示", MB_OK);
}
else
{
MessageBox("生成WAV文件失败!", "提示", MB_OK|MB_ICONWARNING);
}
}
/*
* 函数功效 : 暂停/继续播放语音
*/
int i=0;
void CVoiceTDlg::OnBnClickedButton4()//暂停和继续
{
if (i==0)
{
m_pISpVoice->Pause();
i=1;
}
else
{
m_pISpVoice->Resume();
i=0;
}
}
/*
ISpVoice//成员函数
ISpEventSource继承方法 :ISpEventSource的所有方法都可以从该接口访问
SetOutput :设置当前的输出对象.可以使用NULL值来选择默认音频设备.
GetOutputObjectToken :检索当前音频输出对象的对象标记.
GetOutputStream :检索当前输出流的指针.
Pause :将声音暂停在最近的警报边界并关闭输出设备.
Resume : 将输出设备设置为RUN状态并恢复渲染.
SetVoice :设置用于文本合成的声音的身份.默认情况下,ISPVoice将使用“控制面板”中“语音”属性中设置的语音信息.
GetVoice :检索标识文本合成中使用的声音的对象标记.
Speak :说出文本字符串或文件的内容.
SpeakStream :说出流的内容.
GetStatus :检索与此ISpVoice实例关联的当前呈现和事件状态.
Skip :导致语音向前或向后跳过当前通话文本内的指定数量的项目.
SetPriority :设置语音的优先级.正常,警报,结束.
GetPriority :检索当前语音优先级.
SetAlertBoundary :指定哪个事件应该用作警报的插入点.
GetAlertBoundary :检索当前正用作警报插入点的事件.
SetRate :实时设置文本渲染速率调整.
GetRate :检索当前文本渲染速率调整.
SetVolume :实时设定合成器的输出音量.
GetVolume :检索合成器的当前输出音量.
WaitUntilDone :阻止呼叫者,直到语音完成说话或指定的时间间隔过去了.
SetSyncSpeakTimeout :设置以毫秒为单位的超时时间间隔,此语音同步Speak和SpeakStream调用此超时.
GetSyncSpeakTimeout :检索此ISpVoice实例的同步语音操作的超时间隔.
SpeakCompleteEvent :返回一个事件句柄,当语音完成后,将发出所有待处理的哀求信号.
IsUISupported :确定是否支持指定类型的UI.
DisplayUI :显示所哀求的UI.
*/
热文文,分享你的热文
转发文章就能赚钱的app
点击浏览原文下载
维易PHP学堂逐步分享更多《MFC让你的应用发声(TTS)》相关教程。欢迎交流
转载请注明本页网址:
http://www.vephp.com/jiaocheng/9142.html