在vb中调用sndPlaySound放一段wav,声音数据在程序启动时已全部调入内存
Public soundBuffer() As Byte
soundBuffer = LoadResData(101, "CUSTOM")现在点鼠标放声音时:
Sub Button1_Click()
sndPlaySound soundBuffer(0), SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY
End Sub有0.1-0.2秒的延迟,感觉很不爽,把参数SND_ASYNC改成SND_SYNC就没有延迟,但是又必须异步播放,请问高手解决方法。
Public soundBuffer() As Byte
soundBuffer = LoadResData(101, "CUSTOM")现在点鼠标放声音时:
Sub Button1_Click()
sndPlaySound soundBuffer(0), SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY
End Sub有0.1-0.2秒的延迟,感觉很不爽,把参数SND_ASYNC改成SND_SYNC就没有延迟,但是又必须异步播放,请问高手解决方法。
解决方案 »
- 在英文操作系统下指定中文字体出错?怎么办
- VB中,在其中一个模块中定义有一个函数,如何在其它模块中访问这个函数的一个参数?
- ADODC出错,请各位帮个忙,谢谢了先
- VBA如何一次连接导入多个Access数据库查询结果
- 文本文件读取的问题,帮忙啊,大侠,分不够再加
- 紧急求援
- 为什么每次运行都会出现“text is read only”消息框?
- 请 tlf9304(小糊涂仙) 来拿剩余的 77分
- wyo(欧亚大陆桥) :I Only 25
- VC太强大,我想学VC了,再见了.祝我好运吧.对VB我会依然关心的.
- 请高手看一看,有关回调函数问题!
- 多文档界面中,子窗体如何引用主窗体的状态条????!!!!
' 试试我的这个,直接播硬盘上的试试。Option Explicit
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As LongPrivate Sub Command1_Click()
PlaySound "c:\windows\media\ding.wav"
End Sub' 播放指定磁盘中的音乐文件(.wav或.mid)
' Filename 为音乐文件的路径及文件名
Function PlaySound(ByVal FileName As String) As Boolean
Dim cmd As String, exName As String
exName = Right(FileName, 3)
mciSendString "close " & exName, 0, 0, 0
If LCase(exName) = "wav" Then
cmd = "open " & FileName & " type WAVEAudio alias " & exName
ElseIf LCase(exName) = "mid" Then
cmd = "open " & FileName & " type sequencer alias " & exName
End If
mciSendString cmd, 0, 0, 0
PlaySound = mciSendString("play " & exName, 0, 0, 0)
End Function
1 = 边放边 RUN 程式
2 = 若档案不存在,将不发出警告讯息
4 = 先将档存於变数内,可避免延迟
8 = 重覆播放 (须配合 1 !)可合并使用,如 Flags = 1 + 8
声音文件很小,但是要反应灵敏,不能让用户感觉到停顿,你的代码我试过了,可以,但是:我的声音文件都是打包在资源文件中,防止用户修改,同时只需要发布一个exe文件即可,最好在内存能直接播放。不知有没有好的解决方案。mciSendString能不能播放加载到内存中的数据?
' ID 为.wav文件的标识号Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
Const SND_ASYNC = &H1 ' 异步播放
Const SND_MEMORY = &H4 ' lpszSoundName 指向一个内存文件
Const SND_NODEFAULT = &H2 ' 不使用缺省声音Function PlayResSound(ByVal ID As Integer) As Boolean
Dim SoundBuffer() As Byte
SoundBuffer = LoadResData(ID, "CUSTOM")
PlayResSound = sndPlaySound(SoundBuffer(0), SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY)
End Function
' ID 为资源文件中的文件标识号, FileName 为文件导出到硬盘后的存放路径及文件名
Function ExportFileFromRes(ByVal ID As Long, ByVal FileName As String) As Boolean
ExportFileFromRes = False
Dim bytDbt() As Byte
Dim intT As Integer
If Dir(FileName) <> "" Then
ExportFileFromRes = False
Exit Function
End If
bytDbt = LoadResData(ID, "CUSTOM")
intT = FreeFile
Open FileName For Binary As intT
Put intT, , bytDbt
Close intT
ExportFileFromRes = True
End Function