C#语音识别与播报开发指南

news/2025/2/26 8:21:23

C# 语音识别离线开发推荐库

以下是一些适用于 C# 离线语音识别的库,支持本地处理,无需网络连接:


1. System.Speech.Recognition (Windows)
  • 简介:.NET Framework 自带的库,适合简单的离线命令词识别。
  • 适用场景:Windows 平台,基础语音指令识别(如控制应用程序)。
  • 安装:直接引用 System.Speech(仅限 .NET Framework 项目)。
  • 代码示例
    using System.Speech.Recognition;
    
    var recognizer = new SpeechRecognitionEngine();
    recognizer.LoadGrammar(new DictationGrammar());
    recognizer.SpeechRecognized += (sender, e) => {
        Console.WriteLine($"识别结果: {e.Result.Text}");
    };
    recognizer.SetInputToDefaultAudioDevice();
    recognizer.RecognizeAsync(RecognizeMode.Multiple);
    

2. Vosk (跨平台)
  • 简介:基于 Kaldi 的开源离线语音识别库,支持多语言和跨平台。
  • 适用场景:高精度识别,支持 Linux/macOS/Windows。
  • 安装:通过 NuGet 安装 Vosk,并下载预训练模型。
  • 代码示例
    using Vosk;
    
    var model = new Model("path/to/model");
    var recognizer = new VoskRecognizer(model, 16000.0f);
    using (var source = new WaveInEvent()) {
        source.WaveFormat = new WaveFormat(16000, 1);
        source.DataAvailable += (sender, e) => {
            if (recognizer.AcceptWaveform(e.Buffer, e.BytesRecorded)) {
                Console.WriteLine(recognizer.Result());
            }
        };
        source.StartRecording();
        Console.ReadLine();
    }
    

3. CMU Sphinx (PocketSphinx)
  • 简介:轻量级开源识别引擎,需通过 C# 封装调用(如 PocketsphinxSharp)。
  • 适用场景:嵌入式或资源受限环境。
  • 安装:需自行编译或寻找 C# 封装库(社区支持较少)。
  • 示例步骤
    1. 通过 P/Invoke 调用 C 库。
    2. 配置语音模型路径。

4. Microsoft Speech Platform SDK (Windows)
  • 简介:微软官方扩展,需单独安装运行时。
  • 安装:下载 SDK 和语言包。
  • 代码:类似 System.Speech,但需指定语音识别引擎。

语音播报(TTS)开发方案

1. System.Speech.Synthesis (Windows)
  • 简介:内置语音合成,支持调整语速、音量。
  • 代码示例
    using System.Speech.Synthesis;
    
    var synthesizer = new SpeechSynthesizer();
    synthesizer.Speak("Hello, this is a test.");
    

2. NAudio + TTS 引擎
  • 简介:结合音频库 NAudio 和第三方 TTS 生成音频流。
  • 步骤
    1. 使用 TTS 引擎(如 System.Speech)生成语音流。
    2. 通过 NAudio 播放音频。
    using NAudio.Wave;
    using System.Speech.Synthesis;
    
    var synthesizer = new SpeechSynthesizer();
    var stream = new MemoryStream();
    synthesizer.SetOutputToWaveStream(stream);
    synthesizer.Speak("Hello with NAudio");
    stream.Position = 0;
    using (var audioFile = new WaveFileReader(stream))
    using (var outputDevice = new WaveOutEvent()) {
        outputDevice.Init(audioFile);
        outputDevice.Play();
        while (outputDevice.PlaybackState == PlaybackState.Playing) {
            Thread.Sleep(100);
        }
    }
    

3. 跨平台 TTS
  • Linux/macOS:调用系统工具如 espeakfestival
    using System.Diagnostics;
    
    Process.Start("espeak", "\"Hello from Linux\"");
    
  • Windows 10+:使用 Windows.Media.SpeechSynthesis (UWP)。
    using Windows.Media.SpeechSynthesis;
    using System.IO;
    
    var synthesizer = new SpeechSynthesizer();
    var stream = await synthesizer.SynthesizeTextToStreamAsync("Hello UWP");
    // 使用 NAudio 或其他库播放 stream
    

注意事项

  • 模型路径:Vosk 需下载正确语言模型并指定路径。
  • 权限:确保麦克风和音频输出设备权限已开启。
  • 性能优化:离线识别可能占用较高 CPU,建议异步处理。

如需进一步代码示例或配置细节,请随时补充提问!


http://www.niftyadmin.cn/n/5868373.html

相关文章

Python--内置函数与推导式(上)

1. 匿名函数 Lambda表达式基础 语法:lambda 参数: 表达式​ 特点: 没有函数名,适合简单逻辑函数体只能是单行表达式自动返回表达式结果 # 示例1:加法 add lambda a, b: a b print(add(3, 5)) # 输出 8# 示例2:字…

selenium如何实现,开启浏览器的开发者工具模式,并且开启 toggle移动设备模拟模式

核心实现代码 pythonCopy Code from selenium import webdriver from selenium.webdriver.chrome.options import Options def enable_devtools_with_toggle(): options Options() # 强制开启开发者工具 options.add_argument("--auto-open-devtools-for-tabs&quo…

【图像处理 --- Sobel 边缘检测的详解】

Sobel 边缘检测的详解 目录 Sobel 边缘检测的详解1. 梯度计算2. 梯度大小3. 梯度方向4. 非极大值抑制5. 双阈值处理6. 在 MATLAB 中实现 Sobel 边缘检测7.运行结果展示8.关键参数解释9.实验与验证 Sobel 边缘检测是一种经典的图像处理算法,用于检测图像中的边缘。它…

《Linux命令行和shell脚本编程大全》第二章阅读笔记

二.走进shell 1.进入命令行 在图形化桌面出现之前,和 Unix 系统交互的唯一方式就是通过 shell 提供的文本命令行界面(command line interface,CLI)。CLI 只允许输入文本,而且只能显示文本和基本图形输出。由于此限制…

数据结构与算法-图论-最短路和其他的结合

介绍 最短路算法常与深度优先搜索(DFS)、动态规划(DP)、二分答案、拓扑排序等算法结合使用: - 最短路与DFS结合:在一些图的路径问题中,当需要访问特定的多个结点,且数据范围较小时…

RK3399 Android7双WiFi功能实现

在Android系统里面,WiFi功能STA和AP模式是互斥的,而现在越来越多的WiFi模组或者芯片能支持并发模式,即STA+P2P、STA+STA或者STA+AP模式组合。不管是单WiFi并发,还是双WiFi模组,想让STA和AP两个模式同时运行,对于Android7来说,是需要修改到系统源码,才能让APP层用Androi…

SSM和SpringBoot有什么区别?

SSM(Spring、Spring MVC、MyBatis)和 Spring Boot 有以下一些区别: 配置方式 SSM:配置相对繁琐,需要在多个 XML 文件中进行大量的配置。Spring Boot:采用“约定大于配置”的原则,极大地简化了配…

论文笔记(七十二)Reward Centering(五)

Reward Centering(五) 文章概括摘要附录B 理论细节C 实验细节D 相关方法的联系 文章概括 引用: article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arX…