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