From 6519309d800553230a52056bc842c8b2ed55daf7 Mon Sep 17 00:00:00 2001 From: ShirokoSama <141250108@smail.nju.edu.cn> Date: Wed, 22 Nov 2017 01:25:57 +0800 Subject: [PATCH] =?UTF-8?q?06=20In=20Practice\2D-Game\09=20Audio=E7=BF=BB?= =?UTF-8?q?=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/06 In Practice/2D-Game/09 Audio.md | 82 +++++++++++++++++++++++- docs/img/06/Breakout/09/irrklang.png | Bin 0 -> 16704 bytes 2 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 docs/img/06/Breakout/09/irrklang.png diff --git a/docs/06 In Practice/2D-Game/09 Audio.md b/docs/06 In Practice/2D-Game/09 Audio.md index 3d5b660..a64a99c 100644 --- a/docs/06 In Practice/2D-Game/09 Audio.md +++ b/docs/06 In Practice/2D-Game/09 Audio.md @@ -1,7 +1,83 @@ # 音效 -**暂无翻译** +原文 | [Audio](https://learnopengl.com/#!In-Practice/2D-Game/Audio) +----- | ---- +作者 | JoeydeVries +翻译 | [包纸](https://github.com/ShirokoSama) +校对 | 暂无 -这篇教程暂时还没有进行翻译,您可以先阅读[原文](https://learnopengl.com/#!In-Practice/2D-Game/Audio),或经常来刷新看看是否有更新的进展。当然,我们更欢迎您在[GitHub上](https://github.com/LearnOpenGL-CN/LearnOpenGL-CN)认领翻译这篇文章,帮助我们完善这个教程系列。 +无论我们将游戏音量调到多大,我们都不会听到来自游戏的任何音效。我们已经展示了这么多内容,但没有任何音频,游戏仍显得有些空洞。在本节教程中,我们将解决这个问题。 + +OpenGL不提供关于音频的任何支持。我们不得不手动将音频加载为字节格式,处理并将其转化为音频流,并适当地管理多个音频流以供我们的游戏使用。然而这有一些复杂,并且需要一些底层的音频工程知识。 + +如果你乐意,你可以手动加载来自多种扩展名的音频文件的音频流。然而,我们将使用被称为irrKlang的音频管理库。 + +## irrKlang + +GLM Logo + +IrrKlang是一个可以播放WAV,MP3,OGG和FLAC文件的高级二维和三维(Windows,Mac OS X,Linux)声音引擎和音频库。它还有一些可以自由调整的音频效果,如混响、延迟和失真。 + +!!! important + + 3D音频意味着音频源可以有一个3D位置,然后根据相机到音频源的位置衰减音量,使其在一个3D世界里显得自然(想想3D世界中的枪声,通常你可以从音效中听出它来自什么方向/位置)。 + +IrrKlang是一个易于使用的音频库,只需几行代码便可播放大多数音频文件,这使它成为我们Breakout游戏的完美选择。请注意,irrKlang有一个有一定限制的证书:允许你将irrKlang用于非商业目的,但是如果你想使用irrKlang商业版,就必须支付购买他们的专业版。由于Breakout和本教程系列是非商业性的,所以我们可以自由地使用他们的标准库。 + +你可以从他们的[下载页面](http://www.ambiera.com/irrklang/downloads.html)下载irrKlang,我们将使用1.5版本。由于irrKlang是非开源的代码,因此我们不得不使用irrKlang为我们提供的任何东西。幸运的是,他们有大量的预编译库文件,所以你们大多数人应该可以很好地使用它。 + +你需要引入了irrKlang的头文件,将他们的库文件(irrKlang.lib)添加到链接器设置中,并将他们的dll文件复制到适当的目录下(通常和.exe在同一目录下)。需要注意的是,如果你想要加载MP3文件,则还需要引入ikpMP3.dll文件。 + +## 添加音乐 + +为了这个游戏我特制了一个小小的音轨,让游戏更富有活力。在[这里](https://learnopengl.com/audio/in-practice/breakout/breakout.mp3)你可以找到我们将要用作游戏背景音乐的音轨。这个音轨会在游戏开始时播放并不断循环直到游戏结束。你可以随意用自己的音频替换它,或者用喜欢的方式使用它。 + + + +利用irrKlang库将其添加到Breakout游戏里非常简单。我们引入相应的头文件,创建irrKlang::ISoundEngine,用createIrrKlangDevice初始化它并使用这个引擎加载、播放音频: + +```c++ +#include +using namespace irrklang; + +ISoundEngine *SoundEngine = createIrrKlangDevice(); + +void Game::Init() +{ + [...] + SoundEngine->play2D("audio/breakout.mp3", GL_TRUE); +} +``` + +在这里,我们创建了一个SoundEngine,用于管理所有与音频相关的代码。一旦我们初始化了引擎,便可以调用play2D函数播放音频。第一个参数为文件名,第二个参数为是否循环播放。 + +这就是全部了!现在运行游戏会使你的耳机或扬声器迸发出声波。 + +## 添加音效 + +我们还没有结束,因为音乐本身并不能使游戏完全充满活力。我们希望在游戏发生一些有趣事件时播放音效,作为给玩家的额外反馈,如我们撞击砖块、获得道具时。下面你可以找到我们需要的所有音效(来自freesound.org): + +[bleep.mp3](https://learnopengl.com/audio/in-practice/breakout/bleep.mp3): 小球撞击非实心砖块时的音效 + + + +[solid.wav](https://learnopengl.com/audio/in-practice/breakout/solid.wav):小球撞击实心砖块时的音效 + + + +[powerup.wav](https://learnopengl.com/audio/in-practice/breakout/powerup.wav): 获得道具时的音效 + + + +[bleep.wav](https://learnopengl.com/audio/in-practice/breakout/bleep.wav): 小球在挡板上反弹时的音效 + + + +无论在哪里发生碰撞,我们都会播放相应的音效。我不会详细阐述每一行的代码,并把更新后的代码放在了[这里](https://learnopengl.com/code_viewer.php?code=in-practice/breakout/game_audio),你应该可以轻松地找到相应的添加音效的地方。 + +把这些集成在一起后我们的游戏显得更完整了,就像这样: + + + +IrrKlang允许一些更精细的音频管理功能,如内存管理、声音特效和声音事件回调。看看他们的C++[教程](http://www.ambiera.com/irrklang/tutorials.html)并尝试一些功能吧。 - \ No newline at end of file diff --git a/docs/img/06/Breakout/09/irrklang.png b/docs/img/06/Breakout/09/irrklang.png new file mode 100644 index 0000000000000000000000000000000000000000..125d1244dfa9f3f2a165e7f5610a2f39ac4e7224 GIT binary patch literal 16704 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 literal 0 HcmV?d00001