C# wave mp3 播放器探寻

news/2024/10/19 6:24:19/

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/

 

[html] view plain copy print ?
  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,而不用花费巨大的精力来修改语法差别。

 

转载于:https://www.cnblogs.com/qq260250932/p/4231410.html


http://www.ppmy.cn/news/149345.html

相关文章

Android应用开发--MP3音乐播放器代码实现(二,android开发实例大全

} switch (repeatState) { case isCurrentRepeat: // 单曲循环 repeatBtn .setBackgroundResource(R.drawable.repeat_current_selector); Toast.makeText(HomeActivity.this, R.string.repeat_current, Toast.LENGTH_SHORT).show(); break; case isAllRepeat: // 全部…

10款常用的Linux音乐播放器,10款常用的Linux音乐播放器

不管你使用的是windows还是,抑或是Mac OS,音乐播放器都基本是必须安装的。我这几天一直在ubuntu下折腾,尝试了很多款音乐播放器,老实说,我还是更喜欢windows里的 foobar2000,可惜foobar2000没有版本,但是,linux下的音乐播放器不必windows下的少,而且有很多还很优秀,很…

android音乐播放器音乐推荐,七大主流Android音乐播放器横向评测

核心功能对比 随着智能手机和3G网络的普及,移动互联网日益成为人们生活娱乐的重心之一。在音乐领域,竞争也十分激烈,在PC之后,几大提供音乐服务的厂商正在加紧占据手机客户端。 本期我们在Android平台挑选了七家国内主流音乐播放器进行评测,主要针对核心功能、操作体验、曲…

HTML简单音乐播放器

HTML代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatibl…

直播播放器+html5,10款html5网页播放器推荐(总有一款适合你)

整理了5款html5网页播放器&#xff0c;总有一款适合你吧。 酷播云HTML5倍速功能视频播放器 介绍&#xff1a; 重要提示&#xff1a;本播放器为酷播云在线产品&#xff0c;用户可以免费注册使用&#xff0c;下载包仅提供代码使用示例及演示&#xff0c;并非播放器的下载&#xf…

香橙派One(全志H3芯片)编译烧写U-boot、Linux内核zImage、dtb

一、编译烧写u-boot 1.1 源码和工具下载&#xff1a; 香橙派提供了u-boot源码和交叉编译链工具&#xff1a; &#xff08;1&#xff09;u-boot&#xff08;2020.04&#xff09;下载地址&#xff1a;https://github.com/orangepi-xunlong/u-boot-orangepi &#xff08;2&#…

Android应用开发-MP3音乐播放器代码实现(三)

好了&#xff0c;下面贴一下整个Activity的实现代码&#xff0c;主要是播放的各种状态的实现&#xff0c;因为这个音乐播放器并没有完全开发完&#xff0c;所以朋友们需要弄清楚这一点。如果对代码的实现有不清楚的&#xff0c;可以给小巫留言&#xff0c;小巫有空一定给大家解…

html博客音乐播放器代码大全,播放器代码大全

MTV代码 height="250" type="video/x-msvideo" loop="false" align="left"> 不用播放器也能无限放歌曲代码 width="1" height="1"> 背景音乐代码(写在日记标题里) 1.显示播放器代码: 2.不显示播放器代码: (…