当前位置: 代码迷 >> VFP >> VFP7: windows media player 事件,该如何处理
  详细解决方案

VFP7: windows media player 事件,该如何处理

热度:6479   发布时间:2013-02-26 00:00:00.0
VFP7: windows media player 事件
VFP7

表单上放置了一个windows media player控件,一个名为words的数组中存放了几十个mp3文件的名字,每个mp3文件是一个英文单词的发音。

要实现的目标:
让windows media player控件一个接一个地播放单词,每播放完一个单词,要暂停一段时间,以便让学生跟读,这段暂停时间的长度要等于刚播放完的mp3音频的时间长度。


我的思路是:让一个定时器控件启动WMP的播放,再让WMP播放完毕的事件给定时器设定时间长度即interval

我的问题:这个WMP播放完毕的事件是什么?正在播放的mp3文件的时间长度如何得到?



------解决方案--------------------------------------------------------
****:wmplayer.ocx控件完整的属性和方法****
属性/方法名: 说明: 
[基本属性]
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

playState:integer; 播放状态。这个属性改变时同时引发PlayStateChange事件与StateChange事件。取值范围为枚举型:WMPLib.WMPPlayState,它的成员如下:
wmppsUndefined = 0; //未知状态
wmppsStopped = 1; //播放停止
wmppsPaused = 2; //播放暂停
wmppsPlaying = 3; //正在播放
wmppsScanForward = 4; //向前搜索
wmppsScanReverse = 5; //向后搜索
wmppsBuffering = 6; //正在缓冲
wmppsWaiting = 7; //正在等待流开始
wmppsMediaEnded = 8; //播放流已结束
wmppsTransitioning = 9; //准备新的媒体文件
wmppsReady = 10; //播放准备就绪
wmppsReconnecting = 11; //尝试重新连接流媒体数据
wmppsLast = 12; //上一次状态,状态没有改变
------解决方案--------------------------------------------------------
把 MP3 转成 WAV,播放 WAV 格式文件

取得 WAV 时长
H=Fopen("c:\abc.wav")
s=Fread(H,200)
Fclose(H)
byteps=Asc(Substr(s,29,1))+Asc(Substr(s,30,1))*256+Asc(Substr(s,31,1))*65536 &&每秒字节数(采样频率*声道数)
aa=At("data",s)+4 &&数据量位置
dt1=Asc(Substr(s,aa,1))+Asc(Substr(s,aa+1,1))*256
dt2=Asc(Substr(s,aa+2,1))+Asc(Substr(s,aa+3,1))*256
nDelay=Int(1000*(dt1+dt2*65536)/byteps) && 单位是毫秒
  相关解决方案