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
点击阅读原文下载
相关资讯
最新热门应用
非小号交易平台官网安卓版
其它软件292.97MB
下载
币交易所地址
其它软件274.98M
下载
iotx交易所app
其它软件14.54 MB
下载
zt交易所安卓最新版
其它软件273.2 MB
下载
币拓交易所bittok
其它软件288.1 MB
下载
u币交易所平台app
其它软件292.97MB
下载
热币全球交易所app官网版
其它软件287.27 MB
下载
多比交易平台app
其它软件28.28MB
下载
币赢交易所app官网安卓版
其它软件14.78MB
下载
toncoin币交易所安卓版
其它软件48MB
下载