在计算机中将文本转换成语音的技术叫做语音合成(TTS:Text To Speech)。要使用它的话就需要到MS官网上去下载地址为:http://www.microsoft.com/reader/developers/downloads/tts.mspx
安装时还要求我先安装一个叫MSReader 2.1的程序,下载地址为:http://www.microsoft.com/reader/downloads/pc.mspx
没有找到SpeechLib.dll需要先在解决方案中引用:C:/Program Files/Common Files/Microsoft Shared/Speech/sapi.dll ,引用之后就生成了Interop.SpeechLib.dll
这个东西不是很大,到于原理还没有去想过,因为现在只是帮想了解的朋友做个最基本的DEMO。
下下来了后就安装,注意:如果想实现汉字或非英语的阅读就要去下载SpeechSDK51LangPack。
下面来创建一个TTS程序,首先在VS中创建一个项目,然后添加引用"安装目录/Samples/Csharp/ListBox"中的Interop.SpeechLib.dll程序集,在程序里引用SpeechLib Namespace。
创建SpVoiceClass类,(SpVoiceClass是我们这里要用到的主要的类,它包含在SpeechLib.dll中),面在这里必要的属性如下:
属性名 | 类型 | 说明 |
Voice | SpObjectToken | 大概是用于设置声音的效果 |
AudioOutput | SpObjectToken | 用于选择声卡 |
Rate | Int | 频率,说话的速度 |
Volume | Int | 音量,最大为100 |
根据SpVoiceClass类中几个必要的属性,我们可以做一个类似下图的简单界面
具体的实现代码如下:
Code
using SpeechLib;
private void button1_Click(object sender, EventArgs e)
{
try
{
SpVoiceClass voic=new SpVoiceClass();
voic.Voice = voic.GetVoices(null, null).Item(comboBox1.SelectedIndex);
voic.AudioOutput = voic.GetAudioOutputs(null, null).Item(comboBox2.SelectedIndex);
voic.Rate = trackBar1.Value;
voic.Volume = trackBar2.Value;
voic.Speak(textBox1.Text, SpeechVoiceSpeakFlags.SVSFDefault);
}
catch
{
;
}
}
注意:comboBox1.SelectedIndex不为3时能读英语和汉语(前提是装了话音补丁),但是英文单词是单个字单个字读不是读整个单词;如果为3,只能读英文不能读汉字,读英文的话,它就会一个单词一个单词的读出来。