|
CUGL 1.3
Cornell University Game Library
|
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
357 static void start(Uint32 slots);
388 static void start(Uint32 channels, Uint32 buffer);
401 #pragma mark Music Playback
426 void playMusic(
const std::shared_ptr<Sound>& music,
bool loop=
false,
427 float volume=-1.0f,
float fade=0.0f);
671 #pragma mark Music Queue Management
696 void queueMusic(
const std::shared_ptr<Sound>& music,
bool loop=
false,
697 float volume=-1.0f,
float fade=0.0f);
775 #pragma mark Sound Effect Management
800 bool playEffect(
const std::string& key,
const std::shared_ptr<Sound>& sound,
801 bool loop=
false,
float volume=-1.0f,
bool force=
false);
827 bool playEffect(
const char* key,
const std::shared_ptr<Sound>& sound,
828 bool loop=
false,
float volume=1.0f,
bool force=
false) {
829 return playEffect(std::string(key),sound,loop,volume,force);
843 return (
size_t)_capacity-_effects.size();
880 return _effects.find(key) != _effects.end();
1279 void stopEffect(
const std::string& key,
float fade=DEFAULT_FADE);
1316 void pauseEffect(
const std::string& key,
float fade=DEFAULT_FADE);
1402 _soundCB = callback;
1420 #pragma mark Global Management
1434 void stopAll(
float fade=DEFAULT_FADE);
1450 void pauseAll(
float fade=DEFAULT_FADE);
float getEffectDuration(const char *key) const
Definition: CUAudioChannels.h:1126
void pauseAll(float fade=DEFAULT_FADE)
void stopEffect(const char *key, float fade=DEFAULT_FADE)
Definition: CUAudioChannels.h:1298
void resumeEffect(std::string key)
float getMusicRemaining() const
float getEffectVolume(const char *key) const
Definition: CUAudioChannels.h:988
bool playEffect(const char *key, const std::shared_ptr< Sound > &sound, bool loop=false, float volume=1.0f, bool force=false)
Definition: CUAudioChannels.h:827
void setEffectRemaining(const char *key, float time)
Definition: CUAudioChannels.h:1258
void setMusicVolume(float volume)
void setEffectRemaining(const std::string &key, float time)
float getEffectVolume(const std::string &key) const
float getEffectElapsed(const std::string &key) const
static AudioChannels * get()
Definition: CUAudioChannels.h:327
void setEffectLoop(const char *key, bool loop)
Definition: CUAudioChannels.h:962
Definition: CUAudioChannels.h:114
const std::vector< Sound * > getMusicQueue() const
float getMusicPan() const
const Sound * currentEffect(const std::string &key) const
std::function< void(const std::string &key, bool)> getEffectListener() const
Definition: CUAudioChannels.h:1415
void setMusicElapsed(float time)
size_t getAvailableChannels() const
Definition: CUAudioChannels.h:842
void playMusic(const std::shared_ptr< Sound > &music, bool loop=false, float volume=-1.0f, float fade=0.0f)
const Sound * currentMusic() const
void pauseEffect(const std::string &key, float fade=DEFAULT_FADE)
bool isEffectLoop(const std::string &key) const
State getEffectState(const std::string &key) const
void setEffectPan(const std::string &key, float pan)
void setMusicLoop(bool loop)
float getEffectRemaining(const std::string &key) const
State getMusicState() const
float getEffectPan(const std::string &key) const
float getMusicDuration() const
bool isEffectLoop(const char *key) const
Definition: CUAudioChannels.h:940
void stopAllEffects(float fade=DEFAULT_FADE)
void setEffectLoop(const std::string &key, bool loop)
void setEffectElapsed(const std::string &key, float time)
void setOverlap(double time)
State
Definition: CUAudioChannels.h:120
void stopEffect(const std::string &key, float fade=DEFAULT_FADE)
void setMusicRemaining(float time)
State getEffectState(const char *key) const
Definition: CUAudioChannels.h:868
void stopMusic(float fade=DEFAULT_FADE)
void pauseEffect(const char *key, float fade=DEFAULT_FADE)
Definition: CUAudioChannels.h:1332
void setEffectPan(const char *key, float pan)
Definition: CUAudioChannels.h:1096
bool playEffect(const std::string &key, const std::shared_ptr< Sound > &sound, bool loop=false, float volume=-1.0f, bool force=false)
void queueMusic(const std::shared_ptr< Sound > &music, bool loop=false, float volume=-1.0f, float fade=0.0f)
void setEffectElapsed(const char *key, float time)
Definition: CUAudioChannels.h:1192
float getMusicVolume() const
void resumeEffect(const char *key)
Definition: CUAudioChannels.h:1352
void setMusicPan(float pan)
bool isActiveEffect(const std::string &key) const
Definition: CUAudioChannels.h:879
float getEffectElapsed(const char *key) const
Definition: CUAudioChannels.h:1160
std::function< void(Sound *, bool)> getMusicListener() const
Definition: CUAudioChannels.h:666
void pauseAllEffects(float fade=DEFAULT_FADE)
const Sound * currentEffect(const char *key) const
Definition: CUAudioChannels.h:916
bool isActiveEffect(const char *key) const
Definition: CUAudioChannels.h:890
float getMusicElapsed() const
float getEffectRemaining(const char *key) const
Definition: CUAudioChannels.h:1226
float getEffectPan(const char *key) const
Definition: CUAudioChannels.h:1056
void setEffectListener(std::function< void(const std::string &key, bool)> callback)
Definition: CUAudioChannels.h:1401
void pauseMusic(float fade=DEFAULT_FADE)
static void start(Uint32 slots)
void advanceMusicQueue(float fade=DEFAULT_FADE, unsigned int steps=0)
void setEffectVolume(const char *key, float volume)
Definition: CUAudioChannels.h:1014
void setEffectVolume(const std::string &key, float volume)
size_t getMusicPending() const
void setMusicListener(std::function< void(Sound *, bool)> callback)
Definition: CUAudioChannels.h:652
float getEffectDuration(const std::string &key) const
void stopAll(float fade=DEFAULT_FADE)