continue;
// start playing the sample
- ALboolean looping = sample->get_looping() ? AL_TRUE : AL_FALSE;
ALuint buffer = sample->get_buffer();
ALuint source = _smgr->request_source();
if (alIsSource(source) == AL_TRUE && alIsBuffer(buffer) == AL_TRUE)
sample->set_source( source );
update_sample_config( sample );
- alSourcei( source, AL_SOURCE_RELATIVE, AL_FALSE );
+ ALboolean looping = sample->get_looping() ? AL_TRUE : AL_FALSE;
alSourcei( source, AL_LOOPING, looping );
alSourcef( source, AL_ROLLOFF_FACTOR, 1.0 );
+ alSourcei( source, AL_SOURCE_RELATIVE, AL_FALSE );
alSourcePlay( source );
testForALError("sample play");
} else {
SG_LOG( SG_GENERAL, SG_ALERT, "No such buffer!\n");
// sample->no_valid_source();
// sadly, no free source available at this time
+printf("No free source found.");
}
} else if ( sample->is_valid_source() && sample->has_changed() ) {
if ( !sample->is_playing() ) {
// a request to stop playing the sound has been filed.
- sample->no_valid_source();
sample->stop();
+ sample->no_valid_source();
_smgr->release_source( sample->get_source() );
} else {
update_sample_config( sample );
alGetSourcei( source, AL_SOURCE_STATE, &result );
if ( result == AL_STOPPED ) {
// sample is stoped because it wasn't looping
- sample->no_valid_source();
sample->stop();
+ sample->no_valid_source();
_smgr->release_source( source );
+ _smgr->release_buffer( sample );
}
}
testForALError("update");
return false;
}
- _removed_samples.push_back( sample_it->second );
+ if ( sample_it->second->is_valid_buffer() )
+ _removed_samples.push_back( sample_it->second );
_samples.erase( sample_it );
return true;