Răsfoiți Sursa

more safety wrt loading on machines without a soundcard

Cary Sandvig 25 ani în urmă
părinte
comite
97b57df1b7
2 a modificat fișierele cu 24 adăugiri și 0 ștergeri
  1. 22 0
      panda/src/audio/audio_win_traits.cxx
  2. 2 0
      panda/src/audio/test_audio.cxx

+ 22 - 0
panda/src/audio/audio_win_traits.cxx

@@ -364,6 +364,10 @@ WinSample* WinSample::load_wav(Filename filename) {
   WinSample* ret = (WinSample*)0L;
 
   initialize();
+
+  if (!audio_is_active)
+    return ret;
+
   WAVEFORMATEX wavInfo;
   UINT wavSize = 0;
   BYTE* wavData = NULL;
@@ -394,6 +398,9 @@ WinSample* WinSample::load_raw(unsigned char* data, unsigned long size) {
 
   initialize();
 
+  if (!audio_is_active)
+    return ret;
+
   // synth a wav header for this data
   WAVEFORMATEX wavInfo;
   ZeroMemory(&wavInfo, sizeof(WAVEFORMATEX));
@@ -590,6 +597,10 @@ WinMusic* WinMusic::load_midi(Filename filename) {
   if (audio_cat->is_debug())
     audio_cat->debug() << "in WinMusic::load_midi()" << endl;
   initialize();
+
+  if (!audio_is_active)
+    return (WinMusic*)0L;
+
   // WinMusic* ret = (WinMusic*)0L;
   WinMusic* ret = new WinMusic();
   if (ret->_performance && ret->_music) {
@@ -674,6 +685,9 @@ WinSamplePlaying::WinSamplePlaying(AudioTraits::SoundClass* s)
 
   initialize();
 
+  if (!audio_is_active)
+    return;
+
   WinSample* ws = (WinSample*)s;
 
   if (ws == (WinSample*)0L) {
@@ -816,6 +830,8 @@ void WinSamplePlayer::play_sound(AudioTraits::SoundClass* sample,
   if (audio_cat->is_debug())
     audio_cat->debug() << "in winsampleplayer play_sound" << endl;
   initialize();
+  if (!audio_is_active)
+    return;
   WinSample* wsample = (WinSample*)sample;
   WinSamplePlaying* wplay = (WinSamplePlaying*)play;
   LPDIRECTSOUNDBUFFER chan = wplay->get_channel();
@@ -832,6 +848,8 @@ void WinSamplePlayer::play_sound(AudioTraits::SoundClass* sample,
 void WinSamplePlayer::stop_sound(AudioTraits::SoundClass*,
 			   AudioTraits::PlayingClass* play) {
   initialize();
+  if (!audio_is_active)
+    return;
   WinSamplePlaying* wplay = (WinSamplePlaying*)play;
   LPDIRECTSOUNDBUFFER chan = wplay->get_channel();
   if (chan)
@@ -842,6 +860,8 @@ void WinSamplePlayer::set_volume(AudioTraits::PlayingClass* play, float v) {
   if (audio_cat->is_debug())
     audio_cat->debug() << "winsampleplayer set_volume" << endl;
   initialize();
+  if (!audio_is_active)
+    return;
   WinSamplePlaying* wplay = (WinSamplePlaying*)play;
   LPDIRECTSOUNDBUFFER chan = wplay->get_channel();
   if (chan) {
@@ -873,6 +893,8 @@ void WinMusicPlayer::play_sound(AudioTraits::SoundClass* music,
   if (audio_cat->is_debug())
     audio_cat->debug() << "in WinMusicPlayer::play_sound()" << endl;
   initialize();
+  if (!audio_is_active)
+    return;
   WinMusic* wmusic = (WinMusic*)music;
   IDirectMusicPerformance* _perf = wmusic->get_performance();
   IDirectMusicSegment* _msc = wmusic->get_music();

+ 2 - 0
panda/src/audio/test_audio.cxx

@@ -17,9 +17,11 @@ main(int argc, char* argv[]) {
       exit(-1);
     }
 
+  AudioManager::spawn_update();
   {
     {
       PT(AudioSound) tester = AudioPool::load_sound(argv[1]);
+      AudioManager::play(tester);
       AudioPool::release_all_sounds();
       cerr << "all sounds but 1 released" << endl;
     }