版权声明:本文为博主原创文章,未经博主允许不得转载,博客地址:http://blog.csdn.net/mars_xiaolei。 https://blog.csdn.net/mars_xiaolei/article/details/82697259
MFC一般提示都是用消息对话框来处理,同时我们也可以加上语音播报功能。语音播报我们可以调用微软自带的Microsoft Speech API (SAPI) 5.4,它里面有语音识别,还有有一个Text-to-Speech 引擎,可以将文本转化为语音,我们用的就是这个。
下面我们创建一个简单的MFC例子来演示这玩意是怎么用的
一、创建一个对话框取名叫“Speak”,添加一个按钮,修改为“语音播报”
二、添加头文件
1、找到下面这两个头文件,将它们和源文件放在一块
2、解决方案,项目名称“Speak”右键选择添加"现有项",然后选择上面那两个头文件,点确定,头文件就添加完了
3、包含头文件,创建对象
#include "TextSpeaker.h"
gds::CTextSpeaker m_TextSpeak;
4、双击“”语音播报“”按钮,添加控件响应函数,添加如下代码:
void CSpeakDlg::OnBnClickedButton1()
{
//< TODO: 在此添加控件通知处理程序代码
m_TextSpeak.Speak(_T("Hello World!"));
}
然后运行程序,点击按钮,就会出现一个女声美式发音。
5、如果报以下错误,那就是属性选择的字符集的问题,将TextSpeaker.h里面代码进行修改:
void Speak(const CString &text)
{
//
// Input text must not be empty
//
if (text.IsEmpty())
{
ATLTRACE(TEXT("Empty text passed to CTextSpeaker::Speak().\n"));
AtlThrow(E_INVALIDARG);
}
//
// Speak input text
//
ULONG streamNumber;
//USES_CONVERSION;
//LPCWSTR pwcStr = A2CW((LPCSTR)text);
HRESULT hr = m_tts->Speak(text, SPF_IS_NOT_XML | SPF_ASYNC | SPF_PURGEBEFORESPEAK, &streamNumber);
if (FAILED(hr))
{
ATLTRACE(TEXT("Speak failed.\n"));
AtlThrow(hr);
}
}
完整Demo链接: