---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
1.本节主要学习了音乐播放器的简单制作,在此篇中主要介绍用到的知识点和重要的思路代码
首先,播放器的控件使用的是windows自带的player组件
2.视频的播放、暂停直接调用组件的相应方法即可,对应的播放代码如下:
/// <summary>
/// 播放
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPlay_Click(object sender, EventArgs e)
{
if (btnPlay.Text == "播放")
{
axPlayer.Ctlcontrols.play();
btnPlay.Text = "暂停";
}
else if (btnPlay.Text == "暂停")
{
axPlayer.Ctlcontrols.pause();
btnPlay.Text = "播放";
}
//btnPlay.Text = btnPlay.Text == "播放" ? "暂停":"播放";
}
3.添加歌曲到播放列表的实现,MyPlay方法在调用时,如果列表为空,直接返回。
/// <summary>
/// 添加歌曲到播放列表
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOpen_Click(object sender, EventArgs e)
{
OpenFileDialog ofg = new OpenFileDialog();
ofg.InitialDirectory = @"E:\黑马.net入学\6-基础班项目_自己动手写音乐播放器(高级内容)";
ofg.Filter ="音乐文件|*.mp3;*.wma|视频文件|*.wmv";
ofg.Title="请选择文件";
ofg.Multiselect=true;
if (ofg.ShowDialog() == DialogResult.OK)
{
for (int i = 0; i < ofg.FileNames.Length; i++)
{
lSongs.Add(ofg.FileNames[i]);
string[] songs = ofg.FileNames[i].Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries);
listSongsPlayer.Items.Add(songs[songs.Length-1]);
}
//axPlayer.URL = lSongs[0]; //选定歌曲第一个为默认播放
//listSongsPlayer.SelectedIndex = 0;
MyPlay(0);
}
}
/// <summary>
/// 用索引完成播放,
/// </summary>
/// <param name="url"></param>
private void MyPlay(int url)
{
//if (btnPlay.Text == "播放")
//{
// axPlayer.Ctlcontrols.play();
// btnPlay.Text = "暂停";
//}
//else if (btnPlay.Text == "暂停")
//{
// axPlayer.Ctlcontrols.pause();
// btnPlay.Text = "播放";
//}
if (listSongsPlayer.Items.Count == 0)
{
return;
}
if (url < 0)
{
url = 0;
}
btnPlay.Enabled = true;
btnMute.Enabled = true;
btnStop.Enabled = true;
axPlayer.URL = lSongs[url];
listSongsPlayer.SelectedIndex = url;
axPlayer.Ctlcontrols.play();
btnPlay.Text = "暂停";
}
4.添加歌词的显示
歌词显示的主要思路是要通过读取歌词文件,并将歌词通过每一项为时间+歌词的方式存储在一个歌词集合中,然后再与播放器的当前播放时间进行比较,显示对应的歌词。
5.播放器的静音等行为是在播放器组件的Setting属性里面进行赋值操作的,具体如下:
/// <summary>
/// 静音
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnMute_Click(object sender, EventArgs e)
{
if (btnMute.Text == "静音")
{
axPlayer.settings.mute = true;
btnMute.Text = "取消静音";
}
else if (btnMute.Text == "取消静音")
{
axPlayer.settings.mute = false;
btnMute.Text = "静音";
}
}
6.自动播放下一曲的实现
private void axPlayer_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
if (listSongsPlayer.Items.Count == 0)
{
return;
}
// temp1 += axPlayer.playState.ToString() + "\n";
label1.Text += axPlayer.playState.ToString() + "\n";
if (axPlayer.playState == WMPLib.WMPPlayState.wmppsMediaEnded)
{
//选择下一曲,准备播放
int temp = listSongsPlayer.SelectedIndex;
temp++;
if (temp > lSongs.Count - 1)
{
listSongsPlayer.SelectedIndex = 0;
axPlayer.URL = lSongs[0];
}
else
{
listSongsPlayer.SelectedIndex = temp;
axPlayer.PlayStateChange -= axPlayer_PlayStateChange;
axPlayer.URL = lSongs[temp];
axPlayer.PlayStateChange += axPlayer_PlayStateChange;
}
}
if(axPlayer.playState == WMPLib.WMPPlayState.wmppsReady)
{
//播放下一曲
// this.MyPlay(listSongsPlayer.SelectedIndex);
axPlayer.Ctlcontrols.play();
}
}
这里实现自动播放下一曲的时候,我是用的播放器控件式最新的player,所以在给axPlayer.URL赋值时会直接再一次触发axPlayer_PlayStateChange事件,所以再给axPlayer.URL赋值时,要先将axPlayer_PlayStateChange事件去掉,然后赋值完成后再添加上去。实际代码:
axPlayer.PlayStateChange -= axPlayer_PlayStateChange;
axPlayer.URL = lSongs[temp];
axPlayer.PlayStateChange += axPlayer_PlayStateChange;