您的位置:首页 > 其它

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

2011-11-09 09:36 288 查看
本文转自:/article/5437559.html


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

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

主要使用微软提供的

DotNetSpeech.dll(抽取后的)
微软TTS5.1语音引擎(中文).msi

这2个东东已经在下载压缩包中存在,下载后安装“微软TTS5.1语音引擎(中文).msi”支持中文发音,有的网友说安装后需要配置一下,具体步骤为:

打开"控制面板",打开"语音"配置项目,在"文字-语音转换"的"语音选择"组合框中选择"Microsoft Simplified Chinese",这样才可以读出中文。如果要读英文,要选择"Microsoft Sam"。

我的电脑安装后没有进行以上设置就可以中文发音,如果哪位朋友安装后不能正常发音的可以参照上面的描述试试。

下面我们来讲讲如何使用DotNetSpeech.dll来开发字符串转语音输出的。

首先我使用的是VS2010,新建一个解决方案,然后在解决方案中新建一个Window窗体项目,在MainFrom中分别从工具箱中拖放一个文本框及一个按钮,

文本框主要用于输入文本字符串,按钮用于触发字符串转语音事件。

下面我们直接上代码

首先项目中引用DotNetSpeech.dll,

然后加入如下函数代码:

void Speak(string content)
{
try
    {
SpeechVoiceSpeakFlags SSF = SpeechVoiceSpeakFlags.SVSFlagsAsync;
SpVoice vo = new SpVoice();
vo.Voice = vo.GetVoices(string.Empty, string.Empty).Item(0);
vo.Speak(content, SSF);
}
catch (System.Exception ec)
    {
MessageBox.Show(ec.ToString(), "SpeechApp", MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
}
}


然后在Button的Click事件中调用

Speak(text1.text)


然后F5允许项目,在文本框中输入”你好”点击Button如果不出意外就应该听见一位MM的声音了.

这里我试了一下,大家也许注意到了上面代码片段中有一行为

vo.Voice = vo.GetVoices(string.Empty, string.Empty).Item(0);


其中item(0)为MM中文发音、item(1)不支持中文的MM发音、item(2)是一个男声发音。

当然这个可以根据自己偏好来选择自由设置。

对于声音我们还可以导出wav文件,具体代码片段如下:

try
    {
DotNetSpeech.SpeechVoiceSpeakFlags SSF = DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync;
DotNetSpeech.SpVoice vo = new SpVoice();
System.Windows.Forms.SaveFileDialog SFD = new System.Windows.Forms.SaveFileDialog();
SFD.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav";
SFD.Title = "Save to a wav file";
SFD.FilterIndex = 2;
SFD.RestoreDirectory = true;
if (SFD.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
DotNetSpeech.SpeechStreamFileMode SSFM = DotNetSpeech.SpeechStreamFileMode.SSFMCreateForWrite;
DotNetSpeech.SpFileStream SFS = new DotNetSpeech.SpFileStream();
SFS.Open(SFD.FileName, SSFM, false);
vo.AudioOutputStream = SFS;
vo.Speak(textBox2.Text, SSF);
vo.WaitUntilDone(System.Threading.Timeout.Infinite);
SFS.Close();
    }
}
catch (System.Exception ec)
    {
MessageBox.Show(ec.ToString(), "SpeechApp", MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
}


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

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