如何播放资源中的声音文件 在线等
解决方案 »
- 请教个小问题.....
- 求助:高手帮个忙 关于数据库的连接
- 在winxp sp2的操作系统上装vb6,是不是会将mdac的版本降低呀?
- 想像EXCEL那样可以一行行添加数据,应选择什么控件?
- listview显示图片的问题
- 我想用winsock控件实现缓存数据的传输.请大家帮忙解决!好急好急T_T(100分)
- 关于串口通信的问题,帮忙看一下,谢谢!
- 特急问题求助:请教如何把Access数据库里 XXX表的数据在FORM1的TEXT1(i)里?..
- 初学,,问题,,高手,,帮忙,,谢谢
- 有人考过国家程序员吗?
- VB中用winsock发送字符串数据数据时出现乱码怎么回事?
- 163邮箱和百度空间登录时,密码是采用什么加密方法?
sndPing.Play()
Public Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
调用方式:
Public Const SND_FILENAME = &H20000 ' name is a file name
Public Const SND_ASYNC = &H1 ' play asynchronously
Dim szFileName As String
szFileName = App.Path & "\test.wav"
PlaySound szFileName, 0, SND_FILENAME + SND_ASYNC
Private Const SND_ASYNC = &H1Private Declare Function sndPlaySoundFormMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long '这个API和楼上的API是一样的,只是我把函数名和参数名改了Private Sub Form_Load()
Dim byteSound() As Byte
byteSound = LoadResData(声音ID, 声音类型)
sndPlaySoundFormMemory byteSound(0), SND_MEMORY Or SND_ASYNC
End Sub
上面这些代码,只适合与声音文件保存在你的程序文件的资源中!
如果是其他的资源DLL或者程序,那代码比较复杂点,不过还是可以的:Private Const LOAD_LIBRARY_AS_DATAFILE = &H2Private Declare Function LoadLibraryEx Lib "kernel32" Alias "LoadLibraryExA" (ByVal lpLibFileName As String, ByVal hFile As Long, ByVal dwFlags As Long) As Long
Private Declare Function FindResource Lib "kernel32" Alias "FindResourceA" (ByVal hInstance As Long, ByVal lpName As String, ByVal lpType As String) As Long
Private Declare Function LoadResource Lib "kernel32" Alias "LoadResource" (ByVal hInstance As Long, ByVal hResInfo As Long) As Long
Private Declare Function LockResource Lib "kernel32" Alias "LockResource" (ByVal hResData As Long) As Long
Private Declare Function sndPlaySoundFormMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
Private Declare Function FreeLibrary Lib "kernel32" Alias "FreeLibrary" (ByVal hLibModule As Long) As LongPrivate Sub Form_Load()
Dim hInst As Long
Dim hFindRes As Long
Dim hRes As Long
Dim hResFirstByte As Long hInst = LoadLibraryEx(资源文件路径与名称, 0, LOAD_LIBRARY_AS_DATAFILE)
If hInst Then
hFindRes = FindResource(hInst, 资源ID, 资源类型)
If hFindRes Then
hRes = LoadResource(hInst, hFindRes)
If hRes Then
hResFirstByte = LockResource(hRes)
sndPlaySoundFormMemory ByVal hResFirstByte, SND_MEMORY Or SND_ASYNC
End If
End If
FreeLibrary hInst
End If
End Sub
我用来读系统文件(Shell32.dll)里面的资源就是用类似这样的代码,不过声音的话我没试过,这是我根据我读AVI资源的代码来改的,希望对你有用
Private Const SND_MEMORY = &H4
Private Const SND_ASYNC = &H1 Private Declare Function sndPlaySoundFormMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long '这个API和楼上的API是一样的,只是我把函数名和参数名改了 Private Sub Form_Load()
Dim byteSound() As Byte
byteSound = LoadResData(声音ID, 声音类型)
sndPlaySoundFormMemory byteSound(0), SND_MEMORY Or SND_ASYNC
End Sub