2010-04-07 169 views
5

我有一个PlayList加载到我的WMP实例中,我希望它只循环一首歌曲。我到目前为止谷歌搜索的一切都告诉我这样做:在播放列表中重复播放单曲

private AxWindowsMediaPlayer wmp; 
wmp.settings.setMode("loop", true); 

但是,这似乎只能使整个PlayList重复。我想要的行为是,如果在播放列表中的歌曲5播放时启用“重复”,则歌曲5将在播放完成时自动重复播放(而不是继续播放歌曲6)。大多数车载MP3播放器已经以此方式工作。在我的C#程序中是否有一种很好的本地方式来做到这一点,还是必须设计一个“黑客”解决方案,例如拦截下一首歌曲加载时触发的事件?

回答

0

难道你不能处理PlayStateChange事件并检测MediaEnded状态是否已被设置为当前曲目并只是倒带它?

+0

是的,在事实上,这是我正在考虑这样做的一种方式......我只是想确保没有一种“本地”方式来处理这个问题,然后再进行一些自定义编码。 – 2010-04-08 11:17:44

1

尝试创建一个新的组只有一个,你要玩一遍又一遍的歌。

+0

那么,这将解决问题,但是当我想关闭重复时会发生什么?我需要一种机制来重新加载原始播放列表并跳回到当我关闭“重复”时所处的确切轨道和位置。处理播放状态会更简单,只需存储一个标志即可知道我是否重复播放。 – 2010-04-08 11:16:46

0

简短的回答是,WMP确实不是支持重复单曲!

所以你能做的最好的就是按照Machta的建议,并动态地编辑播放列表。例如,当您想在播放列表中重复播放单个曲目时,可以编辑播放列表,例如它只有单一曲目并启用循环。不要忘记将旧的播放列表保存在其他地方。当用户禁用歌曲循环时恢复您的旧播放列表并将其设置为不重复。

不幸的是,您有一个缺点,那就是当您更改播放列表时,歌曲可能会从头开始播放:按照James的建议并安排播放列表更改为MediaEnded状态。

这是最好的,我可以告诉你。

1

这是我的方法。对于我的播放列表,而不是使用WMPLib播放列表,我创建了一个类型IWMPMedia的静态通用列表。这使我可以毫无困难地将歌曲添加到我的播放列表中,因为通用列表可以追踪所有歌曲。如此重复一首歌曲,我所做的是我把当前歌曲播放列表播放的当前索引,并设置它等于一个整数,然后我做线沿线的东西:

int repeatSongIndex = index;//in this case, our index is the current song playing 

player.URL = playlist[repeatSongIndex].sourceURL;//lets have player.URL point to the song object chosen to be repeated to its source url (the directory of the file). 
bool isRepeat = true;//to keep track of whether the repeat option is enabled or not.