diff --git a/panda/src/audio/nullAudioSound.cxx b/panda/src/audio/nullAudioSound.cxx index cf13391f02..3c59aa03d7 100644 --- a/panda/src/audio/nullAudioSound.cxx +++ b/panda/src/audio/nullAudioSound.cxx @@ -24,6 +24,11 @@ namespace { static const string blank=""; } +//////////////////////////////////////////////////////////////////// +// Function: +// Access: +// Description: All of these functions are just stubs. +//////////////////////////////////////////////////////////////////// NullAudioSound::NullAudioSound() { // Intentionally blank. } diff --git a/panda/src/audiotraits/config_fmodAudio.cxx b/panda/src/audiotraits/config_fmodAudio.cxx index c963312660..d859849247 100644 --- a/panda/src/audiotraits/config_fmodAudio.cxx +++ b/panda/src/audiotraits/config_fmodAudio.cxx @@ -19,6 +19,13 @@ #include "pandabase.h" #ifdef HAVE_FMOD //[ + +// Please remove this as part of updating fmod: +#error The fmod audio needs repair by the fmod implementers + + + + #include "config_fmodAudio.h" #include "fmodAudioManager.h" #include "fmodAudioSound.h" diff --git a/panda/src/audiotraits/milesAudioManager.cxx b/panda/src/audiotraits/milesAudioManager.cxx index f84bd3eeff..6de35c028b 100644 --- a/panda/src/audiotraits/milesAudioManager.cxx +++ b/panda/src/audiotraits/milesAudioManager.cxx @@ -27,11 +27,15 @@ #include "config_express.h" #include "virtualFileSystem.h" #include "nullAudioSound.h" + #include int MilesAudioManager::_active_managers = 0; HDLSFILEID MilesAudioManager::_dls_field = NULL; -bool bMilesShutdownCalled = false; + +namespace { + bool miles_shutdown_called = false; +} PT(AudioManager) Create_AudioManager() { audio_debug("Create_AudioManager() Miles."); @@ -39,10 +43,10 @@ PT(AudioManager) Create_AudioManager() { } void CustomMilesShutdown() { - if (bMilesShutdownCalled) { + if (miles_shutdown_called) { return; } - bMilesShutdownCalled = true; + miles_shutdown_called = true; if (MilesAudioManager::_dls_field!=NULL) { HDLSDEVICE dls= NULL; @@ -198,7 +202,7 @@ MilesAudioManager:: } audio_debug(" AIL_quick_shutdown()"); AIL_quick_shutdown(); - bMilesShutdownCalled = true; + miles_shutdown_called = true; } } diff --git a/panda/src/audiotraits/milesAudioSound.cxx b/panda/src/audiotraits/milesAudioSound.cxx index 58258a4ac7..668fd3c7ad 100644 --- a/panda/src/audiotraits/milesAudioSound.cxx +++ b/panda/src/audiotraits/milesAudioSound.cxx @@ -30,97 +30,130 @@ #endif #ifndef NDEBUG //[ - namespace { - char - getStatusChar(HAUDIO audio) { - if (!audio) { - return '0'; // NULL. - } - switch (AIL_quick_status(audio)) { - case QSTAT_LOADED: - case QSTAT_DONE: - return 'r'; // Ready. - case QSTAT_PLAYING: - return 'p'; // Playing. - default: - return 'x'; // bad. - } +namespace { + //////////////////////////////////////////////////////////////////// + // Function: get_status_char + // Access: + // Description: + //////////////////////////////////////////////////////////////////// + char + get_status_char(HAUDIO audio) { + if (!audio) { + return '0'; // NULL. } - - AILSEQUENCECB sequence_callback = 0; - AILSAMPLECB sample_callback = 0; - const user_data_index = 7; - - void AILCALLBACK - pandaAudioAilCallback_Sequence(HSEQUENCE S) { - assert(S); - audio_debug("pandaAudioAilCallback_Sequence(HSEQUENCE="<<((void*)S)<<")"); - MilesAudioSound* sound = (MilesAudioSound*)AIL_sequence_user_data( - S, user_data_index); - assert(sound); - sound->finished(); - if (sequence_callback) { - sequence_callback(S); - } + switch (AIL_quick_status(audio)) { + case QSTAT_LOADED: + case QSTAT_DONE: + return 'r'; // Ready. + case QSTAT_PLAYING: + return 'p'; // Playing. + default: + return 'x'; // bad. } - - void AILCALLBACK - pandaAudioAilCallback_Sample(HSAMPLE S) { - assert(S); - audio_debug("pandaAudioAilCallback_Sample(HSAMPLE="<<((void*)S)<<")"); - MilesAudioSound* sound = (MilesAudioSound*)AIL_sample_user_data( - S, user_data_index); - assert(sound); - sound->finished(); - if (sample_callback) { - sample_callback(S); - } - } - - void - panda_AIL_quick_set_finished_callback(HAUDIO audio, MilesAudioSound* sound) { - audio_debug("panda_AIL_quick_set_finished_callback(audio="<<((void*)audio) - <<", sound="<<((void*)sound)<<")"); - if (!audio || !sound) { - return; - } - AIL_lock(); - if (audio->handle != NULL) { - switch (audio->type) { - case AIL_QUICK_XMIDI_TYPE: - audio_debug(" AIL_register_sequence_callback"); - AIL_set_sequence_user_data( - (HSEQUENCE)audio->handle, user_data_index, (long)sound); - sequence_callback=AIL_register_sequence_callback( - (HSEQUENCE)audio->handle, pandaAudioAilCallback_Sequence); - audio_debug( "AILCALLBACK "<<((void*)sequence_callback)); - break; - case AIL_QUICK_DIGITAL_TYPE: - case AIL_QUICK_MPEG_DIGITAL_TYPE: - audio_debug(" AIL_register_EOS_callback"); - AIL_set_sample_user_data( - (HSAMPLE)audio->handle, user_data_index, (long)sound); - sample_callback=AIL_register_EOS_callback( - (HSAMPLE)audio->handle, pandaAudioAilCallback_Sample); - audio_debug(" AILCALLBACK "<<((void*)sample_callback)); - break; - default: - audio_debug(" unknown audio type"); - break; - } - } - AIL_unlock(); - } - } - #define miles_audio_debug(x) \ - audio_debug("MilesAudioSound "<finished(); + if (sequence_callback) { + sequence_callback(S); + } + } + + //////////////////////////////////////////////////////////////////// + // Function: pandaAudioAilCallback_Sample + // Access: file scope + // Description: This function is part of a hack for finish callbacks + // when using the Miles quick API. + //////////////////////////////////////////////////////////////////// + void AILCALLBACK + pandaAudioAilCallback_Sample(HSAMPLE S) { + assert(S); + audio_debug("pandaAudioAilCallback_Sample(HSAMPLE="<<((void*)S)<<")"); + MilesAudioSound* sound = (MilesAudioSound*)AIL_sample_user_data( + S, user_data_index); + assert(sound); + sound->finished(); + if (sample_callback) { + sample_callback(S); + } + } + + //////////////////////////////////////////////////////////////////// + // Function: panda_AIL_quick_set_finished_callback + // Access: file scope + // Description: This function is part of a hack for finish callbacks + // when using the Miles quick API. + // + // This will determine whether the sound is a MIDI or + // a wave sample and setup the correct callback. + //////////////////////////////////////////////////////////////////// + void + panda_AIL_quick_set_finished_callback(HAUDIO audio, MilesAudioSound* sound) { + audio_debug("panda_AIL_quick_set_finished_callback(audio="<<((void*)audio) + <<", sound="<<((void*)sound)<<")"); + if (!audio || !sound) { + return; + } + AIL_lock(); + if (audio->handle != NULL) { + switch (audio->type) { + case AIL_QUICK_XMIDI_TYPE: + audio_debug(" AIL_register_sequence_callback"); + AIL_set_sequence_user_data( + (HSEQUENCE)audio->handle, user_data_index, (long)sound); + sequence_callback=AIL_register_sequence_callback( + (HSEQUENCE)audio->handle, pandaAudioAilCallback_Sequence); + audio_debug( "AILCALLBACK "<<((void*)sequence_callback)); + break; + case AIL_QUICK_DIGITAL_TYPE: + case AIL_QUICK_MPEG_DIGITAL_TYPE: + audio_debug(" AIL_register_EOS_callback"); + AIL_set_sample_user_data( + (HSAMPLE)audio->handle, user_data_index, (long)sound); + sample_callback=AIL_register_EOS_callback( + (HSAMPLE)audio->handle, pandaAudioAilCallback_Sample); + audio_debug(" AILCALLBACK "<<((void*)sample_callback)); + break; + default: + audio_debug(" unknown audio type"); + break; + } + } + AIL_unlock(); + } + +} + +//////////////////////////////////////////////////////////////////// +// Function: MilesAudioSound:: +// Access: +// Description: +//////////////////////////////////////////////////////////////////// MilesAudioSound:: MilesAudioSound(MilesAudioManager* manager, HAUDIO audio, string file_name, float length) @@ -136,6 +169,11 @@ MilesAudioSound(MilesAudioManager* manager, _audio=AIL_quick_copy(audio); } +//////////////////////////////////////////////////////////////////// +// Function: MilesAudioSound:: +// Access: +// Description: +//////////////////////////////////////////////////////////////////// MilesAudioSound:: ~MilesAudioSound() { miles_audio_debug("~MilesAudioSound()"); @@ -144,6 +182,11 @@ MilesAudioSound:: AIL_quick_unload(_audio); } +//////////////////////////////////////////////////////////////////// +// Function: MilesAudioSound:: +// Access: +// Description: +//////////////////////////////////////////////////////////////////// void MilesAudioSound:: play() { #if 0 @@ -173,6 +216,11 @@ play() { } } +//////////////////////////////////////////////////////////////////// +// Function: MilesAudioSound:: +// Access: +// Description: +//////////////////////////////////////////////////////////////////// void MilesAudioSound:: stop() { miles_audio_debug("stop()"); @@ -187,6 +235,11 @@ stop() { AIL_quick_halt(_audio); } +//////////////////////////////////////////////////////////////////// +// Function: MilesAudioSound:: +// Access: +// Description: +//////////////////////////////////////////////////////////////////// void MilesAudioSound:: finished() { miles_audio_debug("finished()"); @@ -196,6 +249,11 @@ finished() { } } +//////////////////////////////////////////////////////////////////// +// Function: MilesAudioSound:: +// Access: +// Description: +//////////////////////////////////////////////////////////////////// void MilesAudioSound:: set_loop(bool loop) { miles_audio_debug("set_loop(loop="<