Hello大家好,我是雷工!
本篇记录Winform音频播放器的制作过程。
一、开发运行环境
1、系统开发平台:Visual Studio 2022。
2、系统开发语言:C#。
二、功能说明及效果演示
1、该音频播放器可以通过音频列表,显示可播放的音频名称,通过列表框下的添加、删除按钮可以向列表中增添和移除音频;
2、通过选中列表中的单个音频名称,点击【播放】按钮,可以播放选中的音频,点击【暂停】按钮,可以暂停播放的音频;通过【继续】按钮可以继续播放音频,通过【上一首】【下一首】可以按列表顺序上下切换播放的音频;
3、具备简单的模式选择功能,通过点击【日间模式】按钮可以将界面主颜色改为浅色调,点击【夜间模式】可将主界面调为黑色;
4、具备进度条显示功能,可以显示视频播放的进度;
5、【播放】按钮功能效果演示
6、【暂停】【继续】按钮功能演示
7、【上一首】【下一首】按钮功能演示
8、模式切换功能演示
三、界面设计
1、添加Button控件:布置功能按钮,【播放】【暂停】【继续】【上一首】【下一首】【添加】【删除】【日间模式】【夜间模式】。
2、添加Label控件:显示文本标签:“音乐列表”
3、添加listBox控件:
用于显示音乐名称列表
4、添加Windows Media Player控件:
在使用Windows Media Player控件进行程序开发前,需要先将其添加到工具箱中,以下为添加步骤。
4.1、选择工具箱,在工具箱的任意位置单击鼠标右键,在弹出的快捷菜单中选择“选择项”。
4.2、在弹出的“选择工具箱项”对话框中选择“COM组件”选项卡,在COM组件列表中找到名称为“Windows Media Player”的组件,然后单击【确定】按钮。
在添加Windows Media Player控件时遇到个小插曲,点完【确定】按钮,在工具箱中依然找不到Windows Media Player控件,有同样问题的小伙伴可以参考上篇《添加控件后工具箱不显示是什么原因》。
4.3、想实现自定义按钮进度条,可以在WindowsMediaPlayer上右击,选择【属性】,在弹出的界面中的控件布局选择模式【None】。
4.4、不显示工具栏,需要增加一句代码
axWindowsMediaPlayer1.uiMode="none";
5、添加timer控件:在【工具箱】—>【timer】控件拖到设计界面上。
6、添加Panel控件:在【容器】选择【Panel】控件添加到设计界面,通过复制粘贴添加两个,用于实现进度条功能。
四、添加本地资源
1、在项目上右击—>【添加】—>【新建文件夹】—>命名为【leigong音频】。
2、在新建的文件夹上右击—>选择【在文件资源管理器中打开文件夹】。
3、将要播放的音频复制到新建的文件夹下。
4、点击【显示所有文件】按钮,可以看到添加到文件夹内的音频文件。
5、选中添加的音频,然后右击选择【包在项目中】。
6、此时在添加音频的属性会有一个【复制到输出目录】
【不复制】表示不会复制输出到bin文件夹。
【始终复制】表示始终会复制输出到bin文件夹。此处选择该项。
五、代码实现与分析
1、加载本地文件夹中的音频
主要代码如下:
/// <summary>
/// 当前的播放列表
/// </summary>
public static List<string> list = new List<string>();
/// <summary>
/// 当前的文件路径
/// </summary>
public static string path = Application.StartupPath + "/Leigong音频/";
public void LoadLocalHostMusic()
{
//每次加载之前清空原来的值
list = new List<string>();
this.listBox1.Items.Clear();
//判断文件路径是否存在
if(!Directory.Exists(path))
{
//不存在则创建文件夹
Directory.CreateDirectory(path);
}
//读取该文件夹下的所有文件
foreach(var item in Directory.GetFiles(path))
{
var temp = item.Split('/');
list.Add(temp[temp.Length-1]);
}
this.listBox1.Items.AddRange(list.ToArray());
}
private void Form1_Load(object sender, EventArgs e)
{
LoadLocalHostMusic();
}
2、播放按钮功能
主要代码:
private void button1_Click(object sender, EventArgs e)
{
//获取当前音乐列表中选中的歌曲
if(this.listBox1.SelectedIndex==-1)
{
MessageBox.Show("请选择要播放的音频!");
}
else
{
axWindowsMediaPlayer1.URL = path + list[this.listBox1.SelectedIndex];
}
}
3、暂停按钮功能
主要代码:
private void button2_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.pause();
}
4、继续按钮功能
主要代码:
private void button3_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.play();
}
5、上一首按钮功能
主要代码:
private void button4_Click(object sender, EventArgs e)
{
if(this.listBox1.SelectedIndex==-1)
{
MessageBox.Show("请选择一首歌!");
}
else
{
//try...catch异常捕捉机制
try
{
this.listBox1.SelectedIndex--;
//如果减减运算符得出了-1,那么-1传入List则报异常,因为下标从0开始
axWindowsMediaPlayer1.URL = path + list[this.listBox1.SelectedIndex];
}
catch
{
MessageBox.Show("这已经是第一首了");
this.listBox1.SelectedIndex = 0;
}
}
}
6、下一首按钮功能
主要代码:
private void button5_Click(object sender, EventArgs e)
{
if(this.listBox1.SelectedIndex==-1)
{
MessageBox.Show("请选择一个音频!");
}
else
{
try
{
this.listBox1.SelectedIndex++;
}
catch(Exception)
{
this.listBox1.SelectedIndex = 0;
}
axWindowsMediaPlayer1.URL = path + list[this.listBox1.SelectedIndex];
}
7、通过计时器实现进度条功能
主要代码:
private void timer1_Tick(object sender, EventArgs e)
{
//只有是播放状态时,才更新进度
if((int)axWindowsMediaPlayer1.playState==3)
{
this.panel2.BackColor = Color.LightGreen;
//当前进度
double current = axWindowsMediaPlayer1.Ctlcontrols.currentPosition;
//总长度
double All = axWindowsMediaPlayer1.currentMedia.duration;
//播放百分比
double flag = current / All;
int widths = (int)(flag * 438);
panel2.Size = new Size(widths, 27);
}
}
8、添加音乐到播放列表功能
主要代码:
private void button6_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
//设置打开对话框的初始目录,默认目录为exe运行文件所在的路径
ofd.InitialDirectory = Application.StartupPath;
//设置打开对话框的标题
ofd.Title = "[请选择要打开的文件]";
//设置打开对话框只能单选
ofd.Multiselect = false;
//设置对话框打开的文件类型
ofd.Filter = "图片文件|*.jpg|所有文件|*.*";
//设置文件对话框当前选定的筛选器的索引
ofd.FilterIndex = 2;
//设置对话框是否记忆之前打开的目录
ofd.RestoreDirectory = true;
if(ofd.ShowDialog()==DialogResult.OK)
{
//获取用户选择的文件的完整路径,然后copy文件
File.Copy(ofd.FileName, path + ofd.SafeFileName, true);
//copy完成之后重新加载列表
LoadLocalHostMusic();
}
}
9、从列表中删除选中的音频
主要代码:
private void button7_Click(object sender, EventArgs e)
{
if(this.listBox1.SelectedIndex==-1)
{
MessageBox.Show("请选择要删除的音频!");
}
else
{
string currpath = path + list[this.listBox1.SelectedIndex];
//删除文件
File.Delete(currpath);
//重新加载列表
LoadLocalHostMusic();
}
}
10、模式切换
模式切换是通过改变窗体的背景色实现的。
主要代码:
#region 模式切换
private void button8_Click(object sender, EventArgs e)
{
this.BackColor = Color.SkyBlue;
}
private void button9_Click(object sender, EventArgs e)
{
this.BackColor = Color.Black;
}
#endregion
后记
以上为学习Winform音频播放器的制作的记录,有兴趣的同学可以参考练习。