如何使用资源文件中的WAV 或其他文件?

山顶洞人-平 江苏海立普电力科技有限公司 研发工程师  2003-01-15 02:59:33
我在VB的资源文件中加入了WAV文件,但不知道如何在程序中使用,PlaySound函数好象要知道文件的路径才能播放WAV文件,现在我只有该WAV文件的资源ID,如何播放该文件?
...全文
14 点赞 收藏 17
写回复
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
nik_Amis 2003-01-16
知道了,你用的和我用的API 不一样

PlaySound
The PlaySound function plays a sound specified by the given filename, resource, or system event. (A system event may be associated with a sound in the registry or in the WIN.INI file.)

BOOL PlaySound(
LPCSTR pszSound,
HMODULE hmod,
DWORD fdwSound
);
Parameters
pszSound
A string that specifies the sound to play. If this parameter is NULL, any currently playing waveform sound is stopped. To stop a non-waveform sound, specify SND_PURGE in the fdwSound parameter.
Three flags in fdwSound (SND_ALIAS, SND_FILENAME, and SND_RESOURCE) determine whether the name is interpreted as an alias for a system event, a filename, or a resource identifier. If none of these flags are specified, PlaySound searches the registry or the WIN.INI file for an association with the specified sound name. If an association is found, the sound event is played. If no association is found in the registry, the name is interpreted as a filename.

hmod
Handle to the executable file that contains the resource to be loaded. This parameter must be NULL unless SND_RESOURCE is specified in fdwSound.
fdwSound
Flags for playing the sound. The following values are defined. Value Meaning
SND_APPLICATION The sound is played using an application-specific association.
SND_ALIAS The pszSound parameter is a system-event alias in the registry or the WIN.INI file. Do not use with either SND_FILENAME or SND_RESOURCE.
SND_ALIAS_ID The pszSound parameter is a predefined sound identifier.
SND_ASYNC The sound is played asynchronously and PlaySound returns immediately after beginning the sound. To terminate an asynchronously played waveform sound, call PlaySound with pszSound set to NULL.
SND_FILENAME The pszSound parameter is a filename.
SND_LOOP The sound plays repeatedly until PlaySound is called again with the pszSound parameter set to NULL. You must also specify the SND_ASYNC flag to indicate an asynchronous sound event.
SND_MEMORY A sound event's file is loaded in RAM. The parameter specified by pszSound must point to an image of a sound in memory.
SND_NODEFAULT No default sound event is used. If the sound cannot be found, PlaySound returns silently without playing the default sound.
SND_NOSTOP The specified sound event will yield to another sound event that is already playing. If a sound cannot be played because the resource needed to generate that sound is busy playing another sound, the function immediately returns FALSE without playing the requested sound.
If this flag is not specified, PlaySound attempts to stop the currently playing sound so that the device can be used to play the new sound.

SND_NOWAIT If the driver is busy, return immediately without playing the sound.
SND_PURGE Sounds are to be stopped for the calling task. If pszSound is not NULL, all instances of the specified sound are stopped. If pszSound is NULL, all sounds that are playing on behalf of the calling task are stopped.
You must also specify the instance handle to stop SND_RESOURCE events.

SND_RESOURCE The pszSound parameter is a resource identifier; hmod must identify the instance that contains the resource.
SND_SYNC Synchronous playback of a sound event. PlaySound returns after the sound event completes.


Return Values
Returns TRUE if successful or FALSE otherwise.

Remarks
The sound specified by pszSound must fit into available physical memory and be playable by an installed waveform-audio device driver. PlaySound searches the following directories for sound files: the current directory; the Windows directory; the Windows system directory; directories listed in the PATH environment variable; and the list of directories mapped in a network. For more information about the directory search order, see the documentation for the OpenFile function.

If it cannot find the specified sound, PlaySound uses the default system event sound entry instead. If the function can find neither the system default entry nor the default sound, it makes no sound and returns FALSE.

Windows 95/98/Me: PlaySoundW is supported by the Microsoft Layer for Unicode. To use this, you must add certain files to your application, as outlined in Microsoft Layer for Unicode on Windows 95/98/Me Systems.

Requirements
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Included in Windows 95 and later.
Header: Declared in Mmsystem.h; include Windows.h.
Library: Use Winmm.lib.
Unicode: Implemented as Unicode and ANSI versions on Windows NT/2000/XP. Also supported by Microsoft Layer for Unicode.

回复
nik_Amis 2003-01-16
楼上,为什么要编译成exe才有声音?好奇怪啊?呵呵
回复
NowCan 2003-01-16
不会吧,我试过的。
要编译成exe文件再运行才有声音,在VB的IDE里是没有声音的。
回复
山顶洞人-平 2003-01-16
当然有声卡了,Winamp可以用。但是运行那个程序就是没有声音。为什么?
回复
nik_Amis 2003-01-16
晕了
回复
luckcao 2003-01-16
你有没有声卡啊!?
回复
山顶洞人-平 2003-01-15
不知道为什么,下在了那个实例,运行后,没有声音.Why?
http://vip.6to23.com/NowCan1/tech/vb_res.htm '就是这个
回复
AechoJohn 2003-01-15
nik_Amis(Azrael) 方法实用!
回复
nik_Amis 2003-01-15
而且如何播放内存文件?
回复
nik_Amis 2003-01-15
Media Player消耗资源太多了
回复
lionqun 2003-01-15
其实最好的方法就是加入一个Media Player控件!
把Visible设为FALSE

既简单又可以多个WAV同时播放!
何其乐而不为呢?
回复
NowCan 2003-01-15
http://vip.6to23.com/NowCan1/tech/vb_res.htm
下载那里的示例程序,你就明白了。
回复
nik_Amis 2003-01-15
读取资源文件的wav到byte数组
资源文件名nobullet
这样就不需要wav文件了
可以直接播放内存wav
回复
山顶洞人-平 2003-01-15
arrNoBullet = LoadResData("NoBullet", "WAVE")
返回的Byte类型的数组是做什么用的?
回复
nik_Amis 2003-01-15
那里不明白??
回复
山顶洞人-平 2003-01-15
还是不明白,请明确介绍,谢谢!
回复
nik_Amis 2003-01-15



Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
Private Declare Function sndStopSound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszNull As Long, ByVal uFlags As Long) As Long


Private Const SND_MEMORY = &H4
Private Const SND_SYNC = &H0
Private Const SND_ASYNC = &H1
Private Const SND_NODEFAULT = &H2
Private Const SND_LOOP = &H8
Private Const SND_NOSTOP = &H10



Private arrBound() As Byte
Private arrFired() As Byte
Private arrNoBullet() As Byte




Private Function PlaySound(ind As Integer) As Boolean
Dim r As Long
Dim uFlags As Long

uFlags = SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY
r = sndStopSound(0, SND_ASYNC)

Select Case ind
Case 0 'Fire
r = sndPlaySound(arrFired(0), uFlags)
Case 1 'Shotted
r = sndPlaySound(arrBound(0), uFlags)
Case 2 'esNoBullet
r = sndPlaySound(arrNoBullet(0), uFlags)
End Select
End Function





Private Function LoadSound() As Boolean
arrBound = LoadResData("Bound", "WAVE")
arrFired = LoadResData("Fire", "WAVE")
arrNoBullet = LoadResData("NoBullet", "WAVE")
End Function

回复
发动态
发帖子
VB基础类
创建于2007-09-28

7450

社区成员

VB 基础类
申请成为版主
社区公告
暂无公告