14.【cocos2d-x 源码分析】:Audio的详细分析

本文深入分析了cocos2d-x 3.3版本中SimpleAudioEngine的实现,该组件用于播放音效和背景音乐。以Win32平台为例,探讨了SimpleAudioEngine如何将各种操作委托给底层实现。
摘要由CSDN通过智能技术生成
对应源码位置: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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值