#include <audio.h>
Inheritance diagram for Wt::Audio:
Public Types | |
typedef BaseFactory< Audio > | AudioBaseFactory |
Public Member Functions | |
virtual Chunk * | loadChunk (const std::string &) const |
int | numChannels () const |
Channel * | operator[] (int i) const |
virtual int | allocateChannels (int num_channels) |
virtual void | pause () |
pause all channels | |
virtual void | resume () |
resume all channels | |
virtual void | stop (int ms=0) |
stop all channels | |
virtual void | fadeOut (int) |
virtual int | playingChannels () const |
virtual int | pausedChannels () const |
virtual bool | isAvailable () const |
virtual Music * | loadMusic (const std::string &filename) |
virtual void | playMusic (Music &) |
virtual void | fadeInMusic (Music &, int ms) |
virtual void | fadeOutMusic (int ms) |
virtual void | setMusicVolume (int volume) |
virtual void | pauseMusic () |
virtual void | rewindMusic () |
virtual bool | setMusicPosition (double start_sec) |
virtual void | stopMusic () |
virtual bool | playingMusic () const |
virtual bool | pausedMusic () const |
virtual int | musicFading () const |
Static Public Member Functions | |
static DERIVED * | instance () |
template<class GRANDCHILD> | |
static DERIVED * | instance () |
instantiates the pointer compatible child of DERIVED aka grandchild | |
static DERIVED * | existingInstance () |
static void | init () |
static void | quit () |
Public Attributes | |
Signal01< void, Channel * > | finished |
WVar< int > | musicLoops |
sigc::signal< void > | musicFinished |
Static Public Attributes | |
static Factory< Audio, Audio > | factory |
Protected Member Functions | |
Audio () | |
virtual | ~Audio () |
virtual int | minHWVolume () const |
virtual int | maxHWVolume () const |
int | HWVolume (int volume) const |
template<typename CHILD> | |
void | adjustAllocatedChannels (int oldnum, int newnum) |
Static Protected Member Functions | |
static Audio * | load () |
try to load the instance | |
static void | onChannelFinish (int channel_id) |
callback called when a channel finishes | |
static void | onMusicFinish () |
static void | handleAudioEvent (const SDL_Event *event) |
SDLEvent::Audio handler. | |
Protected Attributes | |
std::vector< Channel * > | channels |
Static Protected Attributes | |
static const int | minVolume = 0 |
static const int | maxVolume = 1000 |
static DERIVED * | instance_ = 0 |
Private Types | |
typedef std::list< AudioBaseFactory * > | FactoryList |
Static Private Attributes | |
static FactoryList | factories |
Friends | |
class | Singleton< Audio > |
Classes | |
class | Channel |
class | Chunk |
Audio::Chunk base abstract class. More... | |
class | Event |
class | FadingType |
class | Music |
class | MusicType |
It is not possible to use the curiously reccuring pattern this time from (Audio to Driver) because then the different drivers wouldn't be pointer compatible since they would inherit from different objects.
Definition at line 63 of file audio.h.
typedef BaseFactory<Audio> Wt::Audio::AudioBaseFactory |
typedef std::list<AudioBaseFactory *> Wt::Audio::FactoryList [private] |
Wt::Audio::Audio | ( | ) | [protected] |
Definition at line 52 of file audio.cpp.
References Wt::SDLEvent::Audio, handleAudioEvent(), and Wt::Singleton< DERIVED >::instance().
Referenced by adjustAllocatedChannels().
00053 : Singleton<Audio>(this), 00054 musicLoops(1) { 00055 SDLEvent& sdlevent = *SDLEvent::instance(); 00056 sdlevent[SDLEvent::Audio] = &handleAudioEvent; 00057 }
Here is the call graph for this function:
Wt::Audio::~Audio | ( | ) | [protected, virtual] |
void Wt::Audio::adjustAllocatedChannels | ( | int | oldnum, | |
int | newnum | |||
) | [inline, protected] |
Definition at line 241 of file audio.h.
References Audio(), and channels.
00241 { 00242 if (oldnum < newnum) { 00243 for (int i = oldnum; i < newnum; i++) { 00244 channels.push_back(new typename CHILD::Channel(i)); 00245 } 00246 } else { // newnum < oldnum 00247 Audio& self = *this; 00248 for (int i = newnum; i < oldnum; i++) { 00249 delete self[i]; 00250 } 00251 self.channels.resize(newnum); 00252 } 00253 }
Here is the call graph for this function:
Reimplemented in Wt::SDLMixer.
Definition at line 90 of file audio.cpp.
References channels.
Referenced by Wt::NullAudio::~NullAudio().
00090 { 00091 return channels.size(); 00092 }
static DERIVED* Wt::Singleton< DERIVED >::existingInstance | ( | ) | [inline, static, inherited] |
Definition at line 36 of file singleton.h.
Referenced by Wt::Application::exit(), Wt::Application::postEvent(), Wt::Application::sendEvent(), and Wt::Application::sendPostedEvents().
00036 { 00037 return instance_; 00038 }
void Wt::Audio::fadeOut | ( | int | ) | [virtual] |
void Wt::Audio::fadeOutMusic | ( | int | ms | ) | [virtual] |
void Wt::Audio::handleAudioEvent | ( | const SDL_Event * | event | ) | [static, protected] |
SDLEvent::Audio handler.
it emits the required signal to all interested parties
Definition at line 213 of file audio.cpp.
References Wt::Audio::Event::channel(), Wt::Audio::Event::chunk(), Wt::Audio::Channel::finished, Wt::Singleton< DERIVED >::instance(), and trace.
Referenced by Audio().
00213 { 00214 trace("audio", "audio event delivered\n"); 00215 Event *sdl_audio_event = static_cast<Event *>(event->user.data1); 00216 Chunk *chunk = sdl_audio_event->chunk(); 00217 Channel *channel = sdl_audio_event->channel(); 00218 if (chunk && channel) { 00219 chunk->finished(chunk); 00220 channel->finished(channel); 00221 instance()->finished(channel); 00222 } else { 00223 instance()->musicFinished(); 00224 } 00225 delete sdl_audio_event; 00226 }
Here is the call graph for this function:
Definition at line 169 of file audio.cpp.
References maxHWVolume(), maxVolume, minHWVolume(), and minVolume.
00169 { 00170 return (maxHWVolume() - minHWVolume()) * volume / 00171 (maxVolume - minVolume); 00172 }
Here is the call graph for this function:
static void Wt::Singleton< DERIVED >::init | ( | ) | [inline, static, inherited] |
Reimplemented in Wt::Application.
Definition at line 49 of file singleton.h.
Referenced by Wt::Application::Application().
00049 { 00050 if (!instance()) { 00051 assert(0); 00052 } 00053 }
static DERIVED* Wt::Singleton< DERIVED >::instance | ( | ) | [inline, static, inherited] |
instantiates the pointer compatible child of DERIVED aka grandchild
it is handy in driver like situations
Definition at line 43 of file singleton.h.
static DERIVED* Wt::Singleton< DERIVED >::instance | ( | ) | [inline, static, inherited] |
Definition at line 32 of file singleton.h.
Referenced by Audio(), Wt::Sound::available(), Wt::SDLMixer::Chunk::channel(), Wt::NullAudio::Chunk::channel(), Wt::SDLSurface::defaultDepth(), Wt::SDLInput::EventInfo::EventInfo(), Wt::Dialog::exec(), Wt::Widget::grabKeyboard(), Wt::Widget::grabMouse(), handleAudioEvent(), Wt::SDLInput::handleKeyEvent(), Wt::Singleton< Wt::Audio >::init(), Wt::SDLTimer::init(), Wt::Sound::isAvailable(), Wt::Widget::keyboardGrabber(), load(), Wt::Widget::mouseGrabber(), Wt::SDLMixer::onChannelFinish(), onChannelFinish(), Wt::Sound::play(), Wt::Singleton< Wt::Audio >::quit(), Wt::Widget::releaseKeyboard(), Wt::Widget::releaseMouse(), Wt::SDLInput::SDLInput(), Wt::SDLMixer::setMusicVolume(), Wt::SDLMixer::Channel::setVolume(), and Wt::SDLMixer::Chunk::setVolume().
bool Wt::Audio::isAvailable | ( | ) | const [virtual] |
Audio * Wt::Audio::load | ( | ) | [static, protected] |
try to load the instance
if it fails return NULL if it succeeds must return the newly created object
Reimplemented from Wt::Singleton< DERIVED >.
Reimplemented in Wt::NullAudio, and Wt::SDLMixer.
Definition at line 63 of file audio.cpp.
References factories, Wt::Singleton< DERIVED >::instance(), Wt::Singleton< DERIVED >::instance_, and trace.
00063 { 00064 //this code never runs if we are initialized 00065 FactoryList::iterator it = factories.begin(), end = factories.end(); 00066 Audio *audio; 00067 00068 trace("audio", "Audio initialization...\n"); 00069 do { 00070 audio = (*it)->instance(); 00071 ++it; 00072 } while (!audio && it != end); 00073 00074 trace("audio", "Audio driver %p\n", instance_); 00075 return audio; 00076 }
Here is the call graph for this function:
Audio::Chunk * Wt::Audio::loadChunk | ( | const std::string & | ) | const [virtual] |
Audio::Music * Wt::Audio::loadMusic | ( | const std::string & | filename | ) | [virtual] |
int Wt::Audio::maxHWVolume | ( | ) | const [protected, virtual] |
int Wt::Audio::minHWVolume | ( | ) | const [protected, virtual] |
int Wt::Audio::musicFading | ( | ) | const [virtual] |
int Wt::Audio::numChannels | ( | ) | const |
Definition at line 82 of file audio.cpp.
References channels.
Referenced by Wt::SDLMixer::allocateChannels().
00082 { 00083 return channels.size(); 00084 }
void Wt::Audio::onChannelFinish | ( | int | channel_id | ) | [static, protected] |
callback called when a channel finishes
posts a SDL type event (SDLEvent::Audio) in the SDL event queue. By the time the event it is dispatched all SDL actions are allowed.
Reimplemented in Wt::SDLMixer.
Definition at line 178 of file audio.cpp.
References Wt::SDLEvent::Audio, Wt::Audio::Channel::chunk(), Wt::Singleton< DERIVED >::instance(), Wt::SDLEvent::push(), and trace.
Referenced by Wt::NullAudio::Channel::fadeIn(), Wt::SDLMixer::onChannelFinish(), and Wt::NullAudio::Channel::play().
00178 { 00179 Audio& self = *instance(); 00180 Channel *channel = self.channels[channel_id]; 00181 Chunk *chunk = channel->chunk(); 00182 00183 SDL_Event event; 00184 00185 event.type = SDLEvent::Audio; 00186 event.user.code = 0; 00187 event.user.data1 = new Event(channel, chunk); 00188 event.user.data2 = 0; 00189 00190 trace("audio", "channelFinished callback called %d\n", channel_id); 00191 SDLEvent::push(&event); 00192 }
Here is the call graph for this function:
void Wt::Audio::onMusicFinish | ( | ) | [static, protected] |
posts a SDL type event (SDLEvent::Audio) in the SDL event queue. By the time the event it is dispatched all SDL actions are allowed.
Definition at line 198 of file audio.cpp.
References Wt::SDLEvent::Audio, Wt::SDLEvent::push(), and trace.
Referenced by Wt::NullAudio::fadeInMusic(), Wt::NullAudio::playMusic(), and Wt::SDLMixer::SDLMixer().
00198 { 00199 SDL_Event event; 00200 00201 event.type = SDLEvent::Audio; 00202 event.user.code = 0; 00203 event.user.data1 = new Event(0, 0); 00204 event.user.data2 = 0; 00205 00206 trace("audio", "musicFinished callback called\n"); 00207 00208 SDLEvent::push(&event); 00209 }
Here is the call graph for this function:
Audio::Channel * Wt::Audio::operator[] | ( | int | i | ) | const |
void Wt::Audio::pause | ( | ) | [virtual] |
int Wt::Audio::pausedChannels | ( | ) | const [virtual] |
bool Wt::Audio::pausedMusic | ( | ) | const [virtual] |
void Wt::Audio::pauseMusic | ( | ) | [virtual] |
int Wt::Audio::playingChannels | ( | ) | const [virtual] |
bool Wt::Audio::playingMusic | ( | ) | const [virtual] |
void Wt::Audio::playMusic | ( | Music & | ) | [virtual] |
Reimplemented in Wt::SDLMixer.
Definition at line 125 of file audio.cpp.
References trace.
00125 { 00126 trace("audio", "Audio::playMusic() called\n"); 00127 }
static void Wt::Singleton< DERIVED >::quit | ( | ) | [inline, static, inherited] |
Reimplemented in Wt::Application.
Definition at line 55 of file singleton.h.
Referenced by Wt::Application::~Application().
00055 { 00056 delete instance(); 00057 }
void Wt::Audio::resume | ( | ) | [virtual] |
void Wt::Audio::rewindMusic | ( | ) | [virtual] |
bool Wt::Audio::setMusicPosition | ( | double | start_sec | ) | [virtual] |
void Wt::Audio::setMusicVolume | ( | int | volume | ) | [virtual] |
void Wt::Audio::stop | ( | int | ms = 0 |
) | [virtual] |
void Wt::Audio::stopMusic | ( | ) | [virtual] |
std::vector<Channel *> Wt::Audio::channels [protected] |
Definition at line 260 of file audio.h.
Referenced by adjustAllocatedChannels(), allocateChannels(), numChannels(), and operator[]().
Audio::FactoryList Wt::Audio::factories [static, private] |
Initial value:
boost::assign::list_of<AudioBaseFactory *> (&SDLMixer::factory) (&NullAudio::factory)
Definition at line 264 of file audio.h.
Referenced by load().
Factory<Audio, Audio> Wt::Audio::factory [static] |
Signal01<void, Channel *> Wt::Audio::finished |
DERIVED * Wt::Singleton< DERIVED >::instance_ = 0 [static, protected, inherited] |
Definition at line 91 of file singleton.h.
Referenced by Wt::Singleton< Wt::Audio >::existingInstance(), Wt::Singleton< Wt::Audio >::instance(), Wt::Singleton< Wt::Audio >::load(), Wt::SDLDisplay::load(), load(), Wt::Singleton< Wt::Audio >::Singleton(), and Wt::Singleton< Wt::Audio >::~Singleton().
const int Wt::Audio::maxVolume = 1000 [static, protected] |
const int Wt::Audio::minVolume = 0 [static, protected] |
sigc::signal<void> Wt::Audio::musicFinished |
Definition at line 224 of file audio.h.
Referenced by Wt::SDLMixer::fadeInMusic(), and Wt::SDLMixer::playMusic().
This document is licensed under the terms of the GNU Free Documentation License and may be freely distributed under the conditions given by this license.