Wt::Audio Class Reference

implementations e.g. NullAudio, SDLMixer etc More...

#include <audio.h>

Inheritance diagram for Wt::Audio:

Inheritance graph
[legend]
Collaboration diagram for Wt::Audio:

Collaboration graph
[legend]
List of all members.

Public Types

typedef BaseFactory< AudioAudioBaseFactory

Public Member Functions

virtual ChunkloadChunk (const std::string &) const
int numChannels () const
Channeloperator[] (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 MusicloadMusic (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< intmusicLoops
sigc::signal< void > musicFinished

Static Public Attributes

static Factory< Audio, Audiofactory

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 Audioload ()
 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

Detailed Description

implementations e.g. NullAudio, SDLMixer etc

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.


Member Typedef Documentation

typedef BaseFactory<Audio> Wt::Audio::AudioBaseFactory

Definition at line 86 of file audio.h.

typedef std::list<AudioBaseFactory *> Wt::Audio::FactoryList [private]

Definition at line 263 of file audio.h.


Constructor & Destructor Documentation

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]

Definition at line 59 of file audio.cpp.

References trace.

00059               {
00060     trace("audio", "Entering Destructor for Audio\n");
00061 }


Member Function Documentation

template<typename CHILD>
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:

int Wt::Audio::allocateChannels ( int  num_channels  )  [virtual]

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 }

template<class DERIVED>
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::fadeInMusic ( Music ,
int  ms 
) [virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 129 of file audio.cpp.

00129 {}

void Wt::Audio::fadeOut ( int   )  [virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 103 of file audio.cpp.

00103 {}

void Wt::Audio::fadeOutMusic ( int  ms  )  [virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 131 of file audio.cpp.

00131 {}

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:

int Wt::Audio::HWVolume ( int  volume  )  const [protected]

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:

template<class DERIVED>
static void Wt::Singleton< DERIVED >::init (  )  [inline, static, inherited]

Note:
cannot fail

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     }

template<class DERIVED>
template<class GRANDCHILD>
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.

00043                                {
00044         return (instance_) ? instance_ : GRANDCHILD::load();
00045     }

template<class DERIVED>
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().

00032                                {
00033         return (instance_) ? instance_ : DERIVED::load();
00034     }

bool Wt::Audio::isAvailable (  )  const [virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 113 of file audio.cpp.

00113                               {
00114     return false;
00115 }

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]

Reimplemented in Wt::NullAudio, and Wt::SDLMixer.

Definition at line 78 of file audio.cpp.

00078                                                    {
00079     return 0;
00080 }

Audio::Music * Wt::Audio::loadMusic ( const std::string &  filename  )  [virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 118 of file audio.cpp.

00118                                              {
00119     return new Music;
00120 }

int Wt::Audio::maxHWVolume (  )  const [protected, virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 165 of file audio.cpp.

Referenced by HWVolume().

00165                              {
00166     return 1;
00167 }

int Wt::Audio::minHWVolume (  )  const [protected, virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 161 of file audio.cpp.

Referenced by HWVolume().

00161                              {
00162     return 0;
00163 }

int Wt::Audio::musicFading (  )  const [virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 153 of file audio.cpp.

00153                              {
00154     return 0;
00155 }

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

Definition at line 86 of file audio.cpp.

References channels.

00086                                            {
00087     return channels[i];
00088 }

void Wt::Audio::pause (  )  [virtual]

pause all channels

Reimplemented in Wt::SDLMixer.

Definition at line 95 of file audio.cpp.

00095 {}

int Wt::Audio::pausedChannels (  )  const [virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 109 of file audio.cpp.

00109                                 {
00110     return 0;
00111 }

bool Wt::Audio::pausedMusic (  )  const [virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 149 of file audio.cpp.

00149                               {
00150     return false;
00151 }

void Wt::Audio::pauseMusic (  )  [virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 135 of file audio.cpp.

00135 {}

int Wt::Audio::playingChannels (  )  const [virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 105 of file audio.cpp.

00105                                  {
00106     return 0;
00107 }

bool Wt::Audio::playingMusic (  )  const [virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 145 of file audio.cpp.

00145                                {
00146     return false;
00147 }

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 }

template<class DERIVED>
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]

resume all channels

Reimplemented in Wt::SDLMixer.

Definition at line 98 of file audio.cpp.

00098 {}

void Wt::Audio::rewindMusic (  )  [virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 137 of file audio.cpp.

00137 {}

bool Wt::Audio::setMusicPosition ( double  start_sec  )  [virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 139 of file audio.cpp.

00139                                    {
00140     return false;
00141 }

void Wt::Audio::setMusicVolume ( int  volume  )  [virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 133 of file audio.cpp.

00133 {}

void Wt::Audio::stop ( int  ms = 0  )  [virtual]

stop all channels

Reimplemented in Wt::SDLMixer.

Definition at line 101 of file audio.cpp.

00101 {}

void Wt::Audio::stopMusic (  )  [virtual]

Reimplemented in Wt::SDLMixer.

Definition at line 143 of file audio.cpp.

00143 {}


Friends And Related Function Documentation

friend class Singleton< Audio > [friend]

Reimplemented in Wt::NullAudio, and Wt::SDLMixer.

Definition at line 65 of file audio.h.


Member Data Documentation

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]

Reimplemented in Wt::NullAudio, and Wt::SDLMixer.

Definition at line 87 of file audio.h.

Signal01<void, Channel *> Wt::Audio::finished

Definition at line 198 of file audio.h.

template<class DERIVED>
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]

Definition at line 238 of file audio.h.

Referenced by Wt::SDLMixer::Chunk::Chunk(), and HWVolume().

const int Wt::Audio::minVolume = 0 [static, protected]

Definition at line 237 of file audio.h.

Referenced by HWVolume().

sigc::signal<void> Wt::Audio::musicFinished

Definition at line 226 of file audio.h.

WVar<int> Wt::Audio::musicLoops

Definition at line 224 of file audio.h.

Referenced by Wt::SDLMixer::fadeInMusic(), and Wt::SDLMixer::playMusic().


The documentation for this class was generated from the following files:

Generated Fri Jul 28 19:25:44 2006.
Copyright © 1998-2003 by the respective authors.

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.