首页 > 其他分享 >.NET使用System.Speech轻松读取文本

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

时间:2023-06-05 12:33:05浏览次数:41  
标签:转换 System Speech 语音 NET Speak

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。

dotnet new winforms

2) 打开“管理NuGet程序包“搜索System.Speech后安装nuget包。如下图

3)创建一个扩展类

这个主要扩展string的speak功能,后面能用上。

using System.Speech.Synthesis;

namespace System
{
    public static class SystemSpeechExtension
    {
        // 默认语音转换速率
        const int PDefaultRate = 3;
        // 错误信息语音转换速率
        const int PErrorRate = 4;

        /// <summary>
        /// 将字符串转换为语音并进行播放,使用默认速率。
        /// </summary>
        /// <param name="text2speak">要转换为语音的字符串</param>
        public static void Speak(this string text2speak)
        {
            text2speak.Speak(PDefaultRate);
        }

        /// <summary>
        /// 将字符串转换为语音并进行播放,可以指定转换速率。
        /// </summary>
        /// <param name="text2speak">要转换为语音的字符串</param>
        /// <param name="rate">语音转换速率</param>
        public static void Speak(this string text2speak, int rate)
        {
            var voice = new SpeechSynthesizer();
            voice.SetOutputToDefaultAudioDevice();
            voice.Rate = rate;
            voice.Speak(text2speak);
        }

        /// <summary>
        /// 将错误信息转换为语音进行播放,在调试模式下使用 PErrorRate 速率。
        /// </summary>
        /// <param name="text2speak">要转换为语音的错误信息</param>
        public static void SpeakError(this string text2speak)
        {
#if(DEBUG)
            $"Error {text2speak} while debugging!".Speak(PErrorRate);
#endif
        }
    }
}

4)新建一个winfrom窗体使用这个扩展类,效果如下:

按钮代码如下:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    /// <summary>
    /// 当按钮1被点击时,将文本框中的内容转换为语音并进行播放。
    /// </summary>
    private void button1_Click(object sender, EventArgs e) => this.textBox1.Text.Speak();

    /// <summary>
    /// 当按钮2被点击时,将文本框中的内容以指定的速率进行语音转换并播放。
    /// </summary>
    private void button2_Click(object sender, EventArgs e) => this.textBox1.Text.Speak(3);

    /// <summary>
    /// 当按钮3被点击时,首先将一条指定的文本转换为语音并播放,然后在一个 try-catch 块中故意引发异常并捕获它。
    /// 异常消息将被转换为语音并作为错误信息进行播放。
    /// </summary>
    private void button3_Click(object sender, EventArgs e)
    {
        "请注意, 未填写内容,请填写内容!".Speak();
        try
        {
            var n = 0; var i = 0;
            var error = n / i;
        }
        catch (Exception ex)
        {
            ex.Message.SpeakError();
        }
    }
}

这样代码部分全部写完,大家可以点击按钮来试一试了。

结语

本文介绍了System.Speech的文字转语音功能,并用案例介绍了它的使用流程。System.Speech还有很多功能,比如语音识别、音频输入和输出控制等,篇幅有限这里就不在介绍,感兴趣可以到官网查阅API来了解它使用方法。希望本文对你有所收获,你对System.Speech有什么看法欢迎留言或者吐槽本文。

来源公众号:DotNet开发跳槽

标签:转换,System,Speech,语音,NET,Speak
From: https://www.cnblogs.com/xbhp/p/17457484.html

相关文章

  • C# .NET Dictionary 将集合key以ascii码从小到大排序
     .NET不加参数,默认不是按ASCII排序。JAVA默认是按ASCII排序。 Array.Sort(arrKeys,string.CompareOrdinal);按ASCII排序。区分大小写。Array.Sort(arrKeys);排序但不区分大小写。 方法1:publicstaticIDictionary<string,string>AsciiDictionary(IDictio......
  • 西北农林科技大学,我的母校! http://xnxy.43i.net/index.php
          西北农林科技大学,我的母校!曾经在校园里,看着"今天你以学校为荣,明天学校以你为荣"的横幅,心里默默给自己加油,希望真的可以如此;今天毕业了,在茫茫深圳,怀揣梦想努力着,却不忘曾经那份感情,梦中游弋在母校的角角落落,我想身为西农校友的一份......
  • 【Netty底层数据交互源码】
    (文章目录)如何学习Netty的底层深入了解Netty的底层实现需要对JavaNIO、OSI模型、TCP/IP协议栈等底层网络知识有一定的了解。下面是一些建议,可以帮助你更深入地了解Netty的底层实现:学习JavaNIO:JavaNIO是Java中用于处理I/O操作的一套库。在深入了解Netty的底层实现时,你需要......
  • spire.ocr 报错无法加载 DLL"spire_ocrsystem.dll"
    出现这个错误的时候,用以下2个步骤解决:第一,要检查类库的运行平台是否已经改成了x64,因为spire.ocr是基于64位平台的 第二,缺少VC运行库,安装VC运行库即可运行库的下载地址:https://pan.baidu.com/s/1lQwyqaS-Ba2ns0BRT5Z7Eg  提取码:wgja ......
  • systemctl mask 和 systemctl disable
    https://blog.csdn.net/qq_44370158/article/details/118178165?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-118178165-blog-104569146.235%5Ev36%5Epc_relevant_default_base3&depth_1-utm_sou......
  • Net Core-MediatR
    一GitHub地址:https://github.com/jbogard/MediatR二简单使用:publicclassMyRequestMsg:IRequest<int>{publicstringRequestMsgType{get;set;}=string.Empty;}publicclassMyRequestHandler:IRequestHandler<MyRequestMsg,int>{public......
  • Achieving a Better Stability-Plasticity Trade-off via Auxiliary Networks in Cont
    摘要连续学习过程中的稳定性-可塑性权衡是一个重要的问题。作者提出了AuxiliaryNetworkContinualLearning(ANCL),通过auxiliarynetwork提高了模型的可塑性。方法TheFormulationofAuxiliaryNetworkContinualLearning传统的continuallearning方法通常是在新数据集上......
  • httpclient in .net _ 压缩
     压缩 优势: 小带宽,更快的响应 压缩格式gzip,deflate(普遍压缩格式)  how获取压缩文件?Accept-Encoding:设置为压缩格式SocketsHttpHandler:启用自动解压 how发送压缩文件?client:压缩requestbody内置stream:GZipStream,DeflateStreamContent-......
  • netty入门demo
    参考博客:(14条消息)【Netty整理01-快速入门】Netty简单使用Demo(已验证)_the_fool_的博客-CSDN博客ServerHandler.javapackagecom.hmb;importio.netty.buffer.ByteBuf;importio.netty.channel.ChannelHandlerContext;importio.netty.channel.ChannelInboundHandlerAdapt......
  • .Net Core后端架构实战【3-介入IOC控制反转】
    摘要:基于.NETCore7.0WebApi后端架构实战【2-介入IOC控制反转】  2023/04/09,ASP.NETCore7.0,VS2022引言InversionofControl,简称IOC,即控制反转。记得当初刚实习的时候公司的带我的人和我提到过IOC这个概念,当初完全不知道是啥东西。后来有幸写了半年Java,Spring......