c#窗体应用实现简单音乐播放器
1.使用工具与平台
语言:C#
工具(IDE):VS2017
应用类型:窗体应用
2.功能介绍
1.添加音乐
从本地文件中夹中过滤出mp3格式的文件,添加至播放列表中
2.播放、暂停、上下首切换
能够完成歌曲的播放、暂停、停止和上一首下一首的切换。在到达歌曲列表末尾的时候会自动切换到列表第一首开始播放。
3.音乐播放进度的显示(进度条)
设置进度条观察音乐的播放进度,可以随意拖动进度条让其在任意时刻播放。
3.播放器展示
4.功能代码展示
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.IO;
using WMPLib;
namespace MusicPlayer
{
public partial class Form1 : Form
{
//声明一个list,用来存储文件的路径
List<string> urlList = new List<string>();//泛型
double max, min;
private Color yellow;
public Form1()
{
InitializeComponent();
}
//添加歌曲
private void btnInput_Click(object sender, EventArgs e)
{
//实例化一个打开文件的对话框
OpenFileDialog of = new OpenFileDialog();
//让选择器可以多选文件
of.Multiselect = true;
of.Title = "请选择音乐文件";
//指定文件的类型
of.Filter = "(*.mp3)|*.mp3";
//of.ShowDialog();
//确认用户选择的是确定按钮
if (of.ShowDialog() == DialogResult.OK)
{
//把用户选择的数据存储到数组中
string[] nameList = of.FileNames;
//读取数组中的数据
foreach(string url in nameList)
{
//Path.GetFileNameWithoutExtension(url)获取不具有扩展名的文件
listBoxMusics.Items.Add(Path.GetFileNameWithoutExtension(url));
urlList.Add(url);
}
}
}
//播放
private void btnPlay_Click(object sender, EventArgs e)
{
//声明变量
int selectIndexList = listBoxMusics.SelectedIndex;
if (selectIndexList < 0)
{
//判断列表中是否有选中的歌曲,有的话播放选中的,没有就播放第一首
selectIndexList = selectIndexList < 0 ? 0 : selectIndexList;
//更新选中行 重新设置当前索引
listBoxMusics.SelectedIndex = selectIndexList;
//把urlList中存储的url地址赋给播放器控件
axWindowsMediaPlayer1.URL = urlList[selectIndexList];
lbMusicName.Text = listBoxMusics.SelectedItem.ToString();
}else
{
axWindowsMediaPlayer1.Ctlcontrols.play();
}
timer1.Enabled = true;
}
//暂停
private void btnPause_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.pause();
}
//停止
private void btnStop_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.stop();
//停止后禁用进度条
timer1.Enabled = false;
}
//上一首
private void btnLast_Click(object sender, EventArgs e)
{
//LIstBox中的索引和URLList中的索引相对应
//获取当前选中歌曲的索引
int selectIndexList = listBoxMusics.SelectedIndex -1;
selectIndexList = selectIndexList < 0 ? 0 : selectIndexList;//三目运算符
//更新选中行 重新设置当前索引
listBoxMusics.SelectedIndex = selectIndexList;
//把urlList中存储的url地址赋给播放器控件
axWindowsMediaPlayer1.URL = urlList[selectIndexList];
lbMusicName.Text = listBoxMusics.SelectedItem.ToString();
}
//下一首
private void btnNext_Click(object sender, EventArgs e)
{
//LIstBox中的索引和URLList中的索引相对应
//获取当前选中歌曲的索引
int selectIndexList = listBoxMusics.SelectedIndex + 1;
selectIndexList = selectIndexList == listBoxMusics.Items.Count ? listBoxMusics.SelectedIndex : selectIndexList;//三目运算符
//更新选中行 重新设置当前索引
listBoxMusics.SelectedIndex = selectIndexList;
//把urlList中存储的url地址赋给播放器控件
axWindowsMediaPlayer1.URL = urlList[selectIndexList];
lbMusicName.Text = listBoxMusics.SelectedItem.ToString();
}
//列表选择发生变化时播放选择的歌曲
private void listBoxMusics_SelectedIndexChanged(object sender, EventArgs e)
{
//LIstBox中的索引和URLList中的索引相对应
//获取当前选中歌曲的索引
int selectIndexList = listBoxMusics.SelectedIndex;
//把urlList中存储的url地址赋给播放器控件
axWindowsMediaPlayer1.URL = urlList[selectIndexList];
lbMusicName.Text = listBoxMusics.SelectedItem.ToString();
timer1.Enabled = true;
}
//
private void timer1_Tick(object sender, EventArgs e)
{
//获取文件的时间长度
max = axWindowsMediaPlayer1.currentMedia.duration;
//获取当前歌曲的播放位置
min = axWindowsMediaPlayer1.Ctlcontrols.currentPosition;
//类型强制转换
trackBar1.Maximum = (int)(max);
trackBar1.Value = (int)(min);
//一首播放完成后继续下一首
if(axWindowsMediaPlayer1.playState == WMPPlayState.wmppsStopped )
{
//当前歌曲结束播放后获取下一首歌曲的索引值
int selectIndex = listBoxMusics.SelectedIndex + 1;
selectIndex = selectIndex == listBoxMusics.Items.Count ? 0: selectIndex;//三目运算符
axWindowsMediaPlayer1.URL = urlList[selectIndex];
listBoxMusics.SelectedIndex = selectIndex;
lbMusicName.Text = listBoxMusics.SelectedItem.ToString();
lbMusicName.BackColor = yellow;
trackBar1.Value = 0;
trackBar1.Enabled = true;
}
}
//鼠标拖动进度条时间
//鼠标按下
private void trackBar1_MouseDown(object sender, MouseEventArgs e)
{
//暂停播放
timer1.Enabled = false;
axWindowsMediaPlayer1.Ctlcontrols.pause();
}
//鼠标抬起
private void trackBar1_MouseUp(object sender, MouseEventArgs e)
{
//获取被拖动以后的位置
double doValue = trackBar1.Value;
axWindowsMediaPlayer1.Ctlcontrols.currentPosition = doValue;//重置播放位置
axWindowsMediaPlayer1.Ctlcontrols.play();
timer1.Enabled = true;
}
}
}