C# wave mp3 播放器探尋


最近無聊,想聽聽歌曲。可憐新電腦上歌曲就兩三首,要聽其它的就得在舊電腦上播放。可是,那台古董但不失健壯的本本被老婆無情的霸占了。無奈。

思來想去,得,寫個程序播放吧。做個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 。有問題發郵件。閃了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM