C#代码实现把中文录音文件(.mp3 .wav)转为文本文字内容

发布于:2024-12-21 ⋅ 阅读:(8) ⋅ 点赞:(0)

我们有一个中文录音文件.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博客