上QQ阅读APP看书,第一时间看更新
4.2 使用SimpleAudioEngine
SimpleAudioEngine是一个简单的声音引擎,是一个单例对象,命名空间为CocosDenshion,包含SimpleAudioEngine.h头文件并引用CocosDenshion命名空间后即可使用它。SimpleAudioEngine提供了背景音乐、音效的加载、缓存、播放等功能,使用了SimpleAudioEngine后需要在程序退出时执行SimpleAudioEngine的end方法,否则有可能产生内存泄漏。SimpleAudioEngine经过了多个版本的更新,目前最新的Cocos2d-x 3.10版本相比之前的版本有了不少调整,接下来简单了解一下SimpleAudioEngine的相关接口。
//获取单例 static SimpleAudioEngine* getInstance(); //释放单例 static void end();
以下是背景音乐相关接口。
//传入文件名,预加载背景音乐 virtual void preloadBackgroundMusic(const char* filePath); //传入文件名和是否循环,播放背景音乐 virtual void playBackgroundMusic(const char* filePath, bool loop = false); //停止播放背景音乐,如果releaseData为true,背景音乐还会被释放掉 virtual void stopBackgroundMusic(bool releaseData = false); //暂停播放背景音乐 virtual void pauseBackgroundMusic(); //恢复被暂停的背景音乐 virtual void resumeBackgroundMusic(); //重新播放当前背景音乐 virtual void rewindBackgroundMusic(); //判断背景音乐是否可以被播放 virtual bool willPlayBackgroundMusic(); //判断当前是否正在播放背景音乐 virtual bool isBackgroundMusicPlaying(); //获取背景音乐的音量,返回值的范围是0~1.0 virtual float getBackgroundMusicVolume(); //设置背景音乐的音量,范围为0~1.0 virtual void setBackgroundMusicVolume(float volume);
以下是音效相关接口。
//获取音效的音量,返回值的范围是0~1.0 virtual float getEffectsVolume(); //设置音效的音量,范围为0~1.0 virtual void setEffectsVolume(float volume); //播放指定的音效,并返回音效句柄ID,参数意义如下 filePath音效文件名 loop是否循环播放 pitch播放频率,默认为1.0,该值越小播放速度越慢、时间越长,反之则播放速度越快、 时间越短 pan声道,取值范围为-1.0~1.0, -1.0表示只开启左声道 gain音量,取值范围为0.0~1.0,默认为1.0 //在Win32下,pitch、pan、gain参数都是无效的,并且在Win32下同一个音效不能同时播 放多个 //在三星Galaxy S2上,pitch参数是无效的 virtual unsigned int playEffect(const char* filePath, bool loop = false, float pitch = 1.0f, float pan = 0.0f, float gain = 1.0f); //传入playEffect返回的音效句柄,暂停音效播放 virtual void pauseEffect(unsigned int soundId); //暂停所有音效的播放 virtual void pauseAllEffects(); //传入playEffect返回的音效句柄,恢复被暂停的音效 virtual void resumeEffect(unsigned int soundId); //恢复所有被暂停的音效 virtual void resumeAllEffects(); //传入playEffect返回的音效句柄,停止播放音效 virtual void stopEffect(unsigned int soundId); //停止播放所有音效 virtual void stopAllEffects(); //传入文件名,预加载音效 virtual void preloadEffect(const char* filePath); //传入文件名,卸载指定音效 virtual void unloadEffect(const char* filePath);
在cpp-tests的CocosDenshion示例中演示了上述接口的使用,只需要直接获取单例对象并执行相应的方法即可,非常简单,这里不再赘述。需要注意的是播放了平台不支持的音频格式有可能导致程序崩溃。