登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

涤心斋

淡泊以明志,宁静以致远!

 
 
 

日志

 
 

WMP与连续播放  

2008-08-14 15:24:31|  分类: dotnet |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  怎样用AxWindowsMediaPlayer控件实现连续播放,本来这是一件很简单的事,用播放列表,然后设置播放模式就成了。很简单的。然而,现在有些顾虑,不能命名用播放列表,至少不能完全依赖于播放列表。
  只得曲线救国了。
  实现过程蛮复杂,就是代码比较分散,难以维护。
  一、在Load时,wmp.settings.setMode("shuffle", false);设置顺序播放
  二、双击播放列表时:
        private void mt1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            //如果不是文件结点则退出
            if (e.Node.Tag == null) return;
            string file = e.Node.Tag.ToString();
            if (!File.Exists(file)) return;

            currentTreeNode = e.Node;
            this.Text = AppConfig.GetInstance().App.Name + "---" + currentTreeNode.Text;
            wmp.Ctlcontrols.currentPosition = AppConfig.GetInstance().Play.Start;

            WMPLib.IWMPMedia media = wmp.newMedia(file);
            wmp.currentPlaylist.clear();   //一定要清空,不然结果不可预测(想不通啊。)
            wmp.currentPlaylist.appendItem(media);
            wmp.Ctlcontrols.next();     //这儿不能用Play(),不然结果也不奇怪。
        }
  三、在PlayStateChange发生时:
        private void wmp_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
        {
            WMPLib.WMPPlayState state = (WMPLib.WMPPlayState)e.newState;

            //解决双击媒体后还不能马上播放的问题
            if (state == WMPLib.WMPPlayState.wmppsReady) wmp.Ctlcontrols.play();

            //在当前媒体播放完毕后播放下一首
            if (state == WMPLib.WMPPlayState.wmppsMediaEnded)
            {
                if (currentTreeNode != null && currentTreeNode.NextNode != null)
                {
                    currentTreeNode = currentTreeNode.NextNode;
                    if (currentTreeNode.Tag == null) return;   //不是一个媒体
                    string file = currentTreeNode.Tag.ToString();
                    if (!File.Exists(file)) return;         //文件不存在时
                    this.Text = AppConfig.GetInstance().App.Name + "---" + currentTreeNode.Text;
                    WMPLib.IWMPMedia media = wmp.newMedia(file);
                    wmp.currentPlaylist.appendItem(media);
                }
            }

            System.Diagnostics.Debug.Print(state.ToString());
        }
  费了十龙十象之力(龙象般若神功),总算把这个问题摸索着解决了。实在是有用的资料太少了。全靠摸索。这个方法很好啦。比起同时维护两份播放列表要舒服得多了。
  这儿的办法是:在当前媒体播放完毕后就将下一个媒体加入到当前播放列表中去,这样,WMP内核会自动尝试加载下一个媒体文件并播放它。当然前提供是设置了“顺序播放”。。。

  后记:一个人的摸索太难了。太考验人的耐心了。到目前为止,这个播放器该有的功能差不多都有了,关于播放列表的查找功能,因为实在没地方摆界面,还没有来得及做。代码在不少地方可能存在冗余,有待重构。
  评论这张
 
阅读(1644)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018