(译)LearnOpenGL实际案例Breakout:音频

Posted 键盘春秋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(译)LearnOpenGL实际案例Breakout:音频相关的知识,希望对你有一定的参考价值。

英文原文
无论我们多么努力的打造游戏的内容我们很可能不会从游戏中听到任何声音;我们有如此多的内容来显示,但是没有音频游戏仍然感觉有一些单薄。在这个教程中我们将会改善它。
OpenGL不提供给我们任何支持音频的能力(和其他游戏开发相似)。我们必须手动加载音频文件为比特流,处理并且转换他们为音频流并且管理多个音频流方便在我们的游戏中使用。这有一些难懂并且需要一些音频工程的基础知识。
如果从几个音频文件扩展名中管理加载音频流是你的菜并且感到从容那就去做。我们准备使用音频管理库,他叫做irrKlang。

1. Irrklang

IrrKlang是一个高品质的2D和3D交叉平台(Windows,MacOSX,Linex)音频引擎并且音频库支持WAV,MP3,OGG和FLAC文件。它还支持几个音频特性例如混响,延迟和能够被广泛调整的扭曲。
3D音频意味着音频源文件有3D坐标,它能够根据和摄像头距离的不同产生衰减,让它在3D世界中感觉更自然(开率3D世界中的枪声;通常来说你将能够听到声音传来的位置和方向)。
IrrKlang是一个易于使用的音频库,它能使用几行代码来控制大多数音频文件,很适合用在我们的Breakout游戏中。注意irrKlang有一些小的限制条件:你被允许使用irrKlang仅仅是非商业目的,但是当你想要在商业上使用irrKlang你必须使用它们的pro版本。由于Breakout和这个系列教程是非商业的,我们被允许使用它们的本地库。
你能够从他们的下载页下载irrKlang;我们准备使用1.5版。由于irrKlang是封闭源代码的,我们不能自己编译这个库,因此我们必须按照irrKlang提供给我们的来做。幸运的是你有大量的预编译库文件因此大部分你需要做的都已经做好了。
一旦你包含了irrKlang的头文件,添加她们的库(irrKlang.lib)到链接设置并且拷贝它们的dll文件到我们设置的适当位置(通常和.exe文件在一起)。注意如果你想要加载MP3文件,你将需要包含ikpMP3.dll文件。

添加音乐

特别的在这个游戏中我创建了一小段音频来让它更有游戏感。你能在这里找到它作为游戏的背景音乐。无论游戏何时开始我们都将运行这个轨迹并且保持循环直到玩家关闭游戏。随意用你自己的音轨替换它或者将它用在任何你喜欢的地方。
使用irrKlang库添加它到Breakout游戏中是非常简单的。我们包含对应的头文件,创建一个irrKlang::ISoundEngine,使用createIrrKlangDevice初始化它然后使用引擎加载并且运行音频文件:

#include <irrklang/irrKlang.h>
using namespace irrklang;
ISoundEngine *SoundEngine = createIrrKlangDevice();
void Game::Init()

    [...]
    SoundEngine->play2D("audio/breakout.mp3", GL_TRUE);

我们在这创建了一个SoundEngine用于所有的音频相关的代码。一旦我们初始化声音引擎我们需要通过调用play2D简单的运行音频。它的第一个参数是文件名并且第二个参数表示我们是否想要文件循环(播放完后再次播放)。
并且这就是所有的!运行游戏你的外放和耳机将会猛烈的发出声音。

添加声音

我们不在那,由于音乐自己不足以让游戏有感觉。无论何时有趣的事情在游戏中发生时,我们想要播放声音。例如当我们撞击一个砖块,或者当我们激活一个能量块。下面是所有我们将会用到的声音。
bleep.mp3: 小球撞击一个非固体砖块的声音
solid.wav: 小球撞击一个砖块的声音
powerup.wav:玩家挡板碰到能量块的声音
bleep.wav: 小球撞击挡板的声音
无论碰撞在哪发生,我们运行类似的声音。只需要更新game类代码就可以让这发生。你只需要将音频效果添加到它们指定的位置。
这些加在一起让我们感觉游戏完成度更高了。所有加在一起看起来像这样:
http://learnopengl.com/video/in-practice/breakout/audio.mp4
IrrKlang允许音频的更多细节控制比如先进的缓存管理,音频效果或者声音事件回调。查看它们简单的C++教程并尝试运用它的特性。

转载请注明出处:http://blog.csdn.net/ylbs110/article/details/53150035

以上是关于(译)LearnOpenGL实际案例Breakout:音频的主要内容,如果未能解决你的问题,请参考以下文章

(译)LearnOpenGL实际案例Breakout:音频

(译)LearnOpenGL实际案例Breakout:渲染文本

(译)LearnOpenGL实际案例Breakout:渲染文本

(译)LearnOpenGL实际案例Breakout:小球

(译)LearnOpenGL实际案例Breakout:碰撞反馈

(译)LearnOpenGL实际案例Breakout:碰撞检测