123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- #include <iostream>
- #include "audio/include/SimpleAudioEngine.h"
- #include "audio/include/AudioEngine.h"
- using namespace CocosDenshion;
- using namespace cocos2d;
- using namespace cocos2d::experimental;
- struct SimpleAudioEngineLinux {
- SimpleAudioEngine * engine = nullptr;
- int musicid;
- float effectsvolume;
- std::string musicpath;
- };
- SimpleAudioEngineLinux * g_SimpleAudioEngineLinux = nullptr;
- SimpleAudioEngine* SimpleAudioEngine::getInstance()
- {
- if (!g_SimpleAudioEngineLinux) {
- g_SimpleAudioEngineLinux = new SimpleAudioEngineLinux();
- g_SimpleAudioEngineLinux->engine = new SimpleAudioEngine();
- }
- return g_SimpleAudioEngineLinux->engine;
- }
- void SimpleAudioEngine::end()
- {
- if (g_SimpleAudioEngineLinux) {
- delete g_SimpleAudioEngineLinux->engine;
- delete g_SimpleAudioEngineLinux;
- }
- g_SimpleAudioEngineLinux = nullptr;
- }
- SimpleAudioEngine::SimpleAudioEngine()
- {
- g_SimpleAudioEngineLinux->musicid = -1;
- g_SimpleAudioEngineLinux->effectsvolume = 1.0f;
- }
- SimpleAudioEngine::~SimpleAudioEngine()
- {
- }
- void SimpleAudioEngine::preloadBackgroundMusic(const char* filePath)
- {
- g_SimpleAudioEngineLinux->musicpath = filePath;
- AudioEngine::preload(filePath);
- }
- void SimpleAudioEngine::playBackgroundMusic(const char* filePath, bool loop)
- {
- g_SimpleAudioEngineLinux->musicpath = filePath;
- g_SimpleAudioEngineLinux->musicid = AudioEngine::play2d(filePath, loop);
- }
- void SimpleAudioEngine::stopBackgroundMusic(bool releaseData)
- {
- AudioEngine::stop(g_SimpleAudioEngineLinux->musicid);
- if (releaseData) {
- AudioEngine::uncache(g_SimpleAudioEngineLinux->musicpath.c_str());
- }
- }
- void SimpleAudioEngine::pauseBackgroundMusic()
- {
- AudioEngine::pause(g_SimpleAudioEngineLinux->musicid);
- }
- void SimpleAudioEngine::resumeBackgroundMusic()
- {
- AudioEngine::resume(g_SimpleAudioEngineLinux->musicid);
- }
- void SimpleAudioEngine::rewindBackgroundMusic()
- {
- AudioEngine::setCurrentTime(g_SimpleAudioEngineLinux->musicid, 0);
- }
- bool SimpleAudioEngine::willPlayBackgroundMusic()
- {
- return g_SimpleAudioEngineLinux->musicid != -1;
- }
- bool SimpleAudioEngine::isBackgroundMusicPlaying()
- {
- return AudioEngine::getState(g_SimpleAudioEngineLinux->musicid) == AudioEngine::AudioState::PLAYING;
- }
- //
- // properties
- //
- /**
- * The volume of the background music within the range of 0.0 as the minimum and 1.0 as the maximum.
- * @js getMusicVolume
- * @lua getMusicVolume
- */
- float SimpleAudioEngine::getBackgroundMusicVolume()
- {
- return AudioEngine::getVolume(g_SimpleAudioEngineLinux->musicid);
- }
- /**
- * Set the volume of background music.
- *
- * @param volume must be within the range of 0.0 as the minimum and 1.0 as the maximum.
- * @js setMusicVolume
- * @lua setMusicVolume
- */
- void SimpleAudioEngine::setBackgroundMusicVolume(float volume)
- {
- AudioEngine::setVolume(g_SimpleAudioEngineLinux->musicid, volume);
- }
- /**
- * The volume of the effects within the range of 0.0 as the minimum and 1.0 as the maximum.
- */
- float SimpleAudioEngine::getEffectsVolume()
- {
- return g_SimpleAudioEngineLinux->effectsvolume;
- }
- /**
- * Set the volume of sound effects.
- *
- * @param volume must be within the range of 0.0 as the minimum and 1.0 as the maximum.
- */
- void SimpleAudioEngine::setEffectsVolume(float volume)
- {
- g_SimpleAudioEngineLinux->effectsvolume = volume;
- }
- /**
- * Play sound effect with a file path, pitch, pan and gain.
- *
- * @param filePath The path of the effect file.
- * @param loop Determines whether to loop the effect playing or not. The default value is false.
- * @param pitch Frequency, normal value is 1.0. Will also change effect play time.
- * @param pan Stereo effect, in the range of [-1..1] where -1 enables only left channel.
- * @param gain Volume, in the range of [0..1]. The normal value is 1.
- * @return The sound id.
- *
- * @note Full support is under development, now there are limitations:
- * - no pitch effect on Samsung Galaxy S2 with OpenSL backend enabled;
- * - no pitch/pan/gain on win32.
- */
- unsigned int SimpleAudioEngine::playEffect(const char* filePath, bool loop, float pitch, float pan, float gain)
- {
- return AudioEngine::play2d(filePath, loop, gain);
- }
- /**
- * Pause playing sound effect.
- *
- * @param soundId The return value of function playEffect.
- */
- void SimpleAudioEngine::pauseEffect(unsigned int soundId)
- {
- AudioEngine::pause(soundId);
- }
- /**
- * Pause all playing sound effect.
- */
- void SimpleAudioEngine::pauseAllEffects()
- {
- AudioEngine::pauseAll();
- }
- /**
- * Resume playing sound effect.
- *
- * @param soundId The return value of function playEffect.
- */
- void SimpleAudioEngine::resumeEffect(unsigned int soundId)
- {
- AudioEngine::resume(soundId);
- }
- /**
- * Resume all playing sound effect.
- */
- void SimpleAudioEngine::resumeAllEffects()
- {
- AudioEngine::resumeAll();
- }
- /**
- * Stop playing sound effect.
- *
- * @param soundId The return value of function playEffect.
- */
- void SimpleAudioEngine::stopEffect(unsigned int soundId)
- {
- AudioEngine::stop(soundId);
- }
- /**
- * Stop all playing sound effects.
- */
- void SimpleAudioEngine::stopAllEffects()
- {
- AudioEngine::stopAll();
- }
- /**
- * Preload a compressed audio file.
- *
- * The compressed audio will be decoded to wave, then written into an internal buffer in SimpleAudioEngine.
- *
- * @param filePath The path of the effect file.
- * @js NA
- */
- void SimpleAudioEngine::preloadEffect(const char* filePath)
- {
- AudioEngine::preload(filePath);
- }
- /**
- * Unload the preloaded effect from internal buffer.
- *
- * @param filePath The path of the effect file.
- */
- void SimpleAudioEngine::unloadEffect(const char* filePath)
- {
- AudioEngine::uncache(filePath);
- }
|