在游戏中,我们把音乐文件分为两类。一是背景音乐,二是音效。比如说,进入一个场景之中,会有背景音乐的声音,主角是做出动作时,会有音效的产生等等呐。。
然而背景音乐和音效音乐是不大相同的,一般来说,背景音乐是很长的,然而音效却是很短暂的,只有短短的几秒而已。所以说,背景音乐只能播放一首,然而,音效却可以同时播放多个,相信大家在玩游戏时也有所体会。
在cocos2d-x3.x中,我们可以十分方便的调用CocosDenshion音效引擎库。我们需要加载音频文件时,只需要把相关的头文件写进来就可以了。
#include "SimpleAudioEngine.h"
下面要说一下,这个库所支持的音频文件了。
Android:mp3、mid、ogg和wav了。这些格式的区别可以去度娘查看。
IOS:aac、caf、MP3、m4a和wav。
Windows:mid、MP3和wav。
SimpleAudioEngine和许多Cocos2d的部件一样,是一个单例类。我们可以使用下面的代码来访它的实例:
SimpleAudioEngine::shareEngine();
加载音乐和音效文件通常来说是一个比较耗时的任务。为了防止由加载文件而产生的延迟导致实际播放与游戏不协调的现象发生,在播放音效和背景音乐之前,需要预加载音乐文件。通常,我们会在进入游戏场景前的载入阶段调用下面的这个方法。
void preloadEffect(const char* pszFilePath):用于预加载音效文件,其中pszFilePath为音效文件所在的目录位置。 void preloadBackgroundMusic(const char* pszFilePath):用于预加载背景音乐,其中pszFilePath为音乐文件所在的目录位置。
播放与停止:
音频引擎提供了非常方便的播放与暂停音乐音效的接口,使用起来非常方便的。API如下:
unsigned int playEffect(const char* pszFilePath, bool bLoop = false)
播放音效。和预加载的方法相同,前一个参数为路径,后一个为是否循环播放,默认为false,即只能播放一次。一般来说,音效不需要循环播放,而背景音乐却需要循环播放
。如下:
SimpleAudioEngine::sharedEngine()->playEffect("coin.wav", false);
另外,playEffect函数会返回一个无符号整形数,是此次音效播放的唯一标示。可用来暂停该音效。
void playBackgroundMusic(const char* pszFilePath, bool bLoop = false);
播放背景音乐,参数和前面的是一样的,这里不多说了。
void stopEffect(unsigned int nSoundId);
停止播放指定的音效,里面的参数,就是返回的那个音效标示。
void stopAllEffects();停止播放所有音效。 void stopBackgroundMusic();停止播放背景音乐。
暂停和恢复:
当游戏进入后台时,通常暂停音乐;当游戏返回到前台时,再继续播放音乐。
void pauseBackgroundMusic();
暂停播放背景音乐。暂停之后可以利用恢复播放音乐的方法来继续播放。
void pauseEffect(unsigned int nSoundId);
暂停播放指定的音效,里面的参数就是将要被暂停的音效的唯一标示。
void pauseAllEffects();暂停所有播放中的音效。
<span style="font-family: Arial, Helvetica, sans-serif;">void resumeBackgroundMusic();</span>
恢复播放背景音乐,在游戏重新进入前台时调用此方法。我们可以在AppDelegate提供的事件处理函数中调用此方法来恢复被暂停的音乐。
void resumeEffect(unsigned int nSoundId);
来恢复某一个被暂停的音效,里面的参数为该音效的唯一标示。
void rewindBackgroundMusic();重新播放背景音乐。
bool isBackgroundMusicPlaying():返回一个布尔类型的值,表示是否正在播放背景音乐。
void unloadEffect(const char*pszFilePath):卸载已预载入的音效文件,以释放系统资源。
当不再使用某个资源时,可以调用此方法来卸载该资源,但是如果要再次用该资源时,需要重新加载此资源,需要耗费大量的时间。
float EffectsVolume属性:获取或设置音效的音量大小,其取值为0.0到1.0之间的浮点数。注意,对此属性的设置会影响到所有音效的音量大小。 float BackgroundMusicVolume属性:获取或设置背景音乐的音量大小,其取值为0.0到1.0之间的浮点数。与EffectsVolume属性类似,对此属性的设置也会影响到所有背景音乐的音量大小。 void end():当不再使用音频引擎时,调用此方法来释放SimpleAudioEngine所占用的资源。