游戏中的声音:
1、 音乐:通常长度长,适合做环境音乐,通常同一时刻只能播放一首音乐。
2、音效:长度短,可以同时播放多个音效。
Cocos2d-x提供了对音乐和音效的支持,实现播放、暂停和循环功能。一、包含所需的头文件与命名空间
音效引擎库CocosDenshion与游戏引擎捆绑发布,却不属于游戏引擎的一部分。
CocosDenshion位于Cocos2d-x目录下的” CocosDenshion”目录中,当使用音效引擎时候,把引擎头文件引进进来。
为了使用音效引擎,需要在程序中包含它的头文件与命名空间。
#include "SimpleAudioEngine.h"
using namespace CocosDenshion;
程序中包含如上头文件与命名空间后,就可以使用Cocos2d-x提供的音乐与音效功能。
二、支持的格式
CocosDenshion引擎库实际上对系统音频API的封装,支持的音频文件格式与平台有关。
Android音乐格式:mp3、mid、ogg、wav;可以播放android.media.MediaPlayer所支持的所有格式。
Android音效格式: ogg、wav;对wav支持并不完美。
IOS音乐格式:aac、caf、mp3、m4a和wav;可以播放AVAudioPlayer所支持的所有格式。
IOS音效格式:caf和wav;可以播放Cocos2d-iPhone CocosDenshion所支持的所有格式。
Windows音乐格式:mid、mp3、wav。
Windows音效格式:mid、wav。三、使用
(一)预加载:
为了放置由即时加载产生的延迟,播放音效和背景音乐之前,需要预加载音乐文件,通常在进入游戏场景钱的载入阶段。
void preloadEffect(const char* pszFilePath):用于预加载音效文件,其中pszFilePath为音效文件所在的目录位置。
Void preloadBackgroundMusic(const char * pszFilePath):用于预加载背景音乐,pszFilePath为音乐文件所在的目录位置。实例:
SimpleAudioEngine::sharedEngine()->preloadEffect("");
SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("");
(二)播放:
Unsigned int playEffect(const char* pszFilePath, bool bLoop = false):播放音效。
pszFilePath表示音效文件的存放位置,bLoop参数控制是否循环播放,默认为false,即只播放一次。
返回的一个无符号整形值,此次播放音效的唯一标识,用于暂停此音效。
VoidplayBackgroundMusic(const char* pszFilePath, bool bLoop= false);播放背景音乐。
pszFilePath表示音乐文件所在路径,bLoop表示是否循环播放。
SimpleAudioEngine::sharedEngine()->playEffect("");
SimpleAudioEngine::sharedEngine()->playBackgroundMusic("");
(三)停止:
Void stopEffect(unsigned int nSoundId):停止播放指定的音效。
nSoundId参数是将要被停止播放的音效的唯一标识,该标识是playEffect方法的返回值。
Void stopAllEffects():停止播放所有音效。
实例:
SimpleAudioEngine::sharedEngine()->stopEffect("音效文件名");
SimpleAudioEngine::sharedEngine()->stopAllEffects();
SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();
(四)暂停
当游戏进入后台,暂停播放音乐;当游戏恢复前台运行,继续播放音乐。
Void pauseBackgroundMusic():暂停播放音乐。通常在AppDelegate类中调用此方法。
Void pauseEffect(unsigned int nSoundId):暂停播放指定音效。
实例:
SimpleAudioEngine::sharedEngine()->pauseEffect("音效文件名");
SimpleAudioEngine::sharedEngine()->pauseAllEffects();
SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
(五)恢复播放
Void resumeBackgroundMusic():恢复音乐播放。
Void resumeEffect(unsigned intnSoundId):恢复播放某一被暂停的音效。
Void resumeAllEffects():恢复所有被暂停的音效。
实例:
SimpleAudioEngine::sharedEngine()->resumeEffect("音效名");
SimpleAudioEngine::sharedEngine()->resumeAllEffects();
SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
(六)其他
Void rewindBackgroundMusic():重新播放背景音乐。
Bool isBackgroundMusicPlaying():返回一个布尔类型值,表示是否正在播放背景音乐。
Void unloadEffect(const char*pszFilePath):卸载已经载入的音效文件,释放系统资源。
Float EffectVolume属性:获取或设置音效的音量大小,取值0.0到1.0之间。
Float BackgroundMusicVolume属性:获取或设置背景音乐的音量大小,取值0.0到1.0之间。
实例:
SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();
SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying();
SimpleAudioEngine::sharedEngine()->unloadEffect("音效文件名");
SimpleAudioEngine::sharedEngine()->end();
SimpleAudioEngine::sharedEngine()->getEffectsVolume();
SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume();
SimpleAudioEngine::sharedEngine()->setEffectsVolume(0.5);
SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.5);