cocos2dx 音效预加载
在游戏开发中,声音通常可分为两类:
- 音乐:这类声音一般长度较长,适合作为环境音乐,比如游戏的背景音乐。由于其长度特性,同一时刻通常只能播放一首音乐。
- 音效:特点是长度短,但可以同时播放多个音效,具有很强的表现力。
启用 CocosDenshion 音效引擎库
在游戏开发里,我们能够很方便地启用 CocosDenshion 音效引擎库。CocosDenshion 位于 Cocos2d - x 目录下的 "CocosDenshion" 目录中。通常,Cocos2d - x 项目已包含该库,当需要使用音效引擎时,引入其头文件即可。
CocosDenshion 实现了简单易用的 SimpleAudioEngine 类,引入头文件的代码如下:
#include "SimpleAudioEngine.h"
CocosDenshion 移植自 Cocos2d - iPhone 中的同名库。实际上,Cocos2d - iPhone 中的 CocosDenshion 实现了 3 个音效引擎,从底层到高级依次为 CDSoundEngine、CDAudioManager 和 SimpleAudioEngine。前两个较为底层的引擎用于高级音频开发,例如实现 3D 混音等。不过,对于普通开发者而言,SimpleAudioEngine 已能满足大部分游戏开发需求。底层的音效引擎封装自 OpenAL 音频接口,实现了灵活、高效的音频回放引擎。但 OpenAL 仅支持 OS X(包括 iOS)平台,其他平台没有类似接口,所以 Cocos2d - x 舍弃了 CDSoundEngine 和 CDAudioManager 这两个底层引擎,只保留了最常用的 SimpleAudioEngine。
支持的音频文件格式
CocosDenshion 引擎库是对系统音频 API 的封装,因此它支持的音频文件格式与平台有关。
平台音乐格式
- Android:支持 mp3、mid、ogg 和 wav,可播放
android.media.MediaPlayer所支持的所有格式。 - iOS:支持 aac、caf、mp3、m4a 和 wav,可播放
AVAudioPlayer所支持的所有格式。 - Windows:支持 mid、mp3 和 wav。
平台音效格式
- Android:支持 ogg 和 wav,但对 wav 的支持并不完美。
- iOS:支持 caf 和 wav,可播放 Cocos2d - iPhone 的 CocosDenshion 所支持的所有格式。
- Windows:支持 mid 和 wav。
访问 SimpleAudioEngine 实例
SimpleAudioEngine 与许多 Cocos2d 的部件一样,是一个单例类。使用以下代码来访问它的实例:
SimpleAudioEngine::sharedEngine();
预加载音乐和音效
加载音乐和音效通常是一个耗时的过程,为避免即时加载产生的延迟导致实际播放与游戏不协调,在播放音效和背景音乐之前,需要预加载音乐文件。通常,会在进入游戏场景前的载入阶段调用以下两个方法:
// 用于预加载音效文件,其中 pszFilePath 为音效文件所在的目录位置
void preloadEffect(const char* pszFilePath);
// 用于预加载背景音乐,其中 pszFilePath 为音乐文件所在的目录位置
void preloadBackgroundMusic(const char* pszFilePath);
其他常用方法和属性
// 重新播放背景音乐
void rewindBackgroundMusic();
// 返回一个布尔类型的值,表示是否正在播放背景音乐
bool isBackgroundMusicPlaying();
// 卸载已预载入的音效文件,以释放系统资源。pszFilePath 参数代表预载入音效文件的路径
void unloadEffect(const char* pszFilePath);
// 获取或设置音效的音量大小,其取值为 0.0 到 1.0 之间的浮点数。注意,对此属性的设置会影响到所有音效的音量大小
float EffectsVolume;
// 获取或设置背景音乐的音量大小,其取值为 0.0 到 1.0 之间的浮点数。与 EffectsVolume 属性类似,对此属性的设置也会影响到所有背景音乐的音量大小
float BackgroundMusicVolume;
// 当不再使用音频引擎时,调用此方法来释放 SimpleAudioEngine 所占用的资源
void end();
使用注意事项
使用 SimpleAudioEngine 时,应注意以下三点:
- 提前加载:播放音效或背景音乐前,一定要提前加载音效或背景音乐文件。
- 场景切换:在播放背景音乐时,若要切换场景,不需要手动停止背景音乐,Cocos2d - x 会自动停止先前场景的背景音乐,并播放新场景中的背景音乐(如果新场景有背景音乐的话)。
- 资源释放:在退出且不再需要音乐时,要调用
end方法来释放引擎占用的资源。