#if defined(__APPLE__)
# include <OpenAL/al.h>
+#elif defined(OPENALSDK)
+# include <al.h>
#else
# include <AL/al.h>
#endif
#include <string>
+#include <vector>
#include <map>
#include <simgear/compiler.h>
* @param refname Name of this audio sample for reference purposes
* @return return true if successful
*/
- bool add( SGSoundSample *sound, const string& refname );
+ bool add( SGSharedPtr<SGSoundSample> sound, const string& refname );
/**
* Remove an audio sample from this group.
*/
SGSoundSample *find( const string& refname );
+ /**
+ * Stop all playing samples and set the source id to invalid.
+ */
+ void stop();
+
/**
* Request to stop playing all audio samples until further notice.
*/
/**
* Set the velocity vector of this sample group.
- * This is in the same coordinate system as OpenGL; y=up, z=back, x=right.
+ * This is in the local frame coordinate system; x=north, y=east, z=down
* @param vel Velocity vector
*/
- void set_velocity( const SGVec3d& vel );
+ void set_velocity( const SGVec3d& vel ) {
+ _velocity = vel; _changed = true;
+ }
/**
* Set the position of this sample group.
* This is in the same coordinate system as OpenGL; y=up, z=back, x=right.
* @param pos Base position
*/
- void set_position( const SGGeod& pos );
+ void set_position_geod( const SGGeod& pos ) {
+ _base_pos = pos; _changed = true;
+ }
/**
* Set the orientation of this sample group.
* @param ori Quaternation containing the orientation information
*/
- void set_orientation( const SGQuatd& ori );
+ void set_orientation( const SGQuatd& ori ) {
+ _orientation = ori; _changed = true;
+ }
/**
* Tie this sample group to the listener position, orientation and velocity
bool _active;
private:
+ bool _changed;
+ bool _pause;
float _volume;
bool _tied_to_listener;
SGVec3d _velocity;
+ SGGeod _base_pos;
SGQuatd _orientation;
- SGGeod _position;
sample_map _samples;
+ std::vector< SGSharedPtr<SGSoundSample> > _removed_samples;
bool testForALError(string s);
bool testForError(void *p, string s);
+ void update_pos_and_orientation();
void update_sample_config( SGSoundSample *sound );
};