科大讯飞和neospeech tts哪个更好

朋友们或许还有一个疑问,就是不知道科大讯飞和neospeech哪个更好。据我的体会,它们其实各有优点。

科大讯飞有几个语音库,比如小宇、小燕、还有一个粤语和英语的;而neospeech则有lily、liang、hui几个中文语音库。

科大的最大优点就是朗诵清楚,听起来能做到几乎每个字都让我们能听进去。而neospeech的优点则是流畅,高低起伏、抑扬顿挫,临场感很强,不过有时候某些字眼会让人听不太清楚。

提醒一下,neospeech里面的liang语音库,个人觉得是最好用的,浑厚的男声每个字都朗读的很清楚,而且临场感和流畅度都很强,是中文文字朗读里面的佼佼者!赞一个~~

要下载的朋友可以在电驴里面搜索下载。

综上所述,从总评来说,neospeech应该比讯飞语音略胜一筹的!至于各家的优点上面已经说过。要我自己来排名的话,是这样的(由高至低):

a. neospeech liang
b. 科大讯飞 小燕
c. neospeech lily
d. neospeech hui
e. 科大讯飞 小宇

当然如果说到英文,neospeech里面的Paul算是当前最好的发声效果了!连霍金都在用它,你说它有多么强悍呢!

最后说一下,文语通和方正畅听都是科大的,不过体积相比要小很多,尤其方正畅听,如果你的要求不高的话,完全可以使用方正畅听,听起来也是挺流畅滴。

最后希望大家好好爱护自己的眼睛,不要长期用眼看电脑,转“看”为“听”,既能护眼,又是一种享受,何乐不为呢?

下载地址:http://www.verycd.com/topics/2780296/(neospeech)

http://www.verycd.com/topics/2828273/(科大)

使用微软TTS语音引擎实现文本朗读

2017年11月04日 15:51:30 byxdaz 阅读数:12312

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/byxdaz/article/details/78443954

TTS(Text-To-Speech)是指文本语音的简称,即通过TTS引擎把文本转化为语音输出。TTS语音引擎有微软TTS语音引擎、科大讯飞语音引擎等。科大讯飞tts sdk参考这个页面http://www.xfyun.cn/sdk/dispatcher

文本主要介绍如何使用微软TTS语音引擎实现文本朗读,以及生成wav格式的声音文件。

1、语音引擎及语音库的安装

微软TTS语音引擎提供了Windows Speech SDK开发包供编程者使用。Windows Speech SDK包含语音合成SS引擎和语音识别SR引擎两种,语音合成引擎用于将文字转换成语音输出,语音识别引擎用于识别语音命令。

Windows Speech SDK可以在微软的官网上免费下载,下载地址为:http://www.microsoft.com/download/en/details.aspx?id=10121

在该下载界面中,选择下载SpeechSDK51.exe、SpeechSDK51LangPach.exe和sapi.chm 即可。

SpeechSDK51.exe

语音合成引擎

SpeechSDK51LangPach.exe

语音库,支持日语和简体中文需要这个支持。

sapi.chm

帮助文档

speechsdk51MSM.exe

语音引擎集成到你的产品跟产品一起发布。解压出来三个文件夹1033、1041和2052。其中,1033下主要是用于英文的TTS和SR的.msm文件,1041下主要是用于日文SR的.msm文件,2052下是用于中文TTS和SR的msm文件。

Sp5TTintXP.exe

XP下Mike和Mary语音。

下载完成后,先安装语音引擎SpeechSDK51.exe,再安装中文语音库SpeechSDK51LangPach.exe。

目前最常用的Windows Speech SDK版本有三种:5.1、5.3和5.4。

Windows Speech SDK 5.1版本支持xp系统和server 2003系统,需要下载安装。XP系统默认只带了个Microsoft Sam英文男声语音库,想要中文引擎就需要安装Windows Speech SDK 5.1。

Windows Speech SDK 5.3版本支持Vista系统和Server 2008系统,已经集成到系统里。Vista和Server 2003默认带Microsoft lili中文女声语音库和Microsoft Anna英文女声语音库。

Windows Speech SDK 5.4版本支持Windows7系统,也已经集成到系统里,不需要下载安装。Win7系统同样带了Microsoft lili中文女声语音库和Microsoft Anna英文女声语音库。Microsoft lili支持中英文混读。

2、SAPI接口的使用说明

1)、基本朗读过程的实现

