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

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.kler.cn/a/445958.html

相关文章:

  • Java图片拼接
  • 深入浅出支持向量机(SVM)
  • 搜索召回概要
  • uniapp图片数据流���� JFIF ��C 转化base64
  • 2024年华为OD机试真题-字符串分割-C++-OD统一考试(E卷)
  • 拼多多电子面单接入:常见问题及专业解决方案
  • 使用Unity做一个3D吃豆人小游戏
  • 【人工智能】物联网技术及其应用
  • 电商店铺数据集成到金蝶云星辰V2的实践经验分享
  • k8s-1.28.1证书更新到100年-cenots7.9
  • 卷积神经网络-填充+步长
  • 差分数组的使用
  • 工业主板产品线的多样性与应用
  • 【数据分析之pandas】
  • go语言学习之错误记录-1、GOPROXY
  • 原生开发vs混合开发
  • 【上传文件过大进行的切片式上传】
  • Oracle 表连接原理与优化
  • Qt 开发之蓝牙连接
  • hackme靶机保姆及攻略
  • elasticsearch Flattened 使用
  • JS面向对象及继承
  • 【第六节】Git Flow:分支管理模型与工作流程
  • nano编辑器怎么退出并保存
  • DeepFaceLab技术浅析(六):后处理过程
  • Golang中什么是协程泄露(Goroutine Leak)