39 #ifndef __CU_AUDIO_ENGINE_H__
40 #define __CU_AUDIO_ENGINE_H__
41 #include <cugl/audio/CUSound.h>
42 #include <cugl/audio/CUMusic.h>
43 #include <cugl/util/CUTimestamp.h>
44 #include <unordered_map>
49 #define AUDIO_INPUT_CHANNELS 24
51 #define AUDIO_OUTPUT_CHANNELS 2
53 #define AUDIO_FREQUENCY 44100
56 #if defined (__MACOSX__) || defined (__IPHONEOS__)
57 #define CU_AUDIO_AVFOUNDATION 1
93 #pragma mark Sound State
113 std::shared_ptr<MusicQueue> _mqueue;
116 unsigned int _capacity;
118 std::vector<std::shared_ptr<SoundChannel>> _channels;
120 std::unordered_map<std::string,int> _effects;
122 std::deque<std::string> _equeue;
135 std::function<void(Music* asset, bool status)> _musicCB;
148 std::function<void(const std::string& key , bool status)> _soundCB;
151 #pragma mark Constructors (Private)
165 ~AudioEngine() { dispose(); }
178 bool init(
unsigned int channels=AUDIO_INPUT_CHANNELS);
190 #pragma mark Internal Helpers
199 void removeKey(std::string key);
203 #pragma mark Static Accessors
230 static void start(
unsigned int channels=AUDIO_INPUT_CHANNELS);
246 #pragma mark Music Management
271 void playMusic(
const std::shared_ptr<Music>& music,
bool loop=
false,
float volume=-1.0f,
float fade=0.0f);
496 #pragma mark Music Queue
521 void queueMusic(
const std::shared_ptr<Music>& music,
bool loop=
false,
float volume=-1.0f,
float fade=0.0f);
551 #pragma mark Sound Effect Management
576 bool playEffect(
const std::string& key,
const std::shared_ptr<Sound>& sound,
577 bool loop=
false,
float volume=-1.0f,
bool force=
false);
603 bool playEffect(
const char* key,
const std::shared_ptr<Sound>& sound,
604 bool loop=
false,
float volume=-1.0f,
bool force=
false) {
605 return playEffect(std::string(key),sound,loop,volume,force);
619 return (
size_t)_capacity-_effects.size();
656 return _effects.find(key) != _effects.end();
1044 _soundCB = callback;
1073 void gcEffect(
int id,
bool status);
1077 #pragma mark Global Management
float getMusicVolume() const
void resumeEffect(const char *key)
Definition: CUAudioEngine.h:1010
const Music * currentMusic() const
static void start(unsigned int channels=AUDIO_INPUT_CHANNELS)
float getEffectVolume(const char *key) const
Definition: CUAudioEngine.h:762
size_t getMusicQueueSize() const
std::function< void(const std::string &key, bool)> getEffectListener() const
Definition: CUAudioEngine.h:1057
void setEffectLoop(const char *key, bool loop)
Definition: CUAudioEngine.h:738
bool isActiveEffect(const std::string &key) const
Definition: CUAudioEngine.h:655
std::function< void(Music *, bool)> getMusicListener() const
Definition: CUAudioEngine.h:475
void setMusicVolume(float volume)
const std::vector< const Music * > getMusicQueue() const
void stopEffect(const char *key)
Definition: CUAudioEngine.h:970
Definition: CUAudioEngine.h:91
size_t getAvailableChannels() const
Definition: CUAudioEngine.h:618
const Sound * currentEffect(const std::string &key) const
void pauseEffect(const char *key)
Definition: CUAudioEngine.h:990
State getEffectState(const char *key) const
Definition: CUAudioEngine.h:644
void setEffectListener(std::function< void(const std::string &key, bool)> callback)
Definition: CUAudioEngine.h:1043
void setMusicRemaining(double time)
void stopEffect(const std::string &key)
void setMusicListener(std::function< void(Music *, bool)> callback)
Definition: CUAudioEngine.h:461
void setEffectRemaining(const char *key, float time)
Definition: CUAudioEngine.h:946
void setEffectLoop(const std::string &key, bool loop)
bool isEffectLoop(const std::string &key) const
State getEffectState(const std::string &key) const
float getEffectElapsed(const char *key) const
Definition: CUAudioEngine.h:848
float getEffectDuration(const std::string &key) const
void gcEffect(int id, bool status)
void setEffectElapsed(const std::string &key, float time)
void advanceMusicQueue(unsigned int steps=0)
void setEffectRemaining(const std::string &key, float time)
void stopMusic(float fade=0.0f)
const Sound * currentEffect(const char *key) const
Definition: CUAudioEngine.h:692
float getMusicDuration() const
State getMusicState() const
double getMusicRemaining() const
void setEffectVolume(const std::string &key, float volume)
bool playEffect(const char *key, const std::shared_ptr< Sound > &sound, bool loop=false, float volume=-1.0f, bool force=false)
Definition: CUAudioEngine.h:603
float getEffectElapsed(const std::string &key) const
void setMusicLoop(bool loop)
void pauseEffect(const std::string &key)
void setMusicElapsed(double time)
void queueMusic(const std::shared_ptr< Music > &music, bool loop=false, float volume=-1.0f, float fade=0.0f)
void setEffectVolume(const char *key, float volume)
Definition: CUAudioEngine.h:784
bool isEffectLoop(const char *key) const
Definition: CUAudioEngine.h:716
void gcMusic(bool status)
Definition: CUAnimationNode.h:52
float getEffectVolume(const std::string &key) const
void setEffectElapsed(const char *key, float time)
Definition: CUAudioEngine.h:914
State
Definition: CUAudioEngine.h:98
void playMusic(const std::shared_ptr< Music > &music, bool loop=false, float volume=-1.0f, float fade=0.0f)
bool playEffect(const std::string &key, const std::shared_ptr< Sound > &sound, bool loop=false, float volume=-1.0f, bool force=false)
double getMusicElapsed() const
void resumeEffect(std::string key)
float getEffectRemaining(const std::string &key) const
float getEffectDuration(const char *key) const
Definition: CUAudioEngine.h:814
float getEffectRemaining(const char *key) const
Definition: CUAudioEngine.h:882
bool isActiveEffect(const char *key) const
Definition: CUAudioEngine.h:666