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> 
   45 #include <unordered_map> 
   50 #define AUDIO_INPUT_CHANNELS  24 
   52 #define AUDIO_OUTPUT_CHANNELS 2 
   54 #define AUDIO_FREQUENCY 44100 
   57 #if defined (__MACOSX__) || defined (__IPHONEOS__) 
   58     #define CU_AUDIO_AVFOUNDATION 1 
   94 #pragma mark Sound State 
  114     std::shared_ptr<MusicQueue> _mqueue;
 
  117     unsigned int _capacity;
 
  119     std::vector<std::shared_ptr<SoundChannel>> _channels;
 
  121     std::unordered_map<std::string,int> _effects;
 
  123     std::deque<std::string> _equeue;
 
  136     std::function<void(Music* asset, bool status)> _musicCB;
 
  149     std::function<void(const std::string& key , bool status)> _soundCB;
 
  152 #pragma mark Constructors (Private) 
  166     ~AudioEngine() { dispose(); }
 
  179     bool init(
unsigned int channels=AUDIO_INPUT_CHANNELS);
 
  191 #pragma mark Internal Helpers 
  200     void removeKey(std::string key);
 
  204 #pragma mark Static Accessors 
  231     static void start(
unsigned int channels=AUDIO_INPUT_CHANNELS);
 
  247 #pragma mark Music Management 
  272     void playMusic(
const std::shared_ptr<Music>& music, 
bool loop=
false, 
float volume=-1.0f, 
float fade=0.0f);
 
  497 #pragma mark Music Queue 
  522     void queueMusic(
const std::shared_ptr<Music>& music, 
bool loop=
false, 
float volume=-1.0f, 
float fade=0.0f);
 
  552 #pragma mark Sound Effect Management 
  577     bool playEffect(
const std::string& key, 
const std::shared_ptr<Sound>& sound,
 
  578                     bool loop=
false, 
float volume=-1.0f, 
bool force=
false);
 
  604     bool playEffect(
const char* key, 
const std::shared_ptr<Sound>& sound,
 
  605                     bool loop=
false, 
float volume=-1.0f, 
bool force=
false) {
 
  606         return playEffect(std::string(key),sound,loop,volume,force);
 
  620         return (
size_t)_capacity-_effects.size();
 
  657         return _effects.find(key) != _effects.end();
 
 1045         _soundCB = callback;
 
 1074     void gcEffect(
int id, 
bool status);
 
 1078 #pragma mark Global Management 
float getMusicVolume() const 
 
void resumeEffect(const char *key)
Definition: CUAudioEngine.h:1011
 
const Music * currentMusic() const 
 
static void start(unsigned int channels=AUDIO_INPUT_CHANNELS)
 
float getEffectVolume(const char *key) const 
Definition: CUAudioEngine.h:763
 
size_t getMusicQueueSize() const 
 
std::function< void(const std::string &key, bool)> getEffectListener() const 
Definition: CUAudioEngine.h:1058
 
void setEffectLoop(const char *key, bool loop)
Definition: CUAudioEngine.h:739
 
bool isActiveEffect(const std::string &key) const 
Definition: CUAudioEngine.h:656
 
std::function< void(Music *, bool)> getMusicListener() const 
Definition: CUAudioEngine.h:476
 
void setMusicVolume(float volume)
 
const std::vector< const Music * > getMusicQueue() const 
 
void stopEffect(const char *key)
Definition: CUAudioEngine.h:971
 
Definition: CUAudioEngine.h:92
 
size_t getAvailableChannels() const 
Definition: CUAudioEngine.h:619
 
const Sound * currentEffect(const std::string &key) const 
 
void pauseEffect(const char *key)
Definition: CUAudioEngine.h:991
 
State getEffectState(const char *key) const 
Definition: CUAudioEngine.h:645
 
float getMusicRemaining() const 
 
void setEffectListener(std::function< void(const std::string &key, bool)> callback)
Definition: CUAudioEngine.h:1044
 
void stopEffect(const std::string &key)
 
void setMusicListener(std::function< void(Music *, bool)> callback)
Definition: CUAudioEngine.h:462
 
void setEffectRemaining(const char *key, float time)
Definition: CUAudioEngine.h:947
 
void setEffectLoop(const std::string &key, bool loop)
 
bool isEffectLoop(const std::string &key) const 
 
State getEffectState(const std::string &key) const 
 
float getMusicElapsed() const 
 
float getEffectElapsed(const char *key) const 
Definition: CUAudioEngine.h:849
 
void setMusicElapsed(float time)
 
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:693
 
float getMusicDuration() const 
 
State getMusicState() 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:604
 
float getEffectElapsed(const std::string &key) const 
 
void setMusicLoop(bool loop)
 
void pauseEffect(const std::string &key)
 
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:785
 
bool isEffectLoop(const char *key) const 
Definition: CUAudioEngine.h:717
 
void gcMusic(bool status)
 
Definition: CUAction.h:51
 
float getEffectVolume(const std::string &key) const 
 
void setEffectElapsed(const char *key, float time)
Definition: CUAudioEngine.h:915
 
State
Definition: CUAudioEngine.h:99
 
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)
 
void setMusicRemaining(float time)
 
void resumeEffect(std::string key)
 
float getEffectRemaining(const std::string &key) const 
 
float getEffectDuration(const char *key) const 
Definition: CUAudioEngine.h:815
 
float getEffectRemaining(const char *key) const 
Definition: CUAudioEngine.h:883
 
bool isActiveEffect(const char *key) const 
Definition: CUAudioEngine.h:667