实时采集到的语音进行语音识别
要在.NET Framework 4.8中使用C#实现离线实时语音识别,可以使用开源库Vosk(支持离线ASR)配合音频处理库NAudio。
步骤 1:安装依赖库
1.1.
安装NuGet包:
- Install-Package NAudio(处理音频输入)
- Install-Package Vosk(离线语音识别引擎)
2.2.
下载语音模型:
- 前往 Vosk Models 下载适合的模型(如小型英文模型 vosk-model-small-en-us-0.15)。
- 解压模型到项目目录(如 Models/vosk-model-small-en-us-0.15)。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NAudio.Wave;
using Vosk;
using System.Windows.Forms;
namespace 语音识别
{
public class RealTimeSpeechRecognizer
{private readonly VoskRecognizer _recognizer;private readonly WaveInEvent _waveIn;private readonly RichTextBox _rtb;public RealTimeSpeechRecognizer(string modelPath, RichTextBox rtb){_rtb = rtb;// 初始化VoskModel model = new Model(modelPath);_recognizer = new VoskRecognizer(model, 16000.0f);_recognizer.SetWords(true);// 初始化音频输入_waveIn = new WaveInEvent{WaveFormat = new WaveFormat(16000, 16, 1),DeviceNumber = 0};_waveIn.DataAvailable += OnAudioDataAvailable;}public void StartListening() => _waveIn.StartRecording();public void StopListening() => _waveIn.StopRecording();// 解析JSON结果(兼容部分结果)private string ParseJsonResult(string json, bool isPartial = false){dynamic obj = Newtonsoft.Json.JsonConvert.DeserializeObject(json);return isPartial ? obj.partial : obj.text;}// 线程安全更新RichTextBoxprivate void ShowText(string text){if (_rtb.InvokeRequired){_rtb.BeginInvoke(new Action<string>(ShowText), text);}else{_rtb.AppendText(text);_rtb.ScrollToCaret();}}// 其他字段和构造函数保持不变...private string _lastPartialText = string.Empty;private void OnAudioDataAvailable(object sender, WaveInEventArgs e){if (_recognizer.AcceptWaveform(e.Buffer, e.BytesRecorded)){string result = ParseJsonResult(_recognizer.Result());ClearLastPartial(); // 清理临时部分AppendFinalText(result);}else{string partial = ParseJsonResult(_recognizer.PartialResult(), isPartial: true);UpdatePartialText(partial);}}private void UpdatePartialText(string newPartial){if (newPartial == _lastPartialText) return;// 在主线程更新UI_rtb.BeginInvoke(new Action(() =>{int selectionStart = _rtb.TextLength - _lastPartialText.Length;// 删除旧临时内容if (selectionStart >= 0 && _lastPartialText.Length > 0){_rtb.Select(selectionStart, _lastPartialText.Length);_rtb.SelectedText = "";}// 追加新内容_rtb.AppendText(newPartial);_rtb.ScrollToCaret();// 更新临时记录_lastPartialText = newPartial;}));}private void AppendFinalText(string text){_rtb.BeginInvoke(new Action(() =>{_rtb.AppendText(text + "\n");_lastPartialText = string.Empty; // 重置临时部分}));}private void ClearLastPartial(){if (string.IsNullOrEmpty(_lastPartialText)) return;_rtb.BeginInvoke(new Action(() =>{int start = _rtb.TextLength - _lastPartialText.Length;if (start >= 0){_rtb.Select(start, _lastPartialText.Length);_rtb.SelectedText = "";}}));}
}}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 语音识别
{
public partial class Form1 : Form
{
private RealTimeSpeechRecognizer _recognizer;
public Form1()
{
InitializeComponent();
btnStop.Enabled = false;
}private void button1_Click(object sender, EventArgs e){_recognizer.StopListening();btnStart.Enabled = true;btnStop.Enabled = false;}private void btnStart_Click(object sender, EventArgs e){string modelPath = @"E:\Models\vosk-model-small-cn-0.22"; // 中文模型路径_recognizer = new RealTimeSpeechRecognizer(modelPath, richTextBox1);btnStart.Enabled = false;btnStop.Enabled = true;_recognizer.StartListening();}
}}
相关文章:
实时采集到的语音进行语音识别
要在.NET Framework 4.8中使用C#实现离线实时语音识别,可以使用开源库Vosk(支持离线ASR)配合音频处理库NAudio。 步骤 1:安装依赖库 1.1. 安装NuGet包: - Install-Package NAudio(处理音频输入)…...
《苍穹外卖》SpringBoot后端开发项目核心知识点与常见问题整理(DAY1 to DAY3)
目录 一、在本地部署并启动Nginx服务1. 解压Nginx压缩包2. 启动Nginx服务3. 验证Nginx是否启动成功: 二、导入接口文档1. 黑马程序员提供的YApi平台2. YApi Pro平台3. 推荐工具:Apifox 三、Swagger1. 常用注解1.1 Api与ApiModel1.2 ApiModelProperty与Ap…...
【从零开始学习计算机科学】数据库系统(十一)云数据库、NoSQL 与 NewSQL
【从零开始学习计算机科学】数据库系统(十一)云数据库、NoSQL 与 NewSQL 云数据库云服务器的服务云数据库和传统的分布式数据库的异同NoSQLNoSQL数据库的特点CAP定理NoSQL的特性NoSQL数据库的分类NoSQL的适用场景Nosql数据库实例-RedisRedis的优势MongoDBMongoDB的特点NewSQL…...
Linux入门 全面整理终端 Bash、Vim 基础命令速记
Linux入门 2025 超详细全面整理 Bash、Vim 基础命令速记 刚面对高级感满满的 终端窗口是不是有点懵?于是乎,这份手册就是为你准备的高效学习指南!我把那些让人头大的系统设置、记不住的命令都整理成了对你更友好的格式,让你快速学…...
LInux基础--apache部署网站
httpd的安装 yum -y install httpdhttpd的使用 启动httpd systemctl enable --now httpd使用enable --now 进行系统设置时,会将该服务设置为开机自启并且同时开启服务 访问httpd 创建虚拟主机 基于域名 在一台主机上配置两个服务server1和server2,其…...
重生之我在学Vue--第12天 Vue 3 性能优化实战指南
重生之我在学Vue–第12天 Vue 3 TypeScript 类型系统深度整合 文章目录 重生之我在学Vue--第12天 Vue 3 TypeScript 类型系统深度整合前言一、TypeScript与Vue3的集成1.1 项目初始化配置1.2 类型配置文件解析 二、类型声明实战2.1 Props类型约束2.2 Emit事件类型2.3 组合式AP…...
Go 语言封装 HTTP 请求的 Curl 工具包
文章目录 Go 语言封装 HTTP 请求的 Curl 工具包🏗️ 工具包结构简介核心结构体定义初始化函数 🌟 功能实现1. 设置请求头2. 构建请求3. 发送请求4. 发送 GET 请求5. 发送 POST 请求6. 发送 PUT 请求7. 发送 DELETE 请求8. 读取响应体 💡 实现…...
【Go】Go MongoDB 快速入门
1. MongoDB 简介 1.1 MongoDB 介绍 由于我们时常需要存储一些大文本数据(比如文章内容),存储到一些关系型数据库可能不是最好的选择,这个时候就需要引入一些 NoSQL(Not Only SQL),比如 MongoD…...
Java --- 根据身份证号计算年龄
介绍 根据身份证号计算年龄 Java代码 /*** 根据身份证号计算年龄* param birthDateStr* return*/public static int calculateAge(String birthDateStr) {try {birthDateStrbirthDateStr.substring(6,68);// 定义日期格式SimpleDateFormat sdf new SimpleDateFormat("…...
[LeetCode热门100题]|137,260,268,面试17.19
1、137 只出现一次数字|| 1、题目描述 137 只出现一次数字||https://leetcode.cn/problems/single-number-ii/description/ 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你…...
WPF未来展望:紧跟技术发展趋势,探索新的可能性
WPF未来展望:紧跟技术发展趋势,探索新的可能性 一、前言二、WPF 与.NET 技术的融合发展2.1 拥抱.NET Core2.2 利用.NET 5 及后续版本的新特性 三、WPF 在新兴技术领域的应用拓展3.1 与云计算的结合3.2 融入物联网生态 四、WPF 在用户体验和设计方面的创新…...
maxwell
一、maxwell简介 它是一款轻量级工具,主要用于实现 MySQL 到 Kafka 的数据实时同步,尤其适合对实时性要求较高的场景。 1.核心功能 借助解析 MySQL 的 Binlog,能够实时捕获数据变更,并将这些变更数据发送至 Kafka。 2.缺点 仅…...
Qt 6.6.1 中 QPixmap::grabWindow() 的用法与替代方案
一、Qt 6 中的 API 变化 弃用 QPixmap::grabWindow() 在 Qt 6 中,QPixmap::grabWindow() 已被迁移至 QScreen 类,需通过 QScreen::grabWindow() 实现窗口截取。 原因: Qt 6 重构了图形模块,QPixmap 的截屏功能被整合到 QSc…...
【软件】免费的PDF全文翻译软件,能保留公式图表的样式
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 很多PDF全文翻译软件都是收费的,而划线翻译看着又很累。这个开源的PDF全文翻译软件非常好用,并且能够保留公式、图表、目录和注…...
LeetCode 112. 路径总和 II java题解
https://leetcode.cn/problems/path-sum/description/ class Solution {boolean resfalse;//记录结果public boolean hasPathSum(TreeNode root, int targetSum) {if(rootnull) return res;int sum0;find(root,sum,targetSum);return res;}public void find(TreeNode root,int…...
如何快速定位导致服务器卡顿的进程
在 Linux 系统中,可以通过多种方式快速定位导致服务器卡顿的进程。以下是一些常用的方法: 1. 使用 top 和 htop 命令: 使用 top 或 htop 命令可以实时监视系统资源利用情况,包括 CPU 和内存占用情况,以及运行的进程列…...
【计算机网络】第八版和第七版的主要区别,附PDF
「《计算机网络》(... 谢希仁」,https://pan.quark.cn/s/7c2147cb48f7 1. 新增内容 - 软件定义网络(SDN):第八版在网络层章节中新增了对SDN的简介(第4章),介绍了其基本原理和应用。 - Wi-Fi代…...
ubuntu20.04_vscode_snap安装方式
停止 Snap 服务 运行以下命令: sudo systemctl stop snapd 彻底停止 Snap 服务 停止 snapd.service 和 snapd.socket: sudo systemctl stop snapd.socket sudo systemctl stop snapd.service 禁用 Snap 服务的自动启动(可选)&…...
基于SpringBoot实现旅游酒店平台功能十一
一、前言介绍: 1.1 项目摘要 随着社会的快速发展和人民生活水平的不断提高,旅游已经成为人们休闲娱乐的重要方式之一。人们越来越注重生活的品质和精神文化的追求,旅游需求呈现出爆发式增长。这种增长不仅体现在旅游人数的增加上࿰…...
coze ai assistant Task 2
创建一个智能体:夸夸机器人 https://www.coze.cn/store/agent/7480939060010713138?bot_idtrue 改为豆包系列-豆包角色扮演 添加bingWebSearch搜索 添加前: 添加后: 改为工具调用: 添加知识库 使用长期记忆 结合自己的需求&…...
Qt/C++音视频开发82-系统音量值获取和设置/音量大小/静音
一、前言 在音视频开发中,音量的控制分两块,一个是控制播放器本身的音量,绝大部分场景都是需要控制这个,这个不会影响系统音量的设置。还有一种场景是需要控制系统的音量,因为播放器本身的音量是在系统音量的基础上控…...
C盘清理终极方案——基于Windows软连接的目录迁移实战
C盘清理终极方案——基于Windows软连接的目录迁移实战 (案例实现:.cache、.conda、AppData\docker等目录移动至D盘) 核心 # 创建目录软连接 mklink /J "C:\Users\<用户名>\AppData\Local\Docker" "D:\SoftwareCa…...
医疗AI测试实战:如何确保人工智能安全赋能医疗行业?
一、医疗AI测试的重要性 人工智能(AI)正广泛应用于医疗行业,如疾病诊断、医学影像分析、药物研发、手术机器人和智能健康管理等领域。医疗AI技术的应用不仅提高了诊断效率,还能降低误诊率,改善患者治疗效果。然而&…...
在资源有限中逆势突围:从抗战智谋到寒门高考的破局智慧
目录 引言 一、历史中的非对称作战:从李牧到八路军的智谋传承 李牧戍边:古代军事博弈中的资源重构 八路军的游击战:现代战争中的智慧延续 二、创业界的逆袭之道:小米与拼多多的资源重构 从MVP到杠杆解 社交裂变与资源错配 …...
在使用element-ui时表单的表头在切换页面时第一次进入页面容易是白色字体解决方法
在里面添加:header-cell-style"{ color: black }" <el-table :data"tableData" style"width: 100%" height"250" :header-cell-style"{ color: black }" ></el-table> 正确代码是 <templat…...
与指定数字相同的数的个数(信息学奥赛一本通-1102)
【题目描述】 输出一个整数序列中与指定数字相同的数的个数。 【输入】 输入包含三行: 第一行为n,表示整数序列的长度(n≤100); 第二行为n个整数,整数之间以一个空格分开; 第三行包含一个整数,为指定的数字…...
13. Pandas :使用 to_excel 方法写入 Excel文件
一 to_excel 方法的相关参数 用它来指定要将 DataFrame 写入哪些工作表的哪些单元格,以及是否需要包含列标题和 DataFrame 索引。如何处理特殊值(如 np.nan 和 np.inf)。 1.指定工作表和单元格 sheet_name:指定将 DataFrame 写入的…...
python画图文字显示不全+VScode新建jupyter文件
之前有两个jupyter文件,一个显示正确一个显示错误。已经尝试过的方法包括: 1、更改下载好的SimHei字体,或者其他支持中文的字体 2、重新创建虚拟环境 3、清楚matplotlib缓存目录 4、从anaconda的jupyter换至vscode 目前部分中文不能正常…...
C#中继承的核心定义
1. 继承的核心定义 继承 是面向对象编程(OOP)的核心特性之一,允许一个类(称为子类/派生类)基于另一个类(称为父类/基类)构建,自动获得父类的成员(字段、属…...
MOEFeedForward 模块
代码 class FeedForward(nn.Module):def __init__(self, config: LMConfig):super().__init__()if config.hidden_dim is None:hidden_dim 4 * config.dimhidden_dim int(2 * hidden_dim / 3)config.hidden_dim config.multiple_of * ((hidden_dim config.multiple_of - 1…...
TypeScript变量声明详解:与JavaScript的对比与工程化价值
TypeScript的变量声明机制在保留JavaScript灵活性的同时,通过类型注解和作用域强化显著提升了代码可靠性。本文将深入解析TypeScript的变量声明特性,并与JavaScript/ES标准进行对比,揭示其工程实践价值。 一、变量声明方式对比 1. 基础声明语…...
在 Axios 中设置代理
在 Axios 中设置代理 Axios 与代理 Axios 是 JavaScript 生态中最广泛使用的 HTTP 客户端之一。它基于 Promise,提供了易用、直观的 API,用于执行 HTTP 请求并处理自定义请求头、配置和 Cookie 等。 通过为 Axios 请求设置代理,您可以隐藏自…...
WebSocket 使用教程
WebSocket 使用教程 WebSocket 是一种在现代网络应用中广泛使用的网络通信协议,旨在实现服务器与客户端之间高效、实时的双向通信。与传统的 HTTP 协议相比,WebSocket 提供了更低的延迟和更高的互动性,使其成为构建实时应用的理想选择。无论…...
【RabbitMQ】rabbitmq在spring boot中的使用
rabbitmq官网地址:https://www.rabbitmq.com/tutorials 下面介绍rabbitmq官网中七种使用方式在spring boot中如何使用 下面是基于 Spring Boot 使用 RabbitMQ 实现这七种模式的示例代码。假设已经引入了以下依赖: Maven 依赖 <dependency><g…...
独立开发记录:使用Trae和Cloudflare快速搭建了自己的个人博客
前段时间我计划搭建个人博客,用于记录自己写的文章、录制的课程和开发的项目,于是结合 Trae AI IDE 与 Cloudflare 快速搭建并上线了人生第一个网站,在这个过程中,我整合了两种工具的优势(AI辅助开发 免费托管加速&a…...
文件解析漏洞详解
IIS解析漏洞 环境安装 windows2003iis6 IIS6.X ⽬录解析 在iis6.x中,.asp⽂件夹中的任意⽂件都会被当做asp⽂件去执⾏。 在iis的⽹站根⽬录新建⼀个名为x.asp的⽂件 在x.asp中新建⼀个png⽂件。内容为<%now()%> asp代码。 外部浏览器中访问windows2003的i…...
自然语言处理:文本聚类
介绍 大家好,博主又来和大家分享自然语言处理领域的知识了。今天给大家分享的内容是自然语言处理中的文本聚类。 文本聚类在自然语言处理领域占据着重要地位,它能将大量无序的文本按照内容的相似性自动划分成不同的类别,极大地提高了文本处…...
【MySQL】基本操作 —— DDL
目录 DDLDDL 常用操作对数据库的常用操作查看所有数据库创建数据库切换、显示当前数据库删除数据库修改数据库编码 对表的常用操作创建表数据类型数值类型日期和时间类型字符串类型 查看当前数据库所有表查看指定表的创建语句查看指定表结构删除表 对表结构的常用操作给表添加字…...
玩转python:通俗易懂掌握高级数据结构:collections模块之namedtuple
引言 namedtuple是Python中collections模块提供的一个强大工具,用于创建具有字段名的元组。它不仅具备元组的不可变性,还能通过字段名访问元素,极大地提高了代码的可读性和可维护性。本文将详细介绍namedtuple的关键用法和特性,并…...
[GHCTF 2025]SQL??? 【sqlite注入】
梳理一下SQLite注入 常见指令 查看版本:sqlite_version() 列出附加数据库中的所有表:.tables 注入步骤 先查字段: 1 order by 5 # 三板斧: 0 union select 1,2,sql from sqlite_master; sql字段存储创建该数据库对象时所使…...
spring boot 发送邮件验证码
一、前置需求 1、准备邮箱 2、登录授权码 qq邮箱在–>设置–>账号POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 开启服务 二、发送邮件 1、简单邮件 包含邮件标题、邮件正文 2、引入mail启动器 <dependency><groupId>org.springframework.boot</groupI…...
[项目]基于FreeRTOS的STM32四轴飞行器: 二.项目搭建及移植FreeRTOS
基于FreeRTOS的STM32四轴飞行器: 二.项目搭建及debug模块 一.项目搭建二.移植FreeRTOS 一.项目搭建 先配置SYS系统滴答定时器来源为默认,因为其他定时器用来驱动电机了只能与FreeRTOS共用: 之后选择RCC配置芯片的时钟来源: 配置时钟树&am…...
Amazon RDS ProxySQL 探索(一)
:::info 💡 在日常开发中,开发者们会涉及到数据库的连接,在使用Amazon RDS数据库时,若使用集群模式或者多数据库时,会出现一写多读多个Endpoint,在实际开发中, 开发者们配置数据库连接通常希望走…...
高速PCB设计(布线设计)
以下是针对高速PCB布线设计的综合笔记,结合用户提供的设计规范及行业通用原则整理而成: 一、关键信号布线原则 布线优先级 顺序:射频信号>中/低频信号>时钟信号>高速信号射频信号需包地处理,线…...
《探秘人工智能与鸿蒙系统集成开发的硬件基石》
在科技飞速发展的当下,人工智能与鸿蒙系统的集成开发开辟了创新的前沿领域。这一融合不仅代表着技术的演进,更预示着智能设备生态的全新变革。而在这场技术盛宴的背后,坚实的硬件配置是确保开发顺利进行的关键,它就像一座大厦的基…...
使用Langflow和AstraDB构建AI助手:从架构设计到与NocoBase的集成
本文由 Leandro Martins 编写,最初发布于 Building an AI Assistant with Langflow and AstraDB: From Architecture to Integration with NocoBase。 引言 本文的目标是演示如何创建一个集成了 NocoBase、LangFlow 和 VectorDB 工具的 AI 助手。作为基础…...
【零基础入门unity游戏开发——unity3D篇】3D物理系统之 —— 3D刚体组件Rigidbody
考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…...
工程化与框架系列(30)--前端日志系统实现
前端日志系统实现 📝 引言 前端日志系统是应用监控和问题诊断的重要工具。本文将深入探讨前端日志系统的设计与实现,包括日志收集、处理、存储和分析等方面,帮助开发者构建完整的前端日志解决方案。 日志系统概述 前端日志系统主要包括以…...
小爱音箱控制家里的NAS将影片在电视上播放-deepseek帮助下实现-慎入openmanux
天始规划 我给ai一个任务,不过我没那么多能力,听说AI代理很行,这个任务我打算交给它.就用现在火的,openmanu,功能简单,我来安装openmanus,并规划任务. 进入openmanu首页 https://github.com/wjcroom/OpenManus openusa推荐使用uv管理,打算安装在家里的nas虚拟机.uv和python环…...
jQuery EasyUI 扩展
jQuery EasyUI 扩展 引言 jQuery EasyUI 是一个基于 jQuery 的易于使用的界面扩展库,它简化了网页界面的开发过程。随着 Web 技术的不断发展,越来越多的开发者开始寻求对 jQuery EasyUI 的扩展,以满足不同场景下的需求。本文将详细介绍 jQuery EasyUI 的扩展方法、技巧以及…...