// Load the wave file into a DirectSound buffer
if( FAILED( hr = g_pSoundManager->Create( &g_pSound, strFileName, 0, GUID_NULL ) ) )
改为:
if( FAILED( hr = g_pSoundManager->Create( &g_pSound, strFileName, DSBCAPS_GLOBALFOCUS, GUID_NULL ) ) )
这里要传递参数给CreateSoundBuffer(LPCDSBUFFERDESC pcDSBufferDesc,LPDIRECTSOUNDBUFFER *ppDSBuffer,LPUNKNOWN pUnKOuter);
DSBUFFERDESC 结构体定义如下:
struct {
DWORD dwSize;//结构体大小
DWORD dwFlags;//缓冲区的用途标志
DWORD dwBufferBytes;//缓冲区大小(如果是设置主缓冲区必须设置为0)
DWORD dwReserved;//保留未用,必须为0
LPWAVEFORMATEX lpwfxFormat;//声音的格式属性
GUID guid3DAlgorithm;//3D声效算法,一般不必理会
};
dwflag 参数的标志说明:
DSBCAPS_CTRL3D //缓冲区具有的3D音效控制能力,不能与DSBCAPS_CTRLPAN一起使用
DSBCAPS_CTRLFREQUENCY //可设置采样频率
DSBCAPS_CTRLFX //缓冲区支持特效处理,但缓冲区必须够大,可容纳更多的数据
DSBCAPS_CTRLPAN //缓冲区可以控制声道
DSBCAPS_CTRLPOSITIONNOTIFY //缓冲区具有播放位置通知能力
DSBCAPS_CTRLVOLUME //缓冲区可设置音量大小
DSBCAPS_GLOBALFOCUS //缓冲是一个全局声音资源,当前程序切换到其他程序依然可以继续播放.
DSBCAPS_LOCDEFER //缓冲区可绑定硬件内存或者软件内存来播放声音
DSBCAPS_LOCHARDWARE //缓冲区必须使用硬件的混声器,如果不支持硬件内存或者混声器,都会导致创建缓冲区失败.
DSBCAPS_LOCSOFTWARE //缓冲区使用软件内存或者使用软件混音
DSBCAPS_MUTE3DATMAXDISTANCE //超过声音可听的最大距离,将停止播放声音
DSBCAPS_PRIMARYBUFFER //说明缓冲区的为主缓冲区(如果没说明,则用作次缓冲区)
DSBCAPS_STATIC //自动使用硬件内存做缓冲区
DSBCAPS_STICKYFOCUS //当程序切换到其他不使用DIRECTSOUND 的程序时,缓冲区继续播放声音,但无法如常进行其他处理