本帖最后由 张伟86 于 2013-5-3 21:41 编辑
歌曲播放.zip
(113.06 KB, 下载次数: 15)
实验了很长时间啊,终于得到点实质性进展。
1、 我依照楼主给出的函数,调试发现在wmppsMediaEnded后,函数还会被调用,除了play,pause,stopped之外,最邪恶的要数wmppsTransitioning了。我调试的时候发现是在2次wmppsTransitioning之后播放中的文件被暂停了,不知道什么原因。总之,依照给出的函数思路,我没有获得实质性进展。
2、既然思路有问题,就换个思路。最后总结出来:使用axWindowsMediaPlayer1 的自动循环来播放下一首歌,在PlayList中选择了要播放的歌后,使用axWindowsMediaPlayer1 的CtlControl的next和previous来调节axWindowsMediaPlayer1 当前要播放的歌曲,以达到歌曲对应目录的目的。
1)button控件打开文件目录,获得目录path,使用FileInfo数组结构,将目录下的文件全部保存入FileInfo数组结构的files对象中,便于对文件进行操作(比如,取名字,取完整路径。)。将文件目录下的文件送入PlayList列表显示(代码比较粗糙,未判断目录下文件,实验文件为文件夹下都是mp3文件,主要讲思路);同时将文件依次填充如axWindowsMediaPlayer1的currentPlayList的Item中,这样FileInfo文件次序、PlayList文件次序、axWindowsMediaPlayer1中currentPlayList中的Item次序一一对应。方便以后操作。填充axWindowsMediaPlayer1的currentPlayList主要是为了自动循环播放的列表次序问题。这样设置后使用语句this.axWindowsMediaPlayer1.settings.setMode("loop", true);,当歌曲被播放时,会发现,再一首歌播放完毕后可以进行第二首歌的自动播放,并且播放到最后文件后可以转到第一首歌。也就实现了楼主的自动播放功能。
2)不过如此的时候,歌曲在往下播放,但是PlayList的SelectedIndex却未被改变,而它应该是需要对应歌曲而改变的,那么就重载axWindowsMediaPlayer1 的axWindowsMediaPlayer1_CurrentItemChange事件,手动调节PlayList当前选择项。以达到一一对应目的。
3)前面结束后,需要设置点击PlayList播放对应文件的操作。重载PlayList的PlayList_SelectedIndexChanged事件,这个主要是在程序实现过程中,我发现axWindowsMediaPlayer1无法获得当前播放项的Item顺序,那就需要手动调节。借助于PlayList_SelectedIndexChanged事件和2个int变量indexOld(保存changed以前的次序)、indexNew(保存现在的次序),我们会知道要如何调节axWindowsMediaPlayer1的currentMedia属性。
4)接下来就是重载PlayList的PlayList_DoubleClick事件了。再其中,我们需要判断我们重新选择的歌曲是位于先前播放歌曲的上面,下面,还是未动,以达到对应播放关系。在PlayList中选择了要播放的歌后,使用 axWindowsMediaPlayer1 的CtlControl的next和previous来调节 axWindowsMediaPlayer1 当前要播放的歌曲,以达到歌曲对应目录的目的。
主要代码如下:附上源代码:(很简陋的,只是个思路)
|