欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# 语音合成

程序员文章站 2022-04-08 11:39:30
1. 引用System.Speech 2. 通过SpeechSynthesizer类朗读文本 new SpeechSynthesizer().SpeakAsync("我们都是好孩子We're good kids.") 3. Speck vs SpeckAsync函数 PlayAsync--异常播放, ......

1. 引用system.speech

2. 通过speechsynthesizer类朗读文本

new speechsynthesizer().speakasync("我们都是好孩子we're good kids.")

3. speck vs speckasync函数

  • playasync--异常播放,可以将需要朗读的文本进行排队。如果不需要,可以按如下取消当前的播放操作。
  • speak--同步播放,会卡ui线程。如果在朗读时,不影响界面操作,则不应使用此函数
 1         private speechsynthesizer speechsyn=new speechsynthesizer();
 2         /// <summary>
 3         /// 异步播放
 4         /// </summary>
 5         private void playasync()
 6         {
 7             var currentspokenprompt = speechsyn.getcurrentlyspokenprompt();
 8             if (currentspokenprompt != null)
 9             {
10                 speechsyn.speakasynccancel(currentspokenprompt);
11             }
12             speechsyn.speakasync(richtextbox1.text);
13         }
14         /// <summary>
15         /// 同步播放
16         /// 注:卡ui
17         /// </summary>
18         private void play()
19         {
20             using (speechsynthesizer speechsyn = new speechsynthesizer())
21             {
22                 speechsyn.speak(richtextbox1.text);
23             }
24         }

4. 设置朗读角色

1     var speechsynthesizer = new speechsynthesizer();
2     var voices= speechsynthesizer.getinstalledvoices(cultureinfo.currentculture).select(x => x.voiceinfo.name).tolist();
3     speechsynthesizer.selectvoice(voices[0]);
4     speechsynthesizer.speakasync("我们都是好孩子we're good kids.");

5. 其它

  • rate -- 语速设置,默认为0
  • volume -- 音量设置

6. 导出音频文件

可以将文本语音合成后,导出成一个wav、mp3等音频文件。

 1         private void exportaudiofile()
 2         {
 3             using (speechsynthesizer speechsyn = new speechsynthesizer())
 4             {
 5                 speechsyn.volume = 50;
 6                 speechsyn.rate = 0;
 7 
 8                 var filepath = environment.getfolderpath(environment.specialfolder.desktop) + $"\\{richtextbox1.text}.mp3";
 9                 if (file.exists(filepath))
10                 {
11                     file.delete(filepath);
12                 }
13 
14                 speechsyn.setoutputtowavefile(filepath);
15                 speechsyn.speak(richtextbox1.text);
16                 speechsyn.setoutputtodefaultaudiodevice();
17 
18                 messagebox.show($"保存录音文件成功,保存路径:{filepath}");
19             }
20         }

demo下载