C#实现语音播报功能的示例详解

 更新时间:2024年02月01日 10:17:18   作者:wangyue4  
这篇文章主要为大家详细介绍了如何使用C#实现语音播报功能,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下

在C#中进行语音播报通常需要使用.NET Framework中的某个语音库或服务。一个常见的选择是使用System.Speech.Synthesis命名空间中的SpeechSynthesizer类,该类提供了文本到语音的转换功能。

以下是一个简单的示例,演示如何在C#中使用SpeechSynthesizer进行语音播报:

using System;
using System.Speech.Synthesis;
 
class Program
{
    static void Main()
    {
        // 创建SpeechSynthesizer实例
        using (SpeechSynthesizer synth = new SpeechSynthesizer())
        {
            // 设置语音合成引擎的声音
            synth.SelectVoiceByHints(VoiceGender.Female, VoiceAge.Adult);
 
            // 播报文本
            string textToSpeak = "Hello, this is a test. I am speaking in C#.";
            synth.Speak(textToSpeak);
 
            Console.WriteLine("Speech completed.");
        }
    }
}

请确保在你的项目中引用了System.Speech程序集。你可以在Visual Studio中通过右键单击项目 -> 添加 -> 引用 -> 程序集 -> 框架 -> System.Speech 来添加引用。

注意:System.Speech.Synthesis在.NET Core中不是默认支持的库。如果你的项目是基于.NET Core,请考虑使用其他第三方语音合成库,例如Microsoft.CognitiveServices.Speech SDK或其他可用的库。

使用 Cognitive Services Speech SDK 进行语音播报:

安装 Microsoft.CognitiveServices.Speech NuGet 包: 在你的项目中安装 Microsoft.CognitiveServices.Speech NuGet 包。你可以在 Visual Studio 中通过右键单击项目 -> 添加 -> NuGet 包管理器 -> 管理 NuGet 包来完成。

使用 Speech SDK 进行语音播报: 在代码中,你可以使用如下方式:

using System;
using Microsoft.CognitiveServices.Speech;
using System.Threading.Tasks;
 
class Program
{
    static async Task Main()
    {
        // 替换为你的 Cognitive Services Speech API 密钥和区域
        var apiKey = "YourSpeechApiKey";
        var region = "YourSpeechApiRegion";
 
        var config = SpeechConfig.FromSubscription(apiKey, region);
        using var synthesizer = new SpeechSynthesizer(config);
 
        // 播报文本
        var textToSpeak = "Hello, this is a test. I am speaking in .NET Core.";
        var result = await synthesizer.SpeakTextAsync(textToSpeak);
 
        if (result.Reason == ResultReason.SynthesizingAudioCompleted)
        {
            Console.WriteLine("Speech completed.");
        }
        else
        {
            Console.WriteLine($"Speech synthesis failed: {result.Reason}");
        }
    }
}

确保替换 YourSpeechApiKey 和 YourSpeechApiRegion 为你的 Cognitive Services Speech API 的实际密钥和区域。

这个示例使用了异步操作,因此 Main 方法声明为 async Task。请注意,使用云服务需要网络连接,并且可能会涉及使用费用,具体取决于你的使用情况。

知识补充

除了上文的方法,小编还为大家整理了其他C#实现语音播报的方法,希望对大家有所帮助

方法一

1、首先要安装语音包Microsoft Speech SDK 5.1

2、引用 Interop.SpeechLib.dll

3、然后以下代码即可

SpeechVoiceSpeakFlags flag = SpeechVoiceSpeakFlags.SVSFlagsAsync;
SpVoice voice = new SpVoice();
voice.Rate = 1;//语速
voice.Volume = 100;//音量
voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0);//Item(0)中文、Item(3)英文
voice.Speak("语音播报", flag);

方法二

 List<string> ls_speack = new List<string>();
 
 
   public void Speaking()
    {
        Task task = new Task(() =>
        {
            while (true)
            {
                Thread.Sleep(100);
                if (ls_speack.Count == 0)
                {
                    continue;
                }
                SpeechSynthesizer speech = new SpeechSynthesizer();
                speech.Volume = 100; //音量
                CultureInfo keyboardCulture = System.Windows.Forms.InputLanguage.CurrentInputLanguage.Culture;
                InstalledVoice neededVoice = speech.GetInstalledVoices(keyboardCulture).FirstOrDefault();
                if (neededVoice == null)
                {
                    //say = "未知的操作";
                }
                else
                {
                    speech.SelectVoice(neededVoice.VoiceInfo.Name);
                }
                for (int k = 0; k < ls_speack.Count; k++)
                {
                    Thread.Sleep(100);
                    speech.Speak(ls_speack[k]);
                }
                ls_speack = new List<string>();
            }
 
        });
        task.Start();
    }
 
 
    public static void Speaking(string saying)
    {
        string say = saying;
        Task task = new Task(() =>
        {
            SpeechSynthesizer speech = new SpeechSynthesizer();
            speech.Volume = 100; //音量
            CultureInfo keyboardCulture = System.Windows.Forms.InputLanguage.CurrentInputLanguage.Culture;
            InstalledVoice neededVoice = speech.GetInstalledVoices(keyboardCulture).FirstOrDefault();
            if (neededVoice == null)
            {
                say = "未知的操作";
            }
            else
            {
                speech.SelectVoice(neededVoice.VoiceInfo.Name);
            }
 
            speech.Speak(say);
        });
        task.Start();
    }

到此这篇关于C#实现语音播报功能的示例详解的文章就介绍到这了,更多相关C#语音播报内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#中计数排序算法的原理及实现

    C#中计数排序算法的原理及实现

    计数排序是一种线性时间复杂度的排序方法,主要通过统计元素出现的次数实现排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • C#中比较两个List是否相等的常见方法

    C#中比较两个List是否相等的常见方法

    在 C# 里,比较两个 List 是否相等,需要考虑多个方面,例如列表中的元素顺序、元素本身是否相等,下面介绍几种常见的比较方法,需要的朋友可以参考下
    2025-04-04
  • C#用户控件之温度计设计

    C#用户控件之温度计设计

    这篇文章主要为大家详细介绍了C#用户控件之温度计的设计方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • 使用C#校验画布签名图片是否为空白

    使用C#校验画布签名图片是否为空白

    这篇文章主要为大家详细介绍了如何使用C#校验画布签名图片是否为空白,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • unity avprovideo插件的使用详解

    unity avprovideo插件的使用详解

    这篇文章主要介绍了unity avprovideo插件的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • C#泛型委托的用法实例分析

    C#泛型委托的用法实例分析

    这篇文章主要介绍了C#泛型委托的用法,以实例形式较为详细的分析了C#委托的功能与相关使用技巧,需要的朋友可以参考下
    2015-05-05
  • Unity自定义编辑器界面(Inspector界面)

    Unity自定义编辑器界面(Inspector界面)

    这篇文章主要为大家详细介绍了Unity自定义编辑器界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • c#实现输出本月的月历

    c#实现输出本月的月历

    本篇文章是对使用c#输出本月月历的实现的代码进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • C# FileStream实现大文件复制

    C# FileStream实现大文件复制

    这篇文章主要为大家详细介绍了C# FileStream实现大文件复制,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • C#将指定目录所有文件名转换成小写的方法

    C#将指定目录所有文件名转换成小写的方法

    这篇文章主要介绍了C#将指定目录所有文件名转换成小写的方法,涉及C#中目录的遍历及filename.ToLowerInvariant方法的使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04

最新评论