• 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,而不用花费巨大的精力来修改语法差别。

  • 相关阅读:
    前端-微信公众号开发(jssdk)
    wampserver 配置本地环境局域网内pc移动访问
    客户端缓存之localStorage and sessionStorage
    webpack+vue搭建基础
    高德地图javascriptAPI基本使用心得(下)
    高德地图javascriptAPI基本使用心得(上)
    表单单选多选项清除默认样式小技巧
    (原创)C#零基础学习笔记003-流程控制语句
    (原创)C#零基础学习笔记002-表达式与运算符
    (原创)C#零基础学习笔记000-学习结构
  • 原文地址:https://www.cnblogs.com/qq260250932/p/4231410.html
Copyright © 2020-2023  润新知