浙江大成建设集团网站,p2p网站建设方案策划书,如何在社交网站上做视频推广,手机网站pc网站系统#xff1a;window7
软件#xff1a;vc6.0
目的#xff1a;简易文字转语音真人发声 利用2023国庆小长假#xff0c;研究如何将文言转语音#xff0c;之前在网上查询相关知识#xff0c;大致了解微信语音转换#xff0c;翻译官之类软件的原理#xff0c;但要加入神…系统window7
软件vc6.0
目的简易文字转语音真人发声 利用2023国庆小长假研究如何将文言转语音之前在网上查询相关知识大致了解微信语音转换翻译官之类软件的原理但要加入神经思维和训练模型太繁琐了猛然发现原来微软win7及以上版本自带的语音合成引擎可以直接拿来用不需要额外的dll文件太棒了参考帖子如下
1.C 简单的语音合成(TTS即文字转语音)类_vs2002 c 配置 tts-CSDN博客
但这里头的代码不能直接拿来用例如.cpp的nullptr需要改为NULL.cpp内头文件需要包含#include stdafx.h #include TTS.h
2.如何使用Microsoft Speech SDK开发包-百度经验
TTS类中包含以下文件
#include sapi.h #include sphelper.h #pragma comment(lib, sapi.lib)
来源于SDK51所以要按文章分享的内容将这三个SpeechSDK51.exe 、 msttss22L.exe、SpeechSDK51LangPack.exe下载下来先单独解压到独立的3个文件夹然后在固定位置例如D:\SDK按顺序执行安装这3个exe到相同位置即可实际上msttss22L.exe个人并没有安装只是安装SpeechSDK51.exe 和SpeechSDK51LangPack.exe。并在vc6中做好设置如下图。 3.整个TTS类内最核心有用的函数就是Speak
bool TTS::Speak(std::wstring word) { StopVoice(); if (InitVoice()) { HRESULT ret m_pSpVoice-Speak(word.c_str(), SPF_ASYNC, NULL); return ret; } else { return false; }
}
但这个wstring类型的参量在vc6还真不容易调用。本人做的是基于对话框MFC的小程序开发通用的字符串处理类CString版本比较老无法直接转std::wstring类型,因为没有GetString()这个函数为此参考了如下帖子
1char*转wstring-CSDN博客
但是这个写法只有new 没有delete存在内存泄漏问题虽然可以解决CString转wstring出现的警告和错误但实际运行语音播报是无效的改造后的函数如下各位可以看看并想想啥原因
const wchar_t* TTS::CharToWchar(const char* ch) { const size_t len strlen(ch) 1; wchar_t* wch new wchar_t[len];//存在泄漏 mbstowcs(wch, ch, len); return wch; }
bool TTS::Speak(CString strCString) { StopVoice(); if (InitVoice()) { const char* strStl0; strStlstrCString.GetBuffer(0); strCString.ReleaseBuffer(); const wchar_t* word CharToWchar(strStl); HRESULT ret m_pSpVoice-Speak(word, SPF_ASYNC, NULL); return ret; } else { return false; }
} 以下为设置断点跟踪发现word并没有得到“欢迎”的传值 2const char*转换成wstring类型-CSDN博客
错误wstring 是const short*类型不是const char*此法失败
3Cstring转LPWSTR/LPCWSTR..BSTR、LPSTR、LPWSTR、CString、VARIANT、COleVariant 、_variant_t、CComBSTR、_bstr_t ._cstring 转 lpwstr-CSDN博客字符串转换涉及Unicode和非Unicode转换因为vc6.0是基于非Unicode的从帖子的代码得到灵感和解决办法CString str_T(TestStr); USES_CONVERSION; //关于USES_CONVERSION宏-CSDN博客 LPCWSTR pwcStr A2CW((LPCSTR)str); 如此将类型传值载入wstring参数问题完美解决 注意这个宏最好用于局部函数内不能用于重复多次的调用如递归、定时器内否则容易导致程序崩溃。