| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 731 人关注过本帖
标题:菜鸟第一贴问点小问题<在线等>
只看楼主 加入收藏
编程小小鸟
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-10-4
收藏
 问题点数:0 回复次数:7 
菜鸟第一贴问点小问题<在线等>
马上要毕业了,我想制作个播放器,我用的是MMC控件,编程时遇到个问题,我想让播放器能放MP3和WMA格式的歌.
其中代码如下:
MMControl1.DeviceType = ""
MMControl1.FileName = CommonDialog1.FileName
编好后我电脑里的MP3歌大多能放,其中一首不能放,WMA的歌只有一首能放.
用千千静听都能放出来
我想问下这是为什么?
还有,我想编一个播放列表借千千静听那样,关闭程序后下次打开列表的记录还在,应该怎么样编?
请高手指教,谢谢~
搜索更多相关主题的帖子: 在线 
2008-10-04 21:22
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
你要问什么问题就写在标题里好不好?

第一个问题和解码器有关,解码器又不是你写的,你只是调用,解码器不好你也没办法。试试换成别的控件。

第二个问题,就是处理简单的文件读写,关闭程序的时候将列表保存下来,打开程序的时候重新加入列表。
2008-10-04 21:29
编程小小鸟
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-10-4
收藏
得分:0 
哦,嘿嘿`知道拉`谢谢版主`下次注意标题``
2008-10-04 21:33
三断笛
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:31
帖 子:1621
专家分:1617
注 册:2007-5-24
收藏
得分:0 
用WMP吧?
2008-10-04 21:55
编程小小鸟
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-10-4
收藏
得分:0 
WMP那控件怎么用的??能不能教下?
2008-10-04 22:36
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
[bo][un]编程小小鸟[/un] 在 2008-10-4 22:36 的发言:[/bo]

WMP那控件怎么用的??能不能教下?

www.baidu.com
2008-10-05 12:24
编程小小鸟
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-10-4
收藏
得分:0 
[bo][un]multiple1902[/un] 在 2008-10-5 12:24 的发言:[/bo]


www.baidu.com


百度上找到我就不来这里问了啊....
2008-10-05 14:24
三断笛
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:31
帖 子:1621
专家分:1617
注 册:2007-5-24
收藏
得分:0 
懒啊  百度找来的

用VB的IF THEN如何套用下面语句
Private Sub ZHONGWEN_Click()
With Player
WindowsMediaPlayer1.enableContextMenu = False
WindowsMediaPlayer1.URL = "http://old.
WindowsMediaPlayer1.Controls.play
End With

End Sub
如果歌曲不能播放,则调入http://www.
还有如何判断最上面的歌曲是否能播放。如能播放则播放第一首。如不能播入则播放第二首

If WindowsMediaPlayer1.playState <> wmppsPlaying Then
基本属性]
URL:string                            可以指定媒体位置
enableContextMenu:Boolean 显示/不显示播放位置的右键菜单
fullScreen:boolean                 全屏显示
stretchToFit:boolean              非全屏状态时是否伸展到最佳大小
uMode:string                         播放器的模式,full:有下面的控制条; none:只有播放部份没有控制条
playState:integer                    当前控件状态,下面是三种基本状态:
3:正在播放
2:暂停
1:已停止
状态变化时会触发OnStatusChange事件

[controls]
可通过WindowsMediaPlayer.controls对播放器进行控制并取得相关的一些信息:
 controls.play;       播放
 controls.stop;       停止
 controls.pause;      暂停
 controls.currentPosition:Double 当前播放进度
 controls.currentPositionString:string 时间格式的字符串 "0:32"

[currentMedia]
可以通过WindowsMediaPlayer.currentMedia取得当前媒体的信息
 currentMedia.duration  Double 总长度
 currentMedia.durationString 时间格式的字符串 "4:34"

[settings]
可以通过WindowsMediaPlayer.settings对播放器进行设置,包括音量和声道等。
settings.volume:integer 音量 (0-100)
settings.balance:integer 声道,通过它应该可以进行立体声、左声道、右声道的控制。   

 用这样的控件可以很随意的办到播放VCD的效果,但这样做未免也太缺乏个性化了,比如说你使用了MediaPlaye控件而不做任何修改的话,那你的播放器就是一个地地道道的Windows MediaPlayer,完全不像你自己编出来的程序。然而,假如要做一个完全属于自己(看起来是这样)的播放器却有些困难,因为你需要把这个控件的常用属性和方法给弄明白。

在我编写程序的时候,对MediaPlaye控件可真是一窍不通,找书看,列出得都是最基本的播放代码;上网找资料,虽然看起来资料挺多的,无奈网上文章一大抄,你抄我我抄你,到最后谁也没有抄出个所以然来。靠天靠地不如靠自己,我在“黑暗”中摸索了好久,终于弄清了MediaPlaye的大部分常用属性,在我的播放器编写完毕的时候(图),把MediaPlaye控件的使用方法给大家介绍一下,希望能对朋友们有所帮助。(特别提示:虽然更高级的MCI控件也可以很容易地实现播放VCD,但它直接对设备进行操作,使用不当会造成系统崩溃,而且功能也远不如MediaPlaye控件,更可恶的是它的可移植性是在太差,所以不建议使用。)

本来是想向大家系统地讲述一下一个真正的多媒体播放器的具体制作过程,但考虑到这样做反而会让人胡涂,所以这里只介绍MediaPlaye控件的各项常用属性,大家在掌握了上述属性后即可轻松开发出属于自己的VCD播放器。

何为MediaPlaye控件?说白了就是一个精简版的Windows MediaPlayer,只不过是不能自行播放而已,它是Windows MediaPlayer的核心。Windows MediaPlayer是一个功能强大的多媒体播放器,采用它的核心所制作出来的播放器可以播放除死敌REAL格式外的几乎所有格式的多媒体文件,心动不如行动,让LET'S GO!

打开Visual Basic 6.0,在控件箱上面单击鼠标右键,打开“部件”选项卡。你可以很轻松地在靠下的位置找到MediaPlaye控件,选中它确定,这样在控件箱里就可以找到刚刚添加进去的MediaPlaye控件了。双击MediaPlaye控件,控件会自行添加到你的窗口中,怎么样,活脱脱的的一个Windows MediaPlayer,在程序运行时单击鼠标右键还可以弹出菜单,下面的关于选项明确说明你正在使用的是MediaPlayer控件,这和Windows MediaPlayer没什么不同。

如何播放多媒体文件?首先我们需要给 MediaPlayer控件指定播放目录,如果你想让程序运行时自动运行,那么可以在你的程序中添加如下代码:

Private Sub Form_Load()
mediaplayer1.filename=""
End Sub
其中""内是你想要播放的多媒体文件的路径,记住,后缀名是一定要加上的。好了,现在按F5看看,你的播放器可以正常运行了。MediaPlaye控件的AutoStart的属性默认是True,所以在你指定完文件路径时它便会自动播放。如果你不想让它自动播放可以将它的属性设为False。这时,你可以在自己的窗体上添加一个按钮,在双击按钮,在随后出现的代码框里输入

Mediaplayer1.play
这样,在程序运行后只要单击这个按钮就可以播放了。(如果你想用对话框来设定路径的话可以往窗体上添加一个对话框控件,不过这不在本文的讨论范围,如果你有疑问可以直接写信给我。)当然,这时你会发现你的播放器上面有其自带的控制按钮和状态条,为了显示自己的个性,你需要把它们隐藏起来。方法是把MediaPlayer控件的ShowControls属性设为False。

如此一来控制播放器的操作就 成为接下来工作的重点。播放按钮相信你已经会做了,下面列出其他几个按钮的控制代码:

暂停:MediaPlayer1.pause
停止:MediaPlayer1.stop
快进和后退当然也可以使用类似的代码完成,不过我发现效果并不明显,我们需要稍加修改。你可以在快进按钮事件中添加以下代码:

dim t
t = MediaPlayer1.CurrentPosition + MediaPlayer1.Duration \ 50
If t <= MediaPlayer1.Duration Then
MediaPlayer1.CurrentPosition = MediaPlayer1.CurrentPosition +
MediaPlayer1.Duration \ 50
end if

你可能对MediaPlayer的CurrentPosition 和Duration不是很了解,让我们来见识一下吧。Duration是MediaPlayer控件的总时间,通过它你可以轻松地获取将要播放的多媒体文件的总共时间,一个方法就是在你的窗体上添加一个Label控件,添加如下代码:

Label1.caption=Mediaplayer1.Duration
这样在你载入影片后Label1控件上就会显示出总共时间。不过一个新问题冒了出来,那就是显示的时间是以毫秒计的,而传统的播放器的时间格式都是00:00这样的。这就需要格外编写一个函数来解决问题了,先不要着急,咱们慢慢来。

CurrentPosition反映出正在播放的多媒体文件的即时时间,遗憾的是它并不能自动刷新以准确实时反映出当前的播放进度,换句话来说这个东东每运行一次就只能反映出它运行时那一刹那的播放进度。不过问题不是无法解决的,我们可以想方设法让它每隔一秒钟自动刷新一次,看来得请Timer控件出马了。

在你的窗口上添加一个Timer控件,将其的Interval属性设为1000,也就是一秒;Enabled属性设为false,我们不希望在没有播放多媒体文件的时候它就已经运行了,因为这是没有意义的,你需要在播放的同时将Timer控件的Enable设为True。为了显示实时时间,你还要在窗体上添加一个Label2控件并设计以下代码:

Private Sub Timer1_Timer()
Label2.caption=mediaplayer1.CurrentPosition
End Sub
这样就可以每隔一秒刷新一次mediaplayer1.CurrentPosition同时显示在Label2.caption上面了。

下面我们来设计一个转换时间格式的函数,用来将毫秒转化成我们需要的格式:

Private Function Tstring(sm As Long) As String
s = sm \ 60
m = (sm Mod 60)
Tstring = Format(s, "00") & ":" & Format(m, "00")
End Function

其中Tstring是我们的函数名,s和m分别代表着分和秒,Tstring = Format(s, "00") & ":" &
Format(m, "00"一句用来格式化输出。这样再将我们的程序稍加修改,就可以达到目标了。
Private Sub Timer1_Timer()
Label2.caption=Tstring(mediaplayer1.CurrentPosition)
End Sub
播放控制条的实现:

同样的,这里也要利用到MediaPlayer的CurrentPosition 和Duration。首先在你的窗体上添加一个HScrollBar控件,并在Timer1_Timer()过程中添加如下代码:

HScroll1.Max=mediaplayer1.Duration
HScroll1.Value = MediaPlayer1.CurrentPosition
这样程序将每隔一秒中刷新一次HScroll1的Value属性,在程序运行时你会发现水平滚动条会随着影片的 播放而自动向右移动。由于MediaPlayer的urrentPosition属性不是只读的,如果你想通过拖动水平滚动条来控制播放进度的话只要双击HScroll1控件,填写以下代码就可以了:

Private Sub HScroll1_Change()
MediaPlayer1.CurrentPosition= HScroll1.Value
End Sub
这样一来我们的播放器就基本上实现了最基本的全部功能,如果你不想让它出现右键菜单而要自己设计的话可以将mediaplayer控件的EnableContextMenu属性设为False;还有一些属性可以自己摸索,很容易掌握。

以上程序只是实现了基本功能,实际上还有很多BUG尚代解决,假如你亲手去做会很容易地发现它们,解决的方法都很简单,自己考虑吧。

另外还有一些高级技巧我也不是很懂,希望各位如果有新发现能够来信与我探讨。由于我也是个初学者,而且从来没有写过类似文章,望各位高手不要笑话我,谢谢。^_^

在这里MediaPlayer1.CurrentPosition代表着正在播放影片的时间,也就是说明该影片已经播放了多少时间;MediaPlayer1.Duration代表着正在播放的影片的总时间。现在你明白代码的意思了吧,就是说每按动一次“快进”按钮,播放时间等于播放时间加上总时间的50/1,这样也就达到了快进的效果。50是精度,数字越大精度越高,但快进的幅度越大,怎么样,受点启发了吧。

C:\abcd\abc.mp3
2008-10-05 16:11
快速回复:菜鸟第一贴问点小问题<在线等>
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017288 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved