吧务
level 14
使用sndPlaySound函数,前提是使用波形文件(*.wav)”
2019年10月26日 06点10分
2
sndPlaySound只能同时播放一个音效,不能重叠。需要waveOut或DirectSound。
2019年10月28日 09点10分
level 14
' 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
2019年10月28日 09点10分
3
三年之后还得向您学习这段,不过DX8vb.dll有系统的词典吗
2022年08月20日 04点08分
我在加载资源的时候Set Angle = ds.CreateSoundBufferFromFile(App.Path & "\sound\angle.wav", dsbd)改了路劲,注意到您并没有写路劲,这段运行后显示无效的过程调用或参数,想问问您啥情况QWQ
2022年08月20日 04点08分
@💨御妹抖 是可以写全路径的,报你说的那个错误一般都是自己填错参数了。
2022年08月23日 17点08分