VC++使用Microsoft Speech SDK进行文字TTS朗读

Microsoft Speech SDK下载地址
https://www.microsoft.com/en-us/download/details.aspx?id=10121
需要msttss22L.exe、SpeechSDK51.exe、SpeechSDK51LangPack.exe三个,下载后全部安装
在这里插入图片描述
使用VS2005建立一个win32控制台项目
朗读"hello word"、中文“你好”的程序

#include <sphelper.h>//语音头文件
#include <stdio.h>

int main(int argc, char* argv[])
{
    
    
	ISpVoice * pSpVoice = NULL;//初始化语音变量

	::CoInitialize(NULL);//初始化语音环境

	//给语音变量创建环境,相当于创建语音变量,FAILED是个宏定义,就是来判断CoCreateInstance这个函数又没有成功创建语音变量,下面是不成功的提示信息。
	if (FAILED(CoCreateInstance(CLSID_SpVoice, NULL,CLSCTX_INPROC_SERVER, IID_ISpVoice, (void **)&pSpVoice)))
	{
    
    
		printf("Failed to create instance of ISpVoice! "); 
		return -1;
	}

	pSpVoice->Speak(L"Hello World!你好!", SPF_DEFAULT, NULL);//执行语音变量的Speek函数,这个函数用来读文字。
	
	pSpVoice->Release(); //释放语音变量
	::CoUninitialize();//释放语音环境

	getchar();
	return 0;
}

点击项目,属性,配置属性,c/c++。设置附加包含目录,就是sdk安装目录下的include文件夹
在这里插入图片描述
链接器,常规,附加库目录就是sdk的lib\i386文件夹
在这里插入图片描述
链接器,输入,附加依赖项,添加sapi.lib
在这里插入图片描述
使用vs2005编译链接,会出现报错

1>c:\program files (x86)\microsoft speech sdk 5.1\include\sphelper.h(769) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\microsoft speech sdk 5.1\include\sphelper.h(1419) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\microsoft speech sdk 5.1\include\sphelper.h(2373) : error C2065: “psz”: 未声明的标识符
1>c:\program files (x86)\microsoft speech sdk 5.1\include\sphelper.h(2559) : error C2440: “初始化”: 无法从“CSpDynamicString”转换为“SPPHONEID *”
1>        没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
1>c:\program files (x86)\microsoft speech sdk 5.1\include\sphelper.h(2633) : error C2664: “wcslen”: 不能将参数 1 从“SPPHONEID *”转换为“const wchar_t *”

SAPI 包含sphelper.h编译错误解决方案, 在使用Microsoft Speech SDK 5.1开发语音识别程序时,包含了头文件“sphelper.h”和库文件“sapi.lib”
对sphelper.h的修改:
Line 769

const ulLenVendorPreferred = wcslen(pszVendorPreferred);
修改为:
const unsigned long ulLenVendorPreferred = wcslen(pszVendorPreferred);

Line 1418

static CoMemCopyWFEX(const WAVEFORMATEX * pSrc, WAVEFORMATEX ** ppCoMemWFEX)

修改为:
static HRESULT CoMemCopyWFEX(const WAVEFORMATEX * pSrc, WAVEFORMATEX ** ppCoMemWFEX)

Line 2372

for (const WCHAR * psz = (const WCHAR *)lParam; *psz; psz++) {
    
    }

修改为:
const WCHAR * psz; for (psz = (const WCHAR *)lParam; *psz; psz++) {
    
    }

Line 2559

SPPHONEID* pphoneId = dsPhoneId;

修改为:
SPPHONEID* pphoneId = (SPPHONEID*)((WCHAR *)dsPhoneId);

Line 2633

pphoneId += wcslen(pphoneId) + 1;

修改为:
pphoneId += wcslen((const wchar_t *)pphoneId) + 1;

之后编译通过,运行会朗读文本
Microsoft Speech SDK不仅支持Text to Speech(TTS)文字转语音,还支持Speech Recognition(SR)语音识别功能,可以自己尝试
下载
修改后的sphelper.h头文件
https://download.csdn.net/download/m0_60352504/88275713
Microsoft Speech SDK
https://download.csdn.net/download/m0_60352504/88275709

猜你喜欢

转载自blog.csdn.net/m0_60352504/article/details/132587535
今日推荐