我們有一個中文錄音文件.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博客】