// 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)
if ( strlen(file) ) {
samplepath.append( file );
}
-
+
+ sample_name = samplepath.str();
+
SG_LOG( SG_GENERAL, SG_DEBUG, "From file sounds sample = "
<< samplepath.str() );
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);
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_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;
// 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;
}
// destructor
SGSoundSample::~SGSoundSample() {
SG_LOG( SG_GENERAL, SG_INFO, "Deleting a sample" );
+ if ( data != NULL ) {
+ free(data);
+ }
alDeleteSources(1, &source);
alDeleteBuffers(1, &buffer);
}