杂谈——如何将字符串以语音形式输出

最近在网上看到关于如何将字符串以语音形式输出的解决办法,所以自己也在空余时间小试了一下。目前看效果还可以但是在支持中文上需要单独安装一个应用程序。具体效果类似金山词霸中的语音朗读功能。

首先、我介绍一下我用的什么工具。(下载相关工具

主要使用微软提供的

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:              try
   4:              {
   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:   try
   2:              {
   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:              }

这样我们就可以将声音输出出来了。

其实这个以后在项目中有可能用的到,所以在这将具体实现方式先备注一下。以后有机会再深入研究。

如果有哪位朋友对此有兴趣可以深入研究一下哈!

微笑

posted on 2011-11-09 07:26  哈哈镜0000  阅读(2668)  评论(14编辑  收藏  举报

导航