用VB做多媒體程序播放程序

字號:

“如何播放Avi、Wave、midi文件”、:
    “誰知道用api播放avi,mpg的詳細方法?要可以設定將圖像放置到設定的窗體中”、
    “如何同時播放兩個Wav文件”
    的問題,其實用一個類模塊就一切搞定,不需要什么控件之類的東西,下面這個類模塊(不知從哪里找來的),我研究后將它修改得更好用了,將下面這個類模塊存為Mmedia.cls
    注釋:----------------------------------------------------
    Option EXPlicit
    注釋:--------------TrueZq 最新更新2001-01-12---------------------
    注釋:文件名: MMedia.cls
    注釋:說明: : 一個多媒體類,能播放Avi、Wave、Midi文件
    注釋:用法:
    注釋:Dim Multimedia As New Mmedia
    注釋:Multimedia.mmOpen "c: est.wav"
    注釋:Multimedia.mmPlay
    注釋:!記住:在程序結束時,一定要用Set Multimedia=nothing釋放資源?。?!
    注釋:-----------------------------------------------------
    注釋: -=-=-=- 屬性 -=-=-=-
    注釋: sFilename 當前的文件名
    注釋: nLength 文件長度(只讀)
    注釋: nPosition 當前位置
    注釋: sStatus 當前狀態(tài)(只讀)
    注釋: bWait True/False.決定是否等待播放完
    注釋: -=-=-=- 方法 -=-=-=-=-
    注釋: mmOpen 打開要播放的文件
    注釋: mmClose 關閉當前文件
    注釋: mmPause 暫停
    注釋: mmStop 停止 停止后可以跳到開始再次播放
    注釋: mmSeek 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 注釋: 當前狀態(tài)
    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文件時,參數(shù)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 Integer
    If sAlias <> "" Then 注釋:關閉開始打開的文件
    mmClose
    End If
    If (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 Select
    If 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 If
    End Sub
    注釋:關閉當前打開的多媒體文件
    Public Sub mmClose()
    Dim nReturn As Long
    注釋:如果沒有文件打開,則退出
    If sAlias = "" Then Exit Sub
    nReturn = mciSendString("Close " & sAlias, "", 0, 0)
    sAlias = ""
    sFilename = ""
    End Sub
    注釋:暫停
    Public Sub mmPause()
    Dim nReturn As Long
    If sAlias = "" Then
    Exit Sub
    ElseIf Status = "paused" Then 注釋:如果先前已經(jīng)暫停了,則解除暫停
    mmPlay
    Else
    nReturn = mciSendString("Pause " & sAlias, "", 0, 0)
    End If
    注釋:nPosition = Position
    End Sub
    注釋:播放
    Public Sub mmPlay()
    Dim nReturn As Long
    If sAlias = "" Then
    Exit Sub
    ElseIf Position = Length Then 注釋:如果已經(jīng)到末尾
    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 Long
    If sAlias = "" Then Exit Sub
    nReturn = mciSendString("Stop " & sAlias, "", 0, 0)
    mmSeek 0 注釋:跳到開始位置
    End Sub