第11章 播放音频

版权声明:转载请注明出处 https://blog.csdn.net/weixin_39918693/article/details/87985933

文章目录

音频对于游戏是至关重要的


1、使用DirectSound

DirectSound是DirectX中为游戏处理所有声音输出的组件,它有一个多通道的声音混合器

作为程序员,为了进度,有时不得不使用包装器

DirectSound的三个版本:

  • 1、DirectX 9.0版本:在<dsutil.h><dsutil.cpp>
  • 2、后来的DirectX版本:在<DSUTSound.h><DSUTSound.cpp>
  • 3、最新的版本:在<SDKsound.h><SDKsound.cpp><SDKwavefile.h>

DirectSound的一致性问题很严重

我们使用9.0版本,并且进行了封装,放在<DirectSound.h><DirectSound.cpp>

我们将使用以下三个类:

  • 1、CSoundManager:主DirectSound设备
  • 2、CSound:用于创建DirectSound缓冲区
  • 3、CWaveFile:将波形文件装载到CSound缓冲区中

具体使用过程:

  • 1、创建DirectSound管理器对象
  • 2、初始化DirectSound管理器对象
  • 3、设置音频主缓冲区的格式
  • 4、创建第二音频缓冲区的包装器的指针,用来装载波形文件
  • 5、使用Create函数将波形文件装载入第二音频缓冲区
  • 6、播放音频
  • 7、停止播放

和Direct3D类似,音频主缓冲区是输出发生的地方

DSSCL_PRIORITY协作级别能为游戏程序提供比其它可能正在运行的程序更高的声音设备优先级

通过设置音频主缓冲区的格式,可以提高声音输出质量

底层具体的交互细节已被屏蔽,不需要掌握

代码演示:

CSoundManager *dsound = new CSoundManager();
dsound->Initialize(hWnd, DSSCL_PRIORITY);
dsound->SetPrimaryBufferFormat(2, 22050, 16);
CSound *wave;
dsound->Create(&wave, "snicker.wav");
wave->Play();
wave->Stop();

建议在商业游戏中使用更好的音频引擎

猜你喜欢

转载自blog.csdn.net/weixin_39918693/article/details/87985933