我在程序中使用了一个时钟控件,间隔是一秒,每隔一秒就调用mciExecute函数播放一段音乐.可是当上一段音乐还没播完时钟就开始继续执行下一条语句.请问该如何等音乐播完以后再让后面的语句执行?就象其他函数执行完以后再转交控制权.
解决方案 »
- 伸手党求个VB6读写一个注册表键代码
- TextBox 的 integralheight 属性没有效果
- 请问谁有VB词典,不是WEB的VBSCRIPT,我网上找了很多VB词典不过都是同一个128K的解压不了。
- 当我用VB.net2005进行数据库插入操作时某些中文字显示乱码应如何解决此问题
- 在vba中如何实现 substring的功能
- ◆求一综合性较强的SQL语句续。。
- 请问有没有函数能计算出 某个日期是 某个月的第几周?
- 怎么用VB计算反三角函数的值?我是指用系统函数
- 还是关于执行DOS命令的问题,请高手解答,在线等
- 请问各位如何在ASP中使用VB的TreeView控件谢谢!
- 求一条SQL语句的写法,在线
- 问一个关于能不能将信息输出到word or Exel的问题!
VBA.Interaction 的成员
放弃执行,使操作系统能处理其他事件延时
Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
然后设置timer时间间隔。
mediaplayer控件有触发事件,mciExecute函数没试过!
要不考虑用线程!
仅供参考
当音乐播放时,timer.enabled=false
否则timer.enabled=true
Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
'程序中:
Private Sub Command1_Click()
mciSendString "close MyWav", vbNullString, 0, 0
mciSendString "open c:\logoff.wav alias MyWav", vbNullString, 0, 0
mciSendString "play MyWav", vbNullString, 0, 0
Timer1.Interval = 500
Timer1.Enabled = True
End Sub
Private Sub Command2_Click()
mciSendString "close MyWav", vbNullString, 0, 0
Timer1.Enabled = False
End SubPrivate Sub Form_Unload(Cancel As Integer)
mciSendString "close MyWav", vbNullString, 0, 0
End SubPrivate Sub Timer1_Timer()
Dim S As String
S = String(256, Chr(0))
mciSendString "status MyWav mode", S, Len(S), 0
If Left(S, 7) = "stopped" Or Left(S, 2) = "停止" Then
Print "播放完毕。"
Timer1.Enabled = False
End If
End Sub
startime=time
while (time+86400-startime) mod 86400<3; doevents;wend
500毫秒写0。5就行了
sub Timer1_time()
timer1.enable=false
mciExcute()
Private Sub MMControl1_StatusUpdate()
’可在此事件中检查是否播放完,如果播放完了
timer1.enable=true
End Sub
ReturnValue = mciExecute("play " & play_WaveFile & " from 28290 to 28850")
Timer1.Enabled=True肯定不行的,还是会不等音乐播完就执行Timer1里的语句;第三:我无法获得音乐长度,音乐的长度从10毫秒到10分钟不等;第四:使用sndPlaySound函数通过设置SND_SYNC参数到是可以实现,可是我不知道该如何使其播放指定时间段内的音乐,比如从第10秒到第30秒。
没有人可以回答吗?
=====================================
"播放指定时间段内的的音乐"??????????????
怎么要求又变了????不是太明白你的目的。
如果要播放指定时间段内的的音乐,加个seek语句。一个简单例子:'由于wav普遍都比较短,所以换mp3。。
'模块中:
Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
'程序中:
Private Sub Command1_Click()
mciSendString "close MyWav", vbNullString, 0, 0
mciSendString "open e:\abc.mp3 alias MyWav", vbNullString, 0, 0
mciSendString "seek mywav to 20000", vbNullString, 0, 0
mciSendString "play MyWav", vbNullString, 0, 0
Timer1.Interval = 500
Timer1.Enabled = True
End Sub
Private Sub Command2_Click()
mciSendString "close MyWav", vbNullString, 0, 0
Timer1.Enabled = False
End SubPrivate Sub Form_Unload(Cancel As Integer)
mciSendString "close MyWav", vbNullString, 0, 0
End SubPrivate Sub Timer1_Timer()
Dim S As String
S = String(256, Chr(0))
mciSendString "status MyWav mode", S, Len(S), 0
If Left(S, 7) = "stopped" Or Left(S, 2) = "停止" Then
Print "播放完毕。"
Timer1.Enabled = False
Else
mciSendString "status MyWav position", S, Len(S), 0
Label1.Caption = S
End If
End Sub上面的例子是从20秒的地方开始播放abc.mp3,直到结束,打印“播放完毕。"
如果想"播放指定时间段内的的音乐”,只需要根据
mciSendString "status MyWav position", S, Len(S), 0
的返回值跳回到你想开始播放的位置再从新播放就行了
留意一下label显示的值与时间的关系
===================================================
在我的记忆中,sndPlaySound函数对所播放的音乐的大小是有限制的,只能用来播放一些比较短的音效,而你说的要求“比如从第10秒到第30秒”这么大的文件,恐怕不能用sndPlaySound函数还是sndPlaySound出了新版本????????其实要达到你的要求并不难,我上面已经说了:
“如果想"播放指定时间段内的的音乐”,只需要根据
mciSendString "status MyWav position", S, Len(S), 0
的返回值跳回到你想开始播放的位置再从新播放就行了”'一个例子:
'反复播放一段音乐的第10秒到第30秒
'模块中:
Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long'程序中:
Private Sub Command1_Click()
mciSendString "close MyWav", vbNullString, 0, 0
mciSendString "open e:\abc.mp3 alias MyWav", vbNullString, 0, 0
mciSendString "seek mywav to 10000", vbNullString, 0, 0
mciSendString "play MyWav", vbNullString, 0, 0
Timer1.Interval = 500
Timer1.Enabled = True
End Sub
Private Sub Command2_Click()
mciSendString "close MyWav", vbNullString, 0, 0
Timer1.Enabled = False
End SubPrivate Sub Form_Unload(Cancel As Integer)
mciSendString "close MyWav", vbNullString, 0, 0
End SubPrivate Sub Timer1_Timer()
Dim S As String
S = String(256, Chr(0))
mciSendString "status MyWav position", S, Len(S), 0
If Val(S) >= 30000 Then
mciSendString "seek mywav to 10000", vbNullString, 0, 0
mciSendString "play MyWav", vbNullString, 0, 0
End If
Label1.Caption = S
End Sub
=============================================
而你说的要求“比如从第10秒到第30秒”这么大的文件,恐怕不能用sndPlaySound函数还是sndPlaySound出了新版本????????
=============================================
-_-|||