黑马程序员-音乐播放器
来源:互联网 发布:手机直播源码 编辑:程序博客网 时间:2024/06/10 21:29
以MediaPlayer为播放器核心,自己动手写一个简易版的音乐播放器
首先需要添加MediaPlayer,步骤如下:
新建一个WinForm应用程序
在工具箱中找到“菜单和工具栏”
->右键
->选择项
->COM组件
->WindowsMediaPlayer
->添加到工具箱
添加到工具箱之后我们就要先将MediaPlayer拖入窗口中,然后看一下都有些什么属性
控制播放歌曲:<axWindowsMediaPlayer>.URL将歌曲的全路径名放到URL中
控制是否自动播放:<axWindowsMediaPlayer>.setting.autoStart
控制播放、暂停和停止
<axWindowsMediaPlayer>.Ctlcontrol.player();播放
<axWindowsMediaPlayer>Ctlcontrol.pause();暂停
<axWindowsMediaPlayer>Ctlcontrol.stop();停止
WindowsMediaPlayer.Ctlcontrols.currentPositionString音乐播放当前时间的00:00显示形式
WindowsMediaPlayer.Ctlcontrols.currentPosition音乐播放当前时间的详细时间,单位为秒。详细的double类型
WindowsMediaPlayer.currentMedia.durationString播放的音乐的总时间00:00形式
WindowsMediaPlayer.currentMedia.duration播放的音乐的总时间,以秒的形式表现,double类型
然后就可以开始编码了
首先,我们需了解播放器的原理我们写的过程中需要一步一步调试,所以需要关闭自动播放的功能
在Form的Load事件中添加代码:
axPlayer.settings.autoStart = false;
在界面上添加播放、静音、停止按钮对它们添加Click事件。事件中关键代码为:
axPlayer.Ctlcontrols.play();//播放
axPlayer.Ctlcontrols.pause();//暂停
axPlayer.settings.mute = true;//静音
axPlayer.Ctlcontrols.stop();//停止
然后添加一个打开按钮
在类内方法外定义一个集合,存储音乐文件列表
List<string> lsongs = new List<string>();
然后添加按钮的Click事件:
OpenFileDialog ofd = new OpenFileDialog();生成一个OpenFileDialog对象,然后对其属性进行设置,关键的地方就是要实现集合lsongs中的数据要和listsongplayer中的数据保持一致
for (int i = 0; i <ofd.FileNames.Length; i++)
{
lsongs.Add(ofd.FileNames[i]);
string[] temp = ofd.FileNames[i].Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries);
listsongplayer.Items.Add(temp[temp.Length - 1]);
}
之后调用歌曲的播放方法,实现歌曲的播放
实现上一曲和下一曲功能
这两个功能其实是一样的,只是方法中比较的数字不同罢了
下一曲;if (listsongplayer.Items.Count>0)
{
MyPlay(index > (lsongs.Count- 1) ? 0 : index);
}
上一曲:if (listsongplayer.Items.Count>0)
{
MyPlay(listsongplayer.SelectedIndex - 1 < 0 ? lsongs.Count - 1 :--listsongplayer.SelectedIndex);
}
双击列表中的歌曲名称播放
添加ListBox的MouseDoubleClick事件
MyPlay(listsongplayer.SelectedIndex);
删除选中项
这个需要实现lsongs集合和listBox中的数据同步,删除的时候都要删除
if (listsongplayer.SelectedIndex!=-1)
{
lsongs.RemoveAt(listsongplayer.SelectedIndex);
listsongplayer.Items.RemoveAt(listsongplayer.SelectedIndex);
}
清空列表的时候也是需要两个地方都清空
if (listsongplayer.SelectedIndex!=-1)
{
lsongs.Clear();
listsongplayer.Items.Clear();
}
音量的控制
axPlayer.settings.volume,通过这个属性,就可以控制音量的大小,然后实现音量+和音量-按钮的Click事件
能熟练的掌握整体音乐播放器的播放,自动播放下一曲完成上一曲和下一曲的操作等等都需要多MediaPlayer播放歌曲的过程有很深的了解
这张图上面的两张小图充分表明了MediaPlayer在播放一首歌的时候的执行过程,同时我们看到了,当我们需要自动切换的时候,也只能等到MediaEnded状态之后
总体来说,这一个题目的难点就在于对歌词的处理上
完成对歌词的处理,需要的定义连个方法,第一个方法InLrc(),这个方法导入歌词,然后又ForMatLrc()方法来完成对歌词的格式化
private void InLrc(string pathSong)
{
pathSong = pathSong + ".lrc";//歌词文件就是音乐文件名+”.lrc”
if (System.IO.File.Exists(pathSong))//当文件存在时
{
songLrc = System.IO.File.ReadAllLines(pathSong);//全部读取
ForMatLrc(songLrc);//调用ForMatLrc方法
}
else
{
songLrc = null;//文件不存在歌词将为空
}
}
private void ForMatLrc(string[] Lrc)
{
List<string> lrcAfter = new List<string>();
for (int i = 0; i <Lrc.Length; i++)
{
string lrcTemp = Lrc[i];
string[] tempTemp = lrcTemp.Split(new char[] { '[', ']' }, StringSplitOptions.RemoveEmptyEntries);//去掉时间两边的'[', ']'
int a = tempTemp.Length;
for (int j = 0; j < tempTemp.Length; j++)
{
if (tempTemp[j].Contains(':'))
{
if(isTime(tempTemp[tempTemp.Length-1]))
{
continue;
}
else if (tempTemp[j] ==tempTemp[tempTemp.Length - 1])
{
continue;
}
else
{
lrcAfter.Add(tempTemp[j] + "|" + tempTemp[tempTemp.Length - 1]);
}
}
}
lrcAfter.Sort();//对集合进行排序
songLrc = lrcAfter.ToArray();//将集合转化为字符串数组
}
}
到这里,自己动手写的音乐播放器就没有什么难点了,只要自己细心,认真的去编码。将会自己完成播放器的编写工作的
- 黑马程序员-音乐播放器
- 黑马程序员-音乐播放器
- 黑马程序员_音乐(视频)播放器学习
- android音乐播放器播放音乐卡
- Android 音乐播放 类似音乐播放器
- 黑马程序员-android视频播放器
- flash音乐播放器
- 常见音乐播放器
- WEB音乐播放器
- Google 音乐播放器
- 单片机音乐播放器
- 简易音乐播放器
- 网页音乐播放器
- 音乐定时播放器
- android 音乐播放器
- 音乐播放器代码
- 音乐播放器01
- 个人音乐播放器
- 草根破解中国经济难题
- 雅思底层之四:Speaking的准备
- maven中的snapshot来源与注意事项
- poj2079 Triangle
- Java高新技术第三篇:注解的使用
- 黑马程序员-音乐播放器
- mysql安装版与免安装版的介绍
- poj2362
- 安装GCC编译器
- 机器学习课程成绩单
- centos 无线网卡配置
- echo 命令
- Ch4-1: identify if a tree is "balanced" (注:CTCI 第四版和第五版的定义不一样)
- 各种桑心哇