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 

解决方案 »

  1.   

    Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
      

  2.   

    用mciSendCommand更好,因为mciSendString无法暂停,而且明显的mcisendCommand还有很多用途。(无论mciSendString还是mciSendCommand都可以放Mp3和MIDI。
      

  3.   

    VERSION 1.0 CLASS
    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
      

  4.   

    还有coray888 (coray888)你说的
    mmcMusic.DeviceType应当为Sequencer就可用来播放MIDI
      

  5.   

    mcisendstring无法暂停??你记错了吧我的就可以
    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
      

  6.   

    呵呵..谢谢huxiangming
    谢谢呆鱼,你的可以持续播放(加1个Timer)
    谢谢大家!!