实例介绍
【实例简介】
【实例截图】
【核心代码】
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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论