杂谈——如何将字符串以语音形式输出
最近在网上看到关于如何将字符串以语音形式输出的解决办法,所以自己也在空余时间小试了一下。目前看效果还可以但是在支持中文上需要单独安装一个应用程序。具体效果类似金山词霸中的语音朗读功能。
首先、我介绍一下我用的什么工具。(下载相关工具)
主要使用微软提供的
DotNetSpeech.dll(抽取后的)
微软TTS5.1语音引擎(中文).msi这2个东东已经在下载压缩包中存在,下载后安装“微软TTS5.1语音引擎(中文).msi”支持中文发音,有的网友说安装后需要配置一下,具体步骤为:
打开"控制面板",打开"语音"配置项目,在"文字-语音转换"的"语音选择"组合框中选择"Microsoft Simplified Chinese",这样才可以读出中文。如果要读英文,要选择"Microsoft Sam"。
我的电脑安装后没有进行以上设置就可以中文发音,如果哪位朋友安装后不能正常发音的可以参照上面的描述试试。
下面我们来讲讲如何使用DotNetSpeech.dll来开发字符串转语音输出的。
首先我使用的是VS2010,新建一个解决方案,然后在解决方案中新建一个Window窗体项目,在MainFrom中分别从工具箱中拖放一个文本框及一个按钮,
文本框主要用于输入文本字符串,按钮用于触发字符串转语音事件。
下面我们直接上代码
首先项目中引用DotNetSpeech.dll,
然后加入如下函数代码:
1: void Speak(string content)2: {
3: try4: {
5: SpeechVoiceSpeakFlags SSF = SpeechVoiceSpeakFlags.SVSFlagsAsync;
6: SpVoice vo = new SpVoice();7: vo.Voice = vo.GetVoices(string.Empty, string.Empty).Item(0);8: vo.Speak(content, SSF);
9: }
10: catch (System.Exception ec)11: {
12: MessageBox.Show(ec.ToString(), "SpeechApp", MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);13: }
14: }
然后在Button的Click事件中调用
1: Speak(text1.text)
然后F5允许项目,在文本框中输入”你好”点击Button如果不出意外就应该听见一位MM的声音了.
这里我试了一下,大家也许注意到了上面代码片段中有一行为
1: vo.Voice = vo.GetVoices(string.Empty, string.Empty).Item(0);
其中item(0)为MM中文发音、item(1)不支持中文的MM发音、item(2)是一个男声发音。
当然这个可以根据自己偏好来选择自由设置。
对于声音我们还可以导出wav文件,具体代码片段如下:
1: try2: {
3: DotNetSpeech.SpeechVoiceSpeakFlags SSF = DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync;
4: DotNetSpeech.SpVoice vo = new SpVoice();5: System.Windows.Forms.SaveFileDialog SFD = new System.Windows.Forms.SaveFileDialog();6: SFD.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav";7: SFD.Title = "Save to a wav file";8: SFD.FilterIndex = 2;
9: SFD.RestoreDirectory = true;10: if (SFD.ShowDialog() == System.Windows.Forms.DialogResult.OK)11: {
12: DotNetSpeech.SpeechStreamFileMode SSFM = DotNetSpeech.SpeechStreamFileMode.SSFMCreateForWrite;
13: DotNetSpeech.SpFileStream SFS = new DotNetSpeech.SpFileStream();14: SFS.Open(SFD.FileName, SSFM, false);15: vo.AudioOutputStream = SFS;
16: vo.Speak(textBox2.Text, SSF);
17: vo.WaitUntilDone(System.Threading.Timeout.Infinite);
18: SFS.Close();
19: }
20: }
21: catch (System.Exception ec)22: {
23: MessageBox.Show(ec.ToString(), "SpeechApp", MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);24: }
这样我们就可以将声音输出出来了。
其实这个以后在项目中有可能用的到,所以在这将具体实现方式先备注一下。以后有机会再深入研究。
如果有哪位朋友对此有兴趣可以深入研究一下哈!