' dx8vb 完全满足你的需求,用它做游戏音效都没有问题:
Option Explicit
' DX8
Dim dx As DirectX8
' DS8
Dim ds As DirectSound8
' DS副缓冲区
Dim dsb0 As DirectSoundSecondaryBuffer8
Dim dsb1 As DirectSoundSecondaryBuffer8
Dim dsb2 As DirectSoundSecondaryBuffer8
Dim dsb3 As DirectSoundSecondaryBuffer8
Private Sub Form_Load()
' 初始化 DX
Set dx = New DirectX8
Set ds = dx.DirectSoundCreate(vbNullString)
ds.SetCooperativeLevel Me.hWnd, DSSCL_PRIORITY
Dim dsbd As DSBUFFERDESC
' 设置声音可控制的功能(比如音量、音高、平衡、3D音效等)
dsbd.lFlags = DSBCAPS_CTRLVOLUME Or DSBCAPS_CTRLFREQUENCY Or DSBCAPS_CTRLPAN
' 加载声音资源
Set dsb0 = ds.CreateSoundBufferFromFile("背景音乐.wav", dsbd)
Set dsb1 = ds.CreateSoundBufferFromFile("音效1.wav", dsbd)
Set dsb2 = ds.CreateSoundBufferFromFile("音效2.wav", dsbd)
Set dsb3 = ds.DuplicateSoundBuffer(dsb2) ' 拷贝音效2的副本(独立副本可以原版重叠播放,同时又共享内存)
' 一开始就循环播放背景音乐
dsb0.Play DSBPLAY_LOOPING
End Sub
Private Sub Command1_Click()
' 先将音效1播放进度置0
dsb1.SetCurrentPosition 0
' 然后开始播放音效1
dsb1.Play DSBPLAY_DEFAULT
End Sub
Private Sub Command2_Click()
' 先将音效2播放进度置0
dsb2.SetCurrentPosition 0
' 然后开始播放音效2
dsb2.Play DSBPLAY_DEFAULT
End Sub
Private Sub Command3_Click()
' 设置音效2副本按音效2原版的 0.75 倍速度播放(这个倍率差不多可以刚好把女声变成男声,男声变成怪物说话声的效果)
dsb3.SetFrequency (dsb2.GetFrequency() * 0.75)
' 先将音效2副本播放进度置0
dsb3.SetCurrentPosition 0
' 然后开始播放音效2副本
dsb3.Play DSBPLAY_DEFAULT
End Sub