C#调用微软库的实现语音识别

早期, 我们用SpeechRecognitionEngine如下来进行语音识别,但是复杂的词条加上环境噪声,其实成功率是不高的。

cs 复制代码
            SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("zh-CN"));//初始化中文引擎
            Choices conmmonds = new Choices();
            conmmonds.Add(new string[] { "启动", "停止", "充电" });//添加词条
            GrammarBuilder gBuilder = new GrammarBuilder();
            gBuilder.Append(conmmonds);
            Grammar grammar = new DictationGrammar(); //new Grammar(gBuilder);
            grammar.Name = "default dictation";
            grammar.Enabled = true;
            recognizer.LoadGrammar(grammar);

            recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(Deal_SpeechRecongized);
            recognizer.SetInputToDefaultAudioDevice();//设置默认输入设备

            recognizer.InitialSilenceTimeout = TimeSpan.FromSeconds(3);
            recognizer.BabbleTimeout = TimeSpan.FromSeconds(2);
            recognizer.EndSilenceTimeout = TimeSpan.FromSeconds(1);
            recognizer.EndSilenceTimeoutAmbiguous = TimeSpan.FromSeconds(1.5);

            recognizer.RecognizeAsync(RecognizeMode.Multiple);//开始监控设备输入准备识别

            Speak(conmmonds + "测试语音");

另外一种方式,Microsoft的Speech SDK来实现语音的实时解读,然后根据接收到的文本内容进行处理,实现与用户的语音交互。

开发语音识别的需要使用注册Azure账号或测试api-key:

1. 准备工作

  • 安装SDK或库 :根据所选服务,下载并安装对应的C# SDK或NuGet包。比如,如果您选择Microsoft的Azure Cognitive Services中的语音服务,您就需要安装Microsoft.CognitiveServices.Speech NuGet包。

2. 实现语音识别

使用C#代码初始化语音识别客户端,监听麦克风输入,转换为文本。

cs 复制代码
1using Microsoft.CognitiveServices.Speech;
2using Microsoft.CognitiveServices.Speech.Audio;
3
4// 初始化SpeechConfig,使用您的API Key和区域
5var config = SpeechConfig.FromSubscription("your-api-key", "your-region");
6config.SpeechRecognitionLanguage = "zh-CN"; // 设置语言
7
8// 设置音频配置,使用默认麦克风
9using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
10using var recognizer = new SpeechRecognizer(config, audioConfig);
11
12Console.WriteLine("请说话...");
13
14// 开始连续语音识别
15var result = await recognizer.RecognizeOnceAsync();
16
17if (result.Reason == ResultReason.RecognizedSpeech)
18{
19    Console.WriteLine($"识别到的文本: {result.Text}");
20    // 在这里处理识别到的文本,比如调用另一个函数进行反馈处理
21}
22else if (result.Reason == ResultReason.NoMatch)
23{
24    Console.WriteLine("没有识别到有效语音输入。");
25}
26else if (result.Reason == ResultReason.Canceled)
27{
28    var cancellation = CancellationDetails.FromResult(result);
29    Console.WriteLine($"识别被取消: {cancellation.Reason}");
30}

3. 实现语音反馈

处理完识别到的文本后,可以使用相同的Speech SDK将处理结果转换为语音反馈给用户。

复制代码
1// 使用Text-to-Speech转换文本为语音
2var speechSynthesizer = new SpeechSynthesizer(config, null);
3
4var ssml = $"<speak version='1.0' xml:lang='zh-CN'><voice name='zh-CN-XiaoyiNeural'><prosody rate='medium'>{result.Text}</prosody></voice></speak>";
5var resultSynthesis = await speechSynthesizer.SynthesizeSsmlToWaveFileAsync(ssml, "output.wav");
6
7if (resultSynthesis.Reason == ResultReason.SynthesizingAudioCompleted)
8{
9    Console.WriteLine("语音合成完成。");
10    // 可以进一步处理,比如播放输出的音频文件
11}
12else if (resultSynthesis.Reason == ResultReason.Canceled)
13{
14    var cancellation = CancellationDetails.FromResult(resultSynthesis);
15    Console.WriteLine($"语音合成被取消: {cancellation.Reason}");
16}
相关推荐
聚客AI2 小时前
ChatGPT到Claude全适配:跨模型Prompt高级设计规范与迁移技巧
人工智能·机器学习·语言模型·自然语言处理·langchain·transformer·llama
小羊Linux客栈2 小时前
自动化:批量文件重命名
运维·人工智能·python·自动化·游戏程序
Mr数据杨6 小时前
【Dv3Admin】插件 dv3admin_chatgpt 集成大语言模型智能模块
人工智能·语言模型·chatgpt
zm-v-159304339866 小时前
AI 赋能 Copula 建模:大语言模型驱动的相关性分析革新
人工智能·语言模型·自然语言处理
zhz52148 小时前
AI数字人融合VR全景:从技术突破到可信场景落地
人工智能·vr·ai编程·ai数字人·ai agent·智能体
数据与人工智能律师8 小时前
虚拟主播肖像权保护,数字时代的法律博弈
大数据·网络·人工智能·算法·区块链
武科大许志伟8 小时前
武汉科技大学人工智能与演化计算实验室许志伟课题组参加2025中国膜计算论坛
人工智能·科技
哲讯智能科技8 小时前
【无标题】威灏光电&哲讯科技MES项目启动会圆满举行
人工智能
__Benco8 小时前
OpenHarmony平台驱动开发(十七),UART
人工智能·驱动开发·harmonyos
小oo呆8 小时前
【自然语言处理与大模型】Windows安装RAGFlow并接入本地Ollama模型
人工智能·自然语言处理