当前位置: 首页 > news >正文

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博客】

http://www.lryc.cn/news/508605.html

相关文章:

  • 【一文了解】C#重点-委托1
  • WPF+MVVM案例实战与特效(四十五)- 打造优雅交互:ListBox 的高级定制与行为触发(侧边菜单交互面板)
  • 新版Android Studio 2024.1.2版本,如何通过无线wifi连接手机实现交互
  • VTK知识学习(26)- 图像基本操作(一)
  • 2024年9月AI头条新闻:创新与挑战并存
  • [Xshell] Xshell的下载安装使用、连接linux、 上传文件到linux系统-详解(附下载链接)
  • count(1)、count(_)与count(列名)的区别?
  • 代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
  • List直接使用removeAll报错
  • Debian环境安装Docker Engine
  • Python常用内置函数总结
  • 深入了解蓝牙Profile类型与设备的对应关系
  • [bug]java导出csv用Microsoft Office Excel打开乱码解决
  • 2023年区块链职业技能大赛——区块链应用技术(一)模块一
  • 4 软件工程——总体设计
  • Elasticsearch:确保业务规则与语义搜索无缝协作
  • 【大语言模型】ACL2024论文-33 Johnny 如何说服大型语言模型越狱:通过人性化 LLMs 重新思考挑战 AI 安全性的说服技巧
  • 【LuaFramework】LuaFramework_UGUI_V2框架学习
  • 使用 AOP 在 Spring Boot 中实现跟踪和日志记录
  • 如何永久解决Apache Struts文件上传漏洞
  • FPGA远程升级 -- FLASH控制
  • 企业内训|高智能数据构建、Agent研发及AI测评技术内训-吉林省某汽车厂商
  • ARM异常处理 M33
  • (补)算法刷题Day24: BM61 矩阵最长递增路径
  • 探索 Bokeh:轻松创建交互式数据可视化的强大工具
  • 【Rust自学】6.1. 定义枚举
  • 【Java基础面试题035】什么是Java泛型的上下界限定符?
  • 0基础学前端系列 -- 深入理解 HTML 布局
  • 【python高级】342-TCP服务器开发流程
  • 《计算机组成及汇编语言原理》阅读笔记:p48-p81