C#实现语音播报功能的示例详解
作者:wangyue4
在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#语音播报内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!