写点什么

听音乐不过瘾?自制一个音乐播放器!,java 程序设计基础知识点第七章

用户头像
极客good
关注
发布于: 刚刚

//设置播放或者暂停按钮属性


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();


li


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


stlrcText.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);


}


else


{


label_lyric.Text = "未找到歌词......";


}


}


[](


)歌词格式化函数


==========================================================================


很多小伙伴可能不知道,起始看到的歌词都是进行过特殊处理的,真正的歌词文件并不是只有歌词的,它还包括每一句歌词应该播放的时间。


如下所示:



所以我们在显示歌词的时候,就需要对歌词文件进行特殊化处理,让真正显示出来的只有歌词,这里就需要我们对每一句歌词文件进行分割,将获取到的播放时间和歌词,分别存放到对应的列表汇总去。


具体的实现代码如下:


//定义存储歌词时间的列表


List<double> listlrcTime = new List<double>();


//定义存放歌词的列表


List<string> listlrcText = new List<string>();


//定义存储歌词时间的列表


List<double> listlrcTime = new List<double>();


//定义存放歌词的列表


List<string> listlrcText = new List<string>();


//对歌词进行标准格式化函数


void formatlrc(string [] lrcText)


{


for (int i = 0; i < lrcText.Length; i++)


{


//去掉歌词每一行前后的[、]


string[] lrcTemp = lrcText[i].Split(new char[] { '[', ']'}, StringSplitOptions.RemoveEmptyEntries);


//返回的数组中 lrcTemp[0]是时间, 格式为 00:00.00

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
听音乐不过瘾?自制一个音乐播放器!,java程序设计基础知识点第七章