VB用api函数PlaysoundData直接播放内存声音
vb吧
全部回复
仅看楼主
level 1
VB步步高 楼主
Private Declare Function PlaySoundData Lib "winmm.dll" Alias "PlaySoundA" (lpData As Any, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Private p() As Byte
Private Function Play() As Long
Const Flags = 4 Or 1
Open "d:\re\10000.wav" For Binary As #1
ReDim p(LOF(1) - 1): Get #1, 1, p: Close #1
d = PlaySoundData(p(0), 0, Flags)
End Function
Private Sub Form_Load()
Play
End Sub
'将上面的声音文件换成你自己的声音文件作测试,播放内存声音时需要在内存中生成一个字节数组,然后把数组填充成为一个完整的wav文件的内容。可以合成声音后测试之用,好处是不需要频繁地写硬盘再读文件播放,加快速度还保护硬盘,也可以用来播放网络声音什么的。
2021年06月12日 10点06分 1
level 13
Option Explicit
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
Private Sub Form_Load()
Call sndPlaySound(ByVal "C:\111.wav", 1) '从文件播放
Call sndPlaySound(ByVal 101, &H40005) '从资源中播放(资源类型必须是WAVE,101为资源标识),生成exe后生效
End Sub
还有这个也是可以的
2021年06月12日 12点06分 2
level 13
Option Explicit
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
Private Sub Form_Load()
Dim btData() As Byte
Open "C:\111.wav" For Binary Access Read As #1
ReDim btData(LOF(1) - 1)
Get #1, , btData '将Wav文件数据读取到数组中
Close #1
Call sndPlaySound(btData(0), &H5) '从内存中播放
btData = LoadResData(101, "WAVE") '得到资源中的WAV
Call sndPlaySound(btData(0), &H5)
End Sub
2021年06月12日 12点06分 4
level 14
这个API还是不太好用,一般应用播放个提示音还行,毕竟它只能同时播放一个声音。
比PlaySound底层是API的waveOut系列,这个可以同时Open多个waveOut实例(多个实例之间可以重叠播放),以及播放完成的事件通知、双缓冲播放等。
不过waveOut系列API比较底层,新手学习有一定难度,所以写了个dll内裤来简化(有源码可以学习,稍后发链接),除了waveOut本来有的功能简化外,还波形Buffer的拷贝、拉伸、绘制波形图像等(把音频操作变得像GDI的位图操作差不多的用法)。
2021年06月19日 07点06分 5
2021年06月19日 07点06分
1