DirectX游戏编程入门——第二部分(游戏编程工具箱) ——播放音频

        本系列文章由 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);

测试DirectSound


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值