C#代码实现把中文录音文件(.mp3 .wav)转为文本文字内容
我们有一个中文录音文件.mp3格式或者是.wav格式,如果我们想要提取录音文件中的文字内容,我们可以采用以下方法,不需要使用Azure Speech API 密钥注册通过离线的方式实现。
1.首先我们先在NuGet中下载两个包 NAudio 2.2.1、Whisper.net 1.7.3


2.另外我们还需要从Hugging Face网址中下载一个 ggml-medium.bin 文件,如果此网站无法访问,我已把本文中用到的资源文件放到了CSDN资源中可以在直接进行下载 ggml-medium.bin 。

3. 代码部分,由于我们Whisper模型只支持16KHz的语音文件

所以我们要把不同音频格式的文件统一转为16000Hz的音频数据文件,如下是具体代码:
using NAudio.Wave;
using System;public class AudioResampler
{public static void ConvertTo16kHz(string inputFile, string outputFile){// 打开原始音频文件using (var reader = new WaveFileReader(inputFile)){// 创建目标音频格式 16kHz,单声道,16位var targetFormat = new WaveFormat(16000, 1); // 16000Hz, Mono, 16-bit// 创建转换流,使用 WaveFormatConversionStream 进行重采样using (var conversionStream = new WaveFormatConversionStream(targetFormat, reader)){// 将转换后的音频数据写入新文件WaveFileWriter.CreateWaveFile(outputFile, conversionStream);Console.WriteLine("文件已转换为 16kHz 格式");}}}
}// 使用示例
class Program
{static void Main(string[] args){string inputFile = @"path_to_input_file.wav"; // 输入文件路径string outputFile = @"path_to_output_file_16kHz.wav"; // 输出文件路径AudioResampler.ConvertTo16kHz(inputFile, outputFile);}
}
4.接下来是详细的具体代码
public async Task Analyze()
{//模型string modelFilePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ggml-medium-q8_0.bin");// 初始化Whisper工厂和处理器var whisperFactory = WhisperFactory.FromPath(modelFilePath);var processor = whisperFactory.CreateBuilder().WithLanguage("zh") // 设置识别的语言为中文.Build();try{string audioFileName = "path_to_output_file_16kHz.wav";string audioFilePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, audioFileName);// 读取音频文件using var audioStream = File.OpenRead(audioFilePath);// 处理音频文件并输出结果Console.WriteLine("Transcribing audio file...");await foreach (SegmentData result in processor.ProcessAsync(audioStream, default)){Console.WriteLine($"{result.Start}->{result.End}: {result.Text}");}}catch (Exception ex){Console.WriteLine($"An error occurred: {ex.Message}");}Console.WriteLine("Press any key to exit...");
}
其中需要注意的是 ggml-medium-q8_0.bin文件的绝对路径,此文件的获取方式上述已说明。
string modelFilePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ggml-medium-q8_0.bin");
好了,以上这么多就是本文的全部内容了,如果对你有帮助,创作不易,点个赞吧。
参考网址
【C#使用NAudio录音,并导出录音数据_c# 录音-CSDN博客】
【C#语音转文字 - CSDN博客】
相关文章:
C#代码实现把中文录音文件(.mp3 .wav)转为文本文字内容
我们有一个中文录音文件.mp3格式或者是.wav格式,如果我们想要提取录音文件中的文字内容,我们可以采用以下方法,不需要使用Azure Speech API 密钥注册通过离线的方式实现。 1.首先我们先在NuGet中下载两个包 NAudio 2.2.1、Whisper.net 1.7.3…...
【一文了解】C#重点-委托1
本篇文章来学习一下C#的委托,委托是C#中的一个重要概念,它允许将方法作为参数传递给其他方法。C#中的委托类似于C或C中的函数指针,并且类型安全。 委托 1.委托的定义 委托(delegate)是方法的代理/代表,委托…...
WPF+MVVM案例实战与特效(四十五)- 打造优雅交互:ListBox 的高级定制与行为触发(侧边菜单交互面板)
文章目录 1、引言2、案例效果3、案例实现1、依赖安装2、文件创建3、代码实现1、依赖引用与上下文2、个性化视觉效果:自定义 ItemContainerStyle3、页面样式与布局完整代码4、ViewModel 逻辑实现5、子界面代码:3、实现效果4、源代码获取5、总结1、引言 在WPF应用程序开发中,…...
新版Android Studio 2024.1.2版本,如何通过无线wifi连接手机实现交互
1、首先,先确定手机是否启动了开发者选项 在我的设备 -> 全部参数 -> MIUI版本点击6下 (有的手机是 关于手机 -> 查看手机版本 ) 2、在设置中搜索 开启开发者选项 3、进入开发者选项后,在 调试 中选择 无线调试并选择…...
VTK知识学习(26)- 图像基本操作(一)
1、前言 图像处理离不开一些基本的图像数据操作,例如获取和修改图像的基本信息、访问和修改图像像素值、图像显示、图像类型转换等。熟练掌握这些基本操作有助于使用 VTK进行图像处理应用程序的快速开发。 2、图像信息的访问与修改 1)利用vtkIamgeData…...
2024年9月AI头条新闻:创新与挑战并存
2024年9月AI头条新闻:创新与挑战并存 9月,人工智能领域继续高速发展,重大产品发布、伦理争议和技术突破交织在一起。让我们回顾一下本月最重要的AI新闻: OpenAI的o1:更强大的语言模型 OpenAI推出了o1,一个…...
[Xshell] Xshell的下载安装使用、连接linux、 上传文件到linux系统-详解(附下载链接)
前言 xshell 链接:https://pan.quark.cn/s/57062561e81a 提取码:TK4K 链接失效(可能被官方和谐)可评论或私信我重发 安装 下载后解压得到文件 安装路径不要有中文 打开文件 注意!360等软件会拦截创建注册表的行为&a…...
count(1)、count(_)与count(列名)的区别?
大家好,我是锋哥。今天分享关于【count(1)、count(_)与count(列名)的区别?】面试题。希望对大家有帮助; count(1)、count(_)与count(列名)的区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 SQL 中,…...
代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
贪心没有套路,说白了就是常识性推导加上举反例 今天的内容比较简单 简单了解贪心是通过局部最优解反推全局最优解(有经验成分) 455.分发饼干 题目链接:455. 分发饼干 - 力扣(LeetCode) 讲解链接ÿ…...
List直接使用removeAll报错
List直接使用removeAll报错 需要先将list转换才能使用 原因是: removeAll 方法在 Java 中用于从当前列表中删除另一个列表中存在的所有元素。如果直接对 List 接口的一个实现使用 removeAll 方法抛出异常,可能的原因有: 不同的List实现&am…...
Debian环境安装Docker Engine
Debian环境安装Docker Engine 卸载旧版本使用APT工具安装Docker设置存储库安装Docker设置权限 docker compose命令卸载Docker 卸载旧版本 要卸载的非官方软件包是: docker.iodocker-composedocker-docpodman-docker 此外,Docker Engine 依赖 containe…...
Python常用内置函数总结
目录 1. abs() 2. complex() 3. divmod() 4. eval() 5. float() 6. hash() 7. input() 8. int() 9. len() 10. list() 11. oct() 12. open() 13. pow() 14. print() 15. range() 16. reversed() 17. round() 18. sorted()…...
深入了解蓝牙Profile类型与设备的对应关系
在现代技术中,蓝牙作为一种无线通信技术,广泛应用于各种设备之间的短距离通信。不同的设备在连接时使用不同的蓝牙Profile(配置文件),每种Profile都为特定的设备功能提供支持,例如音频流传输、语音通话、文件传输等。在本文中,我们将详细介绍蓝牙Profile的常见类型及其对…...
[bug]java导出csv用Microsoft Office Excel打开乱码解决
[bug]java导出csv用Microsoft Office Excel打开乱码 现象 首先这个csv文件用macbook自带的 "Numbers表格" 软件打开是不乱码的, 但是使用者是Windows系统,他的电脑没有"Numbers表格"工具, 他用Microsoft Office Excel打开之后出现乱码,如下图…...
2023年区块链职业技能大赛——区块链应用技术(一)模块一
模块一:区块链产品方案设计及系统运维: 任务1-1:区块链产品需求分析与方案设计 1.依据给定区块链食品溯源系统的业务架构图,对考题进行业务分析,可能多的去考虑一个业务系统所需要的模块,使用Visio或思维导图工具展现本系统的基本设计概念和…...
4 软件工程——总体设计
一、设计过程 1.两个主要阶段 系统设计阶段:确定系统的具体实现方案结构设计阶段:确定软件结构 2.九个步骤 设想供选择的方案选取合理的方案推荐最佳方案功能分解设计软件结构设计数据库制定测试计划书写文档审查和复审 二、设计原理 1.模块化 模块…...
Elasticsearch:确保业务规则与语义搜索无缝协作
作者:来自 Elastic Kathleen DeRusso 利用查询规则与语义搜索和重新排序相结合的强大功能。 更多阅读: Elasticsearch 8.10 中引入查询规则 - query rules Elasticsearch 查询规则现已正式发布 - query rules 你是否知道查询规则(query ru…...
【大语言模型】ACL2024论文-33 Johnny 如何说服大型语言模型越狱:通过人性化 LLMs 重新思考挑战 AI 安全性的说服技巧
【大语言模型】ACL2024论文-33 Johnny 如何说服大型语言模型越狱:通过人性化 LLMs 重新思考挑战 AI 安全性的说服技巧 目录 文章目录 【大语言模型】ACL2024论文-33 Johnny 如何说服大型语言模型越狱:通过人性化 LLMs 重新思考挑战 AI 安全性的说服技巧目…...
【LuaFramework】LuaFramework_UGUI_V2框架学习
GitHub - jarjin/LuaFramework_UGUI_V2: 基于tolua的热更新框架V2 旧版本是Unity 5.0,这个是新版本支持更高版本的 导入工程后先清除wrap 然后重新生成wrap,你会发现有个报空null,框架的问题总结下所有的框架wrap相关报错问题和修复方法&…...
使用 AOP 在 Spring Boot 中实现跟踪和日志记录
在现代应用程序中,尤其是使用微服务构建的应用程序,跟踪和日志记录在跟踪流经各种服务的请求方面起着至关重要的作用。跟踪可帮助开发人员诊断问题、监控性能并了解用户在多个系统中的旅程。 在此博客中,我们将介绍如何使用traceId从前端生成…...
TVA如何重塑3C产品质量检测新范式(5)
——领导者的角色:选择比努力更重要我们正站在制造业质量管理的转折点。过去,质量的提升是线性、渐进、有限的;未来,借助AI智能体视觉检测(TVA)等人工智能技术,质量的提升可以是非线性、跨越式、…...
UniApp跨平台自定义消息语音播报实战指南
1. 为什么需要自定义消息语音播报 在移动应用开发中,消息推送是提升用户活跃度和留存率的重要手段。但普通的文字通知往往容易被用户忽略,特别是在商户收款、物流提醒、重要事件通知等场景下,语音播报能够更直接有效地触达用户。 举个例子&am…...
前端+AI项目学习笔记day5
十一、封装TableSearch组件(上)创建TableSearch.vue引入组件编写组件十二、表单数据绑定(此处:model"formatData"需改为"formData")...
【3.2】FFT/IFFT变换的数学原理概述与MATLAB仿真
目录 1.FFT的基本原理 1.1 DFT 1.2 FFT 2.通过matlab编程方式实现FFT/IFFT(不用matlab自带的fft函数) 1.FFT的基本原理 离散傅里叶变换(DFT)是时域离散信号→频域离散信号的核心变换,快速傅里叶变换(FFT)是DFT的快速算法(基于分治思想,将复杂度从O(N…...
Windows 11下ROS2 Humble与PyCharm无缝集成实战(避坑指南+完整配置流程)
Windows 11下ROS2 Humble与PyCharm无缝集成实战(避坑指南完整配置流程) 在机器人操作系统(ROS)生态中,Windows平台的支持一直是个挑战。随着ROS2 Humble版本的发布,微软与开源社区的深度合作为Windows开发者…...
Linux内核中的命名空间详解
Linux内核中的命名空间详解 引言 命名空间(Namespace)是Linux内核中实现资源隔离的重要机制,它为容器技术提供了基础支持。通过命名空间,不同的进程可以看到不同的系统视图,实现了进程间的隔离。本文将深入探讨Linux内…...
免费终极指南:3分钟将Windows电脑变成专业级WiFi路由器
免费终极指南:3分钟将Windows电脑变成专业级WiFi路由器 【免费下载链接】VirtualRouter Wifi Hotspot for Windows computers (Windows 7, 8.x, Server 2012 and newer!) 项目地址: https://gitcode.com/gh_mirrors/vi/VirtualRouter VirtualRouter是一款革命…...
物联网平台层避坑指南:华为云IoT vs 阿里云物联网平台功能对比(2024新版)
华为云IoT与阿里云物联网平台深度对比:2024企业选型实战指南 当企业决定将业务迁移到物联网平台时,技术选型往往成为第一个关键决策点。作为国内市场份额最高的两大平台,华为云IoT和阿里云物联网平台各自拥有独特的优势与适用场景。但在实际商…...
005、轻量化改进(三):模型量化(INT8/FP16)与部署加速
上周在产线调试YOLO检测模型时遇到这么个情况:模型在RTX 4090上跑得飞快,帧率轻松过百,但一到产线的Jetson Orin Nano边缘设备上,帧率直接掉到15帧,还时不时内存告警。产线主管盯着监控画面皱眉:“这延迟&a…...
高性能表单状态管理难题:Formily分布式架构如何实现毫秒级响应与99.9%可用性
高性能表单状态管理难题:Formily分布式架构如何实现毫秒级响应与99.9%可用性 【免费下载链接】formily 📱🚀 🧩 Cross Device & High Performance Normal Form/Dynamic(JSON Schema) Form/Form Builder -- Support React/Reac…...
