X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fsound%2Fsample_openal.cxx;h=85beea84eea9756061ee3087f872cf269f63c17f;hb=5c3b4abf427b6bdd1643e9467e426aaecd59abe4;hp=2a36333ae6e88407555760052925716063015121;hpb=6f5517f60298d7e5190ad68433a86922c3f2ecce;p=simgear.git diff --git a/simgear/sound/sample_openal.cxx b/simgear/sound/sample_openal.cxx index 2a36333a..85beea84 100644 --- a/simgear/sound/sample_openal.cxx +++ b/simgear/sound/sample_openal.cxx @@ -61,7 +61,9 @@ static void print_openal_error( ALuint error ) { // constructor -SGSoundSample::SGSoundSample( const char *path, const char *file ) : +SGSoundSample::SGSoundSample( const char *path, const char *file, + bool cleanup ) : + data(NULL), pitch(1.0), volume(1.0), loop(AL_FALSE) @@ -70,8 +72,10 @@ SGSoundSample::SGSoundSample( const char *path, const char *file ) : if ( strlen(file) ) { samplepath.append( file ); } - - SG_LOG( SG_GENERAL, SG_ALERT, "From file sounds sample = " + + sample_name = samplepath.str(); + + SG_LOG( SG_GENERAL, SG_DEBUG, "From file sounds sample = " << samplepath.str() ); ALuint error; @@ -88,8 +92,6 @@ SGSoundSample::SGSoundSample( const char *path, const char *file ) : if ( error != AL_NO_ERROR ) { print_openal_error( error ); throw sg_exception("Failed to gen OpenAL buffer."); - } else { - SG_LOG( SG_GENERAL, SG_ALERT, "Buffer created ok!" ); } // Load the sample file @@ -110,7 +112,10 @@ SGSoundSample::SGSoundSample( const char *path, const char *file ) : throw sg_exception("Failed to buffer data."); } - alutUnloadWAV( format, data, size, freq ); + if ( cleanup ) { + alutUnloadWAV( format, data, size, freq ); + data = NULL; + } // Bind buffer with a source. alGenSources(1, &source); @@ -124,16 +129,23 @@ SGSoundSample::SGSoundSample( const char *path, const char *file ) : alSourcefv( source, AL_POSITION, source_pos ); alSourcefv( source, AL_VELOCITY, source_vel ); alSourcei( source, AL_LOOPING, loop ); + + alSourcei( source, AL_SOURCE_RELATIVE, AL_TRUE ); + alSourcef( source, AL_REFERENCE_DISTANCE, 250.0f ); + alSourcef( source, AL_MAX_DISTANCE, 2000.0f ); } // constructor SGSoundSample::SGSoundSample( unsigned char *_data, int len, int _freq ) : + data(NULL), pitch(1.0), volume(1.0), loop(AL_FALSE) { - SG_LOG( SG_GENERAL, SG_ALERT, "In memory sounds sample" ); + SG_LOG( SG_GENERAL, SG_DEBUG, "In memory sounds sample" ); + + sample_name = "unknown, generated from data"; source_pos[0] = 0.0; source_pos[1] = 0.0; source_pos[2] = 0.0; source_vel[0] = 0.0; source_vel[1] = 0.0; source_vel[2] = 0.0; @@ -141,7 +153,7 @@ SGSoundSample::SGSoundSample( unsigned char *_data, int len, int _freq ) : // Load wav data into a buffer. alGenBuffers(1, &buffer); if (alGetError() != AL_NO_ERROR) { - SG_LOG( SG_GENERAL, SG_ALERT, "Error in alGenBuffers()" ); + throw sg_exception("Failed to gen buffer." ); return; } @@ -170,6 +182,9 @@ SGSoundSample::SGSoundSample( unsigned char *_data, int len, int _freq ) : // destructor SGSoundSample::~SGSoundSample() { SG_LOG( SG_GENERAL, SG_INFO, "Deleting a sample" ); + if ( data != NULL ) { + free(data); + } alDeleteSources(1, &source); alDeleteBuffers(1, &buffer); }