最近無聊,想聽聽歌曲。可憐新電腦上歌曲就兩三首,要聽其它的就得在舊電腦上播放。可是,那台古董但不失健壯的本本被老婆無情的霸占了。無奈。
思來想去,得,寫個程序播放吧。做個C/S播放器。
理想是美好的,現實是殘酷的。 在繁瑣的查找和測試之后,找來了NAdio(26 Oct 2012 NAudio 1.6)這個開源的第三方插件。
先寫個結論再寫過程。
結論
一、使用.net自帶的SoundPlayer來播放wave文件需要注意幾個地方:
- 使用FileStream 或 MemoryStream 時 ,流的Position一定要為 0,流不能被關閉。即需要注意流對象的生命周期。
- 無法使用Wave文件的一段來播放。
- Stream屬性可指定要播放的流
二、使用NAiduo庫播放文件需要注意幾個地方
- 對文件類型進行判斷時,先判斷Wave文件,若非wave文件,則使用 Mp3Freame 來判斷是否為mp3文件
- 若使用NAudio庫提供的 WaveOut 播放,需要注意,它在文件播放完時並不會把 PlaybackState 置為 PlaybackState.Stopped,這個需要手動判斷了。
- 若要 get / set 播放的進度 、時間 、音量,則需要使用 WaveChannel32
- NAudio庫的 Volume 的音量調用有問題,使用默認值即可。
過程
一、NAudio提供的示例
- NAudio的源文件中提供了一些示例
-
http://naudio.codeplex.com/的網頁中, Projects Using NAudio 同樣有一些
- 當然,更好的是 DOCUMENTION 下面的 How do I...? 這里直接有播放Wave和Mp3的救命代碼
- 還有一篇 A Simple C# Player Mp3 with NAudio 的文章
二、開始
大家都清楚播放器的基本構成包含: 音量控制 、進度控制、時間顯示、播放、暫停、停止 等幾個基本動做,以及 播放結束時引發的事件。所以,
上圖AudioPlayer為播放器的對象,但實際的播放操作是由NAudio來完成。所以,
使用AudioCore來完成NAudio實際的播放動作。那么,如何操作音量、進度及顯示時間呢?這些就是要 AudioVolume AudioTimePosition 來完成了。
OK,所有的對象都已經建立,只需要有機的結合在一起就可以工作了。下面來做個實際測試。
讓我們來聽下單田芳講的《西游記》
三、結束
結束的貌似快了點。hi~hi~,咱這是效率。附代碼。有興趣的同學可以用Reflector反編譯 goldli.Utility.AudioPlayer.dll 。有問題發郵件。閃了