void StreamSoundSource::update() { if(m_waitingFile) return; SoundSource::update(); int processed = 0; alGetSourcei(m_sourceId, AL_BUFFERS_PROCESSED, &processed); for(int i = 0; i < processed; ++i) { uint buffer; alSourceUnqueueBuffers(m_sourceId, 1, &buffer); //SoundManager::check_al_error("Couldn't unqueue audio buffer: "); if(!fillBufferAndQueue(buffer)) break; } if(!isBuffering() && m_playing) { if(!m_looping && m_eof) { stop(); } else if(processed == 0) { g_logger.traceError("audio buffer underrun"); play(); } else if(m_looping) { play(); } } }
void StreamSoundSource::queueBuffers() { ALint queued; alGetSourcei(m_sourceId, AL_BUFFERS_QUEUED, &queued); for(int i = 0; i < STREAM_FRAGMENTS - queued; ++i) { if(!fillBufferAndQueue(m_buffers[i]->getBufferId())) break; } }
void StreamSoundSource::set_sound_file(std::unique_ptr<SoundFile> newfile) { file = std::move(newfile); ALint queued; alGetSourcei(source, AL_BUFFERS_QUEUED, &queued); for(size_t i = 0; i < STREAMFRAGMENTS - queued; ++i) { if(fillBufferAndQueue(buffers[i]) == false) break; } }
void StreamSoundSource::set_sound_file(SoundFile* newfile) { delete file; file = newfile; ALint queued; alGetSourcei(source, AL_BUFFERS_QUEUED, &queued); for(size_t i = 0; i < STREAMFRAGMENTS - queued; ++i) { if(fillBufferAndQueue(buffers[i]) == false) break; } }
void StreamSoundSource::update() { ALint processed = 0; alGetSourcei(source, AL_BUFFERS_PROCESSED, &processed); for(ALint i = 0; i < processed; ++i) { ALuint buffer; alSourceUnqueueBuffers(source, 1, &buffer); try { SoundManager::check_al_error("Couldn't unqueue audio buffer: "); } catch(std::exception& e) { log_warning << e.what() << std::endl; } if(fillBufferAndQueue(buffer) == false) break; } if(!playing()) { if(processed == 0 || !looping) return; // we might have to restart the source if we had a buffer underrun log_info << "Restarting audio source because of buffer underrun" << std::endl; play(); } if(fade_state == FadingOn || fade_state == FadingResume) { float time = real_time - fade_start_time; if(time >= fade_time) { set_gain(1.0); fade_state = NoFading; } else { set_gain(time / fade_time); } } else if(fade_state == FadingOff || fade_state == FadingPause) { float time = real_time - fade_start_time; if(time >= fade_time) { if(fade_state == FadingOff) stop(); else pause(); fade_state = NoFading; } else { set_gain( (fade_time-time) / fade_time); } } }
void StreamSoundSource::update() { SoundSource::update(); ALint processed = 0; alGetSourcei(m_sourceId, AL_BUFFERS_PROCESSED, &processed); for(ALint i = 0; i < processed; ++i) { ALuint buffer; alSourceUnqueueBuffers(m_sourceId, 1, &buffer); //SoundManager::check_al_error("Couldn't unqueue audio buffer: "); if(!fillBufferAndQueue(buffer)) break; } if(!isPlaying()) { if(processed == 0 || !m_looping) return; g_logger.traceError("restarting audio source because of buffer underrun"); play(); } }