#include <eSoundMixer.h>
Public Member Functions | |
~eSoundMixer () | |
void | Init () |
void | PushButton (int soundEffect) |
void | PushButton (int soundEffect, eCoord location) |
void | SetMicrophoneOwner (eGameObject *newOwner) |
void | PlayContinuous (int soundEffect, eGameObject *owner) |
void | RemoveContinuous (int soundEffect, eGameObject *owner) |
void | LoadPlaylist () |
tString | GetCurrentSong () |
void | Update () |
Static Public Member Functions | |
static eSoundMixer * | GetMixer () |
static void | ShutDown () |
static void | SetMode (MusicMode newMode) |
static void | SDLMusicFinished () |
static void | SongFinished () |
static bool | Music_play (REAL x) |
static bool | Music_next_song (REAL x) |
static bool | Music_previous_song (REAL x) |
static bool | Music_stop (REAL x) |
static bool | Music_pause (REAL x) |
static bool | Music_volume_up (REAL x) |
static bool | Music_volume_down (REAL x) |
static void | ChannelFinished (int channel) |
Private Member Functions | |
void | __channelFinished (int channel) |
int | FirstAvailableChannel () |
eSoundMixer () | |
Private Attributes | |
bool | sound_is_there |
SDL_AudioSpec | audio |
tJUST_CONTROLLED_PTR< eGameObject > | m_Owner |
bool | m_PlayMusic |
bool | m_active |
tSong | m_CurrentSong |
tPlayList * | m_Playlist |
std::deque< eWavData > | m_SoundEffects |
std::deque< eChannel > | m_Channels |
int | m_numChannels |
Static Private Attributes | |
static eSoundMixer * | _instance = 0 |
static int | m_Mode = 0 |
static bool | m_isDirty = true |
static eMusicTrack * | m_TitleTrack = 0 |
static eMusicTrack * | m_GuiTrack = 0 |
static eMusicTrack * | m_GameTrack = 0 |
static bool | m_musicIsPlaying = false |
Definition at line 99 of file eSoundMixer.h.
eSoundMixer::~eSoundMixer | ( | ) |
eSoundMixer::eSoundMixer | ( | ) | [private] |
Definition at line 147 of file eSoundMixer.cpp.
References m_Owner, m_Playlist, m_PlayMusic, musicActive, and NULL.
Referenced by GetMixer().
00148 { 00149 #ifdef HAVE_LIBSDL_MIXER 00150 m_Owner = NULL; 00151 m_Playlist = NULL; 00152 00153 if(musicActive == 1) { 00154 m_PlayMusic = true; 00155 } else { 00156 m_PlayMusic = false; 00157 } 00158 #endif // DEDICATED 00159 }
eSoundMixer * eSoundMixer::GetMixer | ( | ) | [static] |
Definition at line 561 of file eSoundMixer.cpp.
References _instance, eSoundMixer(), and Init().
Referenced by cCockpit::cb_CurrentSong(), gCycle::DoTurn(), gExplosion::gExplosion(), gZone::gZone(), gGame::Init(), eMusicTrack::Init(), gCycle::MyInitAfterCreation(), gCycle::SyncEnemy(), gCamera::Timestep(), welcome(), zZone::zZone(), and gCycle::~gCycle().
00562 { 00563 #ifdef HAVE_LIBSDL_MIXER 00564 if(_instance == 0) { 00565 _instance = new eSoundMixer(); 00566 _instance->Init(); 00567 } 00568 00569 #endif // DEDICATED 00570 return _instance;
void eSoundMixer::ShutDown | ( | ) | [static] |
Definition at line 541 of file eSoundMixer.cpp.
References _instance, m_active, m_GameTrack, m_GuiTrack, m_TitleTrack, NULL, and SetMicrophoneOwner().
Referenced by main().
00542 { 00543 #ifdef HAVE_LIBSDL_MIXER 00544 if ( _instance ) 00545 _instance->SetMicrophoneOwner( NULL ); 00546 00547 if ( _instance && _instance->m_active ) 00548 { 00549 Mix_CloseAudio(); 00550 SDL_QuitSubSystem( SDL_INIT_AUDIO ); 00551 } 00552 00553 delete _instance; 00554 delete m_TitleTrack; 00555 delete m_GuiTrack; 00556 if(m_GameTrack) delete m_GameTrack; 00557 00558 00559 #endif // DEDICATED
void eSoundMixer::Init | ( | ) |
Definition at line 233 of file eSoundMixer.cpp.
References a, ANNOUNCER_1, ANNOUNCER_2, ANNOUNCER_3, ANNOUNCER_GO, b, buffersize, c, ChannelFinished(), CYCLE_EXPLOSION, CYCLE_GRIND_WALL, CYCLE_MOTOR, CYCLE_TURN, tDirectories::Data(), tPath::GetReadPath(), guiTrack, LoadPlaylist(), m_active, m_Channels, m_GameTrack, m_GuiTrack, m_musicIsPlaying, m_numChannels, m_SoundEffects, m_TitleTrack, musicVolume, numSoundcardChannels, SDLMusicFinished(), SOUND_HIGH, SOUND_LOW, SOUND_MED, SOUND_OFF, sound_quality, titleTrack, and ZONE_SPAWN.
Referenced by GetMixer().
00233 { 00234 #ifdef HAVE_LIBSDL_MIXER 00235 bool initbase = false; 00236 00237 m_active = false; 00238 00239 const tPath& vpath = tDirectories::Data(); 00240 00241 // We haven't started playing any music yet 00242 m_musicIsPlaying = false; 00243 00244 tString musFile; 00245 00246 musFile = vpath.GetReadPath( titleTrack ); 00247 std::cout << titleTrack << "\n"; 00248 m_TitleTrack = new eMusicTrack(musFile, true); 00249 musFile = vpath.GetReadPath( guiTrack ); 00250 std::cout << guiTrack << "\n"; 00251 m_GuiTrack = new eMusicTrack(musFile, true); 00252 00253 //m_GuiTrack->Loop(); 00254 00255 // Don't load a file for this, we don't know what we're playing until it's time 00256 // to play. 00257 m_GameTrack = new eMusicTrack(); 00258 00259 LoadPlaylist(); 00260 00261 int frequency; 00262 00263 switch (sound_quality) 00264 { 00265 case SOUND_LOW: 00266 frequency=11025; break; 00267 case SOUND_MED: 00268 frequency=22050; break; 00269 case SOUND_HIGH: 00270 frequency=44100; break; 00271 case SOUND_OFF: 00272 return; break; 00273 default: 00274 frequency=22050; 00275 } 00276 00277 if(!SDL_WasInit( SDL_INIT_AUDIO )) { 00278 int rc; 00279 rc = se_Wrap_SDL_InitSubSystem(); 00280 if ( rc < 0 ) { 00281 //std::cerr << "Couldn't initialize audio, disabling. I'm very sorry about that.\n"; 00282 initbase = false; 00283 // todo: disable audio if we can't initialize it 00284 } else { 00285 initbase = true; 00286 } 00287 } else { 00288 initbase = true; 00289 } 00290 00291 if( !initbase ) { 00292 return; 00293 } 00294 00295 int rc; 00296 00297 // guesstimate the desired number of samples to calculate in advance 00298 int samples = static_cast< int >( buffersize * 512 ); 00299 00300 rc = Mix_OpenAudio( frequency, AUDIO_S16LSB, 00301 numSoundcardChannels, samples ); 00302 00303 if(rc==0) { 00304 // don't know what to do here 00305 int a,c; 00306 Uint16 b; 00307 Mix_QuerySpec(&a,&b,&c); 00308 //std::cout << "SDL_Mixer initialized with " << c << " channels.\n"; 00309 } else { 00310 //std::cout << "Couldn't initialize SDL_Mixer, disabling sound. I'm very sorry about that, I'll try to do better next time.\n"; 00311 return; 00312 } 00313 00314 // Register music finished callback 00315 Mix_VolumeMusic( musicVolume ); 00316 Mix_HookMusicFinished( &eSoundMixer::SDLMusicFinished ); 00317 00318 // Now we're done with music and initializing sdl_mixer, we'll setup the sound 00319 // effect stuff 00320 //musFile = vpath.GetReadPath( titleTrack ); 00321 00322 m_SoundEffects.resize(15); 00323 m_SoundEffects[CYCLE_TURN].LoadWavFile(vpath.GetReadPath("sound/cycle_turn.ogg") ); 00324 m_SoundEffects[CYCLE_TURN].SetVolume(60); 00325 m_SoundEffects[CYCLE_EXPLOSION].LoadWavFile(vpath.GetReadPath( "sound/expl.ogg" )); 00326 m_SoundEffects[ANNOUNCER_1].LoadWavFile(vpath.GetReadPath("sound/1voicemale.ogg") ); 00327 m_SoundEffects[ANNOUNCER_2].LoadWavFile(vpath.GetReadPath("sound/2voicemale.ogg") ); 00328 m_SoundEffects[ANNOUNCER_3].LoadWavFile(vpath.GetReadPath("sound/3voicemale.ogg") ); 00329 m_SoundEffects[ANNOUNCER_GO].LoadWavFile(vpath.GetReadPath("sound/announcerGO.ogg")); 00330 //m_SoundEffects[NEW_MATCH].LoadWavFile(vpath.GetReadPath("sound/none.ogg") ); 00331 //m_SoundEffects[NEW_ROUND].LoadWavFile(vpath.GetReadPath("sound/none.ogg") ); 00332 //m_SoundEffects[ROUND_WINNER].LoadWavFile(vpath.GetReadPath("sound/none.ogg") ); 00333 //m_SoundEffects[MATCH_WINNER].LoadWavFile(vpath.GetReadPath("sound/none.ogg") ); 00334 m_SoundEffects[ZONE_SPAWN].LoadWavFile(vpath.GetReadPath("sound/zone_spawn.ogg") ); 00335 m_SoundEffects[CYCLE_MOTOR].LoadWavFile(vpath.GetReadPath("sound/cyclrun.ogg") ); 00336 m_SoundEffects[CYCLE_GRIND_WALL].LoadWavFile(vpath.GetReadPath("sound/grind.ogg") ); 00337 00338 Mix_Volume(-1, 50); 00339 Mix_VolumeMusic(100); 00340 00341 m_numChannels = Mix_AllocateChannels(40); 00342 m_Channels.resize( m_numChannels ); 00343 for(int i=0; i < m_numChannels; i++) { 00344 m_Channels[i].SetId(i); 00345 } 00346 Mix_ChannelFinished( &eSoundMixer::ChannelFinished ); 00347 00348 // only now, everything is all right 00349 m_active = true; 00350 #endif 00351 }
void eSoundMixer::SetMode | ( | MusicMode | newMode | ) | [static] |
Definition at line 374 of file eSoundMixer.cpp.
References m_isDirty, and m_Mode.
Referenced by SongFinished(), and welcome().
00374 { 00375 #ifdef HAVE_LIBSDL_MIXER 00376 m_Mode = newMode; 00377 m_isDirty = true; 00378 #endif // DEDICATED 00379 }
void eSoundMixer::PushButton | ( | int | soundEffect | ) |
Definition at line 411 of file eSoundMixer.cpp.
References FirstAvailableChannel(), m_active, m_Channels, and m_SoundEffects.
Referenced by gGame::Analysis(), gCycle::DoTurn(), gGame::GameLoop(), gExplosion::gExplosion(), gZone::gZone(), gCycle::SyncEnemy(), and zZone::zZone().
00411 { 00412 #ifdef HAVE_LIBSDL_MIXER 00413 if (!m_active) return; 00414 00415 int theChannel = FirstAvailableChannel(); 00416 if( theChannel < 0) return; 00417 m_Channels[ theChannel ].PlaySound(m_SoundEffects[soundEffect]); 00418 #endif // DEDICATED 00419 }
void eSoundMixer::PushButton | ( | int | soundEffect, | |
eCoord | location | |||
) |
Definition at line 421 of file eSoundMixer.cpp.
References FirstAvailableChannel(), m_active, m_Channels, m_Owner, and m_SoundEffects.
00421 { 00422 #ifdef HAVE_LIBSDL_MIXER 00423 if (!m_active) return; 00424 00425 // If we don't have an owner yet, just call regular PushButton 00426 if(!m_Owner) return; 00427 00428 int theChannel = FirstAvailableChannel(); 00429 00430 if( theChannel < 0) return; 00431 m_Channels[theChannel].Set3d(m_Owner->Position(), location, m_Owner->Direction()); 00432 m_Channels[theChannel].PlaySound(m_SoundEffects[soundEffect]); 00433 #endif // DEDICATED 00434 }
void eSoundMixer::SetMicrophoneOwner | ( | eGameObject * | newOwner | ) |
Definition at line 161 of file eSoundMixer.cpp.
References m_Owner.
Referenced by ShutDown(), and gCamera::Timestep().
00161 { 00162 #ifdef HAVE_LIBSDL_MIXER 00163 //std::cout << "Setting new microphone owner\n"; 00164 m_Owner = newOwner; 00165 #endif // DEDICATED 00166 }
void eSoundMixer::PlayContinuous | ( | int | soundEffect, | |
eGameObject * | owner | |||
) |
Definition at line 436 of file eSoundMixer.cpp.
References FirstAvailableChannel(), m_active, m_Channels, m_Owner, m_SoundEffects, and SoundEffectString.
Referenced by gCycle::MyInitAfterCreation().
00436 { 00437 #ifdef HAVE_LIBSDL_MIXER 00438 std::cout << "Playcontinuous: " << SoundEffectString[soundEffect] << "\n"; 00439 if (!m_active) return; 00440 return; 00441 00442 int theChannel = FirstAvailableChannel(); 00443 if( theChannel < 0 || m_Channels[theChannel].isBusy()) { 00444 std::cout << "Can't loop, sorry.\n"; 00445 return; 00446 } 00447 00448 m_Channels[theChannel].SetOwner(owner); 00449 // If we don't have an owner yet, we need to delay starting 00450 if(!m_Owner) m_Channels[theChannel].DelayStarting(); 00451 m_Channels[theChannel].SetHome(m_Owner); 00452 m_Channels[theChannel].LoopSound(m_SoundEffects[soundEffect]); 00453 #endif 00454 }
void eSoundMixer::RemoveContinuous | ( | int | soundEffect, | |
eGameObject * | owner | |||
) |
Definition at line 456 of file eSoundMixer.cpp.
References m_Channels.
Referenced by gCycle::~gCycle().
00456 { 00457 #ifdef HAVE_LIBSDL_MIXER 00458 for(std::deque<eChannel>::iterator i = m_Channels.begin(); i != m_Channels.end(); ++i) { 00459 if ((*i).GetOwner() == owner) { 00460 (*i).StopSound(); 00461 std::cout << "removed continuous sound\n"; 00462 } 00463 } 00464 #endif 00465 }
void eSoundMixer::SDLMusicFinished | ( | ) | [static] |
Definition at line 404 of file eSoundMixer.cpp.
References eMusicTrack::currentMusic, m_TitleTrack, and eMusicTrack::MusicFinished().
Referenced by Init().
00404 { 00405 #ifdef HAVE_LIBSDL_MIXER 00406 // We're guaranteed to have this, so we'll just use it 00407 m_TitleTrack->currentMusic->MusicFinished(); 00408 #endif 00409 }
void eSoundMixer::SongFinished | ( | ) | [static] |
Definition at line 381 of file eSoundMixer.cpp.
References GRID_TRACK, GUI_TRACK, m_isDirty, m_Mode, m_musicIsPlaying, SetMode(), and TITLE_TRACK.
Referenced by eMusicTrack::MusicFinished().
00381 { 00382 #ifdef HAVE_LIBSDL_MIXER 00383 // Music stopped 00384 m_musicIsPlaying = false; 00385 00386 switch(m_Mode) { 00387 case TITLE_TRACK: 00388 // When the title track stops, we switch to the gui track 00389 SetMode(GUI_TRACK); 00390 break; 00391 case GUI_TRACK: 00392 m_isDirty = true; 00393 break; 00394 case GRID_TRACK: 00395 m_isDirty = true; 00396 break; 00397 default: 00398 break; 00399 } 00400 #endif // DEDICATED 00401 00402 }
static bool eSoundMixer::Music_play | ( | REAL | x | ) | [static] |
static bool eSoundMixer::Music_next_song | ( | REAL | x | ) | [static] |
static bool eSoundMixer::Music_previous_song | ( | REAL | x | ) | [static] |
static bool eSoundMixer::Music_stop | ( | REAL | x | ) | [static] |
static bool eSoundMixer::Music_pause | ( | REAL | x | ) | [static] |
static bool eSoundMixer::Music_volume_up | ( | REAL | x | ) | [static] |
static bool eSoundMixer::Music_volume_down | ( | REAL | x | ) | [static] |
void eSoundMixer::LoadPlaylist | ( | ) |
Definition at line 357 of file eSoundMixer.cpp.
References customPlaylist, tDirectories::Data(), tPath::GetReadPath(), eMusicTrack::LoadPlaylist(), m_GameTrack, playListFile, eMusicTrack::SetPlaylist(), and usePlaylist.
Referenced by Init().
00357 { 00358 #ifdef HAVE_LIBSDL_MIXER 00359 if(!m_GameTrack) return; 00360 00361 if(usePlaylist == 1) { 00362 m_GameTrack->SetPlaylist(usePlaylist); 00363 m_GameTrack->LoadPlaylist(customPlaylist); 00364 } else { 00365 const tPath& vpath = tDirectories::Data(); 00366 m_GameTrack->SetPlaylist(usePlaylist); 00367 m_GameTrack->LoadPlaylist(vpath.GetReadPath(playListFile) ); 00368 } 00369 #endif 00370 }
tString eSoundMixer::GetCurrentSong | ( | ) |
Definition at line 524 of file eSoundMixer.cpp.
References eMusicTrack::currentMusic, eMusicTrack::GetFileName(), m_GameTrack, NULL, pos, and tString::SubStr().
00524 { 00525 if(m_GameTrack != NULL) 00526 if(m_GameTrack->currentMusic != NULL) { 00527 tString const &str = m_GameTrack->currentMusic->GetFileName(); 00528 #ifndef WIN32 00529 size_t pos = str.find_last_of('/'); 00530 #else 00531 size_t pos = str.find_last_of('\\'); 00532 #endif 00533 if(pos == tString::npos) return str; 00534 if(pos == str.size()) return tString(); 00535 return str.SubStr(pos + 1); 00536 } 00537 return tString(" ");
void eSoundMixer::ChannelFinished | ( | int | channel | ) | [static] |
Definition at line 174 of file eSoundMixer.cpp.
References __channelFinished(), and _instance.
Referenced by Init().
00174 { 00175 #ifdef HAVE_LIBSDL_MIXER 00176 _instance->__channelFinished(channel); 00177 #endif // DEDICATED 00178 }
void eSoundMixer::__channelFinished | ( | int | channel | ) | [private] |
Definition at line 168 of file eSoundMixer.cpp.
References m_Channels.
Referenced by ChannelFinished().
00168 { 00169 #ifdef HAVE_LIBSDL_MIXER 00170 m_Channels[channel].UnplaySound(); 00171 #endif // DEDICATED 00172 }
void eSoundMixer::Update | ( | ) |
Definition at line 467 of file eSoundMixer.cpp.
References eMusicTrack::currentMusic, eMusicTrack::FadeOut(), GRID_TRACK, GUI_TRACK, eMusicTrack::IsPlaying(), m_active, m_Channels, m_GameTrack, m_GuiTrack, m_isDirty, m_Mode, m_musicIsPlaying, m_Owner, m_TitleTrack, eMusicTrack::Next(), eChannel::numChannels, eMusicTrack::Play(), eMusicTrack::SetDirty(), TITLE_TRACK, and eMusicTrack::Update().
Referenced by welcome().
00467 { 00468 #ifdef HAVE_LIBSDL_MIXER 00469 if (!m_active) return; 00470 // Stubbed my french fry 00471 00472 // First we'll update all the channels 00473 for(int i=0; i<eChannel::numChannels; i++) { 00474 if( m_Channels[i].IsDelayed() ) { 00475 if( m_Owner ) { 00476 m_Channels[i].SetHome(m_Owner); 00477 m_Channels[i].Undelay(); 00478 } 00479 } 00480 m_Channels[i].Update(); 00481 } 00482 00483 // We only act on music if the mode has changed, indicated by m_isDirty 00484 if (m_isDirty) { 00485 // Also, we only update if the music has stopped for some reason. 00486 if(!m_musicIsPlaying) { 00487 00488 switch(m_Mode) { 00489 case TITLE_TRACK: 00490 m_TitleTrack->Play(); 00491 m_Mode = TITLE_TRACK; 00492 m_isDirty = false; 00493 break; 00494 case GUI_TRACK: 00495 m_GuiTrack->Play(); 00496 m_isDirty = false; 00497 break; 00498 case GRID_TRACK: 00499 if(m_GuiTrack->IsPlaying()) { 00500 m_GuiTrack->FadeOut(); 00501 m_GameTrack->SetDirty(); 00502 m_GameTrack->Update(); 00503 } else if(m_TitleTrack->IsPlaying()) { 00504 m_TitleTrack->FadeOut(); 00505 m_GameTrack->SetDirty(); 00506 m_GameTrack->Update(); 00507 } else { 00508 m_GameTrack->Next(); 00509 m_GameTrack->Play(); 00510 } 00511 m_isDirty = false; 00512 break; 00513 default: 00514 break; 00515 } 00516 } 00517 } 00518 // Go ahead and update the music track now. 00519 if ( m_GuiTrack && m_GuiTrack->currentMusic ) 00520 m_GuiTrack->currentMusic->Update(); 00521 #endif // DEDICATED 00522 }
int eSoundMixer::FirstAvailableChannel | ( | ) | [private] |
Definition at line 180 of file eSoundMixer.cpp.
References m_Channels, m_numChannels, and tASSERT.
Referenced by PlayContinuous(), and PushButton().
00180 { 00181 #ifdef HAVE_LIBSDL_MIXER 00182 Uint32 oldesttime=0; 00183 int oldestchannel=-1; 00184 00185 for( int i=0; i < m_numChannels; i++) { 00186 if( !m_Channels[i].isBusy() ) return i; 00187 else { 00188 if( m_Channels[i].StartTime() < oldesttime && !m_Channels[i].IsContinuous() ) { 00189 oldesttime = m_Channels[i].StartTime(); 00190 oldestchannel = i; 00191 } 00192 } 00193 } 00194 //std::cout << "Couldn't get an available channel!\n"; 00195 00196 return oldestchannel; 00197 // TODO: error handling 00198 tASSERT( 0 ); 00199 #endif // DEDICATED 00200 return -1; 00201 }
eSoundMixer * eSoundMixer::_instance = 0 [static, private] |
Definition at line 156 of file eSoundMixer.h.
Referenced by ChannelFinished(), GetMixer(), and ShutDown().
bool eSoundMixer::sound_is_there [private] |
Definition at line 157 of file eSoundMixer.h.
SDL_AudioSpec eSoundMixer::audio [private] |
Definition at line 158 of file eSoundMixer.h.
int eSoundMixer::m_Mode = 0 [static, private] |
Definition at line 160 of file eSoundMixer.h.
Referenced by SetMode(), SongFinished(), and Update().
tJUST_CONTROLLED_PTR< eGameObject > eSoundMixer::m_Owner [private] |
Definition at line 161 of file eSoundMixer.h.
Referenced by eSoundMixer(), PlayContinuous(), PushButton(), SetMicrophoneOwner(), and Update().
bool eSoundMixer::m_isDirty = true [static, private] |
Definition at line 165 of file eSoundMixer.h.
Referenced by SetMode(), SongFinished(), and Update().
bool eSoundMixer::m_PlayMusic [private] |
bool eSoundMixer::m_active [private] |
Definition at line 169 of file eSoundMixer.h.
Referenced by Init(), PlayContinuous(), PushButton(), ShutDown(), and Update().
tSong eSoundMixer::m_CurrentSong [private] |
Definition at line 171 of file eSoundMixer.h.
tPlayList* eSoundMixer::m_Playlist [private] |
std::deque<eWavData> eSoundMixer::m_SoundEffects [private] |
Definition at line 174 of file eSoundMixer.h.
Referenced by Init(), PlayContinuous(), and PushButton().
std::deque<eChannel> eSoundMixer::m_Channels [private] |
Definition at line 175 of file eSoundMixer.h.
Referenced by __channelFinished(), FirstAvailableChannel(), Init(), PlayContinuous(), PushButton(), RemoveContinuous(), and Update().
int eSoundMixer::m_numChannels [private] |
eMusicTrack * eSoundMixer::m_TitleTrack = 0 [static, private] |
Definition at line 178 of file eSoundMixer.h.
Referenced by Init(), SDLMusicFinished(), ShutDown(), and Update().
eMusicTrack * eSoundMixer::m_GuiTrack = 0 [static, private] |
eMusicTrack * eSoundMixer::m_GameTrack = 0 [static, private] |
Definition at line 180 of file eSoundMixer.h.
Referenced by GetCurrentSong(), Init(), LoadPlaylist(), ShutDown(), and Update().
bool eSoundMixer::m_musicIsPlaying = false [static, private] |