documentation, licensing, copyright and small api updates.
This commit is contained in:
@@ -1,3 +1,25 @@
|
||||
// sample_group.cxx -- Manage a group of samples relative to a base position
|
||||
//
|
||||
// Written for the new SoundSystem by Erik Hofman, October 2009
|
||||
//
|
||||
// Copyright (C) 2009 Erik Hofman <erik@ehofman.com>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License as
|
||||
// published by the Free Software Foundation; either version 2 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but
|
||||
// WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software Foundation,
|
||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
//
|
||||
// $Id$
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <simgear_config.h>
|
||||
#endif
|
||||
@@ -47,8 +69,8 @@ SGSampleGroup::SGSampleGroup () :
|
||||
_active(false),
|
||||
_tied_to_listener(false),
|
||||
_velocity(SGVec3d::zeros()),
|
||||
_position(SGGeod()),
|
||||
_orientation(SGQuatd::zeros())
|
||||
_orientation(SGQuatd::zeros()),
|
||||
_position(SGGeod())
|
||||
{
|
||||
_samples.clear();
|
||||
}
|
||||
@@ -59,8 +81,8 @@ SGSampleGroup::SGSampleGroup ( SGSoundMgr *smgr, const string &refname ) :
|
||||
_active(false),
|
||||
_tied_to_listener(false),
|
||||
_velocity(SGVec3d::zeros()),
|
||||
_position(SGGeod()),
|
||||
_orientation(SGQuatd::zeros())
|
||||
_orientation(SGQuatd::zeros()),
|
||||
_position(SGGeod())
|
||||
{
|
||||
_smgr->add(this, refname);
|
||||
_samples.clear();
|
||||
@@ -288,7 +310,7 @@ bool SGSampleGroup::stop( const string& refname ) {
|
||||
}
|
||||
|
||||
// set source velocity of all managed sounds
|
||||
void SGSampleGroup::set_velocity( SGVec3d &vel ) {
|
||||
void SGSampleGroup::set_velocity( const SGVec3d &vel ) {
|
||||
if ( isnan(vel[0]) || isnan(vel[1]) || isnan(vel[2]) )
|
||||
{
|
||||
SG_LOG( SG_GENERAL, SG_ALERT, "NAN's found in SampleGroup velocity");
|
||||
@@ -307,7 +329,7 @@ void SGSampleGroup::set_velocity( SGVec3d &vel ) {
|
||||
}
|
||||
|
||||
// set the source position of all managed sounds
|
||||
void SGSampleGroup::set_position( SGGeod pos ) {
|
||||
void SGSampleGroup::set_position( const SGGeod& pos ) {
|
||||
|
||||
sample_map_iterator sample_current = _samples.begin();
|
||||
sample_map_iterator sample_end = _samples.end();
|
||||
@@ -320,7 +342,7 @@ void SGSampleGroup::set_position( SGGeod pos ) {
|
||||
|
||||
|
||||
// set the source orientation of all managed sounds
|
||||
void SGSampleGroup::set_orientation( SGQuatd ori ) {
|
||||
void SGSampleGroup::set_orientation( const SGQuatd& ori ) {
|
||||
|
||||
if (_orientation != ori) {
|
||||
sample_map_iterator sample_current = _samples.begin();
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// soundmgr.hxx -- Sound effect management class
|
||||
// sample_group.hxx -- Manage a group of samples relative to a base position
|
||||
//
|
||||
// Sampel Group handler initially written by Erik Hofman
|
||||
// Written for the new SoundSystem by Erik Hofman, October 2009
|
||||
//
|
||||
// Copyright (C) 2009 Erik Hofman - <erik@ehofman.com>
|
||||
// Copyright (C) 2009 Erik Hofman <erik@ehofman.com>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License as
|
||||
@@ -64,99 +64,150 @@ class SGSoundMgr;
|
||||
class SGSampleGroup : public SGReferenced
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Empty constructor for class encapsulation.
|
||||
* Note: The sample group should still be activated before use
|
||||
*/
|
||||
SGSampleGroup ();
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* Register this sample group at the sound manager using refname
|
||||
* Note: The sample group should still be activated before use
|
||||
* @param smgr Pointer to a pre-initialized sound manager class
|
||||
* @param refname Name of this group for reference purposes.
|
||||
*/
|
||||
SGSampleGroup ( SGSoundMgr *smgr, const string &refname );
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
*/
|
||||
~SGSampleGroup ();
|
||||
|
||||
/**
|
||||
* Set the status of this sample group to active.
|
||||
*/
|
||||
inline void activate() { _active = true; }
|
||||
|
||||
/**
|
||||
* Update function.
|
||||
* Call this function periodically to update the OpenAL state of all
|
||||
* samples associated with this class. None op the configuration changes
|
||||
* take place without a call to this function.
|
||||
*/
|
||||
virtual void update (double dt);
|
||||
|
||||
/**
|
||||
* add a sound effect, return true if successful
|
||||
* Register an audio sample to this group.
|
||||
* @param sound Pointer to a pre-initialized audio sample
|
||||
* @param refname Name of this audio sample for reference purposes
|
||||
* @return return true if successful
|
||||
*/
|
||||
bool add( SGSoundSample *sound, const string& refname );
|
||||
|
||||
/**
|
||||
* remove a sound effect, return true if successful
|
||||
* Remove an audio sample from this group.
|
||||
* @param refname Reference name of the audio sample to remove
|
||||
* @return return true if successful
|
||||
*/
|
||||
bool remove( const string& refname );
|
||||
|
||||
/**
|
||||
* return true of the specified sound exists in the sound manager system
|
||||
* Test if a specified audio sample is registered at this sample group
|
||||
* @param refname Reference name of the audio sample to test for
|
||||
* @return true if the specified audio sample exists
|
||||
*/
|
||||
bool exists( const string& refname );
|
||||
|
||||
/**
|
||||
* return a pointer to the SGSoundSample if the specified sound
|
||||
* exists in the sound manager system, otherwise return NULL
|
||||
* Find a specified audio sample in this sample group
|
||||
* @param refname Reference name of the audio sample to find
|
||||
* @return A pointer to the SGSoundSample
|
||||
*/
|
||||
SGSoundSample *find( const string& refname );
|
||||
|
||||
/**
|
||||
* request to stop playing all associated samples until further notice
|
||||
* Request to stop playing all audio samples until further notice.
|
||||
*/
|
||||
void suspend();
|
||||
|
||||
/**
|
||||
* request to resume playing all associated samples
|
||||
* Request to resume playing all audio samples.
|
||||
*/
|
||||
void resume();
|
||||
|
||||
|
||||
/**
|
||||
* request to start playing the associated samples
|
||||
* Request to start playing the refered audio sample.
|
||||
* @param refname Reference name of the audio sample to start playing
|
||||
* @param looping Define if the sound should loop continuously
|
||||
* @return true if the audio sample exsists and is scheduled for playing
|
||||
*/
|
||||
bool play( const string& refname, bool looping );
|
||||
|
||||
/**
|
||||
* tell the scheduler to play the indexed sample in a continuous
|
||||
* loop
|
||||
* Request to start playing the refered audio sample looping.
|
||||
* @param refname Reference name of the audio sample to start playing
|
||||
* @return true if the audio sample exsists and is scheduled for playing
|
||||
*/
|
||||
inline bool play_looped( const string& refname ) {
|
||||
return play( refname, true );
|
||||
}
|
||||
|
||||
/**
|
||||
* tell the scheduler to play the indexed sample once
|
||||
* Request to start playing the refered audio sample once.
|
||||
* @param refname Reference name of the audio sample to start playing
|
||||
* @return true if the audio sample exsists and is scheduled for playing
|
||||
*/
|
||||
inline bool play_once( const string& refname ) {
|
||||
return play( refname, false );
|
||||
}
|
||||
|
||||
/**
|
||||
* return true of the specified sound is currently being played
|
||||
* Test if a referenced sample is playing or not.
|
||||
* @param refname Reference name of the audio sample to test for
|
||||
* @return True of the specified sound is currently playing
|
||||
*/
|
||||
bool is_playing( const string& refname );
|
||||
|
||||
/**
|
||||
* request to stop playing the associated samples
|
||||
* Request to stop playing the refered audio sample.
|
||||
* @param refname Reference name of the audio sample to stop
|
||||
* @return true if the audio sample exsists and is scheduled to stop
|
||||
*/
|
||||
bool stop( const string& refname );
|
||||
|
||||
/**
|
||||
* set overall volume for the application.
|
||||
* @param must be between 0.0 and 1.0
|
||||
* Set the master volume for this sample group.
|
||||
* @param vol Volume (must be between 0.0 and 1.0)
|
||||
*/
|
||||
void set_volume( float vol );
|
||||
|
||||
/**
|
||||
* set the velocities of all managed sound sources
|
||||
* Set the velocity vector of this sample group.
|
||||
* This is in the same coordinate system as OpenGL; y=up, z=back, x=right.
|
||||
* @param vel Velocity vector
|
||||
*/
|
||||
void set_velocity( SGVec3d& vel );
|
||||
void set_velocity( const SGVec3d& vel );
|
||||
|
||||
/**
|
||||
* set the position of all managed sound sources
|
||||
* 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( SGGeod pos );
|
||||
void set_position( const SGGeod& pos );
|
||||
|
||||
/**
|
||||
* set the orientation of all managed sound sources
|
||||
* Set the orientation of this sample group.
|
||||
* @param ori Quaternation containing the orientation information
|
||||
*/
|
||||
void set_orientation( SGQuatd ori );
|
||||
void set_orientation( const SGQuatd& ori );
|
||||
|
||||
/**
|
||||
* Tie this sample group to the listener position, orientation and velocity
|
||||
*/
|
||||
void tie_to_listener() { _tied_to_listener = true; }
|
||||
|
||||
void activate() { _active = true; }
|
||||
|
||||
protected:
|
||||
SGSoundMgr *_smgr;
|
||||
string _refname;
|
||||
@@ -167,8 +218,8 @@ private:
|
||||
bool _tied_to_listener;
|
||||
|
||||
SGVec3d _velocity;
|
||||
SGGeod _position;
|
||||
SGQuatd _orientation;
|
||||
SGGeod _position;
|
||||
|
||||
sample_map _samples;
|
||||
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
// sample.cxx -- Sound sample encapsulation class
|
||||
// sample_openal.cxx -- Audio sample encapsulation class
|
||||
//
|
||||
// Written by Curtis Olson, started April 2004.
|
||||
// Modified to match the new SoundSystem by Erik Hofman, October 2009
|
||||
//
|
||||
// Copyright (C) 2004 Curtis L. Olson - http://www.flightgear.org/~curt
|
||||
// Copyright (C) 2009 Erik Hofman <erik@ehofman.com>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License as
|
||||
@@ -43,9 +45,10 @@ SGSoundSample::SGSoundSample() :
|
||||
_relative_pos(SGVec3d::zeros()),
|
||||
_direction(SGVec3d::zeros()),
|
||||
_velocity(SGVec3d::zeros()),
|
||||
_base_pos(SGGeod()),
|
||||
_orientation(SGQuatd::zeros()),
|
||||
_sample_name(""),
|
||||
_orivec(SGVec3f::zeros()),
|
||||
_base_pos(SGGeod()),
|
||||
_refname(""),
|
||||
_data(NULL),
|
||||
_format(AL_FORMAT_MONO8),
|
||||
_size(0),
|
||||
@@ -66,8 +69,7 @@ SGSoundSample::SGSoundSample() :
|
||||
_playing(false),
|
||||
_changed(true),
|
||||
_static_changed(true),
|
||||
_is_file(false),
|
||||
_orivec(SGVec3f::zeros())
|
||||
_is_file(false)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -77,8 +79,9 @@ SGSoundSample::SGSoundSample( const char *path, const char *file ) :
|
||||
_relative_pos(SGVec3d::zeros()),
|
||||
_direction(SGVec3d::zeros()),
|
||||
_velocity(SGVec3d::zeros()),
|
||||
_base_pos(SGGeod()),
|
||||
_orientation(SGQuatd::zeros()),
|
||||
_orivec(SGVec3f::zeros()),
|
||||
_base_pos(SGGeod()),
|
||||
_format(AL_FORMAT_MONO8),
|
||||
_size(0),
|
||||
_freq(0),
|
||||
@@ -98,14 +101,13 @@ SGSoundSample::SGSoundSample( const char *path, const char *file ) :
|
||||
_playing(false),
|
||||
_changed(true),
|
||||
_static_changed(true),
|
||||
_is_file(true),
|
||||
_orivec(SGVec3f::zeros())
|
||||
_is_file(true)
|
||||
{
|
||||
SGPath samplepath( path );
|
||||
if ( strlen(file) ) {
|
||||
samplepath.append( file );
|
||||
}
|
||||
_sample_name = samplepath.str();
|
||||
_refname = samplepath.str();
|
||||
|
||||
SG_LOG( SG_GENERAL, SG_DEBUG, "From file sounds sample = "
|
||||
<< samplepath.str() );
|
||||
@@ -117,8 +119,9 @@ SGSoundSample::SGSoundSample( unsigned char *data, int len, int freq, int format
|
||||
_relative_pos(SGVec3d::zeros()),
|
||||
_direction(SGVec3d::zeros()),
|
||||
_velocity(SGVec3d::zeros()),
|
||||
_base_pos(SGGeod()),
|
||||
_orientation(SGQuatd::zeros()),
|
||||
_orivec(SGVec3f::zeros()),
|
||||
_base_pos(SGGeod()),
|
||||
_data(data),
|
||||
_format(format),
|
||||
_size(len),
|
||||
@@ -139,10 +142,9 @@ SGSoundSample::SGSoundSample( unsigned char *data, int len, int freq, int format
|
||||
_playing(false),
|
||||
_changed(true),
|
||||
_static_changed(true),
|
||||
_is_file(false),
|
||||
_orivec(SGVec3f::zeros())
|
||||
_is_file(false)
|
||||
{
|
||||
_sample_name = "unknown, data supplied by caller";
|
||||
_refname = "unknown, data supplied by caller";
|
||||
SG_LOG( SG_GENERAL, SG_DEBUG, "In memory sounds sample" );
|
||||
}
|
||||
|
||||
@@ -151,25 +153,25 @@ SGSoundSample::SGSoundSample( unsigned char *data, int len, int freq, int format
|
||||
SGSoundSample::~SGSoundSample() {
|
||||
}
|
||||
|
||||
void SGSoundSample::set_orientation( SGQuatd ori ) {
|
||||
void SGSoundSample::set_orientation( const SGQuatd& ori ) {
|
||||
_orientation = ori;
|
||||
update_absolute_position();
|
||||
_changed = true;
|
||||
}
|
||||
|
||||
void SGSoundSample::set_direction( SGVec3d dir ) {
|
||||
void SGSoundSample::set_direction( const SGVec3d& dir ) {
|
||||
_direction = dir;
|
||||
update_absolute_position();
|
||||
_changed = true;
|
||||
}
|
||||
|
||||
void SGSoundSample::set_relative_position( SGVec3f pos ) {
|
||||
void SGSoundSample::set_relative_position( const SGVec3f& pos ) {
|
||||
_relative_pos = toVec3d(pos);
|
||||
update_absolute_position();
|
||||
_changed = true;
|
||||
}
|
||||
|
||||
void SGSoundSample::set_position( SGGeod pos ) {
|
||||
void SGSoundSample::set_position( const SGGeod& pos ) {
|
||||
_base_pos = pos;
|
||||
update_absolute_position();
|
||||
_changed = true;
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
// sample.hxx -- Sound sample encapsulation class
|
||||
// sample_openal.hxx -- Audio sample encapsulation class
|
||||
//
|
||||
// Written by Curtis Olson, started April 2004.
|
||||
// Modified to match the new SoundSystem by Erik Hofman, October 2009
|
||||
//
|
||||
// Copyright (C) 2004 Curtis L. Olson - http://www.flightgear.org/~curt
|
||||
// Copyright (C) 2009 Erik Hofman <erik@ehofman.com>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License as
|
||||
@@ -15,14 +17,14 @@
|
||||
// General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
// along with this program; if not, write to the Free Software Foundation,
|
||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
//
|
||||
// $Id$
|
||||
|
||||
/**
|
||||
* \file sample.hxx
|
||||
* Provides a sound sample encapsulation
|
||||
* \file audio sample.hxx
|
||||
* Provides a audio sample encapsulation
|
||||
*/
|
||||
|
||||
#ifndef _SG_SAMPLE_HXX
|
||||
@@ -43,59 +45,10 @@
|
||||
// #include <plib/sg.h>
|
||||
|
||||
/**
|
||||
* manages everything we need to know for an individual sound sample
|
||||
* manages everything we need to know for an individual audio sample
|
||||
*/
|
||||
|
||||
class SGSoundSample : public SGReferenced {
|
||||
|
||||
private:
|
||||
|
||||
// Position of the source sound.
|
||||
SGVec3d _absolute_pos; // absolute position
|
||||
SGVec3d _relative_pos; // position relative to the base position
|
||||
SGVec3d _direction; // orientation offset
|
||||
SGVec3d _velocity; // Velocity of the source sound.
|
||||
|
||||
// The position and orientation of the sound
|
||||
SGGeod _base_pos;
|
||||
SGQuatd _orientation; // base orientation
|
||||
|
||||
std::string _sample_name;
|
||||
unsigned char *_data;
|
||||
|
||||
// configuration values
|
||||
int _format;
|
||||
int _size;
|
||||
int _freq;
|
||||
|
||||
// Buffers hold sound data.
|
||||
bool _valid_buffer;
|
||||
unsigned int _buffer;
|
||||
|
||||
// Sources are points emitting sound.
|
||||
bool _valid_source;
|
||||
unsigned int _source;
|
||||
|
||||
// The orientation of the sound (direction and cut-off angles)
|
||||
float _inner_angle;
|
||||
float _outer_angle;
|
||||
float _outer_gain;
|
||||
|
||||
float _pitch;
|
||||
float _volume;
|
||||
float _master_volume;
|
||||
float _reference_dist;
|
||||
float _max_dist;
|
||||
bool _loop;
|
||||
|
||||
bool _playing;
|
||||
bool _changed;
|
||||
bool _static_changed;
|
||||
bool _is_file;
|
||||
|
||||
SGVec3f _orivec;
|
||||
void update_absolute_position();
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
@@ -115,241 +68,269 @@ public:
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* @param _data Pointer to a memory buffer containing the sample data
|
||||
the application is responsible for freeing the buffer data.
|
||||
* @param data Pointer to a memory buffer containing this audio sample data
|
||||
buffer data is freed by this audio sample manager.
|
||||
* @param len Byte length of array
|
||||
* @param _freq Frequency of the provided data (bytes per second)
|
||||
should usually be true unless you want to manipulate the data
|
||||
later.)
|
||||
* @param freq Frequency of the provided data (bytes per second)
|
||||
* @param format OpenAL format id of the data
|
||||
*/
|
||||
SGSoundSample( unsigned char *data, int len, int freq, int format = AL_FORMAT_MONO8 );
|
||||
SGSoundSample( unsigned char *data, int len, int freq,
|
||||
int format = AL_FORMAT_MONO8 );
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
*/
|
||||
~SGSoundSample ();
|
||||
|
||||
/**
|
||||
* detect wheter the sample holds the information of a sound file
|
||||
* Detect wheter this audio sample holds the information of a sound file.
|
||||
* @return Return true if this audio sample is to be constructed from a file.
|
||||
*/
|
||||
inline bool is_file() const { return _is_file; }
|
||||
|
||||
/**
|
||||
* Test whether this sample has a changed configuration since the last
|
||||
* call. (Calling this function resets the value).
|
||||
* Test if this audio sample configuration has changed since the last call.
|
||||
* Calling this function will reset the flag so calling it a second
|
||||
* time in a row will return false.
|
||||
* @return Return true is the configuration has changed in the mean time.
|
||||
*/
|
||||
inline bool has_changed() {
|
||||
bool has_changed() {
|
||||
bool b = _changed; _changed = false; return b;
|
||||
}
|
||||
|
||||
inline bool has_static_data_changed() {
|
||||
/**
|
||||
* Test if static dataa of audio sample configuration has changed.
|
||||
* Calling this function will reset the flag so calling it a second
|
||||
* time in a row will return false.
|
||||
* @return Return true is the static data has changed in the mean time.
|
||||
*/
|
||||
bool has_static_data_changed() {
|
||||
bool b = _static_changed; _static_changed = false; return b;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Start playing this sample.
|
||||
*
|
||||
* @param _loop Define whether the sound should be played in a loop.
|
||||
* Schedule this audio sample for playing. Actual playing will only start
|
||||
* at the next call op SoundGroup::update()
|
||||
* @param _loop Define whether this sound should be played in a loop.
|
||||
*/
|
||||
inline void play( bool loop ) {
|
||||
void play( bool loop ) {
|
||||
_playing = true; _loop = loop; _changed = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return if the sample is looping or not.
|
||||
* Check if this audio sample is set to be continuous looping.
|
||||
* @return Return true if this audio sample is set to looping.
|
||||
*/
|
||||
inline bool get_looping() { return _loop; }
|
||||
|
||||
/**
|
||||
* Stop playing this sample.
|
||||
*
|
||||
* @param sched A pointer to the appropriate scheduler.
|
||||
* Schedule this audio sample to stop playing.
|
||||
*/
|
||||
inline void stop() {
|
||||
void stop() {
|
||||
_playing = false; _changed = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Play this sample once.
|
||||
* Schedule this audio sample to play once.
|
||||
* @see #play
|
||||
*/
|
||||
inline void play_once() { play(false); }
|
||||
|
||||
/**
|
||||
* Play this sample looped.
|
||||
* Schedule this audio sample to play looped.
|
||||
* @see #play
|
||||
*/
|
||||
inline void play_looped() { play(true); }
|
||||
|
||||
/**
|
||||
* Test if a sample is currently playing.
|
||||
* @return true if is is playing, false otherwise.
|
||||
* Test if a audio sample is scheduled for playing.
|
||||
* @return true if this audio sample is playing, false otherwise.
|
||||
*/
|
||||
inline bool is_playing() { return _playing; }
|
||||
|
||||
/**
|
||||
* set the data associated with this sample
|
||||
* sSt the data associated with this audio sample
|
||||
* @param data Pointer to a memory block containg this audio sample data.
|
||||
*/
|
||||
inline void set_data( unsigned char* data ) {
|
||||
_data = data;
|
||||
}
|
||||
inline void set_data( unsigned char* data ) { _data = data; }
|
||||
|
||||
/**
|
||||
* @return the data associated with this sample
|
||||
* Return the data associated with this audio sample.
|
||||
* @return A pointer to this sound data of this audio sample.
|
||||
*/
|
||||
inline void* get_data() const { return _data; }
|
||||
|
||||
/**
|
||||
* free the data associated with this sample
|
||||
* Free the data associated with this audio sample
|
||||
*/
|
||||
inline void free_data() {
|
||||
void free_data() {
|
||||
if (_data != NULL) { delete _data; _data = NULL; }
|
||||
}
|
||||
|
||||
/**
|
||||
* set the source id of this source
|
||||
* Set the source id of this source
|
||||
* @param sid OpenAL source-id
|
||||
*/
|
||||
inline void set_source(unsigned int s) {
|
||||
_source = s; _valid_source = true; _changed = true;
|
||||
void set_source(unsigned int sid) {
|
||||
_source = sid; _valid_source = true; _changed = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the source id of this source
|
||||
* Get the OpenAL source id of this source
|
||||
* @return OpenAL source-id
|
||||
*/
|
||||
inline unsigned int get_source() { return _source; }
|
||||
|
||||
/**
|
||||
* detect wheter the source id of the sample is valid
|
||||
* Test if the source-id of this audio sample may be passed to OpenAL.
|
||||
* @return true if the source-id is valid
|
||||
*/
|
||||
inline bool is_valid_source() const { return _valid_source; }
|
||||
|
||||
/**
|
||||
* set the source id of the sample to invalid.
|
||||
* Set the source-id of this audio sample to invalid.
|
||||
*/
|
||||
inline void no_valid_source() {
|
||||
_valid_source = false;
|
||||
}
|
||||
inline void no_valid_source() { _valid_source = false; }
|
||||
|
||||
/**
|
||||
* set the buffer id of this source
|
||||
* Set the OpenAL buffer-id of this source
|
||||
* @param bid OpenAL buffer-id
|
||||
*/
|
||||
inline void set_buffer(unsigned int b) {
|
||||
_buffer = b; _valid_buffer = true; _changed = true;
|
||||
void set_buffer(unsigned int bid) {
|
||||
_buffer = bid; _valid_buffer = true; _changed = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the buffer id of this source
|
||||
* Get the OpenAL buffer-id of this source
|
||||
* @return OpenAL buffer-id
|
||||
*/
|
||||
inline unsigned int get_buffer() { return _buffer; }
|
||||
|
||||
/**
|
||||
* detect wheter the source id of the sample is valid
|
||||
* Test if the buffer-id of this audio sample may be passed to OpenAL.
|
||||
* @return true if the buffer-id is valid
|
||||
*/
|
||||
inline bool is_valid_buffer() const { return _valid_buffer; }
|
||||
|
||||
/**
|
||||
* set the source id of the sample to invalid.
|
||||
* Set the buffer-id of this audio sample to invalid.
|
||||
*/
|
||||
inline void no_valid_buffer() {
|
||||
_valid_buffer = false;
|
||||
}
|
||||
inline void no_valid_buffer() { _valid_buffer = false; }
|
||||
|
||||
/**
|
||||
* Get the current pitch setting of this sample.
|
||||
* Set the playback pitch of this audio sample.
|
||||
* Should be between 0.0 and 2.0 for maximum compatibility.
|
||||
* @param p Pitch
|
||||
*/
|
||||
inline void set_pitch( float p ) { _pitch = p; _changed = true; }
|
||||
|
||||
/**
|
||||
* Get the current pitch value of this audio sample.
|
||||
* @return Pitch
|
||||
*/
|
||||
inline float get_pitch() { return _pitch; }
|
||||
|
||||
/**
|
||||
* Set the pitch of this sample.
|
||||
*/
|
||||
inline void set_pitch( float p ) {
|
||||
_pitch = p; _changed = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current volume setting of this sample.
|
||||
*/
|
||||
inline float get_volume() { return _volume * _master_volume; }
|
||||
|
||||
/**
|
||||
* Set the master (sampel group) volume of this sample.
|
||||
* Set the master volume of this sample. Should be between 0.0 and 1.0.
|
||||
* The final volume is calculated by multiplying the master and audio sample
|
||||
* volume.
|
||||
* @param v Volume
|
||||
*/
|
||||
inline void set_master_volume( float v ) {
|
||||
_master_volume = v; _changed = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the volume of this sample.
|
||||
* Set the volume of this audio sample. Should be between 0.0 and 1.0.
|
||||
* The final volume is calculated by multiplying the master and audio sample
|
||||
* volume.
|
||||
* @param v Volume
|
||||
*/
|
||||
inline void set_volume( float v ) {
|
||||
_volume = v; _changed = true;
|
||||
}
|
||||
inline void set_volume( float v ) { _volume = v; _changed = true; }
|
||||
|
||||
/**
|
||||
* Set the format of the sounds sample
|
||||
* Get the final volume value of this audio sample.
|
||||
* @return Volume
|
||||
*/
|
||||
inline void set_format( int format ) {
|
||||
_format = format;
|
||||
}
|
||||
inline float get_volume() { return _volume * _master_volume; }
|
||||
|
||||
/**
|
||||
* Returns the format of the sounds sample
|
||||
* Set the OpenAL format of this audio sample.
|
||||
* @param format OpenAL format-id
|
||||
*/
|
||||
inline void set_format( int format ) { _format = format; }
|
||||
|
||||
/**
|
||||
* Returns the format of this audio sample.
|
||||
* @return OpenAL format-id
|
||||
*/
|
||||
inline int get_format() { return _format; }
|
||||
|
||||
|
||||
/**
|
||||
* Set the frequency of the sounds sample
|
||||
* Set the frequency (in Herz) of this audio sample.
|
||||
* @param freq Frequency
|
||||
*/
|
||||
inline void set_frequency( int freq ) {
|
||||
_freq = freq; _changed = true;
|
||||
}
|
||||
inline void set_frequency( int freq ) { _freq = freq; _changed = true; }
|
||||
|
||||
/**
|
||||
* Returns the frequency of the sounds sample
|
||||
* Returns the frequency (in Herz) of this audio sample.
|
||||
* @return Frequency
|
||||
*/
|
||||
inline int get_frequency() { return _freq; }
|
||||
|
||||
/**
|
||||
* Returns the size of the sounds sample
|
||||
* Sets the size (in bytes) of this audio sample.
|
||||
* @param size Data size
|
||||
*/
|
||||
inline void set_size( int size ) {
|
||||
_size = size;
|
||||
}
|
||||
inline void set_size( size_t size ) { _size = size; }
|
||||
|
||||
/**
|
||||
* Returns the size of the sounds sample
|
||||
* Returns the size (in bytes) of this audio sample.
|
||||
* @return Data size
|
||||
*/
|
||||
inline int get_size() const { return _size; }
|
||||
inline size_t get_size() const { return _size; }
|
||||
|
||||
/**
|
||||
* Set position of the sound source (uses same coordinate system as opengl)
|
||||
* Set the position of this sound relative to the base position.
|
||||
* This is in the same coordinate system as OpenGL; y=up, z=back, x=right.
|
||||
* @param pos Relative position of this sound
|
||||
*/
|
||||
void set_relative_position( SGVec3f pos );
|
||||
void set_relative_position( const SGVec3f& pos );
|
||||
|
||||
/**
|
||||
* Get position of the sound source (uses same coordinate system as opengl)
|
||||
* Set the base position of this sound in Geodetic coordinates.
|
||||
* @param pos Geodetic position
|
||||
*/
|
||||
inline float *get_position() const { return toVec3f(_absolute_pos).data(); }
|
||||
void set_position( const SGGeod& pos );
|
||||
|
||||
/**
|
||||
* Set the position of the sound source
|
||||
* Get the absolute position of this sound.
|
||||
* This is in the same coordinate system as OpenGL; y=up, z=back, x=right.
|
||||
* @return Absolute position
|
||||
*/
|
||||
void set_position( SGGeod pos );
|
||||
float *get_position() const { return toVec3f(_absolute_pos).data(); }
|
||||
|
||||
/**
|
||||
* Set the orientation of the sound source
|
||||
* Set the orientation of this sound.
|
||||
* @param ori Quaternation containing the orientation information
|
||||
*/
|
||||
void set_orientation( SGQuatd ori );
|
||||
void set_orientation( const SGQuatd& ori );
|
||||
|
||||
/**
|
||||
* Set the relative direction of the sound source, both for direction
|
||||
* and audio cut-off angles.
|
||||
* Set direction of this sound relative to the orientation.
|
||||
* This is in the same coordinate system as OpenGL; y=up, z=back, x=right
|
||||
* @param dir Sound emission direction
|
||||
*/
|
||||
void set_direction( SGVec3d dir );
|
||||
void set_direction( const SGVec3d& dir );
|
||||
|
||||
/**
|
||||
* Define the audio cone parameters for directional audio
|
||||
* Define the audio cone parameters for directional audio.
|
||||
* Note: setting it to 1 degree will result in 0.5 degrees to both sides.
|
||||
* @param inner Inner cone angle (0 - 360 degrees)
|
||||
* @param outer Outer cone angle (0 - 360 degrees)
|
||||
* @param gain Remaining gain at the edge of the outer cone (0.0 - 1.0)
|
||||
*/
|
||||
inline void set_audio_cone( float inner, float outer, float gain ) {
|
||||
void set_audio_cone( float inner, float outer, float gain ) {
|
||||
_inner_angle = inner;
|
||||
_outer_angle = outer;
|
||||
_outer_gain = gain;
|
||||
@@ -357,61 +338,133 @@ public:
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the orientation of the sound source, the inner or outer angle
|
||||
* or outer gain.
|
||||
* Get the orientation vector of this sound.
|
||||
* This is in the same coordinate system as OpenGL; y=up, z=back, x=right
|
||||
* @return Orientaton vector
|
||||
*/
|
||||
float *get_orientation() { return _orivec.data(); }
|
||||
|
||||
/**
|
||||
* Get the inner angle of the audio cone.
|
||||
* @return Inner angle in degrees
|
||||
*/
|
||||
float get_innerangle() { return _inner_angle; }
|
||||
|
||||
/**
|
||||
* Get the outer angle of the audio cone.
|
||||
* @return Outer angle in degrees
|
||||
*/
|
||||
float get_outerangle() { return _outer_angle; }
|
||||
|
||||
/**
|
||||
* Get the remaining gain at the edge of the outer cone.
|
||||
* @return Gain
|
||||
*/
|
||||
float get_outergain() { return _outer_gain; }
|
||||
|
||||
/**
|
||||
* Set velocity of the sound source (uses same coordinate system as opengl)
|
||||
* Set the velocity vector (in meters per second) of this sound.
|
||||
* This is in the same coordinate system as OpenGL; y=up, z=back, x=right
|
||||
* @param Velocity vector
|
||||
*/
|
||||
inline void set_velocity( SGVec3d& vel ) {
|
||||
_velocity = vel;
|
||||
_changed = true;
|
||||
inline void set_velocity( const SGVec3d& vel ) {
|
||||
_velocity = vel; _changed = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get velocity of the sound source (uses same coordinate system as opengl)
|
||||
* Get velocity vector (in meters per second) of this sound.
|
||||
* This is in the same coordinate system as OpenGL; y=up, z=back, x=right
|
||||
* @return Velocity vector
|
||||
*/
|
||||
inline float *get_velocity() { return toVec3f(_velocity).data(); }
|
||||
float *get_velocity() { return toVec3f(_velocity).data(); }
|
||||
|
||||
|
||||
/**
|
||||
* Set reference distance of sound (the distance where the gain
|
||||
* will be half.)
|
||||
* Set reference distance (in meters) of this sound.
|
||||
* This is the distance where the gain will be half.
|
||||
* @param dist Reference distance
|
||||
*/
|
||||
inline void set_reference_dist( float dist ) {
|
||||
_reference_dist = dist; _static_changed = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get reference distance of sound (the distance where the gain
|
||||
* will be half.)
|
||||
* Get reference distance ((in meters) of this sound.
|
||||
* This is the distance where the gain will be half.
|
||||
* @return Reference distance
|
||||
*/
|
||||
inline float get_reference_dist() { return _reference_dist; }
|
||||
|
||||
|
||||
/**
|
||||
* Set maximum distance of sound (the distance where the sound is
|
||||
* no longer audible.
|
||||
* Set maximum distance (in meters) of this sound.
|
||||
* This is the distance where this sound is no longer audible.
|
||||
* @param dist Maximum distance
|
||||
*/
|
||||
void set_max_dist( float dist ) {
|
||||
inline void set_max_dist( float dist ) {
|
||||
_max_dist = dist; _static_changed = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get maximum istance of sound (the distance where the sound is
|
||||
* no longer audible.
|
||||
* Get maximum distance (in meters) of this sound.
|
||||
* This is the distance where this sound is no longer audible.
|
||||
* @return dist Maximum distance
|
||||
*/
|
||||
inline float get_max_dist() { return _max_dist; }
|
||||
|
||||
/**
|
||||
* Get the name of this sample
|
||||
* Get the reference name of this audio sample.
|
||||
* @return Sample name
|
||||
*/
|
||||
inline std::string get_sample_name() { return _sample_name; }
|
||||
inline std::string get_sample_name() const { return _refname; }
|
||||
|
||||
private:
|
||||
|
||||
// Position of the source sound.
|
||||
SGVec3d _absolute_pos; // absolute position
|
||||
SGVec3d _relative_pos; // position relative to the base position
|
||||
SGVec3d _direction; // orientation offset
|
||||
SGVec3d _velocity; // Velocity of the source sound.
|
||||
|
||||
// The position and orientation of this sound
|
||||
SGQuatd _orientation; // base orientation
|
||||
SGVec3f _orivec; // orientation vector for OpenAL
|
||||
SGGeod _base_pos; // base position
|
||||
|
||||
std::string _refname; // name or file path
|
||||
unsigned char *_data;
|
||||
|
||||
// configuration values
|
||||
int _format;
|
||||
size_t _size;
|
||||
int _freq;
|
||||
|
||||
// Buffers hold sound data.
|
||||
bool _valid_buffer;
|
||||
unsigned int _buffer;
|
||||
|
||||
// Sources are points emitting sound.
|
||||
bool _valid_source;
|
||||
unsigned int _source;
|
||||
|
||||
// The orientation of this sound (direction and cut-off angles)
|
||||
float _inner_angle;
|
||||
float _outer_angle;
|
||||
float _outer_gain;
|
||||
|
||||
float _pitch;
|
||||
float _volume;
|
||||
float _master_volume;
|
||||
float _reference_dist;
|
||||
float _max_dist;
|
||||
bool _loop;
|
||||
|
||||
bool _playing;
|
||||
bool _changed;
|
||||
bool _static_changed;
|
||||
bool _is_file;
|
||||
|
||||
void update_absolute_position();
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -4,8 +4,10 @@
|
||||
// <david_j_findlay@yahoo.com.au> 2001
|
||||
//
|
||||
// C++-ified by Curtis Olson, started March 2001.
|
||||
// Modified for the new SoundSystem by Erik Hofman, October 2009
|
||||
//
|
||||
// Copyright (C) 2001 Curtis L. Olson - http://www.flightgear.org/~curt
|
||||
// Copyright (C) 2009 Erik Hofman <erik@ehofman.com>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License as
|
||||
@@ -218,13 +220,6 @@ void SGSoundMgr::unbind ()
|
||||
_sources_in_use.clear();
|
||||
}
|
||||
|
||||
void SGSoundMgr::update( double dt )
|
||||
{
|
||||
// nothing to do in the regular update, everything is done on the following
|
||||
// function
|
||||
}
|
||||
|
||||
|
||||
// run the audio scheduler
|
||||
void SGSoundMgr::update_late( double dt ) {
|
||||
if (_working) {
|
||||
@@ -420,7 +415,7 @@ unsigned int SGSoundMgr::request_buffer(SGSoundSample *sample)
|
||||
|
||||
// sample name was not found in the buffer cache.
|
||||
if ( sample->is_file() ) {
|
||||
unsigned int size;
|
||||
size_t size;
|
||||
int freq, format;
|
||||
void *data;
|
||||
|
||||
@@ -476,7 +471,7 @@ void SGSoundMgr::release_buffer(SGSoundSample *sample)
|
||||
}
|
||||
|
||||
bool SGSoundMgr::load(string &samplepath, void **dbuf, int *fmt,
|
||||
unsigned int *sz, int *frq )
|
||||
size_t *sz, int *frq )
|
||||
{
|
||||
ALenum format;
|
||||
ALsizei size;
|
||||
@@ -514,7 +509,7 @@ bool SGSoundMgr::load(string &samplepath, void **dbuf, int *fmt,
|
||||
|
||||
*dbuf = (void *)data;
|
||||
*fmt = (int)format;
|
||||
*sz = (unsigned int)size;
|
||||
*sz = (size_t)size;
|
||||
*frq = (int)freq;
|
||||
|
||||
return true;
|
||||
|
||||
@@ -4,8 +4,10 @@
|
||||
// <david_j_findlay@yahoo.com.au> 2001
|
||||
//
|
||||
// C++-ified by Curtis Olson, started March 2001.
|
||||
// Modified for the new SoundSystem by Erik Hofman, October 2009
|
||||
//
|
||||
// Copyright (C) 2001 Curtis L. Olson - http://www.flightgear.org/~curt
|
||||
// Copyright (C) 2009 Erik Hofman <erik@ehofman.com>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License as
|
||||
@@ -96,7 +98,7 @@ public:
|
||||
void init();
|
||||
void bind();
|
||||
void unbind();
|
||||
void update(double dt);
|
||||
void update(double dt) {};
|
||||
void update_late(double dt);
|
||||
|
||||
void suspend();
|
||||
@@ -106,59 +108,92 @@ public:
|
||||
inline void reinit() { stop(); init(); }
|
||||
|
||||
/**
|
||||
* is audio working?
|
||||
* Test is the sound manager is in a working condition.
|
||||
* @return true is the sound manager is working
|
||||
*/
|
||||
inline bool is_working() const { return _working; }
|
||||
|
||||
/**
|
||||
* add a sample group, return true if successful
|
||||
* Register a sample group to the sound manager.
|
||||
* @para sgrp Pointer to a sample group to add
|
||||
* @param refname Reference name of the sample group
|
||||
* @return true if successful, false otherwise
|
||||
*/
|
||||
bool add( SGSampleGroup *sgrp, const string& refname );
|
||||
|
||||
/**
|
||||
* remove a sample group, return true if successful
|
||||
* Remove a sample group from the sound manager.
|
||||
* @param refname Reference name of the sample group to remove
|
||||
* @return true if successful, false otherwise
|
||||
*/
|
||||
bool remove( const string& refname );
|
||||
|
||||
/**
|
||||
* return true of the specified sound exists in the sound manager system
|
||||
* Test if a specified sample group is registered at the sound manager
|
||||
* @param refname Reference name of the sample group test for
|
||||
* @return true if the specified sample group exists
|
||||
*/
|
||||
bool exists( const string& refname );
|
||||
|
||||
/**
|
||||
* return a pointer to the SGSampleGroup if the specified sound
|
||||
* exists in the sound manager system, otherwise return NULL
|
||||
* Find a specified sample group in the sound manager
|
||||
* @param refname Reference name of the sample group to find
|
||||
* @return A pointer to the SGSampleGroup
|
||||
*/
|
||||
SGSampleGroup *find( const string& refname, bool create = false );
|
||||
|
||||
/**
|
||||
* set the position of the listener (in opengl coordinates)
|
||||
* Set the position of the sound manager.
|
||||
* This is in the same coordinate system as OpenGL; y=up, z=back, x=right.
|
||||
* @param pos OpenAL listener position
|
||||
*/
|
||||
void set_position( const SGVec3d& pos ) {
|
||||
_position = -pos;
|
||||
_changed = true;
|
||||
}
|
||||
|
||||
inline SGVec3f get_position() { return toVec3f(_position); }
|
||||
/**
|
||||
* Get the position of the sound manager.
|
||||
* This is in the same coordinate system as OpenGL; y=up, z=back, x=right
|
||||
* @return OpenAL listener position
|
||||
*/
|
||||
SGVec3f get_position() { return toVec3f(_position); }
|
||||
|
||||
/**
|
||||
* set the velocity direction of the listener (in opengl coordinates)
|
||||
* Set the velocity vector of the sound manager
|
||||
* This is in the same coordinate system as OpenGL; y=up, z=back, x=right.
|
||||
* @param vel Velocity vector of the OpenAL listener
|
||||
*/
|
||||
void set_velocity( SGVec3d& dir ) {
|
||||
_velocity = dir;
|
||||
_changed = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the velocity vector of the sound manager
|
||||
* This is in the same coordinate system as OpenGL; y=up, z=back, x=right.
|
||||
* @return Velocity vector of the OpenAL listener
|
||||
*/
|
||||
inline SGVec3f get_velocity() { return toVec3f(_velocity); }
|
||||
|
||||
/**
|
||||
* set the orientation of the listener (in opengl coordinates)
|
||||
* Set the orientation of the sound manager
|
||||
* @param ori Quaternation containing the orientation information
|
||||
*/
|
||||
void set_orientation( SGQuatd ori );
|
||||
|
||||
/**
|
||||
* Get the orientation of the sound manager
|
||||
* @return Quaternation containing the orientation information
|
||||
*/
|
||||
inline const SGQuatd& get_orientation() { return _orientation; }
|
||||
|
||||
inline SGVec3f get_direction() {
|
||||
/**
|
||||
* Get the direction vector of the sound manager
|
||||
* This is in the same coordinate system as OpenGL; y=up, z=back, x=right.
|
||||
* @return Look-at direction of the OpenAL listener
|
||||
*/
|
||||
SGVec3f get_direction() {
|
||||
return SGVec3f(_at_up_vec[0], _at_up_vec[1], _at_up_vec[2]);
|
||||
}
|
||||
|
||||
@@ -167,42 +202,62 @@ public:
|
||||
NO_BUFFER = (unsigned int)-1
|
||||
};
|
||||
|
||||
void set_volume( float v );
|
||||
/**
|
||||
* Set the master volume.
|
||||
* @param vol Volume (must be between 0.0 and 1.0)
|
||||
*/
|
||||
void set_volume( float vol );
|
||||
|
||||
/**
|
||||
* Get the master volume.
|
||||
* @return Volume (must be between 0.0 and 1.0)
|
||||
*/
|
||||
inline float get_volume() { return _volume; }
|
||||
|
||||
/**
|
||||
* get a new OpenAL source id
|
||||
* returns NO_SOURCE if no source is available
|
||||
* Get a free OpenAL source-id
|
||||
* @return NO_SOURCE if no source is available
|
||||
*/
|
||||
unsigned int request_source();
|
||||
|
||||
/**
|
||||
* give back an OpenAL source id for further use.
|
||||
* Free an OpenAL source-id for future use
|
||||
* @param source OpenAL source-id to free
|
||||
*/
|
||||
void release_source( unsigned int source );
|
||||
|
||||
/**
|
||||
* get a new OpenAL buffer id
|
||||
* returns NO_BUFFER if loading of the buffer failed.
|
||||
* Get a free OpenAL buffer-id
|
||||
* The buffer-id will be asigned to the sample by calling this function.
|
||||
* @param sample Pointer to an audio sample to assign the buffer-id to
|
||||
* @return NO_BUFFER if loading of the buffer failed.
|
||||
*/
|
||||
unsigned int request_buffer(SGSoundSample *sample);
|
||||
|
||||
/**
|
||||
* give back an OpenAL source id for further use.
|
||||
* Free an OpenAL buffer-id for this sample
|
||||
* @param sample Pointer to an audio sample for which to free the buffer
|
||||
*/
|
||||
void release_buffer( SGSoundSample *sample );
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* returns true if the position has changed
|
||||
* Test if the position of the sound manager has changed.
|
||||
* The value will be set to false upon the next call to update_late()
|
||||
* @return true if the position has changed
|
||||
*/
|
||||
inline bool has_changed() { return _changed; }
|
||||
|
||||
/**
|
||||
* Load a sample file and return it's configuration and data.
|
||||
* @param samplepath Path to the file to load
|
||||
* @param data Pointer to a variable that points to the allocated data
|
||||
* @param format Pointer to a vairable that gets the OpenAL format
|
||||
* @param size Pointer to a vairable that gets the sample size in bytes
|
||||
* @param freq Pointer to a vairable that gets the sample frequency in Herz
|
||||
* @return true if succesful, false on error
|
||||
*/
|
||||
bool load(string &samplepath, void **data, int *format,
|
||||
unsigned int*size, int *freq );
|
||||
|
||||
|
||||
size_t *size, int *freq );
|
||||
|
||||
private:
|
||||
static int _alut_init;
|
||||
@@ -237,6 +292,7 @@ private:
|
||||
bool testForALCError(string s);
|
||||
bool testForALUTError(string s);
|
||||
bool testForError(void *p, string s);
|
||||
|
||||
void update_sample_config( SGSampleGroup *sound );
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user