音乐播放器---歌词显示逻辑篇

  1. 打开对话框,选中歌曲,将歌曲名添加到listBox框中音乐播放器---歌词显示逻辑篇_第1张图片

 

2.通过切割歌曲的路径,可以找到相同路径下歌词的文件(.lrc)

以下代码是1和2的整体代码

  private void btnOpen_Click(object sender, EventArgs e)    //打开按钮的功能
        {
            //通过这个类我们打开文件
            OpenFileDialog ofd = new OpenFileDialog();

            //可以多选
            ofd.Multiselect = true;
            //设置选择什么样的文件
            ofd.Title = "请选择音乐文件";
            //设置初始的目录
            ofd.InitialDirectory = @"C:\Users\李晨璐\Music";
            //设置显示文件的类型
            ofd.Filter = "(*.mp3)|*.mp3";

            //如果点了对话框的确定按钮
            if(ofd.ShowDialog()==System.Windows.Forms.DialogResult.OK)
            {
                //获取选中的所有的歌曲的路径
                string[] fileNames = ofd.FileNames;
                for(int i=0;i

  3. 将歌词文件中的内容进行切割成以下的格式

 

音乐播放器---歌词显示逻辑篇_第2张图片

 private List FormatLrc()     //切割歌词,歌词排序
        {
            //定义一个集合用来存处理好的歌词
            List list = new List();
            //遍历存未切割好的歌词
            for (int i = 0; i < listSongLrc.Count; i++)
            {
                //把每一句歌词都要切割
                string[] lrc =listSongLrc[i].Split(new char[] { '[',']' }, StringSplitOptions.RemoveEmptyEntries);
                //判断切割好的内容的长度是否大于1看看这个时间后面是否有歌词
                if(lrc.Length>1)
                {
                    //如果大于1证明有时间也有歌词
                    for (int j = 0; j < lrc.Length-1; j++)
                    {
                        //把歌词和时间全部存到这个集合中去,不排除有好几段时间,分割好了,
                        list.Add(lrc[j] + "|" + lrc[lrc.Length - 1]);
                    }
                }
            }

4.根据“|”左边的时间和当前音乐播放时间判断,可以算出一句歌词需要在哪个时间段播放,在显示出相应的歌词,就可以了(“|”右边)

 private void timer1_Tick(object sender, EventArgs e)    //音乐播放时间,名称,显示歌词
        {
            //判断歌名是否为空
            if (axWindowsMediaPlayer1.currentMedia != null)
            {
                //显示音乐播放时间
                labTime.Text = axWindowsMediaPlayer1.Ctlcontrols.currentPositionString;
                //显示音乐播放名称
                labMusicName.Text = axWindowsMediaPlayer1.currentMedia.name;
                //显示歌词
                //上一句歌词播放时间 当前歌曲播放时间  下一句歌词播放的时间
                //(有歌词)
                if (listSongLrc.Count>0&&axWindowsMediaPlayer1.currentMedia!=null)
                {
                    //获得当前歌曲播放的时间
                    string time = axWindowsMediaPlayer1.Ctlcontrols.currentPositionString;
                    //遍历歌词
                    for (int i = 0; i < listSongLrc.Count-1; i++)
                    {
                        //上一句歌词播放时间<当前时间 and 当前时间<下一句歌词播放的时间
                        if (string.Compare(listSongLrc[i], time)<0&&string.Compare(time, listSongLrc[i+1])<0)
                        {

                            labSong.Text = listSongLrc[i].Split('|')[1];
                        }

                    }
                }


            }
        }

以上就是基本的逻辑和代码展示

你可能感兴趣的:(C#)