From 0f2496a467ea1969f6b40a6ca55898ad675ddc56 Mon Sep 17 00:00:00 2001 From: Cary Sandvig Date: Thu, 5 Oct 2000 00:04:51 +0000 Subject: [PATCH] fixed to actually work --- panda/src/audio/Sources.pp | 20 +++++++++++-- panda/src/audio/audio_linux_traits.cxx | 5 ++++ panda/src/audio/audio_linux_traits.h | 8 +++-- panda/src/audio/audio_load_midi.cxx | 39 +++++++++++++++++++++---- panda/src/audio/audio_load_st.cxx | 30 ++++++++++++------- panda/src/audio/audio_load_wav.cxx | 38 ++++++++++++++++++++---- panda/src/audio/audio_mikmod_traits.cxx | 5 ++++ panda/src/audio/audio_mikmod_traits.h | 6 +++- panda/src/audio/audio_null_traits.cxx | 5 ++++ panda/src/audio/audio_null_traits.h | 8 +++-- panda/src/audio/audio_trait.h | 21 +++++++++++++ panda/src/audio/audio_win_traits.cxx | 5 ++++ panda/src/audio/audio_win_traits.h | 6 +++- panda/src/audio/config_audio.cxx | 17 +++++++++++ panda/src/audio/config_audio.h | 2 ++ 15 files changed, 184 insertions(+), 31 deletions(-) diff --git a/panda/src/audio/Sources.pp b/panda/src/audio/Sources.pp index 2e107eb433..b7e2e5fc5c 100644 --- a/panda/src/audio/Sources.pp +++ b/panda/src/audio/Sources.pp @@ -9,11 +9,17 @@ audio_midi.h audio_music.I audio_music.cxx audio_music.h \ audio_pool.I audio_pool.cxx audio_pool.h audio_sample.I \ audio_sample.cxx audio_sample.h audio_trait.cxx audio_trait.h \ - config_audio.cxx config_audio.h + config_audio.cxx config_audio.h audio_mikmod_traits.cxx \ + audio_mikmod_traits.h audio_win_traits.I audio_win_traits.cxx \ + audio_win_traits.h audio_null_traits.I audio_null_traits.cxx \ + audio_null_traits.h audio_linux_traits.I audio_linux_traits.cxx \ + audio_linux_traits.h #define INSTALL_HEADERS \ audio.h audio_manager.h audio_music.h audio_pool.I audio_pool.h \ - audio_sample.I audio_sample.h audio_trait.h + audio_sample.I audio_sample.h audio_trait.h audio_mikmod_traits.h \ + audio_win_traits.I audio_win_traits.h audio_null_traits.I \ + audio_null_traits.h audio_linux_traits.I audio_linux_traits.h #define IGATESCAN audio.h @@ -39,6 +45,16 @@ #end lib_target +// #begin lib_target +// #define TARGET audio_load_st +// #define LOCAL_LIBS \ +// audio +// +// #define SOURCES \ +// audio_load_st.cxx +// +// #end lib_target + #begin test_bin_target #define TARGET test_audio diff --git a/panda/src/audio/audio_linux_traits.cxx b/panda/src/audio/audio_linux_traits.cxx index 618935ee11..4c0e13ed8c 100644 --- a/panda/src/audio/audio_linux_traits.cxx +++ b/panda/src/audio/audio_linux_traits.cxx @@ -4,6 +4,9 @@ //////////////////////////////////////////////////////////////////// #include "audio_linux_traits.h" + +#ifdef AUDIO_USE_LINUX + #include "audio_manager.h" #include "config_audio.h" #include @@ -278,3 +281,5 @@ LinuxPlayer* LinuxPlayer::get_instance(void) { _global_instance = new LinuxPlayer(); return _global_instance; } + +#endif /* AUDIO_USE_LINUX */ diff --git a/panda/src/audio/audio_linux_traits.h b/panda/src/audio/audio_linux_traits.h index 61d299454d..a1296ff0a1 100644 --- a/panda/src/audio/audio_linux_traits.h +++ b/panda/src/audio/audio_linux_traits.h @@ -3,11 +3,14 @@ // //////////////////////////////////////////////////////////////////// +// yes, this needs to be outside the ifdef protection +#include "audio_trait.h" + +#ifdef AUDIO_USE_LINUX + #ifndef __AUDIO_LINUX_TRAITS_H__ #define __AUDIO_LINUX_TRAITS_H__ -#include "audio_trait.h" - typedef unsigned char byte; class EXPCL_PANDA Buffer { @@ -86,3 +89,4 @@ private: #include "audio_linux_traits.I" #endif /* __AUDIO_LINUX_TRAITS_H__ */ +#endif /* AUDIO_USE_LINUX */ diff --git a/panda/src/audio/audio_load_midi.cxx b/panda/src/audio/audio_load_midi.cxx index 19c1eedd06..598998cd69 100644 --- a/panda/src/audio/audio_load_midi.cxx +++ b/panda/src/audio/audio_load_midi.cxx @@ -6,10 +6,11 @@ #include #include "audio_pool.h" #include "config_audio.h" +#include "audio_trait.h" Configure(audio_load_midi); -#ifdef USE_MIKMOD +#ifdef AUDIO_USE_MIKMOD #include "audio_mikmod_traits.h" @@ -27,9 +28,9 @@ void AudioLoadMidi(AudioTraits::MusicClass** music, *destroy = AudioDestroyMidi; } -#else +#else /* AUDIO_USE_MIKMOD */ -#ifdef PENV_WIN32 +#ifdef AUDIO_USE_WIN32 #include "audio_win_traits.h" @@ -49,7 +50,27 @@ void AudioLoadMidi(AudioTraits::MusicClass** music, << " player = " << (void*)*player << " destroy = " << (void*)*destroy << endl; } -#else +#else /* AUDIO_USE_WIN32 */ + +#ifdef AUDIO_USE_LINUX + +void AudioDestroyMidi(AudioTraits::MusicClass* music) { + delete music; +} + +void AudioLoadMidi(AudioTraits::MusicClass** music, + AudioTraits::PlayerClass** player, + AudioTraits::DeleteMusicFunc** destroy, Filename) { + audio_cat->warning() << "linux doesn't support reading midi data yet" + << endl; + *music = (AudioTraits::MusicClass*)0L; + *player = (AudioTraits::PlayerClass*)0L; + *destroy = AudioDestroyMidi; +} + +#else /* AUDIO_USE_LINUX */ + +#ifdef AUDIO_USE_NULL // Null driver #include "audio_null_traits.h" @@ -66,8 +87,14 @@ void AudioLoadMidi(AudioTraits::MusicClass** music, *destroy = AudioDestroyMidi; } -#endif /* win32 */ -#endif /* mikmod */ +#else /* AUDIO_USE_NULL */ + +#error "unknown driver type" + +#endif /* AUDIO_USE_NULL */ +#endif /* AUDIO_USE_LINUX */ +#endif /* AUDIO_USE_WIN32 */ +#endif /* AUDIO_USE_MIKMOD */ ConfigureFn(audio_load_midi) { AudioPool::register_music_loader("midi", AudioLoadMidi); diff --git a/panda/src/audio/audio_load_st.cxx b/panda/src/audio/audio_load_st.cxx index 80a8942472..bc77471cf5 100644 --- a/panda/src/audio/audio_load_st.cxx +++ b/panda/src/audio/audio_load_st.cxx @@ -6,9 +6,10 @@ #include #include "audio_pool.h" #include "config_audio.h" +#include "audio_trait.h" -#include -#include +#include +#include #if (PATCHLEVEL == 16) #define FORMATS formats @@ -220,7 +221,7 @@ static byte* read_file(Filename filename) { return ret; } -#ifdef USE_MIKMOD +#ifdef AUDIO_USE_MIKMOD void AudioDestroySt(AudioTraits::SampleClass* sample) { delete sample; @@ -236,9 +237,9 @@ void AudioLoadSt(AudioTraits::SampleClass** sample, *destroy = AudioDestroySt; } -#else /* no MikMod */ +#else /* AUDIO_USE_MIKMOD */ -ifdef PENV_WIN32 +#ifdef AUDIO_USE_WIN32 void AudioDestroySt(AudioTraits::SampleClass* sample) { delete sample; @@ -254,9 +255,9 @@ void AudioLoadSt(AudioTraits::SampleClass** sample, *destroy = AudioDestroySt; } -#else /* no win32 */ +#else /* AUDIO_USE_WIN32 */ -#ifdev PENV_LINUX +#ifdef AUDIO_USE_LINUX void AudioDestroySt(AudioTraits::SampleClass* sample) { delete sample; @@ -272,7 +273,9 @@ void AudioLoadSt(AudioTraits::SampleClass** sample, *destroy = AudioDestroySt; } -#else /* no linux */ +#else /* AUDIO_USE_LINUX */ + +#ifdef AUDIO_USE_NULL // Null driver #include "audio_null_traits.h" @@ -289,9 +292,14 @@ void AudioLoadSt(AudioTraits::SampleClass** sample, *destroy = AudioDestroySt; } -#endif /* linux */ -#endif /* win32 */ -#endif /* MikMod */ +#else /* AUDIO_USE_NULL */ + +#error "unknown audio driver type" + +#endif /* AUDIO_USE_NULL */ +#endif /* AUDIO_USE_LINUX */ +#endif /* AUDIO_USE_WIN32 */ +#endif /* AUDIO_USE_MIKMOD */ ConfigureFn(audio_load_st) { for (int i=0; FORMATS[i].names != (char**)0L; ++i) diff --git a/panda/src/audio/audio_load_wav.cxx b/panda/src/audio/audio_load_wav.cxx index f31b536385..dacb708138 100644 --- a/panda/src/audio/audio_load_wav.cxx +++ b/panda/src/audio/audio_load_wav.cxx @@ -8,7 +8,9 @@ Configure(audio_load_wav); -#ifdef USE_MIKMOD +#include "audio_trait.h" + +#ifdef AUDIO_USE_MIKMOD #include "audio_mikmod_traits.h" @@ -26,9 +28,9 @@ void AudioLoadWav(AudioTraits::SampleClass** sample, *destroy = AudioDestroyWav; } -#else /* no MikMod */ +#else /* AUDIO_USE_MIKMOD */ -#ifdef PENV_WIN32 +#ifdef AUDIO_USE_WIN32 #include "audio_win_traits.h" @@ -46,7 +48,25 @@ void AudioLoadWav(AudioTraits::SampleClass** sample, *destroy = AudioDestroyWav; } -#else /* no win32 */ +#else /* AUDIO_USE_WIN32 */ + +#ifdef AUDIO_USE_LINUX + +void AudioDestroyWav(AudioTraits::SampleClass* sample) { + delete sample; +} + +void AudioLoadWav(AudioTraits::SampleClass** sample, + AudioTraits::PlayerClass** player, + AudioTraits::DeleteSampleFunc** destroy, Filename) { + *sample = (AudioTraits::SampleClass*)0L; + *player = (audioTraits::PlayerClass*)0L; + *destroy = AudioDestroyWav; +} + +#else /* AUDIO_USE_LINUX */ + +#ifdef AUDIO_USE_NULL // Null driver #include "audio_null_traits.h" @@ -63,8 +83,14 @@ void AudioLoadWav(AudioTraits::SampleClass** sample, *destroy = AudioDestroyWav; } -#endif /* win32 */ -#endif /* MikMod */ +#else /* AUDIO_USE_NULL */ + +#error "unknown implementation driver" + +#endif /* AUDIO_USE_NULL */ +#endif /* AUDIO_USE_LINUX */ +#endif /* AUDIO_USE_WIN32 */ +#endif /* AUDIO_USE_MIKMOD */ ConfigureFn(audio_load_wav) { AudioPool::register_sample_loader("wav", AudioLoadWav); diff --git a/panda/src/audio/audio_mikmod_traits.cxx b/panda/src/audio/audio_mikmod_traits.cxx index 2240de2f60..b6a642bdaa 100644 --- a/panda/src/audio/audio_mikmod_traits.cxx +++ b/panda/src/audio/audio_mikmod_traits.cxx @@ -4,6 +4,9 @@ //////////////////////////////////////////////////////////////////// #include "audio_mikmod_traits.h" + +#ifdef AUDIO_USE_MIKMOD + #include "audio_manager.h" #include "config_audio.h" #include @@ -303,3 +306,5 @@ MikModMidiPlayer* MikModMidiPlayer::get_instance(void) { _global_instance = new MikModMidiPlayer(); return _global_instance; } + +#endif /* AUDIO_USE_MIKMOD */ diff --git a/panda/src/audio/audio_mikmod_traits.h b/panda/src/audio/audio_mikmod_traits.h index 0670f5138e..863725de3e 100644 --- a/panda/src/audio/audio_mikmod_traits.h +++ b/panda/src/audio/audio_mikmod_traits.h @@ -3,10 +3,13 @@ // //////////////////////////////////////////////////////////////////// +// yes, this should be outside +#include "audio_trait.h" + +#ifdef AUDIO_USE_MIKMOD #ifndef __AUDIO_MIKMOD_TRAITS_H__ #define __AUDIO_MIKMOD_TRAITS_H__ -#include "audio_trait.h" #include #include #include @@ -100,3 +103,4 @@ private: }; #endif /* __AUDIO_MIKMOD_TRAITS_H__ */ +#endif /* AUDIO_USE_MIKMOD */ diff --git a/panda/src/audio/audio_null_traits.cxx b/panda/src/audio/audio_null_traits.cxx index 9c28ae1323..d06ecc2467 100644 --- a/panda/src/audio/audio_null_traits.cxx +++ b/panda/src/audio/audio_null_traits.cxx @@ -4,6 +4,9 @@ //////////////////////////////////////////////////////////////////// #include "audio_null_traits.h" + +#ifdef AUDIO_USE_NULL + #include "audio_manager.h" #include "config_audio.h" @@ -68,3 +71,5 @@ void NullPlayer::set_volume(AudioTraits::MusicClass*, int) { if (audio_cat->is_debug()) audio_cat->debug() << "in set volume (music) in Null audio driver" << endl; } + +#endif /* AUDIO_USE_NULL */ diff --git a/panda/src/audio/audio_null_traits.h b/panda/src/audio/audio_null_traits.h index 2c4cf97999..2d3300b4ba 100644 --- a/panda/src/audio/audio_null_traits.h +++ b/panda/src/audio/audio_null_traits.h @@ -3,11 +3,14 @@ // //////////////////////////////////////////////////////////////////// +// yes, this needs to be outside the ifdef protection +#include "audio_trait.h" + +#ifdef AUDIO_USE_NULL + #ifndef __AUDIO_NULL_TRAITS_H__ #define __AUDIO_NULL_TRAITS_H__ -#include "audio_trait.h" - class EXPCL_PANDA NullSample : public AudioTraits::SampleClass { public: INLINE NullSample(void); @@ -39,3 +42,4 @@ public: #include "audio_null_traits.I" #endif /* __AUDIO_NULL_TRAITS_H__ */ +#endif /* AUDIO_USE_NULL */ diff --git a/panda/src/audio/audio_trait.h b/panda/src/audio/audio_trait.h index eae6763750..1915598c6b 100644 --- a/panda/src/audio/audio_trait.h +++ b/panda/src/audio/audio_trait.h @@ -46,4 +46,25 @@ public: }; }; +// this is really ugly. But since we have to be able to include/compile +// all of the driver files on any system, I need to centralize a switch +// for which one is real. +#ifdef HAVE_MIKMOD +#define AUDIO_USE_MIKMOD +#else /* HAVE_MIKMOD */ +#ifdef PENV_WIN32 +#define AUDIO_USE_WIN32 +#else /* PENV_WIN32 */ +/* +#ifdef PENV_LINUX +#define AUDIO_USE_LINUX +#else /* PENV_LINUX * +*/ +#define AUDIO_USE_NULL +/* +#endif /* PENV_LINUX * +*/ +#endif /* PENV_WIN32 */ +#endif /* HAVE_MIKMOD */ + #endif /* __AUDIO_TRAIT_H__ */ diff --git a/panda/src/audio/audio_win_traits.cxx b/panda/src/audio/audio_win_traits.cxx index 10a8a8adbd..6e33c401fa 100644 --- a/panda/src/audio/audio_win_traits.cxx +++ b/panda/src/audio/audio_win_traits.cxx @@ -4,6 +4,9 @@ //////////////////////////////////////////////////////////////////// #include "audio_win_traits.h" + +#ifdef AUDIO_USE_WIN32 + #include "audio_manager.h" #include "config_audio.h" @@ -658,3 +661,5 @@ WinPlayer* WinPlayer::get_instance(void) { _global_instance = new WinPlayer(); return _global_instance; } + +#endif /* AUDIO_USE_WIN32 */ diff --git a/panda/src/audio/audio_win_traits.h b/panda/src/audio/audio_win_traits.h index d339a83d20..c5659e49cf 100644 --- a/panda/src/audio/audio_win_traits.h +++ b/panda/src/audio/audio_win_traits.h @@ -3,10 +3,13 @@ // //////////////////////////////////////////////////////////////////// +// yes, this needs to be outside the ifdef protection +#include "audio_trait.h" + +#ifdef AUDIO_USE_WIN32 #ifndef __AUDIO_WIN_TRAITS_H__ #define __AUDIO_WIN_TRAITS_H__ -#include "audio_trait.h" #include #include @@ -76,3 +79,4 @@ private: #include "audio_win_traits.I" #endif /* __AUDIO_WIN_TRAITS_H__ */ +#endif /* AUDIO_USE_WIN32 */ diff --git a/panda/src/audio/config_audio.cxx b/panda/src/audio/config_audio.cxx index b7118fb4a1..494b0f6a14 100644 --- a/panda/src/audio/config_audio.cxx +++ b/panda/src/audio/config_audio.cxx @@ -7,6 +7,8 @@ #include "audio_sample.h" #include "audio_music.h" #include +#include +#include Configure(config_audio); NotifyCategoryDef(audio, ""); @@ -16,6 +18,8 @@ int audio_mix_freq = config_audio.GetInt("audio-mix-freq", 11025); string* audio_mode_flags; int audio_driver_select = config_audio.GetInt("audio-driver-select", 0); string* audio_driver_params; +int audio_buffer_size = config_audio.GetInt("audio-buffer-size", 4096); +string* audio_device; ConfigureFn(config_audio) { AudioSample::init_type(); @@ -38,4 +42,17 @@ ConfigureFn(config_audio) { *audio_driver_params += " "; *audio_driver_params += (*i).Val(); } + + Config::ConfigTable::Symbol loaders; + config_audio.GetAll("audio-loader", loaders); + for (i=loaders.begin(); i!=loaders.end(); ++i) { + Filename dlname = Filename::dso_filename("libaudio_load_" + (*i).Val() + + ".so"); + audio_cat->info() << "loading '" << (*i).Val() << "' loader" << endl; + void* tmp = load_dso(dlname.to_os_specific()); + if (tmp == (void*)0L) + audio_cat->info() << "unable to load: " << load_dso_error() << endl; + } + audio_device = new string(config_audio.GetString("audio-device", + "/dev/dsp")); } diff --git a/panda/src/audio/config_audio.h b/panda/src/audio/config_audio.h index 4156ff2e10..16f61f9906 100644 --- a/panda/src/audio/config_audio.h +++ b/panda/src/audio/config_audio.h @@ -16,5 +16,7 @@ extern int audio_mix_freq; extern string* audio_mode_flags; extern int audio_driver_select; extern string* audio_driver_params; +extern int audio_buffer_size; +extern string* audio_device; #endif /* __CONFIG_AUDIO_H__ */