在C#里如何让程序能够中文发音
我想要一个例子,就是当我输入一个中文字符串时,这个程序能把它读出来http://blog.csdn.net/longfeiwang/archive/2007/04/07/...
我想要一个例子,就是当我输入一个中文字符串时,这个程序能把它读出来http://blog.csdn.net/longfeiwang/archive/2007/04/07/1556092.aspx 谁能给我个例子呢?能教教我更是感激不尽,拜托了
展开
2个回答
2013-05-23
展开全部
楼上的办法不是行不通,只是不怎么现实,并不是每个公司或个人都能够请专业的录音员来录音,另外字符识别算法是一个相当复杂的算法,并不是能读一两个字就算成功的。语音方案一般都是TTS(全称是什么,英文差没记住,呵呵)的应用,你所给你网址就是这方面的应用,不过他是调用了整个dll,所写的功能也会好些,但是如果楼主是简单应用的话,可以使用一个网上流传的一个变通的方法。以下是我做语音时所收集的资料,不知道版权是谁的了,呵呵。 本文讲述使用微软TTS5.1语音引擎(中文)实现文本阅读和音频输出为WAV完美解决方案。网上很多文章说的是要安装SAPI.51 SDK,而这个东西有好几十M,并且用起来比较复杂。微软官方网站上是这样写的:SAPI5.1 SDK可以从微软网站下载: http://www.microsoft.com/speech/download/sdk51/ 需要安装程序的有Speech SDK 5.1(68M)和5.1 Language Pack (81.5M)。本文使用不到2M的东西实现文语转换,可以说是有关TTS的完美版本!
功能:
进行中文文本的阅读,可以将阅读的语音输出为WAV音频。实现平台:
Microsoft Visual Studio 2005
微软TTS5.1语音引擎(中文)所需要的东西:
用TlbImp从SAPI.51 SDK中导出的DotNetSpeech.dll(160K)
微软TTS5.1语音引擎(中文).msi(1.55M)以上两个东西由于大小关系没有传上来,需要的可以留下邮箱地址。如果你自己安装了SAPI.51 SDK,可以使用这个命令自己导出DotNetSpeech.dll
Tlbimp sapi.dll /out: DotNetSpeech.dll(出现错误不用管,不影响使用)
安装微软TTS5.1语音引擎(中文).msi,打开"控制面板",打开"语音"配置项目,在"文字-语音转换"的"语音选择"组合框中选择"Microsoft Simplified Chinese",这样才可以读出中文。如果要读英文,要选择"Microsoft Sam"。
使用Microsoft Visual Studio 2005新建项目,添加引用,引用DotNetSpeech.dll。
命名空间:
using DotNetSpeech;读出文本框中的中文:
SpeechVoiceSpeakFlags spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
SpVoice voice = new SpVoice();
voice.Speak(textBox1.Text, spFlags);将文本框中中文的读音保存为WAV文件:
SpeechVoiceSpeakFlags spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
SpVoice voice = new SpVoice();
SaveFileDialog dialog = new SaveFileDialog();
dialog.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav";
dialog.Title = "保存WAV文件";
dialog.FilterIndex = 2;
dialog.RestoreDirectory = true;
if (dialog.ShowDialog() == DialogResult.OK)
{
SpeechStreamFileMode spFileMode = SpeechStreamFileMode.SSFMCreateForWrite;
SpFileStream spFileStream = new SpFileStream();
spFileStream.Open(dialog.FileName, spFileMode, false);
voice.AudioOutputStream = spFileStream;
voice.Speak(textBox1.Text, spFlags);
voice.WaitUntilDone(1000);
上面两句一定要写上,否则产生的文件没有声音
WaitUntilDone的后面的smTimeout是一个int型
spFileStream.Close(); 你可以参考一下,我现在也是用这个方法进行实时语音播放的。我代码基本也是这样的。SpVoice aSpVoice = new SpVoice();…… private void VieoStr(string Vieo)
{
string iVoiceStr = ChLStr(Vieo);
while (aSpVoice.Status.RunningState != SpeechRunState.SRSEDone)
{
Thread.Sleep(100);
} if (aSpVoice.Status.RunningState == SpeechRunState.SRSEDone)
{
aSpVoice.Speak(iVoiceStr, SpeechVoiceSpeakFlags.SVSFIsXML | SpeechVoiceSpeakFlags.SVSFlagsAsync);
}
} 但是有一点要说明一下,微软的这个语音库能读的中文字非常有限,而且读出来的东西比较生硬,如果楼主是高端应用,不建议使用这个方案,楼主可以了解一下 科大讯飞 的语音产品,我也在了解这个公司的产品,读出来的东西比微软的好很多。
功能:
进行中文文本的阅读,可以将阅读的语音输出为WAV音频。实现平台:
Microsoft Visual Studio 2005
微软TTS5.1语音引擎(中文)所需要的东西:
用TlbImp从SAPI.51 SDK中导出的DotNetSpeech.dll(160K)
微软TTS5.1语音引擎(中文).msi(1.55M)以上两个东西由于大小关系没有传上来,需要的可以留下邮箱地址。如果你自己安装了SAPI.51 SDK,可以使用这个命令自己导出DotNetSpeech.dll
Tlbimp sapi.dll /out: DotNetSpeech.dll(出现错误不用管,不影响使用)
安装微软TTS5.1语音引擎(中文).msi,打开"控制面板",打开"语音"配置项目,在"文字-语音转换"的"语音选择"组合框中选择"Microsoft Simplified Chinese",这样才可以读出中文。如果要读英文,要选择"Microsoft Sam"。
使用Microsoft Visual Studio 2005新建项目,添加引用,引用DotNetSpeech.dll。
命名空间:
using DotNetSpeech;读出文本框中的中文:
SpeechVoiceSpeakFlags spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
SpVoice voice = new SpVoice();
voice.Speak(textBox1.Text, spFlags);将文本框中中文的读音保存为WAV文件:
SpeechVoiceSpeakFlags spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
SpVoice voice = new SpVoice();
SaveFileDialog dialog = new SaveFileDialog();
dialog.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav";
dialog.Title = "保存WAV文件";
dialog.FilterIndex = 2;
dialog.RestoreDirectory = true;
if (dialog.ShowDialog() == DialogResult.OK)
{
SpeechStreamFileMode spFileMode = SpeechStreamFileMode.SSFMCreateForWrite;
SpFileStream spFileStream = new SpFileStream();
spFileStream.Open(dialog.FileName, spFileMode, false);
voice.AudioOutputStream = spFileStream;
voice.Speak(textBox1.Text, spFlags);
voice.WaitUntilDone(1000);
上面两句一定要写上,否则产生的文件没有声音
WaitUntilDone的后面的smTimeout是一个int型
spFileStream.Close(); 你可以参考一下,我现在也是用这个方法进行实时语音播放的。我代码基本也是这样的。SpVoice aSpVoice = new SpVoice();…… private void VieoStr(string Vieo)
{
string iVoiceStr = ChLStr(Vieo);
while (aSpVoice.Status.RunningState != SpeechRunState.SRSEDone)
{
Thread.Sleep(100);
} if (aSpVoice.Status.RunningState == SpeechRunState.SRSEDone)
{
aSpVoice.Speak(iVoiceStr, SpeechVoiceSpeakFlags.SVSFIsXML | SpeechVoiceSpeakFlags.SVSFlagsAsync);
}
} 但是有一点要说明一下,微软的这个语音库能读的中文字非常有限,而且读出来的东西比较生硬,如果楼主是高端应用,不建议使用这个方案,楼主可以了解一下 科大讯飞 的语音产品,我也在了解这个公司的产品,读出来的东西比微软的好很多。
2013-05-23
展开全部
需要创建一个声音文件夹,然后人工为每个常用字录音,相当于创建声音字典,下次出现任何一个字时,到字典中找到对应声音,并进行播放。不录音电脑怎么知道你这个字怎么读,除非你知道所有字的音频波,那代价太大了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询