'现在的程序只能播放 .MID 文件,我现在要播放 .WAV 怎么改?
Private Sub cmdPlayPassport_Click()
Dim dmA As DMUS_AUDIOPARAMS
cmdPlayPassport.Caption = "&Stop Passport.MID"
Set dmp = dx.DirectMusicPerformanceCreate
dmp.InitAudio Me.hWnd, DMUS_AUDIOF_ALL, dmA, Nothing, DMUS_APATH_SHARED_STEREOPLUSREVERB, 64
dml.SetSearchDirectory App.Path & IIf(Right$(App.Path, 1) = "\", "", "\")
Set seg = dml.LoadSegment("PASSPORT.MID")
seg.Download dmp.GetDefaultAudioPath
dmp.PlaySegmentEx seg, 0, 0
Else
m_blnPassport = False
cmdPlayPassport.Caption = "&Play Passport.MID"
If Not seg Is Nothing Then
dmp.StopEx dmp.GetDefaultAudioPath, 0, 0
dmp.CloseDown
If Not m_blnPassport Then
m_blnPassport = True Set dmp = Nothing
End If
End If
End Sub
Private Sub cmdPlayPassport_Click()
Dim dmA As DMUS_AUDIOPARAMS
cmdPlayPassport.Caption = "&Stop Passport.MID"
Set dmp = dx.DirectMusicPerformanceCreate
dmp.InitAudio Me.hWnd, DMUS_AUDIOF_ALL, dmA, Nothing, DMUS_APATH_SHARED_STEREOPLUSREVERB, 64
dml.SetSearchDirectory App.Path & IIf(Right$(App.Path, 1) = "\", "", "\")
Set seg = dml.LoadSegment("PASSPORT.MID")
seg.Download dmp.GetDefaultAudioPath
dmp.PlaySegmentEx seg, 0, 0
Else
m_blnPassport = False
cmdPlayPassport.Caption = "&Play Passport.MID"
If Not seg Is Nothing Then
dmp.StopEx dmp.GetDefaultAudioPath, 0, 0
dmp.CloseDown
If Not m_blnPassport Then
m_blnPassport = True Set dmp = Nothing
End If
End If
End Sub
解决方案 »
- 一个关于List1控件的运用问题很简单但我不会——————在线等待!!!(VB初学者)
- 提问:谁知道怎么能在一个下拉列表框里显示本地局域网内所有的SQL Server服务器名称?
- 很简单的问题!
- 简单问题
- 我的软件启动后为什么不能显示在任务栏?很着急在线等
- property get/let如何使用?
- 请各位大虾指点word文档如何以二进制格式保存入数据库中,然后怎样从数据库中读出来?
- 大(64G)物理内存的信息(size....)的问题
- 我的vb在WIN2000无法成功安装,各位大虾我该怎么办?
- API函数ShellExecute连接网页
- 求分组汇总计数SQL语句一条
- 很奇怪的Picture~~~帮忙看看~
Option ExplicitDim DirectX As New DirectX7
Dim DS() As DirectSound
Dim DScaps As DirectSoundEnum
Dim mavrInterval As Integer'事件
Public Event TaskEnd(iSourceNumber As Byte)
Public Event Tasking(TaskStatus As Collection)
Dim ChannleNumber As IntegerType channel
ChannleEnabled As Boolean
ChannleBuffer As DirectSoundBuffer
Files As Collection
End Type
Public iHwnd As Integer
Dim tChannle() As channelPublic Property Let ReturnInterval(i As Integer)
mavrInterval = i
End Property
Public Function Task_Play(i As Integer, cfilelist As Collection) As Boolean
If cfilelist.Count > 0 Then
Set tChannle(i).Files = cfilelist
tChannle(i).ChannleEnabled = True
End If
End Function
Public Function Task_Stop(i As Integer) As Boolean
tChannle(i).ChannleEnabled = False
Set tChannle(i).Files = Nothing
tChannle(i).ChannleBuffer.Stop
Set tChannle(i).ChannleBuffer = Nothing
End FunctionPublic Function SetCooperativeLevel(iHwnd As Long) As Boolean
Dim i As Integer
For i = 0 To (ChannleNumber / 2) - 1 DS(i).SetCooperativeLevel iHwnd, DSSCL_PRIORITY ' DSSCL_PRIORITY
Next i
End FunctionPrivate Function LoadWavebuffer(DSound As DirectSound, waveFile As String)Dim bufferDesc As DSBUFFERDESC
Dim waveFormat As WAVEFORMATEX
'bufferDesc.lBufferBytes = 1024 * 1024
bufferDesc.lFlags = DSBCAPS_CTRLFREQUENCY Or DSBCAPS_CTRLPAN Or DSBCAPS_CTRLVOLUME Or DSBCAPS_STATICwaveFormat.nFormatTag = WAVE_FORMAT_PCM
waveFormat.nChannels = 0
waveFormat.lSamplesPerSec = 22050
waveFormat.nBitsPerSample = 16
waveFormat.nBlockAlign = waveFormat.nBitsPerSample / 8 * waveFormat.nChannels
waveFormat.lAvgBytesPerSec = waveFormat.lSamplesPerSec * waveFormat.nBlockAlignSet LoadWavebuffer = DSound.CreateSoundBufferFromFile(waveFile, bufferDesc, waveFormat)
End FunctionPrivate Sub Timer1_Timer()
Dim i As Integer
For i = 0 To ChannleNumber - 1
If tChannle(i).ChannleEnabled Then
Select Case tChannle(i).ChannleBuffer.GetStatus
Case DSBSTATUS_BUFFERLOST
Case DSBSTATUS_LOOPING
Case DSBSTATUS_PLAYING
Case 0
Select Case i
Case 0, 1
If tChannle(i).Files.Count > 0 Then
Set tChannle(i).ChannleBuffer = LoadWavebuffer(DS(0), tChannle(i).Files.Item(1))
Else
tChannle(i).ChannleEnabled = False
Set tChannle(i).Files = Nothing
Set tChannle(i).ChannleBuffer = Nothing
RaiseEvent TaskEnd(CByte(i))
End If
Case 2, 3
If tChannle(i).Files.Count > 0 Then
Set tChannle(i).ChannleBuffer = LoadWavebuffer(DS(1), tChannle(i).Files.Item(1))
Else
tChannle(i).ChannleEnabled = False
Set tChannle(i).Files = Nothing
Set tChannle(i).ChannleBuffer = Nothing
RaiseEvent TaskEnd(CByte(i))
End If
Case 4, 5
If tChannle(i).Files.Count > 0 Then
Set tChannle(i).ChannleBuffer = LoadWavebuffer(DS(2), tChannle(i).Files.Item(1))
Else
tChannle(i).ChannleEnabled = False
Set tChannle(i).Files = Nothing
Set tChannle(i).ChannleBuffer = Nothing
RaiseEvent TaskEnd(CByte(i))
End If
Case 6, 7
If tChannle(i).Files.Count > 0 Then
Set tChannle(i).ChannleBuffer = LoadWavebuffer(DS(3), tChannle(i).Files.Item(1))
Else
tChannle(i).ChannleEnabled = False
Set tChannle(i).Files = Nothing
Set tChannle(i).ChannleBuffer = Nothing
RaiseEvent TaskEnd(CByte(i))
End If
End Select
If i Mod 2 = 1 Then
tChannle(i).ChannleBuffer.SetPan 10000
ElseIf i Mod 2 = 0 Then
tChannle(i).ChannleBuffer.SetPan -10000
End If
tChannle(i).ChannleBuffer.Play DSBPLAY_DEFAULT
If tChannle(i).ChannleBuffer.GetStatus = DSBSTATUS_PLAYING Then tChannle(i).Files.Remove 1
End Select
End If
Next i
End SubPrivate Sub UserControl_Initialize()
Dim i As Integer
Set DScaps = DirectX.GetDSEnum '获得系统中的声音设备数
If DScaps.GetCount > 1 Then
ChannleNumber = (DScaps.GetCount - 1) * 2
ReDim DS(DScaps.GetCount - 2) As DirectSound
ReDim tChannle(ChannleNumber - 1) As channel
For i = 2 To DScaps.GetCount
Set DS(i - 2) = DirectX.DirectSoundCreate(DScaps.GetGuid(i)) '为每一个设备创建一个主缓冲区
tChannle(i - 2).ChannleEnabled = False ' False
tChannle(i - 1).ChannleEnabled = False '
Next i
Timer1.Enabled = True
Timer1.Interval = 10
End If
End Sub
有大把的例子
Dim objDS As DirectSound
Dim objDSB As DirectSoundBuffer
Dim blnLoaded As BooleanPrivate Sub Form_Load()
On Local Error Resume Next
Set objDS = objDX.DirectSoundCreate("")
If Err.Number <> 0 Then
MsgBox "创建DirectSound失败!"
End
End If
objDS.SetCooperativeLevel Me.hWnd, DSSCL_NORMAL
LoadWaveFile
End SubSub LoadWaveFile()
Dim bufferDesc As DSBUFFERDESC
Dim waveFormat As WAVEFORMATEX
Dim sndFile As String
sndFile = "c:\windows\media\logoff.wav"
bufferDesc.lFlags = DSBCAPS_CTRLPAN Or DSBCAPS_CTRLVOLUME Or DSBCAPS_STATIC
waveFormat.nFormatTag = WAVE_FORMAT_PCM
waveFormat.nChannels = 2 'stereo
waveFormat.lSamplesPerSec = 22050 '22kHz
waveFormat.nBitsPerSample = 16 '16-bit
waveFormat.nBlockAlign = waveFormat.nBitsPerSample / 8 * waveFormat.nChannels
waveFormat.lAvgBytesPerSec = waveFormat.lSamplesPerSec * waveFormat.nBlockAlign
Set objDSB = objDS.CreateSoundBufferFromFile(sndFile, bufferDesc, waveFormat)
If Err.Number <> 0 Then
MsgBox "ERROR!!"
End
End If objDSB.SetVolume 0
objDSB.SetPan 0 Dim flag As Long
flag = 0
objDSB.Play flag
End Sub