MFC 使用sapi文字转换为语音

文章目录

添加头文件

声明变量

c 复制代码
pSpVoice = NULL; //默认构造函数中初始化为空
bool CChKBarSCCodeApp::InitSpVoice()
{
	HRESULT hr = ::CoInitialize(NULL);         // COM初始化
	if (!SUCCEEDED(hr))
	{
		AfxMessageBox(_T("声音环境初始化失败!"));
		return false;
	}
	// 获取ISpVoice接口
	if (FAILED(CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_INPROC_SERVER, IID_ISpVoice, (void**)&pSpVoice)))
	{
		AfxMessageBox(_T(" 获取ISpVoice接口失败!"));
		return -1; // 当获取ISpVoice接口失败时,返回-1
	}
	//SpFindBestToken是SAPI中的一个函数,用于根据指定的属性条件查找最佳的语音token
	if (SUCCEEDED(SpFindBestToken(SPCAT_VOICES, L"language=804", NULL, &pSpObjectToken)))//804代表中文
	{
		pSpVoice->SetVoice(pSpObjectToken);//设置中文
		pSpVoice->SetVolume(m_oHardPara.m_nVolumeSize);//设置声音大小
		pSpVoice->SetVolume(m_oHardPara.m_nVolumeSpeed);
	}
	else
	{
		AfxMessageBox(_T("没有安装微软语音库!"));
		return false;
	}
	return true;
}

void CChKBarSCCodeApp::SpVoiceOK()
{
	CString sTxt =_T("扫描成功");
	pSpVoice->Speak(sTxt.AllocSysString(), SPF_ASYNC, NULL);//异步读取
}

void CChKBarSCCodeApp::SpVoiceNG()
{
	CString sTxt = _T("扫描失败");
	pSpVoice->Speak(sTxt.AllocSysString(), SPF_ASYNC, NULL);//异步读取
}
c 复制代码
int CChKBarSCCodeApp::ExitInstance()
{
	

	if (pSpVoice)
	{
		pSpVoice->Release();
	}
	::CoUninitialize();

	return CWinApp::ExitInstance();
}
相关推荐
apocelipes8 小时前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
郝学胜_神的一滴2 天前
CMake 034:生成器表达式:解耦构建时序、精简分支逻辑的终极利器
c++·cmake
见过夏天2 天前
C++ 基础入门完全指南
c++
用户805533698034 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
BadBadBad__AK4 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
卷无止境5 天前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
卷无止境5 天前
OpenMPI、MPICH 与 OpenMP:关系、核心概念与架构全解
c++·后端
郝学胜_神的一滴6 天前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
卷无止境8 天前
C++ 的Eigen 库全解析
c++
卷无止境8 天前
现代 C++特性大盘点:一门脱胎换骨的老语言
c++·后端