C#实现中文录音文件转为文本文字

 更新时间:2024年12月26日 10:29:31   作者:洱海之月  
这篇文章主要为大家详细介绍了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 文件

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#实现中文录音文件转为文本文字的文章就介绍到这了,更多相关C#录音转文本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#计算汽车行驶方向的方法分析

    C#计算汽车行驶方向的方法分析

    这篇文章主要介绍了C#计算汽车行驶方向的方法,结合实例形式分析了C#数值计算的原理与相关技巧,需要的朋友可以参考下
    2016-09-09
  • c#实现输出本月的月历

    c#实现输出本月的月历

    本篇文章是对使用c#输出本月月历的实现的代码进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 关于C#结构体 你需要知道的

    关于C#结构体 你需要知道的

    这篇文章主要介绍了关于C#结构体的相关知识,以及使用方法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • C#下解析HTML的两种方法介绍

    C#下解析HTML的两种方法介绍

    用System.Net.WebClient下载Web Page存到本地文件或者String中,用正则表达式来分析。这个方法可以用在Web Crawler等需要分析很多Web Page的应用中
    2013-09-09
  • Unity UGUI通过摇杆控制角色移动

    Unity UGUI通过摇杆控制角色移动

    这篇文章主要为大家详细介绍了Unity3D基于陀螺仪实现VR相机功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • 使用C#实现MD5加密的方法详解

    使用C#实现MD5加密的方法详解

    在软件开发中,加密是保护数据安全的重要手段之一,MD5(Message Digest Algorithm 5)是一种常用的哈希算法,用于生成数据的摘要或哈希值,本文介绍了如何使用C#语言实现MD5加密的方法,涵盖了基本的使用方式和扩展方法封装,需要的朋友可以参考下
    2024-08-08
  • 基于Kubernetes实现前后端应用的金丝雀发布(两种方案)

    基于Kubernetes实现前后端应用的金丝雀发布(两种方案)

    这篇文章主要介绍了基于Kubernetes实现前后端应用的金丝雀发布,文中给大家提到了两种常用方案,通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • C#实现获取mp3 Tag信息的方法

    C#实现获取mp3 Tag信息的方法

    这篇文章主要介绍了C#实现获取mp3 Tag信息的方法,涉及C#针对MP3文件属性的相关操作技巧,需要的朋友可以参考下
    2017-07-07
  • C# 中的List.Sort()--集合排序方法全面解析

    C# 中的List.Sort()--集合排序方法全面解析

    这篇文章主要介绍了C# 中的List.Sort()--集合排序方法全面解析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • C#学习笔记之字符串常用方法

    C#学习笔记之字符串常用方法

    在C#中字符串是用于表示文本的一系列字符,它可以是字符、单词 或用双引号引起来的长段落,下面这篇文章主要给大家介绍了关于C#学习笔记之字符串常用方法的相关资料,需要的朋友可以参考下
    2024-01-01

最新评论