5

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

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

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

4

4 回答 4

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.
于 2013-12-30T08:40:27.203 回答
1

尝试使用您想要一遍又一遍地播放的一首歌曲创建一个新集。

于 2010-04-07T12:29:43.307 回答
0

您能否不处理PlayStateChange事件并检测MediaEnded当前曲目的状态何时设置并倒带?

于 2010-04-07T12:29:18.627 回答
0

简短的回答是 WMP 不支持重复单个曲目!

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

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

这是我能告诉你的最好的了。

于 2012-06-02T20:49:21.687 回答