在使用语音引擎之前进行初始化:

       ISpVoice *pSpVoice;        // 重要COM接口::CoInitialize(NULL);         // COM初始化// 获取ISpVoice接口CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_INPROC_SERVER, IID_ISpVoice, (void**)&pSpVoice);

获取到ISpVoice接口以后,我们就可以通过pSpVoice指针调用SAPI接口了。

我们可以设置音量:pSpVoice->SetVolume(80);。SetVolume的参数即音量的范围在0到100之间。

可以这样朗读字符串内容:pSpVoice->Speak(string, SPF_DEFAULT, NULL);。这样string里的内容就会被朗读出来了,第二个参数SPF_DEFAULT表示使用默认设置,包括同步朗读的设置。异步朗读可以设置成 SPF_ASYNC。同步朗读表示读完string中的内容,speak函数才会返回,而异步朗读则将字符串送进去就返回,不会阻塞。

使用完语音引擎后应执行:

       pSpVoice->Release();::CoUninitialize();      

这样资源被释放,语音朗读过程结束。

以上就完成了一个简单的语音合成朗读的功能。

2)、ISpVoice的成员函数

鸡啄米再简单说明几个ISpVoice接口的成员函数:

       HRESULT Speak(LPCWSTR *pwcs, DWORD dwFlags, ULONG *pulStreamNumber);

用于读取字符串pwcs里的内容。参数pwcs为要朗读的字符串。dwFlags是用于控制朗读方式的标志,具体意义可以查看文档中的枚举 SPEAKFLAGS。pulStreamNumber为输出参数,它指向本次朗读请求对应的当前输入流编号,每次朗读一个字符串时都会有一个流编号返 回,异步朗读时使用。

       HRESULT SetRate( long   RateAdjust);         // 设置朗读速度,取值范围:-1010HRESULT GetRate(long *pRateAdjust);        // 获取朗读速度   HRESULT SetVoice(ISpObjectToken   *pToken);    // 设置使用的语音库HRESULT GetVoice(ISpObjectToken** ppToken);  // 获取语音库HRESULT Pause ( void );                              // 暂停朗读HRESULT Resume ( void );                          // 恢复朗读 //  在当前朗读文本中根据lNumItems的符号向前或者向后跳过指定数量(lNumItems的绝对值)的句子。HRESULT Skip(LPCWSTR  *pItemType, long  lNumItems, ULONG *pulNumSkipped);//  播放WAV文件HRESULT SpeakStream(IStream   *pStream, DWORD      dwFlags, ULONG     *pulStreamNumber);// 将声音输出到WAV文件HRESULT SetOutput(IUnknown *pUnkOutput,BOOL fAllowFormatChanges); HRESULT SetVolume(USHORT usVolume);      // 设置音量,范围:0100HRESULT GetVolume(USHORT *pusVolume);  // 获取音量HRESULT SetSyncSpeakTimeout(ULONG msTimeout);      // 设置同步朗读超时时间,单位为毫秒HRESULT GetSyncSpeakTimeout(ULONG *pmsTimeout);  // 获取同步朗读超时时间

因为在同步朗读时,speak函数是阻塞的,如果语音输出设备被其他程序占用,则speak则会一直等待,所以最好设置好超时时间,超时后speak函数自行返回。

3)、使用XML朗读

在进行TTS开发时可以使用XML,SAPI可以分析XML标签,通过XML能够实现一些ISpVoice的成员函数的功能。比如设置语音库、音量、语速等。此时speak函数的dwFlags参数要设置为包含SPF_IS_XML。如:

       // 选择语音库Microsoft SampSpVoice->speak(L"<VOICE REQUIRED='NAME=Microsoft Sam'/>鸡啄米", SPF_DEFAULT | SPF_IS_XML, NULL);// 设置音量<VOLUME LEVEL='90'>鸡啄米</VOLUME>// 设置语言<lang langid='804'>鸡啄米</lang>

804代表中文,409代表英文。如果用函数SpGetLanguageFromToken获取语言时,0x804表示中文,0x409表示英文。

4)、设置SAPI通知消息。

