45 #ifndef __CU_AUDIO_CHANNELS_H__
46 #define __CU_AUDIO_CHANNELS_H__
47 #include <cugl/audio/CUAudioManager.h>
48 #include <cugl/audio/CUSound.h>
49 #include <cugl/util/CUTimestamp.h>
50 #include <unordered_map>
57 #define DEFAULT_FADE 0.015
115 #pragma mark Sound State
134 unsigned int _capacity;
136 std::unordered_map<std::string,std::shared_ptr<audio::AudioFader>> _effects;
138 std::deque<std::string> _equeue;
143 std::shared_ptr<audio::AudioOutput> _output;
145 std::shared_ptr<audio::AudioMixer> _mixer;
147 std::vector<std::shared_ptr<audio::AudioScheduler>> _channel;
149 std::vector<std::shared_ptr<audio::AudioFader>> _chfader;
152 std::deque<std::shared_ptr<audio::AudioFader>> _fadePool;
154 std::deque<std::shared_ptr<audio::AudioPanner>> _pan1Pool;
156 std::deque<std::shared_ptr<audio::AudioPanner>> _pan2Pool;
169 std::function<void(Sound* asset, bool status)> _musicCB;
182 std::function<void(const std::string& key , bool status)> _soundCB;
185 #pragma mark Constructors (Private)
223 bool init(Uint32 slots);
235 #pragma mark Internal Helpers
244 void removeKey(std::string key);
258 std::shared_ptr<audio::AudioFader> wrapInstance(
const std::shared_ptr<Sound>& asset);
272 std::shared_ptr<Sound> accessInstance(
const std::shared_ptr<audio::AudioNode>& node)
const;
286 std::shared_ptr<Sound> disposeInstance(
const std::shared_ptr<audio::AudioNode>& node);
299 void gcMusic(
const std::shared_ptr<audio::AudioNode>& sound,
bool status);
314 void gcEffect(
const std::shared_ptr<audio::AudioNode>& sound,
bool status);
317 #pragma mark Static Accessors
356 static void start(Uint32 slots);
387 static void start(Uint32 channels, Uint32 buffer);
400 #pragma mark Music Playback
425 void playMusic(
const std::shared_ptr<Sound>& music,
bool loop=
false,
426 float volume=-1.0f,
float fade=0.0f);
670 #pragma mark Music Queue Management
695 void queueMusic(
const std::shared_ptr<Sound>& music,
bool loop=
false,
696 float volume=-1.0f,
float fade=0.0f);
774 #pragma mark Sound Effect Management
799 bool playEffect(
const std::string& key,
const std::shared_ptr<Sound>& sound,
800 bool loop=
false,
float volume=-1.0f,
bool force=
false);
826 bool playEffect(
const char* key,
const std::shared_ptr<Sound>& sound,
827 bool loop=
false,
float volume=1.0f,
bool force=
false) {
828 return playEffect(std::string(key),sound,loop,volume,force);
842 return (
size_t)_capacity-_effects.size();
879 return _effects.find(key) != _effects.end();
1278 void stopEffect(
const std::string& key,
float fade=DEFAULT_FADE);
1315 void pauseEffect(
const std::string& key,
float fade=DEFAULT_FADE);
1401 _soundCB = callback;
1419 #pragma mark Global Management
1433 void stopAll(
float fade=DEFAULT_FADE);
1449 void pauseAll(
float fade=DEFAULT_FADE);
void stopAllEffects(float fade=DEFAULT_FADE)
float getEffectPan(const char *key) const
Definition: CUAudioChannels.h:1055
float getEffectPan(const std::string &key) const
void pauseAllEffects(float fade=DEFAULT_FADE)
void stopAll(float fade=DEFAULT_FADE)
float getEffectRemaining(const char *key) const
Definition: CUAudioChannels.h:1225
void pauseEffect(const char *key, float fade=DEFAULT_FADE)
Definition: CUAudioChannels.h:1331
float getEffectDuration(const std::string &key) const
float getMusicDuration() const
bool playEffect(const std::string &key, const std::shared_ptr< Sound > &sound, bool loop=false, float volume=-1.0f, bool force=false)
void resumeEffect(const char *key)
Definition: CUAudioChannels.h:1351
const Sound * currentEffect(const std::string &key) const
float getEffectElapsed(const std::string &key) const
float getEffectRemaining(const std::string &key) const
State
Definition: CUAudioChannels.h:120
State getMusicState() const
void setEffectElapsed(const char *key, float time)
Definition: CUAudioChannels.h:1191
void pauseMusic(float fade=DEFAULT_FADE)
void setMusicVolume(float volume)
void advanceMusicQueue(float fade=DEFAULT_FADE, unsigned int steps=0)
void stopEffect(const std::string &key, float fade=DEFAULT_FADE)
void setMusicRemaining(float time)
bool isActiveEffect(const char *key) const
Definition: CUAudioChannels.h:889
size_t getAvailableChannels() const
Definition: CUAudioChannels.h:841
float getEffectVolume(const char *key) const
Definition: CUAudioChannels.h:987
void setMusicPan(float pan)
const Sound * currentEffect(const char *key) const
Definition: CUAudioChannels.h:915
void queueMusic(const std::shared_ptr< Sound > &music, bool loop=false, float volume=-1.0f, float fade=0.0f)
void stopEffect(const char *key, float fade=DEFAULT_FADE)
Definition: CUAudioChannels.h:1297
void setEffectVolume(const std::string &key, float volume)
void setMusicListener(std::function< void(Sound *, bool)> callback)
Definition: CUAudioChannels.h:651
const Sound * currentMusic() const
void setEffectPan(const std::string &key, float pan)
size_t getMusicPending() const
void setEffectRemaining(const char *key, float time)
Definition: CUAudioChannels.h:1257
void setMusicLoop(bool loop)
float getEffectDuration(const char *key) const
Definition: CUAudioChannels.h:1125
State getEffectState(const std::string &key) const
void setEffectVolume(const char *key, float volume)
Definition: CUAudioChannels.h:1013
std::function< void(Sound *, bool)> getMusicListener() const
Definition: CUAudioChannels.h:665
void setOverlap(double time)
void pauseEffect(const std::string &key, float fade=DEFAULT_FADE)
void setEffectRemaining(const std::string &key, float time)
bool playEffect(const char *key, const std::shared_ptr< Sound > &sound, bool loop=false, float volume=1.0f, bool force=false)
Definition: CUAudioChannels.h:826
bool isActiveEffect(const std::string &key) const
Definition: CUAudioChannels.h:878
void setEffectListener(std::function< void(const std::string &key, bool)> callback)
Definition: CUAudioChannels.h:1400
void resumeEffect(std::string key)
void pauseAll(float fade=DEFAULT_FADE)
float getMusicVolume() const
float getMusicElapsed() const
static void start(Uint32 slots)
void stopMusic(float fade=DEFAULT_FADE)
bool isEffectLoop(const std::string &key) const
void setMusicElapsed(float time)
void setEffectLoop(const std::string &key, bool loop)
float getEffectVolume(const std::string &key) const
const std::vector< Sound * > getMusicQueue() const
void playMusic(const std::shared_ptr< Sound > &music, bool loop=false, float volume=-1.0f, float fade=0.0f)
float getEffectElapsed(const char *key) const
Definition: CUAudioChannels.h:1159
std::function< void(const std::string &key, bool)> getEffectListener() const
Definition: CUAudioChannels.h:1414
float getMusicRemaining() const
Definition: CUAction.h:51
float getMusicPan() const
void setEffectPan(const char *key, float pan)
Definition: CUAudioChannels.h:1095
State getEffectState(const char *key) const
Definition: CUAudioChannels.h:867
bool isEffectLoop(const char *key) const
Definition: CUAudioChannels.h:939
Definition: CUAudioChannels.h:114
void setEffectElapsed(const std::string &key, float time)
void setEffectLoop(const char *key, bool loop)
Definition: CUAudioChannels.h:961