.net实现简单语音朗读(TTS)功能
首先,添加DotNetSpeech.dll引用,可以在这里直接下载,也可以参照这篇文章说的,在安装Speech SDK以后,在Common Files\Microsoft Shared\Speech\目录下面找到SAPI.dll,用Tlbimp.exe工具将该dll转换成.net平台下的Assembly---DotNetSpeech.dll。
然后,using DotNetSpeech;
朗读功能:
SpeechVoiceSpeakFlags flags = peechVoiceSpeakFlags.SVSFlagsAsync;
SpVoice sp = new SpVoice();
sp.Voice = sp.GetVoices("name=Microsoft Simplified Chinese", "").Item(0);
sp.Rate = -3;
sp.Speak(txtText.Text, flags);
注:SpeechVoiceSpeakFlags是语音朗读的风格; Voice中是语音类型(语言、男(女)声),有 Microsoft Simplified Chinese,Microsoft Mary(Sam,Mike)等,
也可以这样:voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0); //0选择默认的语音,
1选择第二个语音;Rate指的是语速。
当然,你也可以在此不写,打开控制面板中的语音设置类型和语速,如图:
生成语音文件:
SaveFileDialog dialog = new SaveFileDialog();
dialog.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav";
dialog.Title = "Save to a wave file";
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(txtText.Text.Trim(), flags);
voice.WaitUntilDone(Timeout.Infinite);
spFileStream.Close();
}
(在WinForm和Web中都适用)
参考:http://www.microsoft.com/china/community/program/originalarticles/TechDoc/Cnspeech.mspx