Microsoft Speech SDK 5.1 微软的文字转语音TTS

下载安装 Speech SDK 5.1

1. Windows Speech SDK 5.1版本支持xp系统和server 2003系统,需要下载安装。XP系统默认只带了个Microsoft Sam英文男声语音库,想要中文引擎就需要安装Windows Speech SDK 5.1。下载地址:http://www.microsoft.com/download/en/details.aspx?id=10121

2. Windows Speech SDK 5.3版本支持Vista系统和Server 2008系统,已经集成到系统里。Vista和Server 2003默认带Microsoft lili中文女声语音库和Microsoft Anna英文女声语音库。

3. Windows Speech SDK 5.4版本支持Windows7系统,也已经集成到系统里,不需要下载安装。Win7系统同样带了Microsoft lili中文女声语音库和Microsoft Anna英文女声语音库。Microsoft lili支持中英文混读。

安装好后在安装目录下有各种编程语言的Demo和帮助文档

C:\Program Files (x86)\Microsoft Speech SDK 5.1

方法:

  GetInstalledVoices():获取当前系统中安装的语音播放人,返回一个VoiceInfo对象集合,具体的对象有在控制面板中,语音项可以查看。

                                           Xp默认是Microsoft Sam。

  SelectVoice(string):选择当前朗读的人员,参数是朗读者名称,如:Microsoft Sam

  SpeakAsync(string):开始进行异步朗读,参数是朗读的文本。

  Speak(string):开始进行朗读,参数是朗读的文本。这里我没有弄懂SpeakAsync和Speak的区别,我试了下效果都一样。

  Pause():暂停正在播放朗读。

  Resume():继续播放暂停的朗读。

  SetOutputToWaveFile(string):保存语音文件,调用该方法后需要调用Speak方法。参数是保存文件的路径。如:d:/124.wav或d:/123.MP3

  SetOutputToNull():保存文件结束语句,必须调用该语句,否则生产的语音文件无法播放。

属性:

  Rate:播放语速,-10~10

  Volume:音量调节:0~100

  Voice:正在使用某个人员播放,返回:VoiceInfo对象。

事件:

  SpeakCompleted:朗读完成事件,朗读完成后会触发该时间。可以在该事件中处理播放完成后的流程。

  SpeakStarted:朗读开始事件。

  SpeakProgress:朗读过程事件,可以继续一些进度条处理。

C#示例

示例一 直接播放  可调节音量 和语速 

项目引用  Interop.SpeechLib.dll

using SpeechLib;
复制代码
private void btnSpeak_Click(object sender, EventArgs e)
{
            SpeechVoiceSpeakFlags flag = SpeechVoiceSpeakFlags.SVSFlagsAsync;
            SpVoice voice = new SpVoice();
            voice.Rate = 1;//语速
            voice.Volume = 100;//音量
            voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0);//Item(0)中文、Item(3)英文
            voice.Speak("这里是您要播报的语音内容,今天天气晴转多云", flag);

}
复制代码

示例二  直接保存到wav文件 并转为 8KHZ   16比特  语音格式

复制代码
private void btnSave_Click(object sender, EventArgs e)
{
            try
            {
                SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
                SpVoice Voice = new SpVoice();

                string strFileName = "TTS/" + txtSpeakText.Text+".wav";//工程目录下以播放的内容为文件名

                SpeechStreamFileMode SpFileMode = SpeechStreamFileMode.SSFMCreateForWrite;

                SpFileStream SpFileStream = new SpFileStream();

                SpFileStream.Format.Type = SpeechAudioFormatType.SAFT8kHz16BitMono; //8KHZ 16比特  语音格式
                //SpFileStream.Format.Type = SpeechAudioFormatType.SAFT11kHz16BitMono;
                //SpFileStream.Open("c:\\tts.wav", SpeechStreamFileMode.SSFMCreateForWrite, false);

                SpFileStream.Open(strFileName, SpFileMode, false);

                Voice.AudioOutputStream = SpFileStream;
                Voice.Speak(txtSpeakText.Text, SpFlags);
                Voice.WaitUntilDone(Timeout.Infinite);//Timeout.Infinite 线程超时常量
                
                SpFileStream.Close();//关闭

            }
            catch (Exception error)
            {
                MessageBox.Show("Speak error", "SimpleTTS " + error.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
}
复制代码

示例二  通过打开对话框 保存到 wav文件 

复制代码
private void btnSaveDialog_Click(object sender, EventArgs e)
{
            try
            {
                SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
                SpVoice Voice = new SpVoice();

                SaveFileDialog sfd = new SaveFileDialog();

                sfd.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav";
                sfd.Title = "Save to a wave file";
                sfd.FilterIndex = 2;
                sfd.RestoreDirectory = true;

                if (sfd.ShowDialog() == DialogResult.OK)
                {

                    SpeechStreamFileMode SpFileMode = SpeechStreamFileMode.SSFMCreateForWrite;

                    SpFileStream SpFileStream = new SpFileStream();
                    SpFileStream.Open(sfd.FileName, SpFileMode, false);

                    Voice.AudioOutputStream = SpFileStream;
                    Voice.Speak(txtSpeakText.Text, SpFlags);
                    Voice.WaitUntilDone(Timeout.Infinite);

                    SpFileStream.Close();

                }

            }
            catch (Exception error)
            {
                MessageBox.Show("Speak error", "SimpleTTS", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
}
复制代码

 

posted @   海乐学习  阅读(2121)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2020-07-28 win10无线wifi总是掉线断网
2010-07-28 C#一种截取字符串方式
2010-07-28 表单中单击回车键光标下移
2010-07-28 SugarCRM 修正第二次加载模块时错误
2010-07-28 SugarCRM Logo图片等常用设置
点击右上角即可分享
微信分享提示