Private Declare Function mciSendString Lib "winmm.dll" Alias _
"mciSendStringA" (ByVal lpstrCommand As String, ByVal _
lpstrReturnString As Any, ByVal uReturnLength As Long, ByVal _
hwndCallback As Long) As Long
' 如 果 你 想 播 放 其 它 文 件 , 修 改 这 里
Private Const Song As String = "C:\Win95\Media\Canyon.MID"
播 放 时 使 用 如 下 命 令 :
mciSendString "open " & Song & " type sequencer alias canyon", _
0&, 0, 0
mciSendString "play canyon FROM 0", 0&, 0, 0
停 止 时 使 用 :
mciSendString "close canyon", 0&, 0, 0
"mciSendStringA" (ByVal lpstrCommand As String, ByVal _
lpstrReturnString As Any, ByVal uReturnLength As Long, ByVal _
hwndCallback As Long) As Long
' 如 果 你 想 播 放 其 它 文 件 , 修 改 这 里
Private Const Song As String = "C:\Win95\Media\Canyon.MID"
播 放 时 使 用 如 下 命 令 :
mciSendString "open " & Song & " type sequencer alias canyon", _
0&, 0, 0
mciSendString "play canyon FROM 0", 0&, 0, 0
停 止 时 使 用 :
mciSendString "close canyon", 0&, 0, 0
解决方案 »
- 这种用vb功能怎么来实现?
- MSHFlexGrid是否支持鼠标滚轮,似乎工具条只能拖放
- asp调用VB动态链接库参数的传递
- 用VB可不可以监测到有没有在玩游戏呢???
- 在vb中ocx控件怎么去处web的安全警告
- 请教高手如何在vb下改变activemovie控件使用的filter?
- 求一个函数,求windows开始任务栏的高度。
- 条码打印,应该如何下手
- "DSN=..."是表示什么意思?
- 放假了,在广州的CSDN成员可否留下你的联系方式?
- 巨难问题!挑战高手:如何改变文本的高亮背景色?如Win98系统记事本的文本高亮背景色是蓝色,RichTextbox高亮背景色是黑色。
- 关于InstallShield中解数据包的问题!!!!
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "MMedia"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Explicit'--------------TrueZq 最新更新2001-01-12---------------------
'文件名: MMedia.cls
'说明: : 一个多媒体类,能播放Avi、Wave、Midi文件
'用法:
'Dim Multimedia As New Mmedia
'Multimedia.mmOpen "c:\test.wav"
'Multimedia.mmPlay
'!记住:在程序结束时,一定要用Set Multimedia=nothing释放资源!!!
'-----------------------------------------------------' -=-=-=- 属性 -=-=-=-
' sFilename 当前的文件名
' nLength 文件长度(只读)
' nPosition 当前位置
' sStatus 当前状态(只读)
' bWait True/False.决定是否等待播放完' -=-=-=- 方法 -=-=-=-=-
' mmOpen <Filename> 打开要播放的文件
' mmClose 关闭当前文件
' mmPause 暂停
' mmStop 停止 停止后可以跳到开始再次播放
' mmSeek <Position> Seeks to a position in the file
' mmPlay 播放'--------------------------------------------------------------Private sAlias As String '别名
'Private hWnd As Long
Private sFilename As String ' 当前的文件名
Private nLength As Single ' 文件长度Private nPosition As Single ' 当前位置
Private sStatus As String ' 当前状态
Private bWait As Boolean ' 决定是否等待播放完
Const WS_CHILD = &H40000000
'------------ API 声明 -------------
Private 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 Declare Function GetActiveWindow Lib "USER32" () As Integer'当sTheFile是一个Avi文件时,参数hWnd指定动画在哪里播放
'若hWnd=0,则新开一个窗口播放动画。
'如果听不到Midi音乐,请在Windows下用媒体播放器测试一下。
'文件名不能带空格
Public Sub mmOpen(ByVal sTheFile As String, Optional hWnd As Long = 0)Dim nReturn As Long
Dim sType As String '文件类型
Static nNum As IntegerIf sAlias <> "" Then '关闭开始打开的文件
mmClose
End IfIf (Dir(sTheFile) = "") Then '判断是否是一个存在的文件
sFilename = "文件" & sTheFile & " 不存在!"
Exit Sub
Else
sFilename = sTheFile
' nNum = nNum + 1
End If
' Stop
sAlias = sFilename '用文件名作别名,避免别名冲突!
' 判断文件类型
Select Case UCase$(Right$(sTheFile, 3))
Case "WAV"
sType = "Waveaudio"
Case "AVI"
sType = "AviVideo"Case "MID"
sType = "Sequencer"
Case Else
' 未知文件格式,退出。
Exit Sub
End SelectIf sType = "AviVideo" And hWnd > 0 Then
nReturn = mciSendString("open " & sTheFile & " ALIAS " & sAlias _
& " TYPE AVIVideo parent " & hWnd & " style " & LTrim$(Str$(WS_CHILD)), 0&, 0, 0)
Else
nReturn = mciSendString("Open " & sTheFile & " ALIAS " & sAlias _
& " TYPE " & sType, "", 0, 0)
End IfEnd Sub'关闭当前打开的多媒体文件
Public Sub mmClose()
Dim nReturn As Long'如果没有文件打开,则退出
If sAlias = "" Then Exit SubnReturn = mciSendString("Close " & sAlias, "", 0, 0)
sAlias = ""
sFilename = ""End Sub'暂停
Public Sub mmPause()Dim nReturn As LongIf sAlias = "" Then
Exit Sub
ElseIf Status = "paused" Then '如果先前已经暂停了,则解除暂停
mmPlay
Else
nReturn = mciSendString("Pause " & sAlias, "", 0, 0)
End If
'nPosition = Position
End Sub'播放
Public Sub mmPlay()Dim nReturn As LongIf sAlias = "" Then
Exit Sub
ElseIf Position = Length Then '如果已经到末尾
mmSeek 0 '跳到开始处
End If
If bWait Then
nReturn = mciSendString("Play " & sAlias & " wait", "", 0, 0)
Else
nReturn = mciSendString("Play " & sAlias, "", 0, 0)
End If
End Sub'停止
'停止后跳到开始,以便再次播放
Public Sub mmStop()Dim nReturn As LongIf sAlias = "" Then Exit SubnReturn = mciSendString("Stop " & sAlias, "", 0, 0)
mmSeek 0 '跳到开始位置
End Sub'跳到指定的位置,并且处于暂停状态
'当nPosition的值>Length 或者nPosition<0时,将忽略这次操作
Public Sub mmSeek(ByVal nPosition As Single)Dim nReturn As Long
nReturn = mciSendString("Seek " & sAlias & " to " & nPosition, "", 0, 0)End Sub'方法Filename返回当前打开的文件名
Property Get filename() As String
filename = sFilename
End Property'指定要播放的文件名,然后将它打开
'对于需要指定容器的Avi文件,不要以这种方式打开。
Property Let filename(ByVal sTheFile As String)mmOpen sTheFile
End Property'读取属性Wait的值
'Msgbox Multimedia.Wait
Property Get Wait() As Boolean
Wait = bWait
End Property'设置等待属性
'用法:Multimedia.Wait=True
Property Let Wait(bWaitValue As Boolean)bWait = bWaitValue
End Property'获得长度值
Property Get Length() As SingleDim nReturn As Long, nLength As IntegerDim sLength As String * 255If sAlias = "" Then
Length = 0
Exit Property
End IfnReturn = mciSendString("Status " & sAlias & " length", sLength, 255, 0)
nLength = InStr(sLength, Chr$(0))
Length = Val(Left$(sLength, nLength - 1))
End PropertyProperty Let Position(ByVal nPosition As Single)
mmSeek nPosition
End Property'获取当前位置
Property Get Position() As SingleDim nReturn As Integer, nLength As IntegerDim sPosition As String * 255If sAlias = "" Then Exit Property
nReturn = mciSendString("Status " & sAlias & " position", sPosition, 255, 0)
nLength = InStr(sPosition, Chr$(0))
Position = Val(Left$(sPosition, nLength - 1))End Property'当前打开文件的状态
'有以下几种:playing paused stopped
Property Get Status() As StringDim nReturn As Integer, nLength As Integer
Dim sStatus As String * 255
If sAlias = "" Then Exit PropertynReturn = mciSendString("Status " & sAlias & " mode", sStatus, 255, 0)nLength = InStr(sStatus, Chr$(0))
Status = Left$(sStatus, nLength - 1)End Property'从头开始播放
Public Sub mmRestart()
Dim nReturn As LongIf sAlias = "" Then Exit SubmmSeek 0
mmPlay
End Sub'类的初始化
Private Sub Class_Initialize()
' sAlias = "" '别名初值为空
End Sub'关闭打开的多媒体设备
'当该类的对象所在的窗体(或模块)卸载时,自动调用该过程
Private Sub Class_Terminate()
mmClose
End Sub
mmcMusic.DeviceType应当为Sequencer就可用来播放MIDI
Private Function Pause_MP3()
If Paused = False Then
'暂停播放。
mciSendString "Pause MM", 0, 0, 0
Paused = True
Pause.Caption = "continue"
Else
'继续播放。
mciSendString "Play MM", 0, 0, 0
Paused = False
Pause.Caption = "pause"
End If
End Function
谢谢呆鱼,你的可以持续播放(加1个Timer)
谢谢大家!!