- 精通Cocos2d-x游戲開發(進階卷)
- 王永寶
- 840字
- 2020-11-28 22:37:01
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示例中演示了上述接口的使用,只需要直接獲取單例對象并執行相應的方法即可,非常簡單,這里不再贅述。需要注意的是播放了平臺不支持的音頻格式有可能導致程序崩潰。