在C#中使用WASAPI(Windows Audio Services API)進行音頻處理通常涉及使用NAudio庫,這是一個流行的第三方音頻處理庫,它提供了對WASAPI的封裝。以下是使用NAudio和WASAPI在C#中創建音頻輸入設備(如麥克風)的基本步驟:
安裝NAudio庫: 你可以通過NuGet包管理器來安裝NAudio庫。在你的項目中,打開NuGet包管理器控制臺,并運行以下命令:
Install-Package NAudio
設置 WASAPI 輸出設備: 使用NAudio創建一個 WASAPI 輸出設備實例。以下是一個簡單的示例代碼片段,演示如何創建一個輸出設備并播放音頻:
using System;
using NAudio.Wave;
namespace WASAPIAudioExample
{
class Program
{
static void Main(string[] args)
{
// 獲取默認的 WASAPI 輸出設備
using (var outputDevice = WaveOut.GetDefaultOutputDevice())
{
// 創建一個波形文件寫入器以保存音頻數據
using (var writer = new WaveFileWriter("output.wav"))
{
// 設置輸出設備的參數
outputDevice.Init(writer);
// 開始播放音頻
outputDevice.Play();
// 在這里添加你的音頻數據到 writer
// 例如:writer.WriteSampleData(...);
// 等待音頻播放完畢
outputDevice.Stop();
outputDevice.Dispose();
}
}
}
}
}
設置 WASAPI 輸入設備:
對于音頻輸入設備(如麥克風),你需要使用 WaveIn
類。以下是一個簡單的示例代碼片段,演示如何創建一個輸入設備并錄制音頻:
using System;
using NAudio.Wave;
namespace WASAPIAudioExample
{
class Program
{
static void Main(string[] args)
{
// 獲取默認的 WASAPI 輸入設備
using (var inputDevice = WaveIn.GetDefaultInputDevice())
{
// 創建一個波形文件寫入器以保存音頻數據
using (var writer = new WaveFileWriter("input.wav"))
{
// 設置輸入設備的參數
inputDevice.Init(writer);
// 設置事件處理程序以接收音頻數據
inputDevice.DataAvailable += (object sender, WaveInEventArgs e) =>
{
// 在這里處理音頻數據
// 例如:writer.WriteSampleData(...);
};
// 開始錄制音頻
inputDevice.StartRecording();
// 等待用戶停止錄制
Console.WriteLine("Press any key to stop recording...");
Console.ReadKey();
// 停止錄制并釋放資源
inputDevice.StopRecording();
inputDevice.Dispose();
}
}
}
}
}
請注意,這些示例代碼僅用于演示目的,實際應用中可能需要更復雜的錯誤處理和功能實現。此外,根據你的需求,你可能需要調整 WASAPI 的參數,例如采樣率、位深度和通道數等。