Panda3D
|
00001 // Filename: milesAudioSample.h 00002 // Created by: skyler (June 6, 2001) 00003 // Prior system by: cary 00004 // 00005 //////////////////////////////////////////////////////////////////// 00006 // 00007 // PANDA 3D SOFTWARE 00008 // Copyright (c) Carnegie Mellon University. All rights reserved. 00009 // 00010 // All use of this software is subject to the terms of the revised BSD 00011 // license. You should have received a copy of this license along 00012 // with this source code in a file named "LICENSE." 00013 // 00014 //////////////////////////////////////////////////////////////////// 00015 00016 #ifndef MILESAUDIOSAMPLE_H 00017 #define MILESAUDIOSAMPLE_H 00018 00019 #include "pandabase.h" 00020 #ifdef HAVE_RAD_MSS //[ 00021 00022 #include "milesAudioSound.h" 00023 #include "milesAudioManager.h" 00024 #include "mss.h" 00025 00026 //////////////////////////////////////////////////////////////////// 00027 // Class : MilesAudioSample 00028 // Description : A sound file, such as a WAV or MP3 file, that is 00029 // preloaded into memory and played from memory. 00030 //////////////////////////////////////////////////////////////////// 00031 class EXPCL_MILES_AUDIO MilesAudioSample : public MilesAudioSound { 00032 private: 00033 MilesAudioSample(MilesAudioManager *manager, 00034 MilesAudioManager::SoundData *sd, 00035 const string &file_name); 00036 00037 public: 00038 virtual ~MilesAudioSample(); 00039 00040 virtual void play(); 00041 virtual void stop(); 00042 00043 virtual PN_stdfloat get_time() const; 00044 00045 virtual void set_volume(PN_stdfloat volume=1.0f); 00046 virtual void set_balance(PN_stdfloat balance_right=0.0f); 00047 virtual void set_play_rate(PN_stdfloat play_rate=1.0f); 00048 00049 virtual PN_stdfloat length() const; 00050 00051 virtual AudioSound::SoundStatus status() const; 00052 00053 virtual void cleanup(); 00054 virtual void output(ostream &out) const; 00055 00056 // 3D spatialized sound support. 00057 // Spatialized sound was originally added for FMOD, so there are parts of the 00058 // interface in the Miles implementation that are a little more awkward than 00059 // they would be otherwise. 00060 void set_3d_attributes(PN_stdfloat px, PN_stdfloat py, PN_stdfloat pz, PN_stdfloat vx, PN_stdfloat vy, PN_stdfloat vz); 00061 void get_3d_attributes(PN_stdfloat *px, PN_stdfloat *py, PN_stdfloat *pz, PN_stdfloat *vx, PN_stdfloat *vy, PN_stdfloat *vz); 00062 void set_3d_min_distance(PN_stdfloat dist); 00063 PN_stdfloat get_3d_min_distance() const; 00064 void set_3d_max_distance(PN_stdfloat dist); 00065 PN_stdfloat get_3d_max_distance() const; 00066 00067 virtual PN_stdfloat get_speaker_level(int index); 00068 virtual void set_speaker_levels(PN_stdfloat level1, PN_stdfloat level2=-1.0f, PN_stdfloat level3=-1.0f, PN_stdfloat level4=-1.0f, PN_stdfloat level5=-1.0f, PN_stdfloat level6=-1.0f, PN_stdfloat level7=-1.0f, PN_stdfloat level8=-1.0f, PN_stdfloat level9=-1.0f); 00069 00070 private: 00071 void internal_stop(); 00072 static void AILCALLBACK finish_callback(HSAMPLE sample); 00073 void do_set_time(PN_stdfloat time); 00074 00075 PT(MilesAudioManager::SoundData) _sd; 00076 HSAMPLE _sample; 00077 size_t _sample_index; 00078 S32 _original_playback_rate; 00079 00080 public: 00081 static TypeHandle get_class_type() { 00082 return _type_handle; 00083 } 00084 static void init_type() { 00085 MilesAudioSound::init_type(); 00086 register_type(_type_handle, "MilesAudioSample", 00087 MilesAudioSound::get_class_type()); 00088 } 00089 virtual TypeHandle get_type() const { 00090 return get_class_type(); 00091 } 00092 virtual TypeHandle force_init_type() {init_type(); return get_class_type();} 00093 00094 private: 00095 static TypeHandle _type_handle; 00096 00097 friend class GlobalMilesManager; 00098 friend class MilesAudioManager; 00099 }; 00100 00101 #include "milesAudioSample.I" 00102 00103 #endif //] 00104 00105 #endif /* MILESAUDIOSAMPLE_H */