首页 / C# / C# MP3播放帮助类
C# MP3播放帮助类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C# MP3播放帮助类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含11436字,纯文字阅读大概需要17分钟。
内容图文
![C# MP3播放帮助类](/upload/InfoBanner/zyjiaocheng/1327/7d119a086f394660b9fbe2cdcd33bb80.jpg)
![技术分享](/upload/getfiles/default/2022/11/10/20221110022801810.jpg)
![技术分享](/img/jian.gif)
1 /// <summary> 2 /// ************************************************* 3 /// 类名:MP3帮助类 4 /// 修改日期:2016/06/25 5 /// 作者:董兆生 6 /// 联系方式:QQ490412323 7 /// ************************************************* 8 /// </summary> 9 public class AudioPlay :IDisposable 10 { 11 /// <summary> 12 /// 播放状态 13 /// </summary> 14 private PlayState _palystate = PlayState.Closed; 15public PlayState PlayState 16 { 17set 18 { 19if (value == _palystate) return; 20 OnPropertyChanged(value); 21 _palystate = value; 22 } 23get { return _palystate; } 24 } 25///<summary> 26/// 操作错误事件 27///</summary> 28publicevent Errordelegate EventAudioplayerror; 29///<summary> 30/// 播放完毕事件 31///</summary> 32publicevent PlayEnd EventAudioPlayEnd; 33///<summary> 34/// 播放状态发生变化事件 35///</summary> 36publicevent DelegatePlayStateChange PlayStatePropertyChanged; 37///<summary> 38/// 播放时间变化事件 39///</summary> 40publicevent DelegatePlayNowTime EventPlayTimeChange; 41///<summary> 42/// 时间长度毫秒 43///</summary> 44publicreadonly StringBuilder PlayLenght = new StringBuilder(255); 45///<summary> 46/// 播放音量 47///</summary> 48privateint _playvlome = 1000; 49publicint PlayVolume{get { return _playvlome; }} 50///<summary> 51/// 当前播放时间 52///</summary> 53publicint NowPlayTime 54 { 55get { returnint.Parse(_nowplaytime.ToString()); } 56 } 57privatereadonly StringBuilder _nowplaytime = new StringBuilder(255); 58 59private AudioModel _nowPlayData; 60///<summary> 61/// 当前播放歌曲 62///</summary> 63public AudioModel NowPlayData { get { return _nowPlayData; } } 64///<summary> 65/// 播放列表 66///</summary> 67public List<AudioModel> PlayList = new List<AudioModel>(); 68 69privateint _playindex; 70///<summary> 71/// 当前播放歌曲在列表中的序号 72///</summary> 73publicint PlayIndex { get { return _playindex; } } 74///<summary> 75/// 是否单曲循环播放 76///</summary> 77publicbool IsSingleLoop { set; get; } 78///<summary> 79/// 是否列表循环播放 80///</summary> 81publicbool IsListLoop { set; get; } 82///<summary> 83/// 随机循环播放 84///</summary> 85publicbool IsRandLoop { set; get; } 86 87private Random _random; 88 89public AudioPlay(AudioModel playdata) 90 { 91 _nowPlayData = (AudioModel)playdata.Clone(); 92 PlayList .Add(_nowPlayData); 93 _playindex = 0; 94 95 96var playTimer = new Timer 97 { 98 Enabled = true, 99 Interval = 1000100 }; 101102 playTimer.Tick += playTimer_Tick; 103 } 104105public AudioPlay(List<AudioModel> playList) 106 { 107 PlayList = new List<AudioModel>(playList); 108 _nowPlayData = PlayList[0]; 109 _playindex = 0; 110111112var playTimer = new Timer 113 { 114 Enabled = true, 115 Interval = 1000116 }; 117 playTimer.Tick += playTimer_Tick; 118 } 119120publicbool NextPlay() 121 { 122if (PlayList==null) returnfalse; 123124if (_playindex + 1 >= PlayList.Count) returnfalse; 125126 Closed(); 127128 _nowPlayData = PlayList[_playindex + 1]; 129130 Open(); 131132 SetVolume(PlayVolume); 133134 Play(); 135136 _playindex = _playindex + 1; 137138returntrue; 139 } 140141publicbool PreviousPlay() 142 { 143if (PlayList==null) returnfalse; 144145if (_playindex - 1 <0 ) returnfalse; 146147 Closed(); 148149 _nowPlayData = PlayList[_playindex - 1]; 150151 Open(); 152153 SetVolume(PlayVolume); 154155 Play(); 156157 _playindex = _playindex - 1; 158159returntrue; 160 } 161162publicbool JumpPlay(int index) 163 { 164if (PlayList == null) returnfalse; 165166if (index < 0 && index > PlayList.Count - 1) returnfalse; 167168 Closed(); 169170 _nowPlayData = PlayList[index]; 171172 Open(); 173174 SetVolume(PlayVolume); 175176 Play(); 177178 _playindex = index; 179180returntrue; 181 } 182183privatevoid playTimer_Tick(object sender, EventArgs e) 184 { 185if (PlayState != PlayState.Playing) return; 186187 DoOrder(string.Format("status {0} position", _nowPlayData.AliasMovie), _nowplaytime, _nowplaytime.Capacity); 188189var returntimeThread = new Thread(ThreadReturnTime) {IsBackground = true}; 190191 returntimeThread.Start(_nowplaytime); 192193if (!_nowplaytime.Equals(PlayLenght)) return; 194195 Closed(); 196197 _palystate = PlayState.Closed; 198199if (EventAudioPlayEnd !=null) EventAudioPlayEnd(); 200201if (IsRandLoop) 202 { 203204 _random = new Random((int)DateTime.Now.Ticks); 205206 _playindex = _random.Next(0, PlayList.Count); 207208 _nowPlayData = PlayList[_playindex]; 209210 JumpPlay(_playindex); 211212return; 213 } 214215if (IsListLoop) 216 { 217218if (_playindex + 1 >= PlayList.Count) 219 { 220 _playindex = 0; 221 } 222else223 { 224 _playindex = _playindex + 1; 225 } 226227 _nowPlayData = PlayList[_playindex]; 228229 JumpPlay(_playindex); 230231return; 232 } 233234if (!IsSingleLoop) return; 235236 JumpPlay(_playindex); 237 } 238239privatevoid ThreadReturnTime(object time) 240 { 241if(_palystate!=PlayState.Playing) return; 242243if (EventPlayTimeChange != null) EventPlayTimeChange(int.Parse(time.ToString())); 244 } 245246247///<summary>248/// 执行指令 249///</summary>250///<param name="order">指令</param>251///<param name="returnString">需要返回的数据</param>252///<param name="returnsize">返回数据大小</param>253///<returns></returns>254privatebool DoOrder(string order, StringBuilder returnString,int returnsize) 255 { 256var error = WinApiHepler.mciSendString(order, returnString, returnsize, new IntPtr()); 257258if(IsDisplsed)returnfalse; 259260if (error == 0) returntrue; 261262 Errorlog(error); 263264returnfalse; 265 } 266267///<summary>268/// 事件格式化 269///</summary>270///<param name="millisecond">毫秒</param>271///<returns>hh:mm:ss</returns>272publicstaticstring TimeFormat(int millisecond) 273 { 274var time = new TimeSpan(0, 0, 0, 0, millisecond); 275276returnstring.Format("{0}:{1}:{2}", time.Hours, time.Minutes, time.Seconds); 277 } 278///<summary>279/// 获得当前状态 280///</summary>281///<returns></returns>282public PlayState GetPlyaState() 283 { 284var state = new StringBuilder(50); 285286return DoOrder(string.Format("status {0} mode", _nowPlayData.AliasMovie), state, state.Capacity) != true ? PlayState.Error : (PlayState)Enum.Parse(typeof(PlayState), state.ToString()); 287 } 288///<summary>289/// 打开音乐文件 290///</summary>291publicvoid Open() 292 { 293 PlayState = DoOrder(string.Format("open {0} alias {1}", _nowPlayData.ShortPath, _nowPlayData.AliasMovie), null, 0) != true ? PlayState.Error : PlayState.Opne; 294295if (_palystate != PlayState.Opne) return; 296297 DoOrder(string.Format("status {0} length", _nowPlayData.AliasMovie), PlayLenght, PlayLenght.Capacity); 298299 } 300///<summary>301/// 播放音乐 302///</summary>303///<param name="starttime">开始时间</param>304///<param name="endtime">结束时间</param>305publicvoid Play(int starttime,int endtime) 306 { 307 PlayState = DoOrder(string.Format("play {0} from {1} to {2} notify", _nowPlayData.AliasMovie, starttime, endtime), null, 0) != true ? PlayState.Error : PlayState.Playing; 308 } 309///<summary>310/// 播放音乐 311///</summary>312publicvoid Play() 313 { 314 PlayState = DoOrder(string.Format("play {0} notify", _nowPlayData.AliasMovie), null, 0) != true ? PlayState.Error : PlayState.Playing; 315 } 316///<summary>317/// 暂停 318///</summary>319publicvoid Pause() 320 { 321 PlayState = DoOrder(string.Format("pause {0}", _nowPlayData.AliasMovie), null, 0) != true ? PlayState.Error : PlayState.Paused; 322 } 323///<summary>324/// 停止 325///</summary>326publicvoid Stop() 327 { 328 PlayState = DoOrder(string.Format("stop {0}", _nowPlayData.AliasMovie), null, 0) != true ? PlayState.Error : PlayState.Stopped; 329 } 330///<summary>331/// 关闭音乐 332///</summary>333publicvoid Closed() 334 { 335 PlayState = DoOrder(string.Format("close {0}", _nowPlayData.AliasMovie), null, 0) != true ? PlayState.Error : PlayState.Closed; 336 } 337///<summary>338/// 设置音量 339///</summary>340///<param name="volume">0-1000</param>341///<returns></returns>342publicbool SetVolume(int volume) 343 { 344if (!DoOrder(string.Format("setaudio {0} volume to {1}", _nowPlayData.AliasMovie, volume), null, 0)) 345returnfalse; 346 _playvlome = volume; 347returntrue; 348 } 349350privatevoid Errorlog(int error) 351 { 352var errorText = new StringBuilder(50); 353354 WinApiHepler.mciGetErrorString(error, errorText, errorText.Capacity); 355356if (EventAudioplayerror == null) return; 357358 EventAudioplayerror(errorText.ToString()); 359 } 360361privatevoid OnPropertyChanged(PlayState state) 362 { 363if (PlayStatePropertyChanged != null) 364 { 365 PlayStatePropertyChanged(state); 366 } 367 } 368369protectedbool IsDisplsed { get; set; } 370371 ~AudioPlay() 372 { 373 Dispose(); 374 } 375376///<summary>377/// 释放 378///</summary>379publicvoid Dispose() 380 { 381 Dispose(IsDisplsed); 382 } 383publicvirtualvoid Dispose(bool isDisplsed) 384 { 385if (isDisplsed) 386return; 387388 EventAudioplayerror = null; 389390 EventAudioPlayEnd = null; 391392 EventPlayTimeChange = null; 393394 DoOrder(string.Format("close {0}", _nowPlayData.AliasMovie), null, 0); 395 } 396397 } 398publicdelegatevoid Errordelegate(string error); 399400publicdelegatevoid PlayEnd(); 401402publicdelegatevoid DelegateHockMesg(Message msg); 403404publicdelegatevoid DelegatePlayStateChange(PlayState state); 405406publicdelegatevoid DelegatePlayNowTime(int time); 407408publicclass WindosMessageInform :UserControl 409 { 410int[] HockMsg { set; get; } 411412publicevent DelegateHockMesg EventHockmesg; 413414public WindosMessageInform(int[] hockmsg) 415 { 416 HockMsg = hockmsg; 417 } 418419protectedoverridevoid WndProc(ref Message m) 420 { 421if (HockMsg.ToList().Contains(m.Msg)) 422 { 423if (EventHockmesg != null) EventHockmesg(m); 424 } 425base.WndProc(ref m); 426 } 427 } 428429publicclass AudioModel : ICloneable 430 { 431public AudioModel() 432 { 433434 } 435436public AudioModel(string file,string alias,object data) 437 { 438 PlayFile = file; 439440 AliasMovie = alias; 441442 SourceData = data; 443444 FileName = System.IO.Path.GetFileNameWithoutExtension(file); 445446var shortpath = new StringBuilder(255); 447448 WinApiHepler.GetShortPathName(PlayFile, shortpath, shortpath.Capacity); 449450 ShortPath = shortpath.ToString(); 451 } 452publicstring FileName { set; get; } 453454publicstring PlayFile { set; get; } 455456publicstring ShortPath { set; get; } 457458publicstring AliasMovie { set; get; } 459460publicobject SourceData { set; get; } 461462publicobject Clone() 463 { 464var clonedata = SerializationHelper.GetSerialization(this); 465466return SerializationHelper.ScriptDeserialize<AudioModel>(clonedata); 467 } 468 } 469470publicenum PlayState 471 { 472 Opne, 473 Playing, 474 Paused, 475 Stopped, 476 Closed, 477 None, 478 Error 479 }
基于winAPI winmm.dll
mciSendString 编写的帮助类功能比较齐全(起码比我现在网上搜的齐全@-@)已经实现的功能 播放 暂停 停止 关闭就不多说了基本功能没啥好说的。
事件:播放完毕通知,时间变化通知,状态变化通知,错误通知
功能:上一首, 下一首 ,指定顺序播放
播放后状态:单曲循环,列表循环,随机播放
里面用到的BearChildren为我个人编写的工具功能如名字一样熊孩子...意思:让这个框架跟熊孩子一样什么都能做 目前还在完善中
目前框架主要是以单机桌面开发编写的一套工具,内容为图像处理,Io,数据等,我希望能有更多的人来帮助我来完善这个框架在日常工作中让开发变的更加方便快捷,
QQ群为:572582327 欢迎大家一起加入讨论丰富自己的技术 无论你是大神还是新手都欢迎你们。
代码下载链接:自带播放器demo
https://git.coding.net/BearChildren/AudioPlayHelper.git
原文:http://www.cnblogs.com/dongzhaosheng/p/5617131.html
内容总结
以上是互联网集市为您收集整理的C# MP3播放帮助类全部内容,希望文章能够帮你解决C# MP3播放帮助类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。