实例介绍
【实例简介】
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Runtime.Serialization.Formatters.Binary; using System.IO; namespace MusicPlayer { /// <summary> /// 播放顺序枚举 /// </summary> public enum PlayOrder { order, //顺序播放 random, //随机播放 unique, //单曲循环 list //列表循环 } public partial class FrmMain : Form { private List<Music> musicList;//歌曲列表 int curI = -1;//当前播放的歌曲索引 PlayOrder playOrder;//播放顺序 public FrmMain() { InitializeComponent(); } /// <summary> /// 进度条 - 鼠标单击事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void progressBar_MouseClick(object sender, MouseEventArgs e) { if (wmp.playState == WMPLib.WMPPlayState.wmppsStopped || wmp.playState == WMPLib.WMPPlayState.wmppsUndefined) return; double curPo = (double)(e.X) / (double)(pbProgressBar.Width) * wmp.currentMedia.duration; wmp.Ctlcontrols.currentPosition = curPo; pbProgressBar.Value = (int)curPo; } /// <summary> /// 窗体加载事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FrmMain_Load(object sender, EventArgs e) { LoadMusicList(); wmp.settings.autoStart = false; timer1.Enabled = true; pbRewind.BackgroundImage = ilImages.Images["rewind.png"]; pbForward.BackgroundImage = ilImages.Images["forward.png"]; pbPlayOrPause.BackgroundImage = ilImages.Images["play.png"]; pbPlayOrPause.Tag = "play"; wmp.settings.volume = 100; tbVolume.Value = wmp.settings.volume; // ASF, MPEG-1, MPEG-2, WAV, AVI, MIDI, VOD, AU, MP3 ofd.Filter = "MP3|*.MP3|ASF|*.ASF|MPEG-1|*.MPEG-1|MPEG-2|*.MPEG-2|WAV|*.WAV|AVI|*.AVI|MIDI|*.MIDI|VOD|*.VOD|所以文件|*.*"; playOrder = PlayOrder.order; tsmiOrderPlay.Checked = true; } /// <summary> /// 加载歌曲列表 /// </summary> private void LoadMusicList() { if (File.Exists("Config/MusicList.bin")) { FileStream fs = new FileStream("Config/MusicList.bin", FileMode.Open, FileAccess.Read); BinaryFormatter bf = new BinaryFormatter(); musicList = (List<Music>)bf.Deserialize(fs); fs.Close(); foreach (Music music in musicList) { lvMusicList.Items.Add(music.Name); } } else { musicList = new List<Music>(); DirectoryInfo di = new DirectoryInfo("Config"); if (!di.Exists) di.Create(); } } /// <summary> /// 保存歌曲列表 /// </summary> private void SaveMusicList() { FileStream fs = new FileStream("Config/MusicList.bin", FileMode.Create, FileAccess.Write); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(fs, musicList); fs.Close(); } /// <summary> /// 菜单 - 添加歌曲文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsmiAddMusicFile_Click(object sender, EventArgs e) { DialogResult result = ofd.ShowDialog(); if (result == System.Windows.Forms.DialogResult.OK) { for (int i = 0; i < ofd.FileNames.Count(); i ) { string name = ofd.SafeFileNames[i].Substring(0, ofd.SafeFileNames[i].LastIndexOf('.')); string path = ofd.FileNames[i]; musicList.Add(new Music(name,path)); ListViewItem item = new ListViewItem(name); lvMusicList.Items.Add(item); } SaveMusicList(); } } /// <summary> /// 双击歌曲列表 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void lvMusicList_DoubleClick(object sender, EventArgs e) { if (lvMusicList.SelectedItems.Count == 0) return; if(curI > -1) lvMusicList.Items[curI].BackColor = Color.White; curI = lvMusicList.SelectedIndices[0]; lvMusicList.SelectedItems[0].BackColor = Color.Yellow; Play(musicList[curI]); } /// <summary> /// 播放 /// </summary> /// <param name="path"></param> private void Play(Music music) { if (File.Exists(music.Path)) { wmp.URL = music.Path; wmp.Ctlcontrols.play(); pbPlayOrPause.BackgroundImage = ilImages.Images["pause.png"]; pbPlayOrPause.Tag = "pause"; this.Text = "音乐播放器 - " musicList[curI].Name; } else { lvMusicList.Items.RemoveAt(curI); musicList.Remove(music); if (curI < musicList.Count) { Play(musicList[curI]); lvMusicList.Items[curI].BackColor = Color.Yellow; } } } /// <summary> /// 上一首 /// </summary> private void Pgup() { if (musicList.Count == 0 || curI == -1) return; if (playOrder == PlayOrder.random) { RandomPlay(); return; } lvMusicList.Items[curI].BackColor = Color.White; curI--; if (curI < 0) curI = musicList.Count - 1; Play(musicList[curI]); lvMusicList.Items[curI].BackColor = Color.Yellow; this.Text = "音乐播放器 - " musicList[curI].Name; } /// <summary> /// 下一首 /// </summary> private void Pgdn() { if (musicList.Count == 0 || curI == -1) return; if (playOrder == PlayOrder.random) { RandomPlay(); return; } lvMusicList.Items[curI].BackColor = Color.White; curI ; if (curI >= musicList.Count) curI = 0; Play(musicList[curI]); lvMusicList.Items[curI].BackColor = Color.Yellow; this.Text = "音乐播放器 - " musicList[curI].Name; } /// <summary> /// 停止 /// </summary> private void Stop() { this.Text = "音乐播放器 - 小伍软件"; wmp.Ctlcontrols.stop(); pbProgressBar.Value = 0; lblCurValue.Text = "0:0"; lblMaxValue.Text = "0:0"; pbPlayOrPause.BackgroundImage = ilImages.Images["play.png"]; pbPlayOrPause.Tag = "play"; if(lvMusicList.Items.Count > 0 && curI > -1)lvMusicList.Items[curI].BackColor = Color.White; curI = -1; } /// <summary> /// 随机播放 /// </summary> private void RandomPlay() { lvMusicList.Items[curI].BackColor = Color.White; Random random = new Random(); curI = random.Next(musicList.Count); Play(musicList[curI]); lvMusicList.Items[curI].BackColor = Color.Yellow; } /// <summary> /// 时钟事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void timer1_Tick(object sender, EventArgs e) { //当前歌曲播放结束 if (wmp.playState == WMPLib.WMPPlayState.wmppsStopped && curI >= 0) { if (playOrder == PlayOrder.order)//顺序播放 { if (curI < musicList.Count - 1) { Pgdn(); } else { Stop(); } } else if (playOrder == PlayOrder.list)//列表循环 { Pgdn(); } else if (playOrder == PlayOrder.random)//随机播放 { RandomPlay(); } else if(playOrder == PlayOrder.unique)//单曲循环 { wmp.Ctlcontrols.play(); } } //正在播放 if (wmp.playState == WMPLib.WMPPlayState.wmppsPlaying) { int duration = (int)wmp.currentMedia.duration; if (duration > 0) { pbProgressBar.Maximum = (int)wmp.currentMedia.duration; lblMaxValue.Text = wmp.currentMedia.durationString; } lblCurValue.Text = wmp.Ctlcontrols.currentPositionString; pbProgressBar.Value = (int)wmp.Ctlcontrols.currentPosition; } } private void pbRewind_MouseMove(object sender, MouseEventArgs e) { pbRewind.BackgroundImage = ilImages.Images["rewind on.png"]; } private void pbRewind_MouseLeave(object sender, EventArgs e) { pbRewind.BackgroundImage = ilImages.Images["rewind.png"]; } private void pbPlayOrPause_MouseMove(object sender, MouseEventArgs e) { if (pbPlayOrPause.Tag.Equals("play")) { pbPlayOrPause.BackgroundImage = ilImages.Images["play on.png"]; } else { pbPlayOrPause.BackgroundImage = ilImages.Images["pause on.png"]; } } private void pbPlayOrPause_MouseLeave(object sender, EventArgs e) { if (pbPlayOrPause.Tag.Equals("play")) { pbPlayOrPause.BackgroundImage = ilImages.Images["play.png"]; } else { pbPlayOrPause.BackgroundImage = ilImages.Images["pause.png"]; } } private void pbForward_MouseMove(object sender, MouseEventArgs e) { pbForward.BackgroundImage = ilImages.Images["forward on.png"]; } private void pbForward_MouseLeave(object sender, EventArgs e) { pbForward.BackgroundImage = ilImages.Images["forward.png"]; } /// <summary> /// 单击播放or暂停 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void pbPlayOrPause_Click(object sender, EventArgs e) { if (wmp.playState == WMPLib.WMPPlayState.wmppsPlaying) { wmp.Ctlcontrols.pause(); pbPlayOrPause.BackgroundImage = ilImages.Images["play.png"]; pbPlayOrPause.Tag = "play"; } else if(wmp.playState == WMPLib.WMPPlayState.wmppsPaused) { wmp.Ctlcontrols.play(); pbPlayOrPause.BackgroundImage = ilImages.Images["pause.png"]; pbPlayOrPause.Tag = "pause"; } else if (wmp.playState == WMPLib.WMPPlayState.wmppsStopped || wmp.playState == WMPLib.WMPPlayState.wmppsUndefined) { lvMusicList_DoubleClick(sender, e); } } /// <summary> /// 图片按钮 - 上一首 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void pbRewind_Click(object sender, EventArgs e) { Pgup(); } /// <summary> /// 图片按钮 - 下一首 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void pbForward_Click(object sender, EventArgs e) { Pgdn(); } private void tbVolume_Scroll(object sender, EventArgs e) { wmp.settings.volume = tbVolume.Value; } /// <summary> /// 菜单 - 添加歌曲文件夹 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsmiAddMusicDir_Click(object sender, EventArgs e) { DialogResult result = fbd.ShowDialog(); if (result == System.Windows.Forms.DialogResult.OK) { DirectoryInfo di = new DirectoryInfo(fbd.SelectedPath); FileInfo[] files = di.GetFiles(); string filter = ".ASF, .MPEG-1, .MPEG-2, .WAV, .AVI, .MIDI, .VOD, .AU, .MP3"; foreach (FileInfo file in files) { //ASF, MPEG-1, MPEG-2, WAV, AVI, MIDI, VOD, AU, MP3 if (filter.IndexOf(file.Extension) >= 0 || filter.IndexOf(file.Extension.ToUpper()) >= 0) { string name = file.Name.Substring(0, file.Name.LastIndexOf('.')); musicList.Add(new Music(name,file.FullName)); lvMusicList.Items.Add(name); } } SaveMusicList(); } } /// <summary> /// 右键菜单 - 播放 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsmiPlay_Click(object sender, EventArgs e) { lvMusicList_DoubleClick(sender, e); } /// <summary> /// 右键菜单 - 移除 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsmiRemove_Click(object sender, EventArgs e) { if (lvMusicList.SelectedItems.Count == 0) return; DialogResult result = MessageBox.Show("确定要移除选中的项吗?","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Question); if (result == System.Windows.Forms.DialogResult.Cancel) return; int count = lvMusicList.SelectedIndices.Count;//选中的项目数 musicList.RemoveRange(lvMusicList.SelectedIndices[0], count); if (curI > -1 && lvMusicList.SelectedIndices.Contains(curI)) Stop();//当选中的项目包含正在播放的歌曲时,要停止播放 if (curI > lvMusicList.SelectedIndices[count - 1]) curI -= count;//当curI > 选中项目中的最后一项的索引时,curI要减count foreach (ListViewItem item in lvMusicList.SelectedItems) { lvMusicList.Items.Remove(item); } SaveMusicList(); } /// <summary> /// 右键菜单 - 顺序播放 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsmiOrderPlay_Click(object sender, EventArgs e) { playOrder = PlayOrder.order; tsmiOrderPlay.Checked = true; tsmiRandomPlay.Checked = false; tsmiOnePlay.Checked = false; tsmiListPlay.Checked = false; } /// <summary> /// 右键菜单 - 随机播放 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsmiRandomPlay_Click(object sender, EventArgs e) { playOrder = PlayOrder.random; tsmiOrderPlay.Checked = false; tsmiRandomPlay.Checked = true; tsmiOnePlay.Checked = false; tsmiListPlay.Checked = false; } /// <summary> /// 右键菜单 - 单曲循环 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsmiOnePlay_Click(object sender, EventArgs e) { playOrder = PlayOrder.unique; tsmiOrderPlay.Checked = false; tsmiRandomPlay.Checked = false; tsmiOnePlay.Checked = true; tsmiListPlay.Checked = false; } /// <summary> /// 右键菜单 - 列表循环 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsmiListPlay_Click(object sender, EventArgs e) { playOrder = PlayOrder.list; tsmiOrderPlay.Checked = false; tsmiRandomPlay.Checked = false; tsmiOnePlay.Checked = false; tsmiListPlay.Checked = true; } /// <summary> /// 歌曲列表 - 释放某键 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void lvMusicList_KeyUp(object sender, KeyEventArgs e) { if (lvMusicList.SelectedItems.Count == 0) return; if (e.KeyCode == Keys.Delete) { tsmiRemove_Click(sender,e); } } /// <summary> /// 右键菜单 - 清空列表 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsmiClearList_Click(object sender, EventArgs e) { if (lvMusicList.Items.Count == 0) return; DialogResult result = MessageBox.Show("确定要清空播放列表吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); if (result == System.Windows.Forms.DialogResult.Cancel) return; Stop(); lvMusicList.Items.Clear(); musicList.Clear(); SaveMusicList(); } /// <summary> /// 菜单 - 关于 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsmiAbout_Click(object sender, EventArgs e) { FrmAbout fa = new FrmAbout(); fa.ShowDialog(); } } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论