Selaa lähdekoodia

tweeking on sound shutdown

Cary Sandvig 25 vuotta sitten
vanhempi
sitoutus
c215c0b044

+ 4 - 2
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) {

+ 2 - 2
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);

+ 2 - 1
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;
 }

+ 7 - 4
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) {

+ 3 - 3
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);

+ 2 - 1
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 */

+ 1 - 1
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"

+ 2 - 1
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;
 }

+ 1 - 1
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;
   };
 };
 

+ 7 - 5
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) {

+ 2 - 2
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);