播放器项目 用泛型集合实现 歌词显示功能
Posted 影落明湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了播放器项目 用泛型集合实现 歌词显示功能相关的知识,希望对你有一定的参考价值。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 播放器项目B { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { musicPlayer.Ctlcontrols.play(); } private void button2_Click(object sender, EventArgs e) { musicPlayer.Ctlcontrols.pause(); } private void button3_Click(object sender, EventArgs e) { musicPlayer.Ctlcontrols.stop(); } private void Form1_Load(object sender, EventArgs e) { //在程序加载的时候,取消播放器的自动播放功能 musicPlayer.settings.autoStart = false; musicPlayer.URL = @"";//自定义歌曲的路径 label1.Image = Image.FromFile(@""); } bool b = true;//这个布尔值,用于控制记忆播放位置 private void btnPlayorPause_Click(object sender, EventArgs e) { if(btnPlayorPause.Text =="播放") { if (b) //布尔值判断 { //获得选中的歌曲 让音乐从头播放 musicPlayer.URL = listPath[listBox1.SelectedIndex]; } musicPlayer.Ctlcontrols.play(); btnPlayorPause.Text = "暂停"; IsExistLrc(listPath[listBox1.SelectedIndex]);//歌词显示判断,调用歌词方法 } else if(btnPlayorPause.Text=="暂停") { musicPlayer.Ctlcontrols.pause(); btnPlayorPause.Text = "播放"; b = false; } } //声明一个泛型集合,用来存储音乐文件的全路径 List<string> listPath = new List<string>(); private void button4_Click(object sender, EventArgs e) { //打开对话框,选择音乐 OpenFileDialog ofd = new OpenFileDialog(); ofd.InitialDirectory = @"D:\"; ofd.Filter = "音乐文件|*.wav|MP3文件|*.mp3|所有文件|*.*"; ofd.Title = "请选择音乐文件哦亲(づ ̄3 ̄)づ╭?~"; ofd.Multiselect = true; ofd.ShowDialog(); //获得在文本框中选择文件的全路径 string[] path = ofd.FileNames; for (int i = 0; i < path.Length; i++) { //将音乐文件的全路径存储到泛型集合中 listPath.Add(path[i]); //将音乐文件的文件名存储到ListBox中 listBox1.Items.Add( Path.GetFileName(path[i])); } } 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(); btnPlayorPause.Text = "暂停"; //歌词显示判断,调用歌词方法 IsExistLrc(listPath[listBox1.SelectedIndex]); } catch { } } private void button6_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 button5_Click(object sender, EventArgs e) { //获得当前选中项的索引 int index = listBox1.SelectedIndex; //清空所有选中项的索引 listBox1.SelectedIndices.Clear(); index--; if (index < 0) { index = listBox1.Items.Count-1; } //将改变后的索引重新赋值给当前选中项的索引 listBox1.SelectedIndex = index; musicPlayer.URL = listPath[index]; musicPlayer.Ctlcontrols.play(); } private void 删除ToolStripMenuItem_Click(object sender, EventArgs e) { //点击删除选中项目,listPath中也要删除,listBox1.Item也要删 //先删除集合 int count = listBox1.SelectedItems.Count; for (int i = 0; i < count; i++) { listPath.RemoveAt(listBox1.SelectedIndex); listBox1.Items.RemoveAt(listBox1.SelectedIndex); } } private void label1_Click(object sender, EventArgs e) { //点击放音或静音 if(label1.Tag.ToString()=="1") { //目的:让你静音 musicPlayer.settings.mute = true; //显示静音的图片 label1.Image = Image.FromFile(@"静音.jpg"); label1.Tag = 2; } else if(label1.Tag.ToString()=="2") { musicPlayer.settings.mute = false;//放音 //显示放音的图片 label1.Image = Image.FromFile(@"放音.jpg"); label1.Tag = 1; } } //歌词显示功能 void IsExistLrc(string songPath) { //每次新播放歌词之前必须,清空两个集合的内容 listLrcText.Clear(); listTime.Clear(); songPath += ".lrc";//歌词文件名 if( File.Exists(songPath)) { //读取歌词文件 string[] lrcText = File.ReadAllLines(songPath,Encoding.Default); //格式化歌词 FormatLrc(lrcText); } else { label2.Text = "歌词未找到"; } } //声明集合存储时间 List<double> listTime = new List<double>(); //存储歌词 List<string> listLrcText = new List<string>(); void FormatLrc(string[] lrcText)//格式化歌词 { for (int i = 0; i < lrcText.Length; i++) { //File.ReadAllLines(songPath) //[00:15.57]当我和世界不一样 string[] lrcTemp = lrcText[i].Split(new char[] { ‘[‘, ‘]‘ }, StringSplitOptions.RemoveEmptyEntries); //00:15.57 lrcTemp[0] //当我和世界不一样 lrcTemp[1] string[] lrcNewTemp = lrcTemp[0].Split(new char[] { ‘:‘ }, StringSplitOptions.RemoveEmptyEntries); //00 lrcNewTemp[0] //15.57 lrcNewTemp[1] double time = double.Parse(lrcNewTemp[0]) * 60 + double.Parse(lrcNewTemp[1]); //截取出来的歌词时间加入泛型集合中 listTime.Add(time); //截取出来的歌词加入泛型集合中 listLrcText.Add(lrcTemp[1]); } } private void timer1_Tick(object sender, EventArgs e)//判断自动下一曲 { //如果播放器的状态==正在播放中 if(musicPlayer.playState==WMPLib.WMPPlayState.wmppsPlaying) { lblInformation.Text = musicPlayer.currentMedia.duration.ToString() + "\r\n" + musicPlayer.currentMedia.durationString + "\r\n" + musicPlayer.Ctlcontrols.currentPosition.ToString() + "\r\n" + musicPlayer.Ctlcontrols.currentPositionString; // lblInformation.Text = musicPlayer.currentMedia.duration.ToString() + "\r\n" + musicPlayer.currentMedia.durationString + "\r\n" + musicPlayer.Ctlcontrols.currentPosition.ToString() + "\r\n" + musicPlayer.Ctlcontrols.currentPositionString; double d1 = double.Parse(musicPlayer.currentMedia.duration.ToString());//总时间 double d2 = double.Parse(musicPlayer.Ctlcontrols.currentPosition.ToString())+1;//当前时间 //if (musicPlayer.currentMedia.durationString == musicPlayer.Ctlcontrols.currentPositionString) if(d1<= d2) { //获得当前选中项的索引 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 timer2_Tick(object sender, EventArgs e)//歌词显示 { for (int i = 0; i < listTime.Count; i++) { if (musicPlayer.Ctlcontrols.currentPosition >= listTime[i] && musicPlayer.Ctlcontrols.currentPosition < listTime[i+1]) { label2.Text = listLrcText[i]; } } } private void button7_Click(object sender, EventArgs e) { musicPlayer.settings.volume += 5;//音量+ } private void button8_Click(object sender, EventArgs e) { musicPlayer.settings.volume -= 5;//音量- } } }
以上是关于播放器项目 用泛型集合实现 歌词显示功能的主要内容,如果未能解决你的问题,请参考以下文章