• C# wave mp3 播放器探寻


    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 。有问题发邮件。闪了

    ====================================================

    用C#和NAudio解码库播放mp3示例

     

    本文并非使用wmp控件和mci,而是用NAudio库原生解码,占用资源很小。推荐C#和.Net开发人员使用。

     

    NAudio 是一款开源的用于.NET平台下的音频处理类库。提供了很多的简易方法来操作音频数据。

    下图是官方示例程序。

    源代码和示例程序地址见官网: http://naudio.codeplex.com/

    naudiodemo.png

     

     

    经过对示例程序分析,可得出播放mp3的最小代码如下:

     

    using System;
     using System.Text;
     using NAudio.Wave;
     using NAudio.CoreAudioApi;
     using System.Threading;
     using System.IO;
    
     namespace KidPlayer
    {
    
        class Program
        {
            static void Main()
            {
                using (var ms = File.OpenRead(@"test.mp3"))
                using (var rdr = new Mp3FileReader(ms))
                using (var wavStream = WaveFormatConversionStream.CreatePcmStream(rdr))
                using (var baStream = new BlockAlignReductionStream(wavStream))
                using (var waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
                {
                    waveOut.Init(baStream);
                    waveOut.Play();
                    while (waveOut.PlaybackState == PlaybackState.Playing)
                    {
                        Thread.Sleep(100);
                    }
                }
            }
        }
            
        
    }
    

     ==============================================

    转:用C#和NAudio解码库播放mp3示例

    http://naudio.codeplex.com/

    1. using NAudio;  
    2. using NAudio.Wave;  
    3. using NAudio.CoreAudioApi;  
    4.   
    5. WaveOut waveOut = null;  
    6.   
    7. var rdr = new Mp3FileReader("1.mp3");  
    8. var wavStream = WaveFormatConversionStream.CreatePcmStream(rdr);  
    9. var baStream = new BlockAlignReductionStream(wavStream);  
    10. waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback());  
    11. waveOut.Init(baStream);  
    12. waveOut.Play();  
    using NAudio;
    using NAudio.Wave;
    using NAudio.CoreAudioApi;
    
    WaveOut waveOut = null;
    
    var rdr = new Mp3FileReader("1.mp3");
    var wavStream = WaveFormatConversionStream.CreatePcmStream(rdr);
    var baStream = new BlockAlignReductionStream(wavStream);
    waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback());
    waveOut.Init(baStream);
    waveOut.Play();
    

    目前测试支持320kbps码率的mp3文件

     ============================================

                 在unity中使用naudio             2012-01-08 22:09:10          

    分类: 嵌入式

    当我使用unity3D引擎时我很希望能加入录音功能,但是官方版的naudio的dll库会在载入unity3D时失败。

    经过我的实践,我发现问题是这样的,官方的naudio库使用csc.exe和.net framework 4.0来编译,但是unity3D仅仅支持mono和.net framework 2.0,当修改过一些语法差异之后,我编译成功,并且在录音和播放测试中成功了。

    我建立了一个google code的项目:

    http://code.google.com/p/naudio-with-unity3d/

    以方便其他人使用dll,而不用花费巨大的精力来修改语法差别。

  • 相关阅读:
    ZOJ 3818 Pretty Poem
    HDU 4597 Play Game
    HDU 4497 GCD and LCM
    CSU 1335 高桥和低桥
    UVA 10791 Minimum Sum LCM
    CSU 1119 Collecting Coins
    CSU 1120 病毒
    UVA 12169 Disgruntled Judge
    HDU 1301 Jungle Roads
    POJ 1258 Agri-Net
  • 原文地址:https://www.cnblogs.com/qq260250932/p/4231410.html
Copyright © 2020-2023  润新知