问题描述
- 参考网上代码写的C#音乐播放器,无法实现自动播放下一首歌,求助!
- 全部代码太长,只把自动播放部分的代码贴出来:
private void timer1_Tick(object sender EventArgs e)
{
// 用Timer控件控制连续播放
if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded)
{
if (playOne == false)
{
if (selectOne < listBox1.Items.Count)
{
selectOne += 1;
}
else if (selectOne == listBox1.Items.Count)
{
// 如果列表中所有媒体文件都播放完毕,则从头开始。
selectOne = 1;
}
}
listBox1.SelectedIndex = selectOne - 1;
Play(selectOne);
}
上述代码中selectOne表示正在播放的曲目的编号,playOne表示是否单曲循环。我怀疑这个timer没有被触发,触发timer的代码如下:
private void button4_Click(object sender EventArgs e)
{
if (listBox1.SelectedIndex < 0) //当前没有在播放列表中选定任何文件时,从播放列表的第一个文件开始播放
{
selectOne = 1;
listBox1.SelectedIndex = 0;
}
else
{
selectOne = listBox1.SelectedIndex + 1;
}
Play(selectOne);
this.Invoke(new MethodInvoker(timer1.Start)); //触发timer,写成 //timer1.Enabled= true也不行
button7.Enabled = true;
button8.Enabled = true;
button9.Enabled = true;
解决方案
给你说下思路自己参考下
解决方案二:
实现自动播放一般是有2种思路:(1)根据时间差来自动播放下一曲。比如一首歌曲的时间时02:20.4,实际上在这个时间还没有完全播放完时就停止播放,总是差个零点几秒的。(2)第二种是根据播放器的状态实现自动播放下一曲。播放器的状态Ready Playing Pause Ended Stop,当到达Ended,并且在Ready之后就会实现自动播放下一曲。下面分别粘贴下代码,不喜勿喷。
解决方案三:
(1),根据时间差播放下一曲。
if (musicPlayer.currentMedia.duration - musicPlayer.Ctlcontrols.currentPosition <= 1)
{
int index = listBox1.SelectedIndex;//获得当前选中项的所有
listBox1.SelectedIndices.Clear(); //将之前选中项清空
if (index == -1)
{
return;
}
index++;
if (index == listBox1.Items.Count)//最后一首歌
{
index = 0;
}
//将改变后的索引重新赋值给当前选中项
listBox1.SelectedIndex = index;
//通过index在集合中拿到全路径,赋值给播放器的URL属性
musicPlayer.URL = listSong[index];
musicPlayer.Ctlcontrols.play();
}
(2)根据播放状态播放下一曲。在WindowsMediaPlayer的PlayStateChange事件中添加以下代码: //当播放器的播放状态发生改变时,判断播放状态是否到达Ended,如果是,进行下一曲 if (musicPlayer.playState == WMPLib.WMPPlayState.wmppsMediaEnded) { int index = listBox1.SelectedIndex;//获得当前选中项的所有 listBox1.SelectedIndices.Clear(); //将之前选中项清空 if (index == -1) { return; } index++; if (index == listBox1.Items.Count)//最后一首歌 { index = 0; } //将改变后的索引重新赋值给当前选中项 listBox1.SelectedIndex = index; //通过index在集合中拿到全路径,赋值给播放器的URL属性 musicPlayer.URL = listSong[index]; } if (musicPlayer.playState == WMPLib.WMPPlayState.wmppsReady) { //播放器自动的小bug try { musicPlayer.Ctlcontrols.play(); } catch (Exception ex) { } }
解决方案四:
楼主,是你那个if (musicPlayer.currentMedia.duration - musicPlayer.Ctlcontrols.currentPosition <= 1)语句的大括号要包括全部