1. 程式人生 > >C#開源音訊處理類庫 NAudio

C#開源音訊處理類庫 NAudio

  最近在嘗試C#播放聲音,C#中System.Media名稱空間下的SoundPlayer類可以簡單播放wav聲音,但是有個問題就是同一時間內只能有一個聲音在播放,如果有一個背景聲音在播放,然後播放另一個聲音,則背景聲音會停止,建立多個例項,使用多執行緒都沒用,無奈只能想其他辦法。

  查看了資料,System.Media名稱空間下的SoundPlayer類是基於winmm.dll的封裝,本來想重新封裝一個,但是一想,應該有現成的類庫吧,何必造輪子。百度搜索果然有一個開源的音訊類庫:NAudio,看了更新歷史記錄,從2007年開始一直到現在作者都在更新,可見作者持之以恆的精神,免費開源的軟體能夠堅持下來的並不多。

NAudio主要的功能:

1、支援多種API播放音訊,WaveOut、DirectSound、ASIO、WASAPI (Windows Vista及以上)

2、支援多種音訊格式解壓縮,MP3(ACM或者DMO解碼)、AIFF、G.711(mu-law或者a-law)、ADPCM、G.722、Speex、SF2

3、可以解碼任意ACM編碼的音訊

4、支援WaveIn、WASAPI、ASIO錄音

5、支援讀寫標準WAV格式的檔案

6、使用32位混音引擎

6、提供MIDI檔案多種讀寫方式

作者還提供了很多教程和示例程式,有時間再慢慢消化吧 一、簡單的音訊播放

我參考官方示例簡單封裝了一個BSoundPlayer類,這個WAV播放類的特點:

1、簡單易用,宣告一個物件,指定檔案路徑,Play(),Stop()就可以了,支援調整音量,同時可以輸出音訊檔案總時間,當前播放時間

2、同一個物件在播放完畢(或者手動停止)之前無法再次播放

3、不同物件可以同時播放

4、每次播放完畢,自動釋放資源

這個類最大的缺點就是在播放結束之前不能再次播放,對於按鈕快速點選聲音這樣的需求不能滿足,但是可以用來播放時間比較長的背景音樂,與System.Media名稱空間下的SoundPlayer類可以同時播放,配合System.Media名稱空間下的SoundPlayer類用來做快速短暫的播放,基本可以滿足遊戲聲音播放的需求了。