翼度科技»论坛 编程开发 .net 查看内容

.NET使用System.Speech轻松读取文本

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
System.Speech是.NET框架的一部分,提供了语音识别和语音合成的功能。通过使用System.Speech命名空间中的类,开发人员可以在.NET应用程序中实现语音识别功能。 在本文中,我将演示如何使用 System.Speech.NET,这是开发语音应用程序比较牛逼的内库。它适用于 .NET 4.x和.NET Core以上版本。它支持语音识别和文本到语音转换,并提供统一的 API。借助 System.Speech.NET,您可以轻松创建理解和响应自然语言输入的应用程序。本文将在这里重点介绍System.Speech的Speak 方法。
使用流程
这里我们使用winfrom来演示System.Speech的使用,流程如下:
1)创建一个文件夹并运行dotnet命令以创建一个winfrom新项目,也可以用vs新建winfrom。
  1. dotnet new winforms
复制代码
2) 打开“管理NuGet程序包“搜索System.Speech后安装nuget包。如下图

3)创建一个扩展类
这个主要扩展string的speak功能,后面能用上。
  1. using System.Speech.Synthesis;
  2. namespace System
  3. {
  4.     public static class SystemSpeechExtension
  5.     {
  6.         // 默认语音转换速率
  7.         const int PDefaultRate = 3;
  8.         // 错误信息语音转换速率
  9.         const int PErrorRate = 4;
  10.         /// <summary>
  11.         /// 将字符串转换为语音并进行播放,使用默认速率。
  12.         /// </summary>
  13.         /// <param name="text2speak">要转换为语音的字符串</param>
  14.         public static void Speak(this string text2speak)
  15.         {
  16.             text2speak.Speak(PDefaultRate);
  17.         }
  18.         /// <summary>
  19.         /// 将字符串转换为语音并进行播放,可以指定转换速率。
  20.         /// </summary>
  21.         /// <param name="text2speak">要转换为语音的字符串</param>
  22.         /// <param name="rate">语音转换速率</param>
  23.         public static void Speak(this string text2speak, int rate)
  24.         {
  25.             var voice = new SpeechSynthesizer();
  26.             voice.SetOutputToDefaultAudioDevice();
  27.             voice.Rate = rate;
  28.             voice.Speak(text2speak);
  29.         }
  30.         /// <summary>
  31.         /// 将错误信息转换为语音进行播放,在调试模式下使用 PErrorRate 速率。
  32.         /// </summary>
  33.         /// <param name="text2speak">要转换为语音的错误信息</param>
  34.         public static void SpeakError(this string text2speak)
  35.         {
  36. #if(DEBUG)
  37.             $"Error {text2speak} while debugging!".Speak(PErrorRate);
  38. #endif
  39.         }
  40.     }
  41. }
复制代码
4)新建一个winfrom窗体使用这个扩展类,效果如下:

按钮代码如下:
  1. public partial class Form1 : Form
  2. {
  3.     public Form1()
  4.     {
  5.         InitializeComponent();
  6.     }
  7.     /// <summary>
  8.     /// 当按钮1被点击时,将文本框中的内容转换为语音并进行播放。
  9.     /// </summary>
  10.     private void button1_Click(object sender, EventArgs e) => this.textBox1.Text.Speak();
  11.     /// <summary>
  12.     /// 当按钮2被点击时,将文本框中的内容以指定的速率进行语音转换并播放。
  13.     /// </summary>
  14.     private void button2_Click(object sender, EventArgs e) => this.textBox1.Text.Speak(3);
  15.     /// <summary>
  16.     /// 当按钮3被点击时,首先将一条指定的文本转换为语音并播放,然后在一个 try-catch 块中故意引发异常并捕获它。
  17.     /// 异常消息将被转换为语音并作为错误信息进行播放。
  18.     /// </summary>
  19.     private void button3_Click(object sender, EventArgs e)
  20.     {
  21.         "请注意, 未填写内容,请填写内容!".Speak();
  22.         try
  23.         {
  24.             var n = 0; var i = 0;
  25.             var error = n / i;
  26.         }
  27.         catch (Exception ex)
  28.         {
  29.             ex.Message.SpeakError();
  30.         }
  31.     }
  32. }
复制代码
这样代码部分全部写完,大家可以点击按钮来试一试了。
结语
本文介绍了System.Speech的文字转语音功能,并用案例介绍了它的使用流程。System.Speech还有很多功能,比如语音识别、音频输入和输出控制等,篇幅有限这里就不在介绍,感兴趣可以到官网查阅API来了解它使用方法。希望本文对你有所收获,你对System.Speech有什么看法欢迎留言或者吐槽本文。
  1. 来源公众号:DotNet开发跳槽
复制代码
来源:https://www.cnblogs.com/xbhp/archive/2023/06/05/17457484.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具