From c215c0b044a728602d1a4070ccf4cb1ec1db5c8d Mon Sep 17 00:00:00 2001 From: Cary Sandvig Date: Tue, 10 Apr 2001 21:25:17 +0000 Subject: [PATCH] tweeking on sound shutdown --- panda/src/audio/audio_linux_traits.cxx | 6 ++++-- panda/src/audio/audio_linux_traits.h | 4 ++-- panda/src/audio/audio_manager.cxx | 3 ++- panda/src/audio/audio_mikmod_traits.cxx | 11 +++++++---- panda/src/audio/audio_mikmod_traits.h | 6 +++--- panda/src/audio/audio_null_traits.cxx | 3 ++- panda/src/audio/audio_null_traits.h | 2 +- panda/src/audio/audio_trait.cxx | 3 ++- panda/src/audio/audio_trait.h | 2 +- panda/src/audio/audio_win_traits.cxx | 12 +++++++----- panda/src/audio/audio_win_traits.h | 4 ++-- 11 files changed, 33 insertions(+), 23 deletions(-) diff --git a/panda/src/audio/audio_linux_traits.cxx b/panda/src/audio/audio_linux_traits.cxx index 30a73b68bb..abd8549888 100644 --- a/panda/src/audio/audio_linux_traits.cxx +++ b/panda/src/audio/audio_linux_traits.cxx @@ -360,7 +360,8 @@ void LinuxSamplePlayer::set_volume(AudioTraits::PlayingClass* p, float v) { p->set_volume(v); } -void LinuxSamplePlayer::adjust_volume(AudioTraits::PlayingClass*) { +bool LinuxSamplePlayer::adjust_volume(AudioTraits::PlayingClass*) { + return false; } LinuxSamplePlayer* LinuxSamplePlayer::get_instance(void) { @@ -389,7 +390,8 @@ void LinuxMusicPlayer::set_volume(AudioTraits::PlayingClass* p, float v) { p->set_volume(v); } -void LinuxMusicPlayer::adjust_volume(AudioTraits::PlayingClass*) { +bool LinuxMusicPlayer::adjust_volume(AudioTraits::PlayingClass*) { + return false; } LinuxMusicPlayer* LinuxMusicPlayer::get_instance(void) { diff --git a/panda/src/audio/audio_linux_traits.h b/panda/src/audio/audio_linux_traits.h index 1151ab5355..74024fbbb9 100644 --- a/panda/src/audio/audio_linux_traits.h +++ b/panda/src/audio/audio_linux_traits.h @@ -121,7 +121,7 @@ public: virtual void stop_sound(AudioTraits::SoundClass*, AudioTraits::PlayingClass*); virtual void set_volume(AudioTraits::PlayingClass*, float); - virtual void adjust_volume(AudioTraits::PlayingClass*); + virtual bool adjust_volume(AudioTraits::PlayingClass*); public: // used by the readers static LinuxSamplePlayer* get_instance(void); @@ -139,7 +139,7 @@ public: virtual void stop_sound(AudioTraits::SoundClass*, AudioTraits::PlayingClass*); virtual void set_volume(AudioTraits::PlayingClass*, float); - virtual void adjust_volume(AudioTraits::PlayingClass*); + virtual bool adjust_volume(AudioTraits::PlayingClass*); public: // used by the readers static LinuxMusicPlayer* get_instance(void); diff --git a/panda/src/audio/audio_manager.cxx b/panda/src/audio/audio_manager.cxx index f6971a2771..d214dde683 100644 --- a/panda/src/audio/audio_manager.cxx +++ b/panda/src/audio/audio_manager.cxx @@ -77,7 +77,8 @@ void AudioManager::ns_update(void) { AudioManager::play(sound); AudioManager::set_loop(sound, true); } else if (AudioManager::_master_volume_change) - sound->get_player()->adjust_volume(sound->get_state()); + if (sound->get_player()->adjust_volume(sound->get_state())) + AudioManager::stop(sound); } AudioManager::_master_volume_change = false; } diff --git a/panda/src/audio/audio_mikmod_traits.cxx b/panda/src/audio/audio_mikmod_traits.cxx index 1f70bb0584..170349c250 100644 --- a/panda/src/audio/audio_mikmod_traits.cxx +++ b/panda/src/audio/audio_mikmod_traits.cxx @@ -321,13 +321,14 @@ void MikModSamplePlayer::set_volume(AudioTraits::PlayingClass* state, state->set_volume(v); } -void MikModSamplePlayer::adjust_volume(AudioTraits::PlayingClass* state) { +bool MikModSamplePlayer::adjust_volume(AudioTraits::PlayingClass* state) { initialize(); MikModSamplePlaying* mplay = (MikModSamplePlaying*)state; if (!AudioManager::get_sfx_active()) - return; + return true; Voice_SetVolume(mplay->get_voice(), state->get_volume() * AudioManager::get_master_sfx_volume()); + return false; } MikModSamplePlayer* MikModSamplePlayer::get_instance(void) { @@ -361,10 +362,11 @@ void MikModFmsynthPlayer::set_volume(AudioTraits::PlayingClass* p, float v) { p->set_volume(v); } -void MikModFmsynthPlayer::adjust_volume(AudioTraits::PlayingClass*) { +bool MikModFmsynthPlayer::adjust_volume(AudioTraits::PlayingClass*) { audio_cat->error() << "trying to adjust volume on a sample with a MikModFmsynthPlayer" << endl; + return false; } MikModFmsynthPlayer* MikModFmsynthPlayer::get_instance(void) { @@ -397,9 +399,10 @@ void MikModMidiPlayer::set_volume(AudioTraits::PlayingClass* p, float v) { p->set_volume(v); } -void MikModMidiPlayer::adjust_volume(AudioTraits::PlayingClass*) { +bool MikModMidiPlayer::adjust_volume(AudioTraits::PlayingClass*) { audio_cat->error() << "trying to adjust volume on a sample with a mikModMidiPlayer" << endl; + return false; } MikModMidiPlayer* MikModMidiPlayer::get_instance(void) { diff --git a/panda/src/audio/audio_mikmod_traits.h b/panda/src/audio/audio_mikmod_traits.h index a0d0eddf6f..2c2968db99 100644 --- a/panda/src/audio/audio_mikmod_traits.h +++ b/panda/src/audio/audio_mikmod_traits.h @@ -106,7 +106,7 @@ public: virtual void stop_sound(AudioTraits::SoundClass*, AudioTraits::PlayingClass*); virtual void set_volume(AudioTraits::PlayingClass*, float); - virtual void adjust_volume(AudioTraits::PlayingClass*); + virtual bool adjust_volume(AudioTraits::PlayingClass*); public: // used by the readers static MikModSamplePlayer* get_instance(void); @@ -124,7 +124,7 @@ public: virtual void stop_sound(AudioTraits::SoundClass*, AudioTraits::PlayingClass*); virtual void set_volume(AudioTraits::PlayingClass*, float); - virtual void adjust_volume(AudioTraits::PlayingClass*); + virtual bool adjust_volume(AudioTraits::PlayingClass*); public: // used by the readers static MikModFmsynthPlayer* get_instance(void); @@ -142,7 +142,7 @@ public: virtual void stop_sound(AudioTraits::SoundClass*, AudioTraits::PlayingClass*); virtual void set_volume(AudioTraits::PlayingClass*, float); - virtual void adjust_volume(AudioTraits::PlayingClass*); + virtual bool adjust_volume(AudioTraits::PlayingClass*); public: // used by the readers static MikModMidiPlayer* get_instance(void); diff --git a/panda/src/audio/audio_null_traits.cxx b/panda/src/audio/audio_null_traits.cxx index c063dce3f4..14c5c73c06 100644 --- a/panda/src/audio/audio_null_traits.cxx +++ b/panda/src/audio/audio_null_traits.cxx @@ -80,9 +80,10 @@ void NullPlayer::set_volume(AudioTraits::PlayingClass* p, float v) { p->set_volume(v); } -void NullPlayer::adjust_volume(AudioTraits::PlayingClass*) { +bool NullPlayer::adjust_volume(AudioTraits::PlayingClass*) { if (audio_cat->is_debug()) audio_cat->debug() << "in adjust volume in Null audio driver" << endl; + return false; } #endif /* AUDIO_USE_NULL */ diff --git a/panda/src/audio/audio_null_traits.h b/panda/src/audio/audio_null_traits.h index c78cf117be..a5ef53a6db 100644 --- a/panda/src/audio/audio_null_traits.h +++ b/panda/src/audio/audio_null_traits.h @@ -43,7 +43,7 @@ public: virtual void stop_sound(AudioTraits::SoundClass*, AudioTraits::PlayingClass*); virtual void set_volume(AudioTraits::PlayingClass*, float); - virtual void adjust_volume(AudioTraits::PlayingClass*); + virtual bool adjust_volume(AudioTraits::PlayingClass*); }; #include "audio_null_traits.I" diff --git a/panda/src/audio/audio_trait.cxx b/panda/src/audio/audio_trait.cxx index 38ca69aa89..df489f613f 100644 --- a/panda/src/audio/audio_trait.cxx +++ b/panda/src/audio/audio_trait.cxx @@ -56,6 +56,7 @@ void AudioTraits::PlayerClass::set_volume(AudioTraits::PlayingClass*, float) { audio_cat->error() << "In abstract PlayerClass::set_volume!" << endl; } -void AudioTraits::PlayerClass::adjust_volume(AudioTraits::PlayingClass*) { +bool AudioTraits::PlayerClass::adjust_volume(AudioTraits::PlayingClass*) { audio_cat->error() << "In abstract PlayerClass::adjust_volume!" << endl; + return false; } diff --git a/panda/src/audio/audio_trait.h b/panda/src/audio/audio_trait.h index f12ea53349..66f8f8f944 100644 --- a/panda/src/audio/audio_trait.h +++ b/panda/src/audio/audio_trait.h @@ -50,7 +50,7 @@ public: virtual void play_sound(SoundClass*, PlayingClass*, float) = 0; virtual void stop_sound(SoundClass*, PlayingClass*) = 0; virtual void set_volume(PlayingClass*, float) = 0; - virtual void adjust_volume(PlayingClass*) = 0; + virtual bool adjust_volume(PlayingClass*) = 0; }; }; diff --git a/panda/src/audio/audio_win_traits.cxx b/panda/src/audio/audio_win_traits.cxx index b4e1b26a40..2cca07aa70 100644 --- a/panda/src/audio/audio_win_traits.cxx +++ b/panda/src/audio/audio_win_traits.cxx @@ -896,14 +896,14 @@ void WinSamplePlayer::set_volume(AudioTraits::PlayingClass* play, float v) { play->set_volume(v); } -void WinSamplePlayer::adjust_volume(AudioTraits::PlayingClass* play) { +bool WinSamplePlayer::adjust_volume(AudioTraits::PlayingClass* play) { if (audio_cat->is_debug()) audio_cat->debug() << "winsampleplayer adjust_volume" << endl; initialize(); if (!audio_is_active) - return; + return true; if (!AudioManager::get_sfx_active()) - return; + return true; WinSamplePlaying* wplay = (WinSamplePlaying*)play; LPDIRECTSOUNDBUFFER chan = wplay->get_channel(); float tmpv = play->get_volume() * AudioManager::get_master_sfx_volume(); @@ -911,6 +911,7 @@ void WinSamplePlayer::adjust_volume(AudioTraits::PlayingClass* play) { LONG v2 = (tmpv * (DSBVOLUME_MAX - DSBVOLUME_MIN)) + DSBVOLUME_MIN; chan->SetVolume(v2); } + return false; } WinSamplePlayer* WinSamplePlayer::get_instance(void) { @@ -1003,18 +1004,19 @@ void WinMusicPlayer::set_volume(AudioTraits::PlayingClass* play, float v) { play->set_volume(v); } -void WinMusicPlayer::adjust_volume(AudioTraits::PlayingClass* play) { +bool WinMusicPlayer::adjust_volume(AudioTraits::PlayingClass* play) { if (audio_cat->is_debug()) audio_cat->debug() << "WinMusicPlayer::adjust_volume()" << endl; WinMusicPlaying* wplay = (WinMusicPlaying*)play; IDirectMusicPerformance* perf = wplay->get_performance(); float tmpv = play->get_volume() * AudioManager::get_master_music_volume(); if (!AudioManager::get_music_active()) - return; + return true; if (perf) { LONG v2 = (tmpv * (DSBVOLUME_MAX - DSBVOLUME_MIN)) + DSBVOLUME_MIN; perf->SetGlobalParam(GUID_PerfMasterVolume, &v2, sizeof(LONG)); } + return false; } WinMusicPlayer* WinMusicPlayer::get_instance(void) { diff --git a/panda/src/audio/audio_win_traits.h b/panda/src/audio/audio_win_traits.h index e74be658f2..18c76c3214 100644 --- a/panda/src/audio/audio_win_traits.h +++ b/panda/src/audio/audio_win_traits.h @@ -100,7 +100,7 @@ public: virtual void stop_sound(AudioTraits::SoundClass*, AudioTraits::PlayingClass*); virtual void set_volume(AudioTraits::PlayingClass*, float); - virtual void adjust_volume(AudioTraits::PlayingClass*); + virtual bool adjust_volume(AudioTraits::PlayingClass*); public: // used by the readers static WinSamplePlayer* get_instance(void); @@ -118,7 +118,7 @@ public: virtual void stop_sound(AudioTraits::SoundClass*, AudioTraits::PlayingClass*); virtual void set_volume(AudioTraits::PlayingClass*, float); - virtual void adjust_volume(AudioTraits::PlayingClass*); + virtual bool adjust_volume(AudioTraits::PlayingClass*); public: // used by the readers static WinMusicPlayer* get_instance(void);