我们有一个中文录音文件.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");
好了,以上这么多就是本文的全部内容了,如果对你有帮助,创作不易,点个赞吧。
参考网址