功能:
进行中文文本的阅读,可以将阅读的语音输出为WAV音频。
实现平台:
Microsoft Visual Studio 2005
微软TTS5.1语音引擎(中文)
用TlbImp从SAPI.51 SDK中导出的DotNetSpeech.dll(160K)
微软TTS5.1语音引擎(中文).msi(1.55M)
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();
我这里补充下,当安装多个TTS语音包以后,需要进行选择,所以选择不同的语言包,方法如下:
1. SpVoice spVoice=new SpVoice()
spVoice.voice=spVoice.GetVoices("name=Microsoft Mary","").item(0);
spVoice.Speak("How do you do");
//这样就是女声了
2. SpeechSynthesizer syn = new SpeechSynthesizer();
syn.SelectVoice("Microsoft Lili");