===============================================================================
在添加好音乐之后,我们当然需要对音乐进行播放,在这里我们需要设置当双击音乐文件后,可以在musicplayer播放器中进行播放。
该函数需要注意的地方是: 我们需要对存放音乐文件的列表进行判断,如果音乐列表为零,也就是说当前并没有可以播放的音乐的时候,我们需要对用户进行提示。同时在我们双击播放音乐之后,我们先前设置的播放音乐的控件,此刻应该显示的是暂停选项。
实现代码如下:
//双击音乐触发播放属性
private void listBox1_DoubleClick(object sender, EventArgs e)
{
if (listBox1.Items.Count == 0)
{
MessageBox.Show(“请先选择播放音乐!”);
return;
}
try
{
musicPlayer.URL = listpath[listBox1.SelectedIndex];
musicPlayer.Ctlcontrols.play();
playorpause.Text = “暂停”;
//timer1_Tick_1(sender, e);
//music_plan.Text = musicPlayer.currentMedia.duration.ToString();
//调用函数去处理这个路径下的这首歌的歌词
IsExistlrc(listpath[listBox1.SelectedIndex]);
}
catch
{ }
}
==============================================================================
该控件函数的作用,顾名思义,当然就是控制音乐的播放和暂停,同时需要注意的地方是,当我们点击音乐播放的时候,应该让音乐继续之前的播放,而不是重新开始。同时在我们点击播放或者暂停按钮之后,该控件应该有对应的显示。
实现代码如下:
//设置播放或者暂停按钮属性
private void playorpause_Click(object sender, EventArgs e)
{
if (playorpause.Text == “播放”)
{
//来个异常,防止列表没有音乐
try
{
//如果继续单击播放,那就让他接着放
if (b)
{
musicPlayer.URL = listpath[listBox1.SelectedIndex];
}
}
catch
{ }
musicPlayer.Ctlcontrols.play();
playorpause.Text = “暂停”;
}
else if (playorpause.Text == “暂停”)
{
musicPlayer.Ctlcontrols.pause();
playorpause.Text = “播放”;
b = false;
}
}
===========================================================================
该函数的作用是:当用户点击停止之后,当前正在播放的音乐停止并且回到最初位置。
实现代码如下:
//设置停止控件属性
private void button3_Click(object sender, EventArgs e)
{
musicPlayer.Ctlcontrols.stop();
playorpause.Text = “播放”;
}
.
============================================================================
该函数的作用是:当我们点击下一曲的时候,可以根据当前播放的音乐列表,播放列表中的下一首歌曲。
实现代码如下:
//点击下一曲
private void music_down_Click(object sender, EventArgs e)
{
//获取当前歌曲索引位置
int index = listBox1.SelectedIndex;
//清空歌曲选择索引
listBox1.SelectedIndices.Clear();
index++;
if (index == listBox1.Items.Count)
{
index = 0;
}
listBox1.SelectedIndex = index;
musicPlayer.URL = listpath[index];
musicPlayer.Ctlcontrols.play();
}
============================================================================
该函数的作用是:当我们点击上一曲的时候,可以根据当前播放的音乐列表,播放列表中的上一首歌曲。
实现代码如下:
//点击上一曲
private void music_up_Click(object sender, EventArgs e)
{
int index = listBox1.SelectedIndex;
listBox1.SelectedIndices.Clear();
index–;
//如果此时是第一首歌曲,则索引减一为-1
if (index == -1)
{
//listBox1.Items.Count记录的是歌曲数目,
//如果跳转到最后一首,索引是数目减一
index = listBox1.Items.Count - 1;
}
listBox1.SelectedIndex = index;
musicPlayer.URL = listpath[index];
musicPlayer.Ctlcontrols.play();
}
=========================================================================
该函数是将我们已经存放到音乐列表中的音乐进行删除,当我们单击选择某一首音乐后,可以将其从列表中删除。并且不会在自动播放时播放该音乐。
实现代码如下:
//点击删除
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
{
//获取已经选中歌曲的数量
int count = listBox1.SelectedItems.Count;
//删除列表中的选中项
for (int i = 0; i < count; i++)
{
//首先删除集合中的歌曲
listpath.RemoveAt(listBox1.SelectedIndex);
//再删除存放在列表里的歌曲
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
}
}
=========================================================================
点击静音函数的作用是在我们点击之后,音乐静音,但此时的音乐仍然可以继续播放,该徐行与播放器的settings.mute函数有关。
该函数的实现思路是:我们需要对当前音乐是否静音进行一个设定,由于Text静音控件的文本永远都是不变的,所以我们需要借助该控件下的Tag属性进行赋值判断,
具体实现代码如下:
//点击静音函数
private void label1_Click(object sender, EventArgs e)
{
if (label1.Tag.ToString() == “1”)
{
musicPlayer.settings.mute = true;
//label1.Image = Image.FromFile(@“C:/Users/郭运刚/Pictures/320578.png”);
label1.Tag = “2”;
}
else if (label1.Tag.ToString() == “2”)
{
musicPlayer.settings.mute = false;
//label1.Image = Image.FromFile(@“C:/Users/郭运刚/Pictures/Saved Pictures/322557.png”);
label1.Tag = “1”;
}
}
===========================================================================
该函数需要我们在添加时间控件之后,与时间监控控件绑定使用,该函数的作用是实时的对播放的音乐进行监控,并且返回当前的播放时间,
具体实现代码如下:
//时间监控控件1
private void timer1_Tick_1(object sender, EventArgs e)
{
//music_plan.Text = “测试”;
//如果播放器的状态是正在播放中
if (musicPlayer.playState == WMPLib.WMPPlayState.wmppsPlaying)
{
//music_plan.Text = “播放”;
music_plan.Text = musicPlayer.currentMedia.duration.ToString() + “\r\n” + musicPlayer.currentMedia.durationString + “\r\n” + musicPlayer.Ctlcontrols.currentPosition.ToString() + “\r\n” + musicPlayer.Ctlcontrols.currentPositionString;
double t1 = double.Parse(musicPlayer.currentMedia.duration.ToString());
double t2 = double.Parse(musicPlayer.Ctlcontrols.currentPosition.ToString()) + 1;
if ( t1 <= t2)
{
//获取当前歌曲索引位置
int index = listBox1.SelectedIndex;
//清空歌曲选择索引
listBox1.SelectedIndices.Clear();
index++;
if (index == listBox1.Items.Count)
{
index = 0;
}
listBox1.SelectedIndex = index;
musicPlayer.URL = listpath[index];
musicPlayer.Ctlcontrols.play();
}
}
}
=============================================================================
了解音乐文件的小伙伴可能都知道,每一首音乐的歌词和音乐文件是相互独立的,通常情况下是音乐文件的文件名后加.lrc为其所对应的歌词文件,所以当我们播放一首歌曲的时候,就需要我们对该歌曲的歌词文件进行判断,判断当前播放的音乐是否具有歌词文件。
如果有,则进行歌词标准化和歌词播放函数,如果没有,当然需要对用户进行相应的提示“未找到歌词”
实现代码如下:
//判断歌词是否存在
void IsExistlrc(string songPath)
{
//每次制作歌词前先清空存放时间和歌词的列表
listlrcTime.Clear();
listlrcText.Clear();
songPath += “.lrc”;
//MessageBox.Show(songPath);
bool fileIn = File.Exists(songPath);
if (fileIn)
{
//label_lyric.Text = “即将播放歌词”;
//定义一个存放歌词的列表,获取到歌词文件中的内容
string[] lrcText = File.ReadAllLines(songPath, Encoding.Default);
//如果歌词存在,则调用函数formatlrc格式化歌词
formatlrc(lrcText);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/46d8195e4e9c9876968e80e279b6ace3.jpeg)
结语
小编也是很有感触,如果一直都是在中小公司,没有接触过大型的互联网架构设计的话,只靠自己看书去提升可能一辈子都很难达到高级架构师的技术和认知高度。向厉害的人去学习是最有效减少时间摸索、精力浪费的方式。
我们选择的这个行业就一直要持续的学习,又很吃青春饭。
虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。
送给每一位想学习Java小伙伴,用来提升自己。
本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
助,可以扫码获取!!(备注Java获取)**
![img](https://img-blog.csdnimg.cn/img_convert/46d8195e4e9c9876968e80e279b6ace3.jpeg)
结语
小编也是很有感触,如果一直都是在中小公司,没有接触过大型的互联网架构设计的话,只靠自己看书去提升可能一辈子都很难达到高级架构师的技术和认知高度。向厉害的人去学习是最有效减少时间摸索、精力浪费的方式。
我们选择的这个行业就一直要持续的学习,又很吃青春饭。
虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。
送给每一位想学习Java小伙伴,用来提升自己。
[外链图片转存中…(img-u9Fp2uuC-1712879657131)]
本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!