问题解决,马上结帖,谢谢!

解决方案 »

  1.   

    用mci:
    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
    如要播放,先Open,再Play.
    以下是我的代码中的一部分,节选如下:
    dim cmdToDo as string 'mciSendString能够发送的命令
    1.Open:
    Const WS_CHILD = &H40000000
    cmdToDo = "open " & FileName & " type " & typeDevice & " Alias " & AliasName & " parent " & hWnd & " Style " & WS_CHILD
    2.Pause:
    cmdToDo="Pause " & AliasName
    3.Play:
    dim fromFrame as string '指定要播放的第一帧
    dim toFrame as string '指定要播放的最后一帧
    cmdToDo = "play " & AliasName & " from " & fromFrame & " to " & toFrame
    4.FullScreen:
    cmdToDo = "play " & AliasName & " FullScreen"
    5.Resume:
    cmdToDo="Resume " & AliasName
    6.Close
    cmdToDo="Close " & AliasName
    cmdToDo="Close All"
    7.SetVolume
    '         [Channel]
    '         指定想要控制的声道,其取值为如下之一:
    '           Left  控制左声道
    '           Right 控制右声道
    '           All   控制左声道和右声道
    '         [VolumeValue]
    '         指定所要控制声道的音量大小,其取值范围为从0到100.
    cmdToDo = "setaudio " & AliasName & " " & Channel & " Volume to " & VolumeValue
    8.stop:
    cmdToDo = "stop " & AliasName
    9.setChannels:
    '         [Channel]
    '         指定想要控制的声道,其取值为如下之一:
    '           Left  控制左声道
    '           Right 控制右声道
    '           All   控制左声道和右声道
    '         [OnOrOFF]
    '         指定所要控制声道的控制动作,其取值为如下之一:
    '           On    打开声道
    '           Off   关闭声道
    cmdToDo = "set " & AliasName & " audio " & Channel & " " & ONOrOFF
    10.Put:
    [Left]不言而喻
    [Top]不言而喻
    [Width]不言而喻
    [Height]不言而喻
    cmdToDo="put " & AliasName & " window at " & Left & " " & Top & " " & Width & " " & Height
    11.GetStatus
    cmdToDo="status " & AliasName & " mode"
    例子:
        Dim Status As String
        mciSendString "status " & AliasName & " mode", Status, 128, 0&  
    如成功执行,则status返回如下值之一:
    stopped,playing,Paused
    12.GetTotalFrames:
    直接给个例子:
    '这个模块用于计算要播放的多媒体文件总共包含的帧数
    Public Function GetTotalFrames(AliasName As String) As Long
        Dim sReturn As Long
        Dim Total As String
        sReturn = mciSendString("set " & AliasName & " time format frames", Total, 128, 0&)
        sReturn = mciSendString("status " & AliasName & " length", Total, 128, 0&)
        If Not sReturn = 0 Then
            GetTotalFrames = -1
            Exit Function
        End If   
        GetTotalFrames = Val(Total)
    End Function
      

  2.   

    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
    '例如打开:
    Public Function OpenMultimedia(hWnd As Long, AliasName As String, FileName As String, typeDevice As String) As String
    '           [typeDevice]
    '           指定一个MCI设备的类型,取值应为如下:
    '          ┌──────┬─────────────┬────────┐
    '          │ Type MCI   │   description            │ driver file    │
    '          ├──────┼─────────────┼────────┤
    '          │ sequencer  │处理mid文件               │ mciseq.drv     │
    '          │            │                          │                │
    '          │ MPEGVideo  │处理大多数多媒体文件,如:  │ mciqtz.drv     │
    '          │            │mpg,mp3,mp2,..,au,aiff..  │                │
    '          │            │等等,同时也支持avi,vob(用 │                │
    '          │            │于DVD),midi,mid,和rmi文件.│                │
    '          │            │可以使用"MPEGVideo"播放很 │                │
    '          │            │多文件,甚至包括avivideo.  │                │
    '          │            │                          │                │
    '          │ avivideo   │处理AVI Movie             │ mciavi.drv     │
    '          └──────┴─────────────┴────────┘
        Const WS_CHILD = &H40000000
        Dim cmdToDo As String * 255
        Dim dwReturn As Long
        Dim ret As String * 128
        Dim tmp As String * 255
        Dim lenShort As Long
        Dim ShortPathAndFile As String    cmdToDo = "open " & FileName & _
                  " type " & typeDevice & _
                  " Alias " & AliasName & _
                  " parent " & hWnd & _
                  " Style " & WS_CHILD
        dwReturn = mciSendString(cmdToDo, 0&, 0&, 0&)    If Not dwReturn = 0 Then  'not Success
            mciGetErrorString dwReturn, ret, 128 'Get the error
            OpenMultimedia = ret
            Exit Function
        End If    OpenMultimedia = "Success"
    End Function'例如播放:
    Public Function PlayMultimedia(AliasName As String, from_where As String, to_where As String) As String
        Dim cmdToDo As String * 128
        Dim dwReturn As Long
        Dim ret As String * 128
        
        If from_where = vbNullString Then from_where = 0
        If to_where = vbNullString Then to_where = GetTotalFrames(AliasName)
            cmdToDo = "play " & AliasName     
        dwReturn = mciSendString(cmdToDo, 0&, 0&, 0&) '播放
        
        If Not dwReturn = 0 Then  'not Success
            mciGetErrorString dwReturn, ret, 128 'get the error
            PlayMultimedia = ret
            Exit Function
        End If
        
        PlayMultimedia = "Success"
    End Function
      

  3.   

    利用API播放声音文件 
    -在 某 些 情 况 下, 例 如 程 序 员 正 在 编 写 一 个 游 戏, 或 是 将 要 进 行 一 项 非 常 冗 长 无 聊 的过 程, 可 以 通 过 播 放 音 乐 来 增 加 游 戏 的 声 光 效 果 或 是 减 少 漫 长 的 等 待 所 带 来 的 困 倦。本 文介 绍 如 何 在Microsoft Visual Basic 中 对 声 音 文 件 进 行 播 放。 播 放 声 音文 件 ---- 在Microsoft Visual Basic 中 进 行 多 媒 体 音 乐 的 播 放 是 一 件非 常 轻 松 的 事 情。 在Microsoft Windows 系 统 中 支 持 的 声 音 文 件 有WAV 文 件 和MIDI 文 件,通 常 使 用Windows 应 用 程 序 编 程 接 口(API) 函 数mciExecute 函 数 可 以 对MIDI 文 件 进 行 播放。 而 使 用API 函 数sndPlaySound 则 可 以 对WAV 播 放 文 件 进 行 播 放, 当 然, 你 也 可 以 使用mciExecute 函 数 来 播 放WAV 文 件。 ---- 为 了 播 放WAV 文 件, 你 需 要 在 你的 程 序 窗 体 的 通 用 声 明 部 分 中, 或 是 标 准 模 块 中 添 加 如 下 的 声 明 语句: ---- Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As 
    Long ---- 以 及 如 下 的 标 识 常量: ---- Public Const SND_SYNC = &H0 
    ---- Public Const SND_ASYNC = &H1 
    ---- Public Const SND_NODEFAULT = &H2 
    ---- Public Const SND_MEMORY = &H4 
    ---- Public Const SND_ALIAS = &H10000 
    ---- Public Const SND_FILENAME = &H20000 
    ---- Public Const SND_RESOURCE = &H40004 
    ---- Public Const SND_ALIAS_ID = &H110000 
    ---- Public Const SND_ALIAS_START = 0 
    ---- Public Const SND_LOOP = &H8 
    ---- Public Const SND_NOSTOP = &H10 
    ---- Public Const SND_VALID = &H1F 
    ---- Public Const SND_NOWAIT = &H2000 
    ---- Public Const SND_VALIDFLAGS = &H17201F 
    ---- Public Const SND_RESERVED = &HFF000000 
    ---- Public Const SND_TYPE_MASK = &H170007 ---- sndPlaySound 函 数 需 要 两 个 参 数, 第 一 个 参数soundfilename 是 要 播 放 的WAV 文 件 的 名 称。 第 二 个 参 数 是 一 个 表 明 播 放 方 式 的 标 识 常量, 其 定 义 的 值 如 上 所 示, 通 常 所 使 用 的 标 识 意 义 如 下: ---- SND_SYNC 播 放WAV 文 件, 播 放 完 毕 后 将 控 制 转 移 回 你 的 应 用 程 序 中。 
    ---- SND_ASYNC 播放WAV 文 件, 然 后 将 控 制 立 即 转 移 回 你 的 应 用 程 序 中, 而 不 管 对WAV 文 件 的 播 放 是 否 结束。 
    ---- SND_NODEFAULT 不 要 播 放 缺 省 的WAV 文 件, 以 免 发 生 某 些 意 外 的 错误。 
    ---- SND_MEMORY 播 放 以 前 已 经 加 载 到 内 存 中 的WAV 文件。 
    ---- SND_LOOP 循 环 播 放WAV 文 件。 
    ---- SND_NOSTOP 在 开 始 播放 其 它 的WAV 文 件 之 前, 需 要 完 成 对 本WAV 文 件 的 播 放。 ---- 注意:SND_LOOP 标 识 通 常 需 要 同SND_ASYNC 共 同 使 用, 也 即 在 两 个 标 识 之 间 添 加 与 播 放 符,以 免 在 对WAV 文 件 进 行 播 放 的 时 候 将 系 统 挂 起。 ---- 为 了 播 放MIDI 文 件,你 需 要 在 你 的 程 序 窗 体 的 通 用 声 明 部 分 中, 或 是 标 准 模 块 中 添 加 如 下 的 声 明 语句: ---- Private Declare Function mciExecute Lib "winmm.dll" Alias "mciExecute" (ByVal lpstrCommand As String) As Long ---- mciExecute 函 数 只 需 要 一 个 参 数,CommandString, 顾 名 思义,它 是 一 个 命 令 字 符 串, 用 于 表 明 对 声 音 文 件 播 放 的 命 令,例 如, 希 望 完 整 播 放 声 音 文 件,则 该 字 符 串 就 是 字 符 串損lay" 加 上 声 音 文 件 的 路 径 以 及 文 件 名 称, 如 下 所示** ---- Dim ReturnValue As Long 
    ---- ReturnSoundValue = mciExecute("play C:\WIN95\MEDIA\CANYON.MID") ---- 如 果 希 望 对 声 音 文 件 的 部 分 进 行播 放, 可 以 使 用from...to... 语 句 格 式, 例 如 若 要 播 放CANYON.MID 文 件 的10 毫 秒 到100 毫秒 的 部 分, 可 以 使 用 如 下 的 语 句: ---- Dim ReturnValue As Long 
    ---- ReturnSoundValue = mciExecute("play C:\WIN95\MEDIA\CANYON.MID from 10 to 100") 
    ---- mciExecute 函 数 也可 以 用 来 对WAV 文 件 进 行 播 放, 方 法 同 播 放MIDI 一 样。 样 例 程序 ---- 1. 在Visual Basic 中 开 始 一 个 新 的 项 目, 采 用 缺 省 的 方 法 建立Form1。 
    ---- 2. 将 如 下 的 声 明 语 句 添 加 到Form1 的 通 常 声 明 部 分 中( 注 意 每个 声 明 语 句 需 要 被 书 写 在 一 行 内): ---- Private Declare Function sndPlaySound Lib "winmm.dll" Alias "
    sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As 
    Long ---- Const SND_SYNC = &H0 
    ---- Const SND_ASYNC = &H1 
    ---- Const SND_NODEFAULT = &H2 
    ---- Const SND_MEMORY = &H4 
    ---- Const SND_ALIAS = &H10000 
    ---- Const SND_FILENAME = &H20000 
    ---- Const SND_RESOURCE = &H40004 
    ---- Const SND_ALIAS_ID = &H110000 
    ---- Const SND_ALIAS_START = 0 
    ---- Const SND_LOOP = &H8 
    ---- Const SND_NOSTOP = &H10 
    ---- Const SND_VALID = &H1F 
    ---- Const SND_NOWAIT = &H2000 
    ---- Const SND_VALIDFLAGS = &H17201F 
    ---- Const SND_RESERVED = &HFF000000 
    ---- Const SND_TYPE_MASK = &H170007 ---- Private Declare Function mciExecute Lib "winmm.dll" Alias "mciExecute" (ByVal lpstrCommand As String) As Long ---- 3. 在Form1 上 添 加 一 个 文 本 框 控 件, 采 用 缺 省 的 方 法 建立Text1。 将 它 的Caption 属 性 设 置 为NULL。 ---- 4. 在Form1 上 添 加 一 个命 令 按 钮 控 件, 采 用 缺 省 的 方 法 建 立Command1。 将 它 的Caption 属 性 设 置 为" 使用sndPlaySound 函 数敗* ---- 5. 在Form1 上 添 加 一 个 命 令 按 钮 控 件, 采 用缺 省 的 方 法 建 立Command2。 将 它 的Caption 属 性 设 置 为" 使 用mciExecute 函数敗* ---- 6. 将 如 下 的 代 码 添 加 到Command1 的 单 击 事 件中: 
    Private Sub Command1_Click()
    Dim ReturnValue As Long
    Text1.Text = " 使 用sndPlaySound 函 数 播 放TADA.WAV 文件。"
    ReturnValue = sndPlaySound("C:\WIN95\MEDIA\TADA.WAV", SND_SYNC)
    End Sub
    ---- 7. 将 如 下 的 代 码 添 加 到Command2 的 单 击 事件 中: 
    Private Sub Command2_Click()
    Dim ReturnValue As Long
    Text1.Text = " 使 用mciExecute 函 数 播 放Canyon.mid 文件。"
    ReturnSoundValue = mciExecute
    ("play C:\WIN95\MEDIA\CANYON.MID from 10 to 100")
    End Sub
    ---- 通 过 按 下F5 键 来 执 行 样 例 程 序。 单击" 使 用sndPlaySound 函数" 命 令 按 钮 则 使 用sndPlaySound 函 数 来 播 放C:\WIN95\MEDIA 目录下 面 的TADA.WAV 声 音 文 件。 单 击" 使 用mciExecute 函 数" 则 使 用mciExecute 函 数 来 播放C:\WIN95\MEDIA 目 录 下 面 的CANYON.MID 文 件 的10 毫 秒 到100 毫 秒 的 部分。