X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Faudio%2Fstream_sound_source.cpp;h=e813b7d7d61457db65bec947f21b3129d6d65f18;hb=0ebb40343bafd9f8b047c1917c91ab3611ded965;hp=bb178725d4cee6dc9538b19f51cc2b516d08f99a;hpb=08813a74da6ac1fd045a105e4e8105f1d7f716f0;p=supertux.git diff --git a/src/audio/stream_sound_source.cpp b/src/audio/stream_sound_source.cpp index bb178725d..e813b7d7d 100644 --- a/src/audio/stream_sound_source.cpp +++ b/src/audio/stream_sound_source.cpp @@ -21,8 +21,8 @@ #include "util/log.hpp" StreamSoundSource::StreamSoundSource() : - file(0), - fade_state(NoFading), + file(), + fade_state(NoFading), fade_start_time(), fade_time(), looping(false) @@ -30,24 +30,23 @@ StreamSoundSource::StreamSoundSource() : alGenBuffers(STREAMFRAGMENTS, buffers); SoundManager::check_al_error("Couldn't allocate audio buffers: "); //add me to update list - sound_manager->register_for_update( this ); + SoundManager::current()->register_for_update( this ); } StreamSoundSource::~StreamSoundSource() { //don't update me any longer - sound_manager->remove_from_update( this ); - delete file; + SoundManager::current()->remove_from_update( this ); + file.reset(); stop(); alDeleteBuffers(STREAMFRAGMENTS, buffers); SoundManager::check_al_error("Couldn't delete audio buffers: "); } void -StreamSoundSource::set_sound_file(SoundFile* newfile) +StreamSoundSource::set_sound_file(std::unique_ptr newfile) { - delete file; - file = newfile; + file = std::move(newfile); ALint queued; alGetSourcei(source, AL_BUFFERS_QUEUED, &queued); @@ -100,10 +99,10 @@ StreamSoundSource::update() } void -StreamSoundSource::set_fading(FadeState state, float fade_time) +StreamSoundSource::set_fading(FadeState state, float fade_time_) { this->fade_state = state; - this->fade_time = fade_time; + this->fade_time = fade_time_; this->fade_start_time = real_time; } @@ -111,10 +110,10 @@ bool StreamSoundSource::fillBufferAndQueue(ALuint buffer) { // fill buffer - char* bufferdata = new char[STREAMFRAGMENTSIZE]; + std::unique_ptr bufferdata(new char[STREAMFRAGMENTSIZE]); size_t bytesread = 0; do { - bytesread += file->read(bufferdata + bytesread, + bytesread += file->read(bufferdata.get() + bytesread, STREAMFRAGMENTSIZE - bytesread); // end of sound file if(bytesread < STREAMFRAGMENTSIZE) { @@ -126,14 +125,13 @@ StreamSoundSource::fillBufferAndQueue(ALuint buffer) } while(bytesread < STREAMFRAGMENTSIZE); if(bytesread > 0) { - ALenum format = SoundManager::get_sample_format(file); - alBufferData(buffer, format, bufferdata, bytesread, file->rate); + ALenum format = SoundManager::get_sample_format(*file); + alBufferData(buffer, format, bufferdata.get(), bytesread, file->rate); SoundManager::check_al_error("Couldn't refill audio buffer: "); alSourceQueueBuffers(source, 1, &buffer); SoundManager::check_al_error("Couldn't queue audio buffer: "); } - delete[] bufferdata; // return false if there aren't more buffers to fill return bytesread >= STREAMFRAGMENTSIZE;