记录一下自己用过的语音播报功能
用的是微软自己的类库
using System.Speech.Synthesis;
首先添加引用
然后创建SpeechSynthesizer 对象
private SpeechSynthesizer speech = new SpeechSynthesizer();
初始化参数
private void Form1_Load(object sender, EventArgs e) { List<VoiceInfo> infos= speech.GetInstalledVoices().Select(o=>o.VoiceInfo).ToList(); comboBox1.DataSource = infos; comboBox1.DisplayMember = "Name"; comboBox1.ValueMember = "ID"; speech.Rate = 0; }
调节音量
private void trackBar1_Scroll(object sender, EventArgs e) { speech.Volume = trackBar1.Value; }
目前调节音量有个问题,就是在播报的过程中,设置音量大小没有效果!
接下来就是播报内容了
private void button1_Click(object sender, EventArgs e) { speech.SelectVoice(comboBox1.Text); speech.SpeakAsync(textBox1.Text); }
其中 speech.SpeakAsync 和 speech.Speak的区别就是,一个是异步的,不会阻塞主线程,一个是同步的,播放的过程中,会阻塞主线程.
然后在关闭窗口的时候,如果有正在播报的内容,窗口会延迟关闭,这时候就得在窗口关闭事件中取消播放,或者释放 speech 对象
private void Form1_FormClosed(object sender, FormClosedEventArgs e) { speech.SpeakAsyncCancelAll(); }
本次算是第一次写一遍博客,记录下自己用过的一个小功能!