对应源码位置:cocos2d-x-3.3\cocos\audio\include\SimpleAudioEngine
SimpleAudioEngine的实现
SimpleAudioEngine
是提供了简单的 播放音效,以及播放背景音乐的功能。
class EXPORT_DLL SimpleAudioEngine
{
public:
static SimpleAudioEngine* getInstance();
static void end();
protected:
SimpleAudioEngine();
virtual ~SimpleAudioEngine();
public:
//播放背景音乐
virtual void preloadBackgroundMusic(const char* pszFilePath);
virtual void playBackgroundMusic(const char* pszFilePath, bool bLoop = false);
virtual void stopBackgroundMusic(bool bReleaseData = false);
virtual void pauseBackgroundMusic();
virtual void resumeBackgroundMusic();
virtual void rewindBackgroundMusic();
virtual bool willPlayBackgroundMusic();
virtual bool isBackgroundMusicPlaying();
virtual float getBackgroundMusicVolume();
virtual void setBackgroundMusicVolume(float volume);
//播放音效
virtual float getEffectsVolume();
virtual void setEffectsVolume(float volume);
virtual unsigned int playEffect(const char* pszFilePath, bool bLoop = false,
float pitch = 1.0f, float pan = 0.0f, float gain = 1.0f);
virtual void pauseEffect(unsigned int nSoundId);
virtual void pauseAllEffects();
virtual void resumeEffect(unsigned int nSoundId);
virtual void resumeAllEffects();
virtual void stopEffect(unsigned int nSoundId);
virtual void stopAllEffects();
virtual void preloadEffect(const char* pszFilePath);
virtual void unloadEffect(const char* pszFilePath);
};
以win32下的实现为例:
//用于处理 音效 每个播放音效 对应一个MCI
typedef map<unsigned int, MciPlayer *> EffectList;
//用于播放 背景音乐
typedef pair<unsigned int, MciPlayer *> Effect;
static char s_szRootPath[MAX_PATH];
static DWORD s_dwRootLen;
static char s_szFullPath[MAX_PATH];
//获取全路径
static std::string _FullPath(const char * szPath);
//计算路径的hash值
static unsigned int _Hash(const char *key);
#define BREAK_IF(cond) if (cond) break;
//用于实现单例 音效
static EffectList& sharedList()
{
static EffectList s_List;
return s_List;
}
//用于实现单例 背景音乐
static MciPlayer& sharedMusic()
{
static MciPlayer s_Music;
return s_Music;
}
//单例模式
SimpleAudioEngine* SimpleAudioEngine::getInstance()
{
static SimpleAudioEngine s_SharedEngine;
return &s_SharedEngine;
}
//一个个都给删除了
void SimpleAudioEngine::end()