语音合成使用
平台:Microsoft Visual Stduio软件编程
1.添加添加引用:System.Speech Dll库
2. 添加命名空间 System.Speech.Synthesis就可以使用语音合成功能。
在正式调用相关语音包之前,先确认电脑是否已经安装好相关的语音包,避免出现错误。可以使用以下代码来查看,电脑中有哪些已经安装好的语音包。
SpeechSynthesizer synth = new SpeechSynthesizer();
foreach (InstalledVoice voices in synth.GetInstalledVoices()) //可查看本地电脑已经安装的语音包{VoiceInfo Info = voices.VoiceInfo;Console.Write("Name:"+Info.Name);Console.Write(" Culture:"+Info.Culture);Console.WriteLine(" Id:"+Info.ID);}voice.SelectVoice("Microsoft Tracy Desktop");//指定前面已经按照好的语音库,参数为语音库的名称
运行出现以下窗口,可以看到有哪些语音包已经被安装。
3.语音合成的使用方法
第一种方法:
SpeechSynthesizer Synth=new SpeechSythesizer();Synth.SelectVoice("Microsoft Huihui Desktop");Synth. SetOutputToDefaultAudioDevice();//设置本地设备为音频输出Synth.SpeakAsync(“文字转语音”);//异步方式播放
/*Synth.Speak(“文字转语音”);//同步方式播放Synth.Dispose();//不在使用语音合成释放资源,再次使用需要重新实例化*/
第二种方法:
SpeechSynthesizer Synth=new SpeechSythesizer();
Synth. SetOutputToDefaultAudioDevice();
Prompt str = new Prompt(“文字转语音”);
Synth.SpeakAsync(str);
第三种方法:
SpeechSynthesizer Synth=new SpeechSythesizer();Synth. SetOutputToDefaultAudioDevice();PromptBuilder str = new PromptBuilder();str.AppendAudio(“C:\\Test\\tts.wav”)//把字符串语音合成的音频保存在本地str.AppendText(“文字转语音”);synth.SpeakAsync(str);
最简单的用法(通过输入的字符,调用语音合成的功能):
class TTS{SpeechSynthesizer synth = new SpeechSynthesizer();public void tts(string str){if (str!=""){synth.SetOutputToDefaultAudioDevice();//使用默认的语音包synth.SpeakAsync(str); //异步使用}} }
4. 其他
(1) SpeechSynthesizer类属性:
- Rate 获取或设置语速 -10到10之间
- State 获取当前状态 返回2 表示暂停 0表示准备生成语音 1表示正在播音
- Voice 获取当前语音信息(Age Culture Gender id Name等等)
- Volume 获取或设置输出音量 0到100
(2) 常用方法:
- Pause() 暂停语音合成
- Resume() 继续之前暂停的语音合成
- Dispose() 完成语音合成后释放资源
(3) 常用事件: - SpeakCompleted 当完成语音合成时引发
- StateChanged 当语音合成器状态改变时引发
- SpeakStarted 当开始语音合成时引发
样例:
SpeechSynthesizer Synth=new SpeechSythesizer();
Synth.SetOutputToDefaultAudioDevice();
Synth.SpeakStarted += new EventHandler<SpeakStartedEventArgs>(synth_SpeakStarted);
Synth.SpeakAsync(“文字转语音”);
Static void synth_SpeakStarted(object sender, StateChangedEventArgs e){Console.WriteLine("Speak operation started");}