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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/940652.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows装Docker至D盘/其他盘(最新,最准确,直接装)

前言 Docker的默认安装路径为 C:\你的用户名\AppData\Local\Docker\wsl这样安装常常会导致C盘爆满。目前现有博客的安装方法往往不能把docker的container和image也装在非C盘。本博客旨在用最简单的方式,把Docker Deskstop的images和container装在D盘中。 安装前&a…

前端关于pptxgen.js个人使用介绍

官方文档链接:Quick Start Guide | PptxGenJS git地址:https://github.com/gitbrent/PptxGenJS/ 1. 安装命令 npm install pptxgenjs --save yarn add pptxgenjs 2. 示例demo import pptxgen from "pptxgenjs"; // 引入pptxgen // 1. Create a Presenta…

Vulnhub靶场Nginx解析漏洞复现

一.nginx_parsing 原理:这个解析漏洞其实是PHP CGI的漏洞,在PHP的配置⽂件中有⼀个关键的选项cgi.fix_pathinfo默认是开启的,当URL中有不存在的⽂件,PHP就会向前递归解析。在⼀个⽂件/xx.jpg后⾯加上/.php会将 /xx.jpg/xx.php 解…

harbor离线安装 配置https 全程记录

1. 下载harbor最新版本 下载网址: 找最新的版本: https://github.com/goharbor/harbor/releases/download/v2.11.2/harbor-offline-installer-v2.11.2.tgz 这里我直接使用迅雷下载, 然后上传 1.1解压 sudo tar -xf harbor-offline-installer-v2.11.2.tgz -C /opt/ 2. 配置Harb…

Next.js v15 - 服务器操作以及调用原理

约定 服务器操作是在服务器上执行的异步函数。它们可以在服务器组件和客户端组件中调用,用于处理 Next.js 应用程序中的表单提交和数据修改。 服务器操作可以通过 React 的 “use server” 指令定义。你可以将该指令放在 async 函数的顶部以将该函数标记为服务器操…

编译原理复习---目标代码生成

适用于电子科技大学编译原理期末考试复习。 1. 目标代码 是目标机器的汇编代码或机器码,在本课程中指的是类似于汇编代码的一种形式,由一条条的指令构成目标代码。 抽象机指令格式:OP 目的操作数,源操作数。 我们要做的&…

JaxaFx学习(三)

目录: (1)JavaFx MVVM架构实现 (2)javaFX知识点 (3)JavaFx的MVC架构 (4)JavaFx事件处理机制 (5)多窗体编程 (6)数据…

Type-C 接口电热毯:开启温暖智能新时代

在当今科技迅猛发展的时代,智能家居产品如同璀璨繁星般点缀着我们的生活,从智能灯光的温馨到温控系统的精准,处处都彰显着科技赋予生活的便捷与舒适。而在这股追求高效与智能化的洪流之中,一款极具创新的电热毯——Type-C 接口电热…

解决vscode ssh远程连接服务器一直卡在下载 vscode server问题

目录 方法1:使用科学上网 方法2:手动下载 方法3 在使用vscode使用ssh远程连接服务器时,一直卡在下载"vscode 服务器"阶段,但MobaXterm可以正常连接服务器,大概率是网络问题,解决方法如下: 方…

WSL Ubuntu

文章目录 1. 概述1.1 什么是适用于 Linux 的 Windows 子系统1.2 什么是 WSL 21.3 WSL 2 中的新增功能1.4 比较 WSL 2 和 WSL 1 2. 参考资料3. 修改存储位置4. 网络访问 1. 概述 1.1 什么是适用于 Linux 的 Windows 子系统 适用于 Linux 的 Windows 子系统可让开发人员按原样运…

clickhouse-数据库引擎

1、数据库引擎和表引擎 数据库引擎默认是Ordinary,在这种数据库下面的表可以是任意类型引擎。 生产环境中常用的表引擎是MergeTree系列,也是官方主推的引擎。 MergeTree是基础引擎,有主键索引、数据分区、数据副本、数据采样、删除和修改等功…

如何使用Python进行音频片断合成

以下是几种使用 Python 进行音频合成的方法: 使用 synthesizer 库 通过 pip install synthesizer 安装后,利用其提供的合成器类,可自定义振荡器类型,如锯齿波、方波或正弦波,并调制振幅来创造不同音色,还…

【SH】在Ubuntu Server 24中基于Python Web应用的Flask Web开发(实现POST请求)学习笔记

文章目录 Flask开发环境搭建保持Flask运行Debug调试 路由和视图可变路由 请求和响应获取请求信息Request属性响应状态码常见状态码CookieSession 表单GET请求POST请求 Flask 在用户使用浏览器访问网页的过程中,浏览器首先会发送一个请求到服务器,服务器…

CLION中运行远程的GUI程序

在CLION中运行远程GUI程序,很有可能会遇到下面错误 Gtk-WARNING **: cannot open display: 这是因为远程的GUI程序不能再本地机器上显示。这个问题一般有两种解决方法 通过SSH的ForwardX11的方法,就是将远程的GUI程序显示到本地机器上,一般在…

Unity 圆形循环复用滚动列表

一.在上一篇垂直循环复用滚动列表的基础上,扩展延申了圆形循环复用滚动列表。实现此效果需要导入垂直循环复用滚动列表里面的类。 1.基础类 using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using …

中国人工智能学会技术白皮书

中国人工智能学会的技术白皮书具有多方面的重要作用,是极具权威性和价值的参考资料。 看看编委会和编写组的阵容,还是很让人觉得靠谱的 如何下载这份资料呢?下面跟着步骤来吧 步骤一:进入中国智能学会官网。百度搜索“中国智能学…

maui开发成生安卓apk,运行提示该应用与此设备的CPU不兼容

在生成.NET MAUI安卓应用时遇到“该应用与此设备的CPU不兼容”的问题,确保你的.NET MAUI应用支持的Android目标框架与设备CPU架构相匹配。例如,如果你的应用是为ARM64架构编译的,而你的设备是x86架构,就会出现不兼容的问题。 一、…

二叉树 -- 堆(详解)

目录 1、堆的概念及结构 2、堆的实现(附代码) 2.1、向下调整算法建堆 3、堆的应用(附代码) 3.1、堆排序 3.2、TOP-K问题 1、堆的概念及结构 如果有一个关键码的集合K { k0,k1 ,k2 ,…,k(n-1) },把它的所有元素…

windows环境下pytorch安装踩坑

目录 1 前言2 安装Anaconda3 安装CUDA4 创建Python3.9环境5 安装Pytorch环境5.1 conda方式5.2 pip方式 6 验证是否安装成功7 注意事项7.1 no module named torch问题7.12 torch.cuda.is_available()返回False问题 8 最佳实践9 总结 1 前言 这两天由于要使用Genesis,…

Linux系统命令基础

Linux命令⾏ [pypylinux ~]$ 普通⽤户py,登陆后 [rootpylinux ~]# 超级⽤户root,登录后root代表当前登录的⽤户 分隔符pylinux 主机名~ 当前的登录的位置,此时是家⽬录# 超级⽤户身份提示符 $ 普通⽤户身份提示符操作系统⽬录分隔符 Linux目录…