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/

经过对示例程序分析,可得出播放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. WaveOut waveOut = null;
  5. var rdr = new Mp3FileReader("1.mp3");
  6. var wavStream = WaveFormatConversionStream.CreatePcmStream(rdr);
  7. var baStream = new BlockAlignReductionStream(wavStream);
  8. waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback());
  9. waveOut.Init(baStream);
  10. 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,而不用花费巨大的精力来修改语法差别。

C# wave mp3 播放器探寻的更多相关文章

  1. MP3播放器团队项目

    一.设计思路 程序要求能播放MP3文件,因此需调用库中的播放方法:右键工具箱选择项,添加com组件,选择window media player后工具箱就会多一个控件,然后拖到窗体中就OK了.另在窗体中 ...

  2. 你也可以用java的swing可以做出这么炫的mp3播放器_源码下载

    I had published the blog : 你用java的swing可以做出这么炫的mp3播放器吗? and to display some screenshots about this M ...

  3. 你用java的swing可以做出这么炫的mp3播放器吗?

    这个mp3播放器是基于java的swing编写的,我认为界面还是可以拿出来和大家看一看评一评. 先说说创作的初衷,由于前段时间工作不是很忙,与其闲着,还不如找一些东西来给自己捣腾捣腾,在 之前写的 j ...

  4. MP3播放器的实现

    今天,基本上实现了MP3播放器的基本功能,现在总结一下. 首先,下载服务器端的MP3列表,这里用到了下载技术和解析XML文件技术. 下载参考(http://blog.csdn.net/huim_lin ...

  5. 安卓MP3播放器开发实例(1)之音乐列表界面

    学习安卓开发有一年了,想想这一年的努力,确实也收获了不少.也找到了比較如意的工作. 今天准备分享一个以前在初学阶段练习的一个项目.通过这个项目我真正的找到了开发安卓软件的感觉,从此逐渐步入安卓开发的正 ...

  6. 开源mp3播放器--madplay 编译和移植 简记

    madplay是一款开源的mp3播放器. http://madplay.sourcearchive.com/ 下面简单记录一下madplay的编译与移植到ARM开发板上的过程 一.编译x86版本的ma ...

  7. 基于Stm32的MP3播放器设计与实现

    原创博文,转载请注明出处 这是我高级电子技术试验课做的作业,拿来共享一下.项目在安福莱例程基础之上进行的功能完善,里面的部分内容可参考安福莱mp3例程.当然用的板子也是安福莱的板子,因为算起来总共做了 ...

  8. x宝23大洋包邮的老式大朝华MP3播放器简单评测

    (纯兴趣测评,非广告) 最近逛X宝,看到了这个古董级MP3播放器居然还在售,于是脑抽+情怀泛滥买了一个. 然后呢,从遥远的深圳跨越好几千公里邮过来了这个玩意: 那节南孚5号电池是我自己的,是为了对比一 ...

  9. 从零开始学习PYTHON3讲义(十四)写一个mp3播放器

    <从零开始PYTHON3>第十四讲 通常来说,Python解释执行,运行速度慢,并不适合完整的开发游戏.随着电脑速度的快速提高,这种情况有所好转,但开发游戏仍然不是Python的重点工作. ...

随机推荐

  1. Overture 5入门之如何设置延音线

    延音线作为五线谱标记符合之一,是大家使用Overture时需要常用的一个基本标记符号.延音线是一条向上或向下弯曲的弧线,它的作用是将两个或两个以上的具有相同高音的音符来进行相连. 延音线作为再编曲演唱 ...

  2. 尚硅谷面试第一季-09SpringMVC中如何解决POST请求中文乱码问题GET的又如何处理呢

    目录结构: 关键代码: web.xml <filter> <filter-name>CharacterEncodingFilter</filter-name> &l ...

  3. 配置maven默认jdk版本

    1.在setting.xml中配置.对所有通过该配置文件构建的maven项目有效. <profile> <id>jdk-1.8</id> <activatio ...

  4. topcoder srm 697 div1 -3

    1.给定长度为$n$ 的数组$b$,构造长度为$n$ 的且没有重复元素的数组$a$,令$p_{i}$表示$a$中除$a_{i}$外其他元素的乘积.构造出的$a$满足$a_{i}^{b_{i}}$能够被 ...

  5. topcoder srm 700 div1 -3

    1.有$n$个人,编号1到$n$.将其平均分到$m$个房间中,每个房间$K$个人.现在知道每个房间编号最小的人的编号.对于给出的人$x$.问其可能在的房间有多少种? 思路:先假设其在某个房间,然后判断 ...

  6. Vim 插键及配置

    如果你觉得这个页面广告太多,欢迎移步博客阅读:Vim 插键及配置 编辑器之神 -- Vim 平日使用vim经常编辑文件,想想使用时的痛点,决定研究一下插件的使用. Vim的扩展通常也被成为bundle ...

  7. MSYS2 更换国内源

    转自 : http://www.cnblogs.com/findumars/p/6546088.html 最近一段时间不知怎么的,使用默认的 MSYS2 源升级软件或是安装新软件的特别的慢.所以就翻了 ...

  8. S.M.A.R.T.记录几块ssd硬盘

    1.闪迪至尊超级速(Extreme pro) 2.三星sm961 (m2接口) 3.intel 750 (pice接口) ps: 因为sm961,intel750都是nvme协议,网上大部分软件测试都 ...

  9. Nvme固体硬盘Intel750,SM961分别使用一段时间以后对比

    在SM961使用了一年半(2017年1月17日购买)后,再次测试,这次测试使用AS_SSD_Benchmark工具进行测试 感觉CrystalDiskMark工具测出来的分数在所以工具中分数最高 看图 ...

  10. FJUT3591 侦测到在途的聚变打击(最小不可相交路径覆盖)题解

    题意:给你n个点,点间m条路,给出在每条路要走的时间.现在有q个任务,要摧毁q个点,每次提供ci和ti表示在时间ti摧毁点ci(必须正好在时间ti才能摧毁),每个点可能需要多次摧毁(同一时间能在同一个 ...