使用音效引擎
我們可以使用Cocos2d-x自帶的CocosDension庫來使用聲音引擎。CocosDesion實現了簡單易用的SimpleAudioEngine類,為了使用它,我們只需引入他的頭文件即可:
#include "SimpleAudioEngine.h"
支持平台與格式
CocosDesion支持的音樂格式如下:
平台 | 支持的常見文件格式 | 備注 |
---|---|---|
Android | mp3, mid, oggg, wav | 可以播放android.media.MediaPlayer所支持的所有格式 |
iOS | aac, caf, mp3, m4a, wav | 可以播放AVAudioPlayer所支持的所有格式 |
Windows | mid, mp3, wav | 無 |
CocosDesion支持的音效格式如下:
平台 | 支持的常見文件格式 | 備注 |
---|---|---|
Android | oggg, wav | 對wav的支持不完美 |
iOS | caf, m4a | 可以播放Cocos2d-iPhone CocosDesion所支持的所有格式 |
Windows | mid, wav | 無 |
預加載
加載音樂和音效通常是個耗時間的過程,因此為了防止由加載產生的延時導致實際播放與游戲播放不協調的現象。在播放音效和音樂前,需要預加載音樂文件。
通常我們會在進入場景前調用以下兩個方法來預加載文件:
void SimpleAudioEngine::preloadBackgroundMusic(const char* pszFilePath); void SimpleAudioEngine::preloadEffect(const char* pszFilePath);
因為SimpleAudioEngine與許多Cocos2d-x的部件一樣,是一個單例類。所以當我們使用以上兩個接口時,可以使用以下代碼訪問其實例:
SimpleAudioEngine::getInstance()->preloadBackgroundMusic( MUSIC_FILE );
SimpleAudioEngine::getInstance()->preloadEffect( EFFECT_FILE );
播放與停止
音頻引擎提供了播放與停止的接口,以下介紹相應接口和使用方法:
virtual void playBackgroundMusic(const char* pszFilePath, bool bLoop = false); //播放背景音樂,bLoop表示是否要循環播放 virtual unsigned int playEffect(const char* pszFilePath, bool bLoop = false, float pitch = 1.0f, float pan = 0.0f, float gain = 1.0f); //播放音效,bLoop表示是否要循環播放 virtual void stopBackgroundMusic(bool bReleaseData = false); //停止背景音樂 virtual void stopEffect(unsigned int nSoundId); //停止指定音效,nSoundId為音效編號 virtual void stopAllEffects(); //停止所有音效
使用方法:
SimpleAudioEngine::getInstance()->playBackgroundMusic(MUSIC_FILE, true); //播放背景音樂 SimpleAudioEngine::getInstance()->stopBackgroundMusic(); //停止背景音樂 SimpleAudioEngine::getInstance()->stopEffect(_soundId); //停止音效
暫停和恢復
當游戲進入后台時,通常需要暫停播放音樂,當游戲恢復前台運行時,再繼續播放音樂。以下介紹幾個相關接口以及用法:
virtual void pauseBackgroundMusic(); //暫停背景音樂 virtual void pauseEffect(unsigned int nSoundId); //暫停指定音效,nSoundId為音效編號 virtual void pauseAllEffects(); //暫停所以音效 virtual void resumeBackgroundMusic(); //恢復背景音樂 virtual void resumeEffect(unsigned int nSoundId); //恢復指定音效,nSoundId為音效編號 virtual void resumeAllEffects(); //恢復所有音效
使用方法:
SimpleAudioEngine::getInstance()->pauseEffect(_soundId); //暫停編號為_soundId的音效 SimpleAudioEngine::getInstance()->resumeEffect(_soundId); //恢復編號為_soundId的音效 SimpleAudioEngine::getInstance()->pauseAllEffects(); //暫停所有音效 SimpleAudioEngine::getInstance()->resumeAllEffects(); //恢復所有音效
其他成員
除了以上介紹的方法外,Cocos2d-x還提供了便捷的控制方法與屬性:
virtual void setBackgroundMusicVolume(float volume); //設置背景音樂音量 virtual void setEffectsVolume(float volume); //設置音效音量 virtual void rewindBackgroundMusic(); //重新播放背景音樂 virtual bool isBackgroundMusicPlaying(); //返回一個值,表示是否在播放背景音樂