vs中windows Media Play播放器的状态在使用计时器的时候如何判断让他播放下一曲

螺丝哥 2018-03-23 06:18:54
做了一个播放器 然后获取播放器音乐的当前时间进度,用Timer控件去刷新 1秒刷新一次 当音乐播放完毕后 我判断为什么不成功
想判断是否停止或者暂停然后从数据库当中查询对应的歌曲Id然后Id+1获取下一首歌曲 但是我连判断都进不去 怎么办 求大牛
时间 控件是打开窗体就可以加载


...全文
885 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-03-26
  • 打赏
  • 举报
回复
雁过留痕,人过留声。
赵4老师 2018-03-24
  • 打赏
  • 举报
回复
注释掉所有On Error Resume Next语句,在VB6 IDE中运行, 出错后点击调试,光标会停在出错的那条语句处, 或者 事先在怀疑可能有逻辑错误的语句处设置断点,运行经过断点时中断, 此时可以在立即窗口中使用 ?变量名 或 ?函数名(函数参数) 或 过程名(参数) 辅助调试。
X-i-n 2018-03-24
  • 打赏
  • 举报
回复
赵老师……不懂的问题不用强答的…… 这个地方不应该用计时器,多想一下“事件驱动”,发生了什么事,针对这个事件进行怎样的处理(在你这里是:发生了播放状态改变的事件,处理方式是如果播放结束就下一曲)。 WMP在播放状态发生改变时,会触发PlayStateChange事件,在axWindowsMediaPlayer1_PlayStateChange里判断axWindowsMediaPlayer1.playState就可以,这是个枚举,具体的取值可以翻一下WMPLib.WMPPlayState,另外还有一个axWindowsMediaPlayer1.status属性,是playState的描述文本(string)。 比如播放完成后,蹦一个提示框
        private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
        {            
            if(e.newState == (int)WMPLib.WMPPlayState.wmppsMediaEnded)
            {
                MessageBox.Show(axWindowsMediaPlayer1.status + "\t" + axWindowsMediaPlayer1.playState );
            }            
        }
你对播放列表的处理也不太合理,具体设计可以实际使用WMP播放一个列表来体会一下。 针对播放列表,所有的播放器都有这么几个模式: 单曲循环 - 播完继续播同首歌 随机播放 - 播完随便换首歌 顺序播放 - 播完放下首歌 不循环 - 播完就停在那儿 具体到wmp,它是用是否随机、是否循环两个属性控制的(比如随机+循环表示随机播放,不随机+循环表示顺序播放) 这个操作完全基于播放列表,无需人工干预。所以当你用了播放列表,就不应该再去用代码去操控播放行为,而是通过设置不同的播放模式让它自主工作。并且很重要的一点,使用播放列表的时候,需要准备好播放列表里的项,而不是即时添加,临时去取URL。 按你的描述,你的歌曲位于数据库,通过检测playstate来即时调取url,所以这时候其实你是在模拟基于播放列表的播放行为,自己重新实现一遍,也就根本用不到wmp的播放列表。你的代码问题就在这,将两种方式混淆了起来,又要模拟播放列表,又想使用自带的播放列表。 我建议你用两种方式的其中一种: 1. 完全不去尝试模拟播放列表的行为,只提供用户修改播放列表的功能。所有的一切交给wmp本身(它自己的播放控件已经自带播放、暂停、停止、修改播放模式、上一首下一首的功能了) 2. 如果要自己实现无播放列表,所有内容基于数据库,那就抛弃playlist,自己提供一个带有 循环(true/false)、 随机(true/false)、上一首、下一首、播放、暂停的控制面板,然后实现各个按钮的功能。并且在PlayStateChange事件中根据循环、乱序(这个只是你自己创建的变量,保存用户设置,wmp本身的设置永远强制为不循环、顺序)去控制播放行为和播放内容,模拟播放器的曲目切换。

809

社区成员

发帖
与我相关
我的任务
社区描述
VB 多媒体
社区管理员
  • 多媒体
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