-
2021-08-03 20:09:00
工作中excel的朗读功能可以校验输入数值是否正确,非常方便,而有的系统阉割了语音功能。本文结合网上的经验和自己的反复实验,纠正了网上的一些错误,总结了比较简洁的方法
链接:https://pan.baidu.com/s/1_wCL1LFZLMwplmkGCGzGBA 提取码:1111
方法1:使用第三方语音引擎
1.首先下载TTSrepair.exe安装,该安装程序为第三方公司提供,反复测试并无病毒,安装后可以在控制面板中的硬件和声音中找到语音
2.安装上文中的girl_xiaokun.exe,这是捷通华声为金山词霸提供的XiaoKun女声中英文TTS语音包,安装后在控制面板中的硬件和声音中找到语音
3.到此Excel的语音朗读功能就可以使用了。如果需要微软的语音引擎接下里的步骤复杂一些。
方法2:使用微软语音引擎
1.同样需要TTSrepair.
更多相关内容 -
Win7系统TTS语音修复安装包.7z
2020-07-17 11:53:54Win7系统下不能使用TTS语音引擎的问题。如果大家没使用正版的windows系统,那么很可能你的TTS语音是没有的。可以通过使用该补丁包解决TTS问题 -
Win7系统微软TTS语音修复补丁(x86和x64).7z
2020-07-23 17:59:07Win7系统微软TTS语音修复补丁(x86和x64) 说明:本修复补丁适用于32位或64位Win7系统,会自识别安装。 -
win7使用huihui语音包tts
2020-12-26 22:29:18win7使用huihui语音包tts -
win7系统调用tts的语音朗读功能
2020-09-18 10:08:34windows的tts组件,正版系统或者win10系统是可以直接调用成功的,但win7有的是阉割版,有的不支持,调用的时候各种异常,网上的人各种抄袭,不知道所以然,还爱瞎bb,我就费了好大劲才完全搞清楚。 常见的异常有: ...windows的tts组件,正版系统或者win10系统是可以直接调用成功的,但win7有的是阉割版,有的不支持,调用的时候各种异常,网上的人各种抄袭,不知道所以然,还爱瞎bb,我就费了好大劲才完全搞清楚。
常见的异常有:System.IO.FileNotFoundException HResult=0x8007007E Message=检索 COM 类工厂中 CLSID 为 {D9F6EE60-58C9-458B-88E1-2F908FD7F87C} 的组件失败,原因是出现以下错误: 8007007e 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。 Source=System.Speech StackTrace: 在 System.Speech.Internal.ObjectTokens.RegistryDataKey..ctor(String fullPath, IntPtr regHandle) 在 System.Speech.Internal.ObjectTokens.RegistryDataKey.Open(String registryPath, Boolean fCreateIfNotExist) 在 System.Speech.Internal.ObjectTokens.SAPICategories.DefaultDeviceOut() 在 System.Speech.Internal.Synthesis.VoiceSynthesis..ctor(WeakReference speechSynthesizer) 在 System.Speech.Synthesis.SpeechSynthesizer.get_VoiceSynthesizer() 在 System.Speech.Synthesis.SpeechSynthesizer.SpeakAsync(Prompt prompt) 在 System.Speech.Synthesis.SpeechSynthesizer.SpeakAsync(String textToSpeak)
SampleTTSVoice,System.ArgumentException: 不能设置语音。未安装匹配的语音,或语音被禁用。 在 System.Speech.Synthesis.SpeechSynthesizer.SelectVoice(String name)
开发语言可以使用C#,java,Python,或者微软的VBS,都可以,这几种语言的朗读代码网上都很好找,主要就是配置windows环境。
https://download.csdn.net/download/weixin_42209881/12844165
这是win7的tts修复包,下载下来直接安装,很简单。
修复好之后,就可以进行代码开发了,我以java为例,C#的和Python的可以留言,谁需要,找我要:
先下载一个这个jar包 : jacob.jar,
再下载一个dll库(32位和64位的注意区分):jacob-1.17-M2-x64.dll
这个dll库下载好之后要放在jdk和jre的bin目录下(jre的bin目录放不放不影响,但放上稳妥),就像这样
这些所有依赖我都放在了一起,可以一次下载下来:
下载链接:
https://download.csdn.net/download/weixin_42209881/12857855
然后看java代码:package com.zhang.test.speak; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant; public class SpeakVoice { public static void main(String[] args) { System.out.println(args[0]); speak(args[0]); //strat("语音朗读的内容", 0); System.exit(1); } /** * * @Title: strat * @Description: 该方法的主要作用:朗读 * @param @param content * @param @param type 设定文件 0:开始,1停止 * @return 返回类型:void * @throws */ public static void strat(String content, int type) { //这个Sapi.SpVoice是需要安装什么东西吗,感觉平白无故就来了 ActiveXComponent sap = new ActiveXComponent("Sapi.SpVoice"); // Dispatch是做什么的? Dispatch sapo = sap.getObject(); if (type == 0) { try { // 音量 0-100 sap.setProperty("Volume", new Variant(100)); // 语音朗读速度 -10 到 +10 sap.setProperty("Rate", new Variant(1.3)); Variant defalutVoice = sap.getProperty("Voice"); Dispatch dispdefaultVoice = defalutVoice.toDispatch(); Variant allVoices = Dispatch.call(sapo, "GetVoices"); Dispatch dispVoices = allVoices.toDispatch(); Dispatch setvoice = Dispatch.call(dispVoices, "Item", new Variant(1)).toDispatch(); ActiveXComponent voiceActivex = new ActiveXComponent( dispdefaultVoice); ActiveXComponent setvoiceActivex = new ActiveXComponent( setvoice); Variant item = Dispatch.call(setvoiceActivex, "GetDescription"); // 执行朗读 Dispatch.call(sapo, "Speak", new Variant(content)); } catch (Exception e) { e.printStackTrace(); } finally { sapo.safeRelease(); sap.safeRelease(); } } else { // 停止 try { Dispatch.call(sapo, "Speak", new Variant(content), new Variant( 2)); } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } } } public static void speak(String text) { ActiveXComponent sap = new ActiveXComponent("Sapi.SpVoice"); try { // 音量 0-100 sap.setProperty("Volume", new Variant(100)); // 语音朗读速度 -10 到 +10 sap.setProperty("Rate", new Variant(0)); // 获取执行对象 Dispatch sapo = sap.getObject(); // 执行朗读 Dispatch.call(sapo, "Speak", new Variant(text)); // 关闭执行对象 sapo.safeRelease(); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭应用程序连接 sap.safeRelease(); } } }
那个下载包里的speak.jar就是我这些代码生成的工具jar包,可以直接调用:
像这样,运行后,就听到响亮的朗读声音了
有什么不到之处,欢迎大家下方留言,讨论 -
Win7无法正常使用TTS语音修复工具及语音包
2019-01-27 18:49:48微软的TTS语音功能,但是在部分用户那里无法正常使用,,是由于用户使用了选简化版的Win7和XP操作系统导致。 -
win7TTS语言包.zip
2021-05-24 11:56:56可解决win7下speechSynthesis没有声音的问题,按照zip中description.txt的安装流程安装即可 -
TTS语音驱动,WindowsXP/WIN 7修复程序
2017-05-09 09:23:46TTS语音驱动,自带WindowsXP/WIN 7修复程序 -
讯飞TTS,讯飞tts语音引擎,C#
2021-09-10 23:23:28讯飞TTS-C#封装,方便c#使用TTS功能 -
windows Text To Speecht_tts语音引擎修复补丁集成版
2018-05-15 10:26:55windows Text To Speecht_tts语音引擎修复补丁集成版,修复阉割版无法使用语音播放功能。 -
谷歌TTS离线语音包.zip
2021-05-10 14:25:17Google TTS中文语音数据包内置,/data/user/0/com.google.android.tts/app_voices_greco_v16 -
win7 win10语音识别修复
2021-09-19 14:38:29win7 win10语音识别修复 -
GoogleTTS中文语音数据包.zip
2020-01-07 16:57:08提取自GoogleTTS中文语音数据包,供系统开发时内置中文语音,com.google.android.tts/app_voices_greco_v16 -
语音识别修复之TTS.rar
2020-09-10 12:35:48TTS是Text To Speech的缩写,即“从文本到语音”,Win7系统微软TTS语音修复,没有TTS可能无法实验文本到语音的转换。 -
TalkText:文本到语音TTS Windows 7程序小巧又快速。-开源
2021-05-10 08:44:34适用于Windows 7的文本到语音TTS程序,采用了简约的方法。 *播放纯文本文件,复制到剪贴板以及来自程序编辑控件的文本。 *打开,保存并追加到文本文件。 *在交互模式下暂停,恢复和停止播放。 *将文本保存到“ wav... -
Win7系统微软TTS语音修复.rar
2019-12-17 17:37:46Win7系统微软TTS语音修复,亲测可用,如有疑问请及时评论,我好关闭资源,其他废话没啥说的了111111111 -
windows TTS Microsoft Speech SDK 5.1安装包以及修复包
2021-06-26 11:19:551.先打开setup.exe安装; 2.再安装win7或xp TTS语音引擎修复2.0(必用).exe修复; 3.LangPack再安装语言包; 4.在控制面板可以看到语音32位可以修改控制 -
JAVA TTS语音
2020-11-30 15:37:36jacob-1.18-M2-x64.dll、jacob-1.18-M2-x86.dll拷贝到C:\Windows\System32 -
微软TTS语音引擎实现文本朗读代码
2017-11-07 10:11:18微软TTS语音引擎提供了Windows Speech SDK开发包供编程者使用。Windows Speech SDK包含语音合成SS引擎和语音识别SR引擎两种,语音合成引擎用于将文字转换成语音输出,语音识别引擎用于识别语音命令。 -
科大讯飞离线TTS语音朗读引擎 windws sdk ,c代码 封装成dll使用C#调用(unity插件)
2020-11-05 13:58:58科大讯飞离线TTS语音朗读引擎 windws sdk ,c代码 封装成dll使用C#调用 由于讯飞的离线sdk与appid 是捆绑的,所以需要在讯飞开发平台生成自己的应用和appid 并下载 windows 离线语音合成 sdk ,能够运行 demo 里的 ... -
python实现TTS离线语音合成
2020-05-08 00:40:21一个python离线的TTS语音合成,简单实现和使用!首先将文本与语音对照的方法实现了转换,然后再播放对应文字对应的拼音所对应的音频来播放语音 。缺点是没有进行音频合成。 -
windows下文本转语音TTS库封装
2020-10-11 10:59:26windows下我们将文本转语音使用的就是windows自带的COM组件,也就是TTS库,为了方便使用我将语音转文本的库封装成一个Dll库,目的也是为了后续组件化和模块化后续系统的功能,该封装库仅有三个功能: (1)语音库的...一、文本转语音实现
本文提及的文本转语音库其实很多年前写的库,最近有才时间整理才将对应库整理成文章供各位网友参考。
其实在windows下自带了文本转语音以及语音识别的功能,这里由于项目中需要将报警文本信息使用语音形式转化出来,所以这里仅仅只介绍文本转语音的使用。
windows下我们将文本转语音使用的就是windows自带的COM组件,也就是TTS库,为了方便使用我将语音转文本的库封装成一个Dll库,目的也是为了后续组件化和模块化后续系统的功能,该封装库仅有三个功能:
(1)语音库的初始化
//------------------------------------------------- // 功 能:语音库的初始化 // 参 数: // 无 // 返回值: // 成功返回true反之返回false // 说 明: // 在系统初始化的时候调用该接口与TTS_UnInit对应 //------------------------------------------------- TTSSDK_API bool TTS_Init();
(2)本文转语音
//------------------------------------------------- // 功 能:语音库的初始化 // 参 数: // 【输入】content : 需要播放的文字内容 // 【输入】size : 播放的文字内容长度 // 返回值: // 无 // 说 明: // 为了性能,该接口是异步接口调用后后台自动播放 //------------------------------------------------- TTSSDK_API void TTS_Speak(const char* content,const int size);
(3)语音库的反初始化
//------------------------------------------------- // 功 能:语音库的反初始化 // 参 数: // 无 // 返回值: // 无 // 说 明: // 在系统退出的时候调用该接口以使用资源 //------------------------------------------------- TTSSDK_API void TTS_UnInit();
我们将重点放在第三个接口的实现上:
TTSSDK_API void TTS_Speak(const char* content,const int size) { NetCommandPtr pCmd = boost::make_shared<CNetCommand>(boost::BOOST_BIND(CTtsInstance::Speek, content)); CMessageEngine::get_mutable_instance().Post(pCmd); }
该接口的实现是通过异步方式调用的,这里使用了boost封装的消息处理引擎处理对应的消息,其目的是为了上层应用调用的完成之后可以继续做自己的工作,而不影响上层应用,特别是UI相关的线程,因为语音播放如果是同步播放的,10几个文字播放出来(包括标点符号的停顿)大概需要6-10秒,所以该接口是做成了异步处理。
最后,我们只需要关注TTS的实例的Speek方法实现就可以了:
bool CTtsInstance::Speek(std::string text) { // window 64[不能使用-只能调用32bit程序] if (!CTtsInstance::Prepared()) { TCHAR filePath[MAX_PATH] = { 0 }; GetModuleFileName(NULL, filePath, MAX_PATH); _tcsrchr(filePath, _T('\\'))[1] = _T('\0'); _tcscat(filePath, _T("tts.exe")); if (-1 == _taccess(filePath, 0)) return false; STARTUPINFO si = { 0 }; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); si.dwFlags = /*STARTF_USESHOWWINDOW*/0; si.wShowWindow = /*SW_SHOW*/SW_HIDE; si.lpDesktop = NULL; PROCESS_INFORMATION ProcessInformation; ZeroMemory(&ProcessInformation, sizeof(ProcessInformation)); if (CreateProcess(filePath, (LPTSTR)text.c_str(), NULL, NULL, FALSE,/*CREATE_NEW_CONSOLE*/0, NULL, NULL, &si, &ProcessInformation)) { WaitForSingleObject(ProcessInformation.hProcess, INFINITE); ::CloseHandle(ProcessInformation.hThread); ::CloseHandle(ProcessInformation.hProcess); } } else { if (!m_pISpVoice) return false; // 开始进行朗读 BSTR content = _com_util::ConvertStringToBSTR(text.c_str()); HRESULT hr = m_pISpVoice->Speak(content, SPF_ASYNC, NULL); SysFreeString(content); } return true; }
这里做了两部分工作:
(1)播放文本
我们使用的是语音播放COM库ISpObjectToken实现的,该组件初始化如下:
bool CTtsInstance::Init() { // 初始化COM组件 if(FAILED(::CoInitialize(NULL))) return false; if(FAILED(m_pISpVoice.CoCreateInstance(CLSID_SpVoice))) return false; // 枚举所有语音Token CComPtr<IEnumSpObjectTokens> cpEnum; if(FAILED(SpEnumTokens(SPCAT_VOICES, L"", L"", &cpEnum))) return false; ISpObjectToken* pToken = NULL; while (cpEnum->Next(1, &pToken, NULL) == S_OK) { CSpDynamicString dstrDesc; HRESULT hr = SpGetDescription(pToken, &dstrDesc); if (SUCCEEDED(hr)) { m_vecISpToken.push_back(pToken); } } SetVoice(2052); return true; }
播放的时候我们只需要调用Speak接口即可,注意因为用的是COM组件,所以字符串也需要转换为COM的BSTR字符串!
(2)64bit系统兼容
因为我的程序一般都做了32bit和64bit的windows程序(包括所有dll库),经过测试发现64bit系统是调用COM库的,但是为了兼容其他的64bit库和app调用,我也必须兼容64bit的应用,我想到的好的办法是:本地调用。
既然系统仅仅支持32bit调用,那么64bit的dll封装只需要调用32bit的库就可以了,但是64bit的dll是无法调用32bit的dll的,但是可以通过进程方式调用,所以我又将该库封装成了一个32bit的exe,然后64bit的dll调用32bit的exe。该调用如下:
TCHAR filePath[MAX_PATH] = { 0 }; GetModuleFileName(NULL, filePath, MAX_PATH); _tcsrchr(filePath, _T('\\'))[1] = _T('\0'); _tcscat(filePath, _T("tts.exe")); if (-1 == _taccess(filePath, 0)) return false; STARTUPINFO si = { 0 }; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); si.dwFlags = /*STARTF_USESHOWWINDOW*/0; si.wShowWindow = /*SW_SHOW*/SW_HIDE; si.lpDesktop = NULL; PROCESS_INFORMATION ProcessInformation; ZeroMemory(&ProcessInformation, sizeof(ProcessInformation)); if (CreateProcess(filePath, (LPTSTR)text.c_str(), NULL, NULL, FALSE,/*CREATE_NEW_CONSOLE*/0, NULL, NULL, &si, &ProcessInformation)) { WaitForSingleObject(ProcessInformation.hProcess, INFINITE); ::CloseHandle(ProcessInformation.hThread); ::CloseHandle(ProcessInformation.hProcess); }
通过查找本地的tts.exe文件进行远程调用并传递参数给exe即可。
二、测试示例
测试实例代码如下:
int _tmain(int argc, _TCHAR* argv[]) { if(!TTS_Init()){ printf("初始化语音引擎失败!\n"); } while (true) { TTS_Speak("尊敬的李先生,早上好!", 0); printf("尊敬的李先生,早上好!\n"); Sleep(5000); } TTS_UnInit(); return 0; }
(1)32bit的程序测试如下
可以看到播放正常!
(2)64bit程序测试如下
可以看到64bit的dll被调用后播放也依然正常,只不过通过进程调用方式耗时稍微长一点,不过也只能通过这种方式兼容了。
三、注意问题
不同机器测试可以发现,阉割版本的win7是没有自带语音库的,所有初始化语音COM组件正常,所以我们需要修复语音库,这里需要32bit和64bit的语音修复库,另外也可以安装自己喜欢的语音播放库(我的是男士音,不好辨识!)
源码获取、合作、技术交流请获取如下联系方式:
QQ交流群:961179337
微信账号:lixiang6153
公众号:IT技术快餐
电子邮箱:lixx2048@163.com -
Windows TTS语音阅读
2019-03-07 10:40:19Windows TTS语音阅读 -
微软TTS5.1语音引擎(中文)
2018-10-31 08:05:01微软TTS语音引擎提供了Windows Speech SDK开发包供编程者使用。Windows Speech SDK包含语音合成SS引擎和语音识别SR引擎两种,语音合成引擎用于将文字转换成语音输出,语音识别引擎用于识别语音命令。 -
用C#开发的一个语音朗读程序_C#_tts_语音朗读程序
2021-09-11 05:51:02用C#开发的一个语音朗读程序,使用windows speech 5.1技术 -
TTS语音播报服务及调试程序(32bit)
2017-07-18 09:24:58TTS语音播报服务及调试程序(32bit),适用于Window7,Windows8.1,Windows10。部署及使用方法详见博客文章: -
1-tts.rar系统语音包
2021-10-25 10:37:28Windows系统语音包 -
PB调用微软TTS使用字符串的语音播放
2018-01-15 15:35:47PB6.5调用微软TTS5.1语音引擎(中文),实现字符串的语音播放。有事例代码,可以在PB6.5下面测试运行。安装好 微软TTS5.1语音引擎(中文)后,在控制面板-》语音 设置播放的男女声音。 -
Windows系统TTS测试工具【TTS测试.rar】
2019-12-17 17:47:58Windows系统TTS测试小工具,亲测可用 点击WindowsFormsApplication1输入内容即可语音播报,该工具仅是测试TTS是否可用 -
微软晓晓朗读录音工具windows-文字转语音
2021-09-04 23:27:44微软晓晓朗读录音工具windows-文字转语音
-
<em>TTS语音</em>驱动,<em>Windows</em>XP/WIN <em>7</em>修复程序<em>TTS语音</em>驱动,自带<em>Windows</em>XP/WIN <em>7</em>修复程序
-
Win<em>7</em>系统<em>TTS语音</em>修复安装包.<em>7</em>zWin<em>7</em>系统下不能使用<em>TTS语音</em>引擎的问题。如果大家没使用正版的<em>windows</em>系统,那么很可能你的<em>TTS语音</em>是没有的。可以通过使
-
JAVA <em>TTS语音</em>jacob-1.18-M2-x64.dll、jacob-1.18-M2-x86.dll拷贝到C:\<em>Windows</em>\System32
-
<em>TTS语音</em>例程VC编写的,调用<em>windows</em>系统<em>语音</em>库实现的文本转声音程序。
-
<em>tts</em> <em>语音</em>识别 labview本历程是用<em>tts</em> 开发二的labview 历程