黑马程序员技术交流社区

标题: 做播放器过程中有一个问题 [打印本页]

作者: 念念念念_、    时间: 2013-8-21 21:51
标题: 做播放器过程中有一个问题
本帖最后由 念念念念_、 于 2013-8-22 21:40 编辑

         在判断自动下一曲的时候代码


  1.             if (axMediaPlayer.playState == WMPLib.WMPPlayState.wmppsStopped)
  2.             {
  3.                 int temp = SongslistBox.SelectedIndex;
  4.                 temp++;
  5.                 if (temp > SongList.Count - 1)
  6.                 {
  7.                     SongslistBox.SelectedIndex = 0;
  8.                     axMediaPlayer.URL = SongList[0];
  9.                 }
  10.                 else
  11.                 {
  12.                     SongslistBox.SelectedIndex = temp;
  13.                     axMediaPlayer.URL = SongList[temp];
  14.                 }
  15.            }
复制代码
停止按钮的代码
  1. #region 停止播放
  2. private void btnStop_Click(object sender, EventArgs e)
  3. {
  4. axMediaPlayer.Ctlcontrols.stop();
  5. btnPlay.Text = "播放";
  6. }
  7. #endregion
复制代码
这样问题就来了,我点击停止的时候会下一曲。因为判断自动下一曲用的代码是播放状态为已停止的时候。所以两者产生了冲突,请问这个该用什么办法解决呢????求大虾!!!!!


作者: 念念念念_、    时间: 2013-8-21 21:58
补充一下:在播放歌曲完毕的那一刻,其状态是已停止。所以判断状态的代码我觉得是不能改的。所以只好从停止按钮那里修改。不知道我的想法对不对?
作者: pm324    时间: 2013-8-21 23:25
本帖最后由 pm324 于 2013-8-21 23:28 编辑

判断播放完成的时候不要用你那个

试试这个
  1. if ((int)MediaPlayer.currentMedia.duration-(int)MediaPlayer.controls.currentPosition==1)
复制代码
下面是网上的资源,你可以看看
属性/方法名: 说明:
[基本属性]  
URL: String; 指定媒体位置,本机或网络地址
uiMode:String; 播放器界面模式,可为Full, Mini, None, Invisible
playState:integer; 播放状态,1=停止,2=暂停,3=播放,6=正在缓冲,9=正在连接,10=准备就绪
enableContextMenu:Boolean; 启用/禁用右键菜单
fullScreen:boolean; 是否全屏显示
[controls] wmp.controls //播放器基本控制
controls.play; 播放
controls.pause; 暂停
controls.stop; 停止
controls.currentPosition:double; 当前进度
controls.currentPositionString:string; 当前进度,字符串格式。如“00:23”
controls.fastForward; 快进
controls.fastReverse; 快退
controls.next; 下一曲
controls.previous; 上一曲
[settings] wmp.settings //播放器基本设置
settings.volume:integer; 音量,0-100
settings.autoStart:Boolean; 是否自动播放
settings.mute:Boolean; 是否静音
settings.playCount:integer; 播放次数
[currentMedia] wmp.currentMedia //当前媒体属性
currentMedia.duration:double; 媒体总长度
currentMedia.durationString:string; 媒体总长度,字符串格式。如“03:24”
currentMedia.getItemInfo(const string); 获取当前媒体信息"Title"=媒体标题,"Author"=艺术家,"Copyright"=版权信息,"Description"=媒体内容描述,"Duration"=持续时间(秒),"FileSize"=文件大小,"FileType"=文件类型,"sourceURL"=原始地址
currentMedia.setItemInfo(const string); 通过属性名设置媒体信息
currentMedia.name:string; 同 currentMedia.getItemInfo("Title")
[currentPlaylist] wmp.currentPlaylist //当前播放列表属性
currentPlaylist.count:integer; 当前播放列表所包含媒体数
currentPlaylist.Item[integer]; 获取或设置指定项目媒体信息,其子属性同wmp.currentMedia
循环播放:currentMedia.settings.setMode("loop", true);
取消循环:currentMedia.settings.setMode("loop", false);

作者: 念念念念_、    时间: 2013-8-22 14:05
pm324 发表于 2013-8-21 23:25
判断播放完成的时候不要用你那个

试试这个下面是网上的资源,你可以看看

出现报错。。。。。

QQ截图20130822140450.jpg (65.94 KB, 下载次数: 25)

QQ截图20130822140450.jpg

作者: pm324    时间: 2013-8-22 14:20
念念念念_、 发表于 2013-8-22 14:05
出现报错。。。。。

来把你的工程文件贴上来嘛{:soso_e113:}
让我看你的截图我也看不出什么名堂,不过好像是Ctlcontrols的问题!只是好像哦

作者: 黑骏马    时间: 2013-8-22 15:30
你可以增加一个停止按钮是否被点击的判断,、
设置一个状态字,比如isStop,点击停止按钮时将它置为true,点播放时重置为false
如果状态是停止且停止按钮未被点击,则自动下一曲
  1. if (axMediaPlayer.playState == WMPLib.WMPPlayState.wmppsStopped && isStop==true)
  2. {
  3.     ……
  4. }

  5. private void btnStop_Click(object sender, EventArgs e)
  6. {
  7. axMediaPlayer.Ctlcontrols.stop();
  8. isStop = true ;
  9. btnPlay.Text = "播放";
  10. }
复制代码


作者: 心动行动    时间: 2013-8-22 21:29
  WMPLib.WMPPlayState.wmppsMediaEnded  这也是播放器的一种状态,表示播放到歌曲的结尾。在播放状态里面直接判断是否播放到结尾




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2