《MFC添加语音功能》

版权声明:本文为博主原创文章,未经博主允许不得转载,博客地址: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链接:

https://download.csdn.net/download/mars_xiaolei/10666223

猜你喜欢

转载自blog.csdn.net/mars_xiaolei/article/details/82697259