我安装了Microsoft-Chinese-TTS-51.msi可以朗读中文,但是当我想把文字转换成某种wave文件保存时发现了问题,下面是代码,各位可以试试,先添加引用,microsoft speech COM, sapi.dll:try
{
SpFileStream SpFileStream = new SpFileStream();
SpFileStream.Format.Type = SpeechAudioFormatType.SAFTCCITT_ALaw_8kHzMono;
//SpFileStream.Format.Type = SpeechAudioFormatType.SAFT11kHz16BitMono;
SpFileStream.Open( "c:\\tts.wav", SpeechStreamFileMode.SSFMCreateForWrite, false ); SpVoiceClass Voice = new SpVoiceClass();
Voice.AudioOutputStream = SpFileStream;
Voice.Speak( "<lang langid=\"804\">请输入帐号</lang>", SpeechVoiceSpeakFlags.SVSFlagsAsync );
Voice.WaitUntilDone( System.Threading.Timeout.Infinite ); SpFileStream.Close();
}
catch( Exception ex )
{
MessageBox.Show( ex.Message );
}我发现凡是CCITT_ALaw或CCITT_uLaw,中文引擎都不能正确转换,只有一个wave头,其他格式可以,把上面代码注释去掉,不知道是不是微软的bug?
SAFTCCITT_ALaw_8kHzMono这种格式对我很重要
{
SpFileStream SpFileStream = new SpFileStream();
SpFileStream.Format.Type = SpeechAudioFormatType.SAFTCCITT_ALaw_8kHzMono;
//SpFileStream.Format.Type = SpeechAudioFormatType.SAFT11kHz16BitMono;
SpFileStream.Open( "c:\\tts.wav", SpeechStreamFileMode.SSFMCreateForWrite, false ); SpVoiceClass Voice = new SpVoiceClass();
Voice.AudioOutputStream = SpFileStream;
Voice.Speak( "<lang langid=\"804\">请输入帐号</lang>", SpeechVoiceSpeakFlags.SVSFlagsAsync );
Voice.WaitUntilDone( System.Threading.Timeout.Infinite ); SpFileStream.Close();
}
catch( Exception ex )
{
MessageBox.Show( ex.Message );
}我发现凡是CCITT_ALaw或CCITT_uLaw,中文引擎都不能正确转换,只有一个wave头,其他格式可以,把上面代码注释去掉,不知道是不是微软的bug?
SAFTCCITT_ALaw_8kHzMono这种格式对我很重要
解决方案 »
- Sockets UDP 服务端向客户端发消息,客户端无法收到
- winform 页面显示问题
- C#编程 高效的将文本文件中的数据写入SQL SERVER表中
- C#2005中的winForm中怎样让datagridview中的第一列只能输入数字
- 在C#中驗証兩個textbox數值相加等於100
- 一个解决方案里多个应用程序的调用问题
- 添加一行数据时,CurrencyManager始终指向Position为0的位置。搞不定啦!!帮帮忙啦!!!
- 添加切换到其他界面如何弹出提示保不保存
- 很久没有来了,在海口出差,有海口的朋友吗?
- (HellMaster )来拿分吧
- udp数据包做标记出了问题-----巨大的问题
- xml节点循环的问题
可以朗读到WAVE文件,有多种格式可选,自己看看吧
www.smartread.net
这是我听过的最烂的TTS了,8年前的水平