本系列文章由 net_assassin 整理编写,转载请注明出处。
http://blog.csdn.net/net_assassin/article/category/1100363
作者:net_assassin 邮箱: net_assassin@hotmail.com 期待着与志同道合的朋友们相互交流
音频对于游戏是至关重要的!为了让游戏者沉浸于游戏的虚幻体验中,音效和音乐起了极大的作用,而且在游戏者中建立了情绪反应。
本章在探究DirectSound的同时,也将利用这一机会进一步处理精灵碰撞。
使用DirectSound
DirectSound是DirectX中为游戏处理所有声音输出的组件,它有一个多通道的声音混合器。基本上,只需告诉DirectSound要播放的声音,它会处理所有的细节(包括将这个声音与当前播放中的声音混合在一起)。使用DirectSound创建、初始化、装载及播放波形文件所需的代码比起我们前面所学的位图和精灵代码来说要复杂一些。所以,为了避免重复劳动,这里将把使用Microsoft自己的DirectSound包装器的方法介绍给大家。
DirectX SDK 包括一个称为DXUTsound的实用工具库。最新版的DirectX将这些类藏到了一组文件中:SDKsound.h SDKsound.cpp SDKwavefile.h.
由于不一致性问题的存在,所以我创建了一对新的音频文件以便我们自己使用,它们的名称为 DirectSound.h DirectSound.cpp .
我们感兴趣的是定义在SDKsound (以前的DXUTsound)中的三个类:
CSoundManager 主DirectSound设备
CSound 用于创建DirectSound缓冲区
CWaveFile 帮助将波形文件装载到CSound缓冲区中
初始化DirectSound
//首先,创建CSoundManager类的实例
CSoundManager *dsound = new CSoundManager();
//下一步调用Initialize函数来初始化DirectSound管理器:
dsound->Initialize(window_handle,DSSCL_PRIORITY);
//在初始化DirectSound之后,我们必须设置音频缓冲区格式。
dsound->SetPrimaryBufferFormat(2,22050,16);
创建声音缓冲区
CSound *wave;
装载波形文件
HRESULT Create(
CSound** ppSound, //指定用于新装载波形声音的CSound对象。
LPTSTR strWaveFileName, //文件名
DWORD dwCreateFlags = 0,
GUID guid3DAlgorithm = GUID_NULL,
DWORD dwNumBuffers = 1
);
dsound->Create(&wave,"snicker.wav");
播放声音
HRESULT Play(
DWORD dwPriority = 0, //优先级,必须总是设置为零。
DWORD dwFlags = 0, //是否循环播放,如果循环,使用DSBPLAY_LOOPING
LONG lVolume = 0,//最后三个参数指定声音的音量、频率和左右声道平衡
LONG lFrequency = -1,
LONG lPan = 0
);
wave->Play();
使用循环的话
wave->Play(0,DSBPLAY_LOOPING);