精通Cocos2d-x游戏开发(进阶卷)
上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示例中演示了上述接口的使用,只需要直接获取单例对象并执行相应的方法即可,非常简单,这里不再赘述。需要注意的是播放了平台不支持的音频格式有可能导致程序崩溃。