SAPI在朗读的过程中,会给指定窗口发送消息,窗口收到消息后,可以主动获取SAPI的事件,根据事件的不同,用户可以得到当前SAPI的一些信息,比如正在朗读的单词的位置,当前的朗读口型值(用于显示动画口型,中文语音的情况下并不提供这个事件)等等。要获取SAPI的通知,首先要注册一个消息:
  m_cpVoice->SetNotifyWindowMessage( hWnd,WM_TTSAPPCUSTOMEVENT, 0, 0 );
  这个代码一般是在主窗口初始化的时候调用,hWnd是主窗口(或者接收消息的窗口)句柄。WM_TTSAPPCUSTOMEVENT是用户自定义消息。在窗口响应WM_TTSAPPCUSTOMEVENT消息的函数中,通过如下代码获取sapi的通知事件:

CSpEvent       event;  // 使用这个类,比用 SPEVENT结构更方便

while(event.GetFrom(m_cpVoice) == S_OK )
    {
       switch( event.eEventId )
       {
         ...
       }
    }

eEventID有很多种,比如SPEI_START_INPUT_STREAM表示开始朗读,SPEI_END_INPUT_STREAM表示朗读结束等。
   可以根据需要进行判断使用。

5)、speech sdk语音识别,识别语音生成英文/中文等字符串。

具体参考这篇文章:http://blog.csdn.net/artemisrj/article/details/8723095

3、编程实例

1)、首先将需要将Windows Speech SDK开发包的头文件和库文件所在路径添加到编译器中。

2)、封装tts操作类。

//TextToSpeech.h文件

  1. //tts

  2. #pragma once

  3. #include <sapi.h> //包含TTS语音引擎头文件和库文件

  4. #include <sphelper.h>

  5. #include <string.h>

  6. #pragma comment(lib, "sapi.lib")

  7. class TextToSpeech

  8. {

  9. public:

  10. TextToSpeech(void);

  11. virtual ~TextToSpeech(void);

  12. int Init();

  13. int UnInit();

  14. //枚举所有语音Token

  15. int EnumAudioToken(CString arrayVoicePackageName[],int nVoicePackageNameCount);

  16. //创建SpVoice

  17. int CreateSpVoice();

  18. //释放SpVoice

  19. int DeleteSpVoice();

  20. //重置SpVoice(用于临时清除朗读数据)

  21. int ResetSpVoice();

  22. //设置朗读速度(取值范围:-10到10)

  23. int SetRate( long RateAdjust);

  24. //获取朗读速度

  25. int GetRate(long *pRateAdjust);

  26. //设置使用的语音库

  27. int SetVoice(ISpObjectToken *pToken);

  28. //获取语音库

  29. int GetVoice(unsigned int nIndex,ISpObjectToken** ppToken);

  30. //设置音量(取值范围:0到100)

  31. int SetVolume(USHORT usVolume);

  32. //获取音量

  33. int GetVolume(USHORT *pusVolume);

  34. //朗读

  35. int Speak(CString strContent,DWORD dwFlags=SPF_DEFAULT);

  36. //朗读生成文件

  37. int SpeakToWaveFile(CString strContent,char *pFilePathName,DWORD dwFlags=SPF_DEFAULT);

  38. //暂停朗读

  39. int Pause();

  40. //继续朗读

  41. int Resume(); 

  42. //跳过部分朗读

  43.  int Skip(CString strItemType="Sentence",long lNumItems=65535, ULONG *pulNumSkipped=NULL);

  44. protected:

  45. IEnumSpObjectTokens * m_pIEnumSpObjectTokens;

  46. ISpObjectToken * m_pISpObjectToken;

  47. ISpVoice * m_pISpVoice;

  48. BOOL m_bComInit;

  49. };

//TextToSpeech.cpp文件

  1. #include "StdAfx.h"

  2. #include "TextToSpeech.h"

  3. TextToSpeech::TextToSpeech(void)

  4. {

  5. m_pIEnumSpObjectTokens = NULL;

  6. m_pISpObjectToken = NULL;

  7. m_pISpVoice = NULL;

  8. m_bComInit = FALSE;

  9. }

  10. TextToSpeech::~TextToSpeech(void)

  11. {

  12. }

  13. int TextToSpeech::Init()

  14. {

  15. //初始化COM组件

  16. if(FAILED(::CoInitializeEx(NULL,0)))

  17. {

  18. //MessageBox("初始化COM组件失败!", "提示", MB_OK|MB_ICONWARNING);

  19. return -1;

  20. }

  21. m_bComInit = TRUE;

  22. return 0;

  23. }

  24. int TextToSpeech::UnInit()

  25. {

  26. if(m_bComInit)

  27. {

  28. ::CoUninitialize();

  29. }

  30. return 0;

  31. }

  32. int TextToSpeech::EnumAudioToken(CString arrayVoicePackageName[],int nVoicePackageNameCount)

  33. {

  34. //枚举所有语音Token

  35. if(SUCCEEDED(SpEnumTokens(SPCAT_VOICES, NULL, NULL, &m_pIEnumSpObjectTokens)))

  36. {

  37. //得到所有语音Token的个数

  38. ULONG ulTokensNumber = 0;

  39. m_pIEnumSpObjectTokens->GetCount(&ulTokensNumber);

  40. //检测该机器是否安装有语音包

  41. if(ulTokensNumber == 0)

  42. {

  43. //MessageBox("该机器没有安装语音包!", "提示", MB_OK|MB_ICONWARNING);

  44. return -1;

  45. }

  46. if(ulTokensNumber > nVoicePackageNameCount)

  47. {

  48. //缓冲区过小

  49. return 0;

  50. }

  51. //将语音包的名字加入数组中

  52. CString strVoicePackageName = _T("");

  53. CString strTokenPrefixText = _T("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices\\Tokens\\");

  54. for(ULONG i=0; i<ulTokensNumber; i++)

  55. {

  56. m_pIEnumSpObjectTokens->Item(i, &m_pISpObjectToken);

  57. WCHAR* pChar;

  58. m_pISpObjectToken->GetId(&pChar);

  59. strVoicePackageName = pChar;

  60. strVoicePackageName.Delete(0, strTokenPrefixText.GetLength());

  61. arrayVoicePackageName[i] = strVoicePackageName;

  62. }

  63. return ulTokensNumber;

  64. }

  65. return -1;

  66. }

  67. //创建SpVoice

  68. int TextToSpeech::CreateSpVoice()

  69. {

  70. //获取ISpVoice接口

  71. if(FAILED(CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_INPROC_SERVER, IID_ISpVoice, (void**)&m_pISpVoice)))

  72. {

  73. //MessageBox("获取ISpVoice接口失败!", "提示", MB_OK|MB_ICONWARNING);

  74. return -1;

  75. }

  76. return 0;

  77. }

  78. //释放SpVoice

  79. int TextToSpeech::DeleteSpVoice()

  80. {

  81. if(m_pISpVoice != NULL)

  82. {

  83. m_pISpVoice->Release();

  84. }

  85. m_pISpVoice = NULL;

  86. return 0;

  87. }

  88. //重置SpVoice

  89. int TextToSpeech::ResetSpVoice()

  90. {

  91. DeleteSpVoice();

  92. return CreateSpVoice();

  93. }

  94. //设置朗读速度(取值范围:-10到10)

  95. int TextToSpeech::SetRate( long RateAdjust)

  96. {

  97. if(m_pISpVoice == NULL)

  98. return -1;

  99. //设置播放速度

  100. m_pISpVoice->SetRate(RateAdjust);

  101. return 0;

  102. }

  103. //获取朗读速度

  104. int TextToSpeech::GetRate(long *pRateAdjust)

  105. {

  106. if(m_pISpVoice == NULL)

  107. return -1;

  108. m_pISpVoice->GetRate(pRateAdjust);

  109. return 0;

  110. }

  111. //设置使用的语音库

  112. int TextToSpeech::SetVoice(ISpObjectToken *pToken)

  113. {

  114. if(m_pISpVoice == NULL)

  115. return -1;

  116. m_pISpVoice->SetVoice(pToken);

  117. return 0;

  118. }

  119. //获取语音库

  120. int TextToSpeech::GetVoice(unsigned int nIndex,ISpObjectToken** ppToken)

  121. {

  122. if(m_pIEnumSpObjectTokens == NULL)

  123. return -1;

  124. //设置语言

  125. m_pIEnumSpObjectTokens->Item(nIndex, ppToken);

  126. m_pISpObjectToken = *ppToken;

  127. return 0;

  128. }

  129. //设置音量(取值范围:0到100)

  130. int TextToSpeech::SetVolume(USHORT usVolume)

  131. {

  132. if(m_pISpVoice == NULL)

  133. return -1;

  134. //设置音量大小

  135. m_pISpVoice->SetVolume(usVolume);

  136. return 0;

  137. }

  138. //获取音量

  139. int TextToSpeech::GetVolume(USHORT *pusVolume)

  140. {

  141. if(m_pISpVoice == NULL)

  142. return -1;

  143. //设置音量大小

  144. m_pISpVoice->GetVolume(pusVolume);

  145. return 0;

  146. }

  147. //开始朗读

  148. int TextToSpeech::Speak(CString strContent, DWORD dwFlags)

  149. {

  150. if(m_pISpVoice == NULL)

  151. return -1;

  152. //开始进行朗读

  153. HRESULT hSucess = m_pISpVoice->Speak(strContent.AllocSysString(), dwFlags, NULL);

  154. return 0;

  155. }

  156. //朗读生成文件

  157. int TextToSpeech::SpeakToWaveFile(CString strContent,char *pFilePathName,DWORD dwFlags)

  158. {

  159. if(m_pISpVoice == NULL || pFilePathName == NULL)

  160. return -1;

  161. //生成WAV文件

  162. CComPtr<ISpStream> cpISpStream;

  163. CComPtr<ISpStreamFormat> cpISpStreamFormat;

  164. CSpStreamFormat spStreamFormat;

  165. m_pISpVoice->GetOutputStream(&cpISpStreamFormat);

  166. spStreamFormat.AssignFormat(cpISpStreamFormat);

  167. HRESULT hResult = SPBindToFile(pFilePathName, SPFM_CREATE_ALWAYS,

  168. &cpISpStream, &spStreamFormat.FormatId(), spStreamFormat.WaveFormatExPtr());

  169. if(SUCCEEDED(hResult))

  170. {

  171. m_pISpVoice->SetOutput(cpISpStream, TRUE);

  172. m_pISpVoice->Speak(strContent.AllocSysString(), dwFlags, NULL);

  173. return 0;

  174. //MessageBox("生成WAV文件成功!", "提示", MB_OK);

  175. }

  176. else

  177. {

  178. //MessageBox("生成WAV文件失败!", "提示", MB_OK|MB_ICONWARNING);

  179. return 1;

  180. }

  181. }

  182. //暂停朗读

  183. int TextToSpeech::Pause()

  184. {

  185. if(m_pISpVoice != NULL)

  186. {

  187. m_pISpVoice->Pause();

  188. }

  189. return 0;

  190. }

  191. //继续朗读

  192. int TextToSpeech::Resume()

  193. {

  194. if(m_pISpVoice != NULL)

  195. {

  196. m_pISpVoice->Resume();

  197. }

  198. return 0;

  199. }

//跳过部分朗读 int TextToSpeech::Skip(CString strItemType,long lNumItems, ULONG *pulNumSkipped) {  if(m_pISpVoice == NULL || strItemType.GetLength() == 0)   return -1;

m_pISpVoice->Skip(strItemType.AllocSysString(), lNumItems,pulNumSkipped);  return 0; }

3)调用实例代码。

  1. TextToSpeech ttsSpeech;

  2. ttsSpeech.Init();

  3. CString arrayVoicePackageName[50] = {0};

  4. int nVoicePackageNameCount = 50;

  5. int nCount = ttsSpeech.EnumAudioToken(arrayVoicePackageName,nVoicePackageNameCount);

  6. ttsSpeech.CreateSpVoice();

  7. ISpObjectToken* ppToken = NULL;

  8. ttsSpeech.GetVoice(0,&ppToken);

  9. ttsSpeech.SetVoice(ppToken);

  10. ttsSpeech.SetRate(0);

  11. ttsSpeech.SetVolume(100);

  12. ttsSpeech.Speak("我是中国人");

  13. //ttsSpeech.SpeakToWaveFile("我是中国人","d:\\11.wav");

  14. ttsSpeech.DeleteSpVoice();

  15. ttsSpeech.UnInit();

4、注意事项

1)、sphelper.h编译错误解决方案

SAPI 包含sphelper.h编译错误解决方案 在使用Microsoft Speech SDK 5.1开发语音识别程序时,包含了头文件“sphelper.h”和库文件“sapi.lib”。编译时出错: 1>c:\program files\microsoft speech sdk 5.1\include\sphelper.h(769): error C4430: missing type specifier - int assumed. Note: C++ does not supportdefault-int 1>c:\program files\microsoft speech sdk5.1\include\sphelper.h(1419) : error C4430: missing type specifier - intassumed. Note: C++ does not support default-int 1>c:\program files\microsoftspeech sdk 5.1\include\sphelper.h(2373) : error C2065: 'psz' : undeclaredidentifier 1>c:\program files\microsoft speech sdk5.1\include\sphelper.h(2559) : error C2440: 'initializing' : cannot convert from'CSpDynamicString' to 'SPPHONEID *' 1> No user-defined-conversion operatoravailable that can perform this conversion, or the operator cannot be called1>c:\program files\microsoft speech sdk 5.1\include\sphelper.h(2633) : errorC2664: 'wcslen' : cannot convert parameter 1 from 'SPPHONEID *' to 'constwchar_t *' 1> Types pointed to are unrelated; conversion requiresreinterpret_cast, C-style cast or function-style cast 搜索了一圈,根据大家的经验汇总,应该是Speech代码编写时间太早,语法不严密。而VS2008对于语法检查非常严格,导致编译无法通过。修改头文件中的以下行即可正常编译:

Ln769 const ulLenVendorPreferred = wcslen(pszVendorPreferred);

const unsigned long ulLenVendorPreferred = wcslen(pszVendorPreferred);

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

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

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

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

Ln 2559SPPHONEID* pphoneId = dsPhoneId;

SPPHONEID* pphoneId = (SPPHONEID*)((WCHAR *)dsPhoneId);

Ln 2633pphoneId += wcslen(pphoneId) + 1;

pphoneId+= wcslen((const wchar_t *)pphoneId) + 1;

2)、Speak指定为SPF_ASYNC(异步)时,不要过早的释放ISpVoice对象,否则就没有声音,因为ISpVoice生命周期结束了,就不会播放。一般将ISpVoice对象放到类的成员变量中,类析构时才释放ISpVoice对象。

3)、Speak第一次朗读时很慢,因为加载引擎需要一段时间,可以使用线程预先Speak("",SPF_ASYNC)而加载引擎,但需要注意的是在初始化COM的时候使用CoInitializeEx,而不要使用CoInitialize。

https://blog.csdn.net/byxdaz/article/details/78443954

代码下载

C#使用微软TTS语音引擎实现文字转语音示例

转载:http://www.mzwu.com/article.asp?id=3845
在VS2012创建Windows窗体应用程序项目,添加引用COM组件Microsoft Speech Object Library:

TTS除了可以用于文字转语音,还可以将语音保存成文件,代码如下:

复制内容到剪贴板程序代码

using System;
using System.Threading;
using System.Windows.Forms;
using SpeechLib;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        private void btnSpeak_Click(object sender, EventArgs e)
        {
            SpVoice voice = new SpVoice();
            voice.Rate = -5; //语速,[-10,10]
            voice.Volume = 100; //音量,[0,100]
            voice.Voice = voice.GetVoices().Item(0); //语音库
            voice.Speak("木子屋网址:www.mzwu.com");
        }

private void btnSave_Click(object sender, EventArgs e)
        {            
            SpFileStream stream = new SpFileStream();
            stream.Open(@"F:\voice.wav", SpeechStreamFileMode.SSFMCreateForWrite, false);
            SpVoice voice = new SpVoice();
            voice.AudioOutputStream = stream;
            voice.Speak("0,1,2,3,4,5,6,7,8,9");
            voice.WaitUntilDone(Timeout.Infinite);
            stream.Close();
            MessageBox.Show("ok");
        }
    }
}

参考资料

[1].visual c#怎么使用tts:http://zhidao.baidu.com/question/93308685.html
[2].c#之TTS发音程序:http://blog.csdn.net/kkfdsa132/article/details/5394700
[3].关于Microsoft Speech SDK 中TTS的研究 [转]:http://www.cnblogs.com/lxinxuan/archive/2007/03/17/678606.html
[4].Speech两种使用方法:http://www.cnblogs.com/MaxIE/p/3159994.html
[5].微软TTS语音引擎编程入门:http://www.jizhuomi.com/software/135.html
[6].SpVoice Interface (SAPI 5.4):http://msdn.microsoft.com/en-us/library/ee125640.aspx

微软TTS语音引擎实现文本朗读相关推荐

  1. 【VC++技术杂谈004】使用微软TTS语音引擎实现文本朗读

    本文主要介绍如何使用微软TTS语音引擎实现文本朗读,以及生成wav格式的声音文件. 1.语音引擎及语音库的安装 TTS(Text-To-Speech)是指文本语音的简称,即通过TTS引擎把文本转化为语 ...

  2. TTS什么意思,缩写,微软TTS语音引擎(中文)5.1 “TTS”是“文本到语音(Text To Sound)”的简称

    微软TTS语音引擎(中文)5.1 "TTS"是"文本到语音(Text To Sound)"的简称,TTS语音引擎为我们提供清晰和标准的美语发音.TTS5.1目前 ...

  3. 微软TTS语音引擎编程入门

    我们都使用过一些某某词霸的英语学习工具软件,它们大多都有朗读的功能,其实这就是利用的Windows的TTS(Text To Speech)语音引擎.它包含在Windows Speech SDK开发包中 ...

  4. 微软TTS语音引擎(中文)5.1

    微软TTS语音引擎(中文)5.1 转自某人下载页的,早晚得用到,先收藏了. 下载地址:http://download.csdn.net/source/1278844 ================= ...

  5. win7 微软语音服务器,win7 TTS修复工具(微软tts语音引擎修复)

    [实例简介] 当系统没有语音功能,无法运行时,使用win7 TTS修复工具(微软tts语音引擎修复) 现有的语音不好时,可心安装第三方语音,如:捷通华声 XiaoKun 女声 中英文.女音库Hui.L ...

  6. C#使用微软TTS语音引擎实现文字转语音示例

    转载:http://www.mzwu.com/article.asp?id=3845 在VS2012创建Windows窗体应用程序项目,添加引用COM组件Microsoft Speech Object ...

  7. 【PC工具】更新文字转语音、文字文本朗读工具,语音朗读软件,TTS语音合成...

    公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 昨天在群里嫖到一个在线的文字转语音(TTS)工具,不敢独享拿来分享.上次分享的文字转 ...

  8. 小米tts语音引擎下载_TTS语音模块:XFS5152CE语音合成模块详解

    TTS是Text To Speech的缩写,即"从文本到语音",是人机对话的一部分,让机器能够说话. 语音播报功能的实现方式 TTS语音模块,比如XFS5152.SYN6288等 ...

  9. 讯飞tts语音引擎9.0_使用科大讯飞语音转文字的服务进行电话录音分析

    # 需求 合规性质检:1)设定规则,实现自动质检,自动打分:2)如VOC文本质检可与语音文字进行匹配,自动判断是否合格:3)新媒体文本可自动质检4)可识别异常录音(指定标准外):5)诉求记录与语音内容 ...

  10. 微软的语音太逼真了,用来听小说舒服了

    苏生不惑第344 篇原创文章,将本公众号设为星标,第一时间看最新文章. 2020年分享过如何轻松的将文字转语音 ,今天说说微软的文字转语音,真的太逼真了,话说微软的edge浏览器很早就有大声朗读功能: ...

最新文章

  1. Ajax异步XMLHttpRequest对象
  2. 056_Object对象方法
  3. 外媒称Windows 10是一辆“广告大巴车”
  4. 文本分类(下) | 卷积神经网络(CNN)在文本分类上的应用
  5. 【leetcode 简单】 第七十七题 单词模式
  6. Spring核心组件的理解
  7. 管程理解及用管程实现生产者消费者问题
  8. sqlite管理工具
  9. 利用微信公众号实现zabbix告警
  10. android的toogleButton和switch的使用方法
  11. pip 升级 pip
  12. 人工智能5秒免费抠图软件将改变设计行业???
  13. Google SketchUp SKP文件转OBJ 专业版注册机
  14. 万字干货!《增长黑客》背后的逻辑
  15. 俄罗斯互联网的BAT
  16. JAVA系列之JVM优化
  17. 解决WordPress文章页面无法显示的问题
  18. 霖呆呆的近期面试128题汇总(含超详细答案)
  19. Python数据分析中数据预处理:编码将文字型数据转换为数值型
  20. 计算机中用户必须调入,外存储器中的信息,必须首先调入 ______ ,然后才能供CPU使用。...

热门文章

  1. 树莓派安装frp服务
  2. QEMU/KVM PCI Passthrough(i350) DPDK 网络性能测试
  3. led投屏软件_手机投屏竖屏显示器怎么全屏
  4. linux实验的试验环境,Linux基本环境_实验日志解析.docx
  5. 公钥加密_河海大学陆阳、李继国:不依赖双线性对的带关键字搜索的无证书公钥加密方案构造...
  6. #pragma push_macro(new) 及扩展操作
  7. PhalApi视频教程
  8. C#飞机大战程序设计
  9. 基于java web的学生考勤带请假管理系统
  10. Delphi XE +SQLServer把图片当作文本存储