C#怎么实现播放器的循环

自己用C#做了一个播放器想让它实现以下功能 循环播放跟单曲播放还有随机播放!请给位大虾指点指点 最好说出全代码!谢谢! 我用了WindowsMediaPlayer 控件

具体代码不写了;给你点思路:

循环播放:在循环播放事件代码中加一个for循环就可以了,用条件判断一下,如果从第一首放到最后一首,当到最后一首时又到回第一首。
for(int i=0;i<歌曲总数;i++)
{
if()//第一首歌放完
{
// 下一首歌开始
}
if()//最后一首歌放完
{
//第一首歌开始
}
}

单曲播放:在单曲播放事件中用for循环一下你选择的歌曲就可以了:
for(int i=0;;i++){
//选择的歌曲开始放
}

随机播放:在随机播放事件中用
比如说你有N个歌曲
for(int i=0;;i++)
{
Random r=new Random();
int t=r.Next(N);//t就是 0-N的一个整数
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-06-19
//当前播放位置
int nextPlayIndex =0;

form_load(object sender,EventArgs e)
{
/*直接播放一个项目
axWindowsMediaPlayer1.currentMedia = axWindowsMediaPlayer1.newMedia(@"F:\myarcv\music\kaishin.mp3");
*/

//添加一个播放列表
WMPLib.IWMPPlaylist pl = axWindowsMediaPlayer1.newPlaylist("","");
WMPLib.IWMPMedia me = axWindowsMediaPlayer1.newMedia(@"F:\myarcv\music\kaishin.mp3");
pl.appendItem(me);
me = axWindowsMediaPlayer1.newMedia(@"F:\myarcv\music\my ocean.mp3");
pl.appendItem(me);
me = axWindowsMediaPlayer1.newMedia(@"F:\myarcv\music\Green Snake - cy.WMA");
pl.appendItem(me);
axWindowsMediaPlayer1.currentPlaylist = pl;
axWindowsMediaPlayer1.Ctlcontrols.play();

}

在axWindowsMediaPlayer1的MediaChange事件中写判断代码
private void axWindowsMediaPlayer1_MediaChange(object sender,AxWMPLib._WMPOCXEvents_MediaChangeEvent e)
{
//this.listBoxControl1.Items.Add("Media Change: " + axWindowsMediaPlayer1.Ctlcontrols.currentPosition.ToString()+" "
// +axWindowsMediaPlayer1.playState+" "
// +axWindowsMediaPlayer1.Ctlcontrols.currentItem.sourceURL);
if(axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded)
{
//根据播放模式自定义播放的currentItem;不指定播放列表是,wmp会使用默认列表
if(axWindowsMediaPlayer1.currentPlaylist != null)
{
//下一个要播放的位置
int nextPlayIndex = 0;
//单曲重复
if(true)
{
nextPlayIndex = nextPlayIndex;//或者不写代码
}
//列表一次播放
else if(true)
{
nextPlayIndex++;
//列表播放完毕
if(nextPlayIndex == axWindowsMediaPlayer1.currentPlaylist.count)
{
return;
}
}
//列表重复播放
else if(true)
{
nextPlayIndex++;
//列表播放完毕
if(nextPlayIndex == axWindowsMediaPlayer1.currentPlaylist.count)
{
nextPlayIndex = 0;
}
}
//随机播放
else if(true)
{
Random r = new Random(System.DateTime.Now.Ticks);
nextPlayIndex=r.Next(axWindowsMediaPlayer1.currentPlaylist.count);
}
axWindowsMediaPlayer1.currentMedia = axWindowsMediaPlayer1.currentPlaylist.get_Item(nextPlayIndex);
axWindowsMediaPlayer1.Ctlcontrols.play();
}
}
}

参考资料:WMPLib.IWMPPlaylist pl = axWindowsMediaPlayer1.newPlaylist("","");

第2个回答  2010-06-19
这几天刚写了一个,不过是用JS写的,代码不同,原理相同。自己看吧。

加载列表的时候,给每首歌都来一个Index
然后给个总长度Length。
//下一首的函数,判断一下当前的循环模式
function NextOne() {
AutoScroll = true;
switch (NowMode) {
case "0"://随机
NowIndex = parseInt(Length * Math.random()) - 1;
PlaySong(NowIndex);
break;
case "1"://单曲循环
if (NowIndex == -1) {
NowIndex = 0;
}
PlaySong(NowIndex);
break;
default://全部循环
NowIndex++;
if (NowIndex == Length) {
NowIndex = 0;
}
PlaySong(NowIndex);
break;
}
}
//这个是用来切换模式的
var NowMode = "0";//模式
function ChangePlayMode() {
switch (NowMode) {
case "0":
NowMode = "1";
$("#imgPlayMode").attr("src", "/images/RepeatOne.png").attr("alt", "单曲循环");
break;
case "1":
NowMode = "2";
$("#imgPlayMode").attr("src", "/images/RepeatAll.png").attr("alt", "顺序播放");
break;
default:
NowMode = "0";
$("#imgPlayMode").attr("src", "/images/Random.png").attr("alt", "随机播放");
break;
}
}
第3个回答  2010-06-19
用API来弄吧。
相似回答