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

ops/2025/2/25 22:15:59/

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.ppmy.cn/ops/161301.html

相关文章

【Python爬虫(53)】从入门到精通:Scrapy Spider开发全攻略

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…

20250221 NLP

1.向量和嵌入 https://zhuanlan.zhihu.com/p/634237861 encoder的输入就是向量,提前嵌入为向量 二.多模态文本嵌入向量过程 1.文本预处理 文本tokenizer之前需要预处理吗? 是的,文本tokenizer之前通常需要对文本进行预处理。预处理步骤可…

LeetCode - 23 合并 K 个升序链表

题目来源 23. 合并 K 个升序链表 - 力扣(LeetCode) 题目描述 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 示例 1: 输入:lists [[1,4,…

2025vue4.x全栈学习关键技术分析线路图

关键升级点说明‌: ‌编译优化‌ :Vue 4.x采用WASM编译提速300% ‌智能工具链‌ :Vite插件市场新增AI代码审查模块 ‌跨平台能力‌ :Uni-App支持原生ARCore/ARKit调用 ‌安全增强‌ :默认启用WebAuthn生物认证…

自驾游拼团小程序的设计与实现(ssm论文源码调试讲解)

第4章 系统设计 4.1系统功能结构设计 本系统采用前台用户、发起人操作,后台管理员操作的方式进行设计,用户在前台需要注册登录,注册登录后可以浏览资讯信息、旅游拼团信息、旅游景点信息,然后参团和发布帖子等。管理员负责前台信…

Qt开发⑦Qt的窗口_上_菜单栏+工具栏+状态栏

目录 1. 菜单栏 1.1 创建菜单栏 1.2 在菜单栏中添加菜单 1.3 创建菜单项 1.4 在菜单项之间添加分割线 1.5 添加快捷键 1.6 添加子菜单 1.7 添加图标 1.8 综合示例 2. 工具栏 2.1 创建工具栏 2.2 设置停靠位置 2.3 设置浮动属性 2.4 设置移动属性 2.5 综合示例 …

[MDM 2024]Spatial-Temporal Large Language Model for Traffic Prediction

论文网址:[2401.10134] Spatial-Temporal Large Language Model for Traffic Prediction 论文代码:GitHub - ChenxiLiu-HNU/ST-LLM: Official implementation of the paper "Spatial-Temporal Large Language Model for Traffic Prediction" …

Springboot 熔断,穿透,雪崩

1. 熔断(Circuit Breaker) 含义 熔断机制类似于电路中的保险丝,当某个服务出现问题(如响应时间过长、频繁报错等)时,为了避免整个系统被拖垮,会暂时切断对该服务的调用,直接返回一…