C# wave mp3 播放器探寻
2015-01-18 02:21
169 查看
C# wave mp3 播放器探寻
最近无聊,想听听歌曲。可怜新电脑上歌曲就两三首,要听其它的就得在旧电脑上播放。可是,那台古董但不失健壮的本本被老婆无情的霸占了。无奈。
思来想去,得,写个程序播放吧。做个C/S播放器。
理想是美好的,现实是残酷的。 在繁琐的查找和测试之后,找来了NAdio(26 Oct 2012 NAudio 1.6)这个开源的第三方插件。
先写个结论再写过程。
结论
[b]一、使用.net自带的SoundPlayer来播放wave文件需要注意几个地方:[/b]
使用FileStream 或 MemoryStream 时 ,流的Position一定要为 0,流不能被关闭。即需要注意流对象的生命周期。
无法使用Wave文件的一段来播放。
Stream属性可指定要播放的流
[b]二、[/b]使用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 的文章
二、[b]开始 [/b]
大家都清楚播放器的基本构成包含: 音量控制 、进度控制、时间显示、播放、暂停、停止 等几个基本动做,以及 播放结束时引发的事件。所以,
上图AudioPlayer为播放器的对象,但实际的播放操作是由NAudio来完成。所以,
使用AudioCore来完成NAudio实际的播放动作。那么,如何操作音量、进度及显示时间呢?这些就是要 AudioVolume AudioTimePosition 来完成了。
OK,所有的对象都已经建立,只需要有机的结合在一起就可以工作了。下面来做个实际测试。
让我们来听下单田芳讲的《西游记》
[b]三、结束[/b]
结束的貌似快了点。hi~hi~,咱这是效率。附代码。有兴趣的同学可以用Reflector反编译 goldli.Utility.AudioPlayer.dll 。有问题发邮件。闪了
====================================================
用C#和NAudio解码库播放mp3示例
本文并非使用wmp控件和mci,而是用NAudio库原生解码,占用资源很小。推荐C#和.Net开发人员使用。
NAudio 是一款开源的用于.NET平台下的音频处理类库。提供了很多的简易方法来操作音频数据。
下图是官方示例程序。
源代码和示例程序地址见官网: http://naudio.codeplex.com/
经过对示例程序分析,可得出播放mp3的最小代码如下:
==============================================
转:用C#和NAudio解码库播放mp3示例
http://naudio.codeplex.com/
[html] view plaincopyprint?
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/S播放器。
理想是美好的,现实是残酷的。 在繁琐的查找和测试之后,找来了NAdio(26 Oct 2012 NAudio 1.6)这个开源的第三方插件。
先写个结论再写过程。
结论
[b]一、使用.net自带的SoundPlayer来播放wave文件需要注意几个地方:[/b]
使用FileStream 或 MemoryStream 时 ,流的Position一定要为 0,流不能被关闭。即需要注意流对象的生命周期。
无法使用Wave文件的一段来播放。
Stream属性可指定要播放的流
[b]二、[/b]使用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 的文章
二、[b]开始 [/b]
大家都清楚播放器的基本构成包含: 音量控制 、进度控制、时间显示、播放、暂停、停止 等几个基本动做,以及 播放结束时引发的事件。所以,
上图AudioPlayer为播放器的对象,但实际的播放操作是由NAudio来完成。所以,
使用AudioCore来完成NAudio实际的播放动作。那么,如何操作音量、进度及显示时间呢?这些就是要 AudioVolume AudioTimePosition 来完成了。
OK,所有的对象都已经建立,只需要有机的结合在一起就可以工作了。下面来做个实际测试。
让我们来听下单田芳讲的《西游记》
[b]三、结束[/b]
结束的貌似快了点。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/
[html] view plaincopyprint?
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();
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#中使用waveIn / waveOut api
- C#写的mp3定时播放器
- 自己用C#编的一个音乐(MTV,MP3)播放器
- C# wave mp3 播放器探寻
- 从MP3中提取歌曲信息(C#) 选择自 ufoer23 的 Blog
- mp3 播放器制作问题-VB版
- 在ASP.net(C#)中加入一个播放器
- 从MP3中提取歌曲信息(C#)
- 使用API函数播放MP3等音频文件的类设计(C#)
- 利用C#显示MP3的标签信息
- [导入]C#中用API实现MP3等音频文件的播放类
- C#播放MP3的类
- VC实现的avi,mid,mp3,asf,wma播放器核心代码
- C#播放MP3的类
- C#播放MP3的类
- 简单的MP3音乐点播放器
- MP3文件分析:TAG区,C#小试牛刀!
- 从MP3中提取歌曲信息(C#)
- C#中用API实现MP3等音频文件的播放类
- C#显示MP3的标签信息