17 #ifndef __OPENAL_AUDIO_MANAGER_H__
18 #define __OPENAL_AUDIO_MANAGER_H__
20 #include "pandabase.h"
22 #include "audioManager.h"
26 #include "movieAudioCursor.h"
31 #include <OpenAL/al.h>
32 #include <OpenAL/alc.h>
40 extern void al_audio_errcheck(
const char *context);
41 extern void alc_audio_errcheck(
const char *context,ALCdevice* device);
47 friend class OpenALSoundData;
56 virtual bool is_valid();
58 virtual PT(
AudioSound) get_sound(
const string&,
bool positional =
false,
int mode=SM_heuristic);
59 virtual PT(
AudioSound) get_sound(
MovieAudio *sound,
bool positional =
false,
int mode=SM_heuristic);
61 virtual void uncache_sound(
const string&);
62 virtual void clear_cache();
63 virtual void set_cache_limit(
unsigned int count);
64 virtual unsigned int get_cache_limit()
const;
66 virtual void set_volume(PN_stdfloat);
67 virtual PN_stdfloat get_volume()
const;
69 void set_play_rate(PN_stdfloat play_rate);
70 PN_stdfloat get_play_rate()
const;
72 virtual void set_active(
bool);
73 virtual bool get_active()
const;
81 virtual void audio_3d_set_listener_attributes(PN_stdfloat px, PN_stdfloat py, PN_stdfloat pz,
82 PN_stdfloat vx, PN_stdfloat xy, PN_stdfloat xz,
83 PN_stdfloat fx, PN_stdfloat fy, PN_stdfloat fz,
84 PN_stdfloat ux, PN_stdfloat uy, PN_stdfloat uz);
86 virtual void audio_3d_get_listener_attributes(PN_stdfloat *px, PN_stdfloat *py, PN_stdfloat *pz,
87 PN_stdfloat *vx, PN_stdfloat *vy, PN_stdfloat *vz,
88 PN_stdfloat *fx, PN_stdfloat *fy, PN_stdfloat *fz,
89 PN_stdfloat *ux, PN_stdfloat *uy, PN_stdfloat *uz);
95 virtual void audio_3d_set_distance_factor(PN_stdfloat factor);
96 virtual PN_stdfloat audio_3d_get_distance_factor()
const;
101 virtual void audio_3d_set_doppler_factor(PN_stdfloat factor);
102 virtual PN_stdfloat audio_3d_get_doppler_factor()
const;
107 virtual void audio_3d_set_drop_off_factor(PN_stdfloat factor);
108 virtual PN_stdfloat audio_3d_get_drop_off_factor()
const;
110 virtual void set_concurrent_sound_limit(
unsigned int limit = 0);
111 virtual unsigned int get_concurrent_sound_limit()
const;
112 virtual void reduce_sounds_playing_to(
unsigned int count);
114 virtual void stop_all_sounds();
119 string select_audio_device();
121 void make_current()
const;
126 SoundData *get_sound_data(
MovieAudio *source,
int mode);
130 void increment_client_count(SoundData *sd);
131 void decrement_client_count(SoundData *sd);
132 void discard_excess_cache(
int limit);
176 ExpirationQueue::iterator _expire;
180 typedef phash_map<string, SoundData *> SampleCache;
181 SampleCache _sample_cache;
183 typedef phash_set<PT(OpenALAudioSound)> SoundsPlaying;
184 SoundsPlaying _sounds_playing;
186 typedef phash_set<OpenALAudioSound *> AllSounds;
187 AllSounds _all_sounds;
192 PN_stdfloat _play_rate;
194 bool _cleanup_required;
196 static int _active_managers;
197 static bool _openal_active;
198 unsigned int _concurrent_sound_limit;
205 static ALCdevice* _device;
206 static ALCcontext* _context;
212 PN_stdfloat _distance_factor;
213 PN_stdfloat _doppler_factor;
214 PN_stdfloat _drop_off_factor;
216 ALfloat _position[3];
217 ALfloat _velocity[3];
218 ALfloat _forward_up[6];
228 static void init_type() {
229 AudioManager::init_type();
230 register_type(_type_handle,
"OpenALAudioManager", AudioManager::get_class_type());
233 return get_class_type();
237 return get_class_type();
249 EXPCL_OPENAL_AUDIO
AudioManager *Create_OpenALAudioManager();
virtual void update()
Must be called every frame.
A MovieAudio is actually any source that provides a sequence of audio samples.
virtual void shutdown()
Call this at exit time to shut down the audio system.
This is our own Panda specialization on the default STL set.
TypeHandle is the identifier used to differentiate C++ class types.
A MovieAudio is actually any source that provides a sequence of audio samples.