Here’s a class for fading music in Cocos2dx 2.x using the SimpleAudioEngine. Seems like this should be a basic function of the SimpleAudioEngine itself, but this is pretty easy to use, just run it on any CCNode like any other action:
- runAction(MusicFade::create(1.0f, 0.0f, true));
Copy and paste from below, or here’s a zip with the files.
- #include "MusicFade.h"
- #include "SimpleAudioEngine.h"
-
- using namespace cocos2d;
- using namespace CocosDenshion;
-
- MusicFade::MusicFade()
- {
- m_initialVal = 0;
- m_targetVal = 0;
- }
-
- MusicFade* MusicFade::create(float duration, float volume, bool pauseOnComplete)
- {
- MusicFade *pAction = new MusicFade();
- pAction->initWithDuration(duration, volume, pauseOnComplete);
- pAction->autorelease();
-
- return pAction;
- }
-
- bool MusicFade::initWithDuration(float duration, float volume, bool pauseOnComplete)
- {
- if (CCActionInterval::initWithDuration(duration))
- {
- m_targetVal = volume;
- m_bPauseOnComplete = pauseOnComplete;
- return true;
- }
-
- return false;
- }
-
- void MusicFade::update(float time)
- {
- float vol = m_initialVal + time*(m_targetVal - m_initialVal);
- SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(vol);
-
- }
-
- void MusicFade::startWithTarget(CCNode *pTarget)
- {
- CCActionInterval::startWithTarget( pTarget );
- m_initialVal = SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume();
- }
-
- void MusicFade::stop(void)
- {
- if(m_bPauseOnComplete) SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
- CCActionInterval::stop();
- }
- #ifndef __MusicFade__
- #define __MusicFade__
-
- #include "cocos2d.h"
-
- class MusicFade : public cocos2d::CCActionInterval
- {
- public:
- MusicFade();
-
- static MusicFade* create(float d, float volume, bool pauseOnComplete = false );
- bool initWithDuration(float d, float volume, bool pauseOnComplete );
-
- virtual void startWithTarget(cocos2d::CCNode *pTarget);
- virtual void update(float time);
- virtual void stop(void);
-
- protected:
- float m_targetVal;
- float m_initialVal;
- bool m_bPauseOnComplete;
- };
-
- #endif /* defined(__MusicFade__) */