From 73e7c83b4ecc017f3aaa774e7d2b86b7493e2b49 Mon Sep 17 00:00:00 2001 From: Taylor Richards Date: Mon, 23 Dec 2019 04:00:24 -0500 Subject: [PATCH] fix issue with looping audio streams --- src/sound/audiostr.cpp | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/sound/audiostr.cpp b/src/sound/audiostr.cpp index 9c91702..81125f1 100644 --- a/src/sound/audiostr.cpp +++ b/src/sound/audiostr.cpp @@ -952,8 +952,15 @@ bool AudioStream::WriteWaveData(uint size, uint *num_bytes_written, int service) for (int ib = 0; ib < MAX_STREAM_BUFFERS; ib++) { num_bytes_read = m_pwavefile->Read(uncompressed_wave_data, m_cbBufSize, service); + // if looping then maybe reset wavefile and keep going + if ( (num_bytes_read < 0) && m_bLooping) { + m_pwavefile->Cue(); + num_bytes_read = m_pwavefile->Read(uncompressed_wave_data, m_cbBufSize); + } + if (num_bytes_read < 0) { m_bReadingDone = 1; + break; } else if (num_bytes_read > 0) { alBufferData(m_buffer_ids[ib], m_pwavefile->GetOALFormat(), uncompressed_wave_data, num_bytes_read, m_pwavefile->m_wfmt.sample_rate); alSourceQueueBuffers(m_source_id, 1, &m_buffer_ids[ib]); @@ -971,6 +978,12 @@ bool AudioStream::WriteWaveData(uint size, uint *num_bytes_written, int service) num_bytes_read = m_pwavefile->Read(uncompressed_wave_data, m_cbBufSize, service); + // if looping then maybe reset wavefile and keep going + if ( (num_bytes_read < 0) && m_bLooping) { + m_pwavefile->Cue(); + num_bytes_read = m_pwavefile->Read(uncompressed_wave_data, m_cbBufSize); + } + if (num_bytes_read < 0) { m_bReadingDone = 1; } else if (num_bytes_read > 0) { @@ -1181,17 +1194,17 @@ void AudioStream::Play(float volume, int looping) } } - // Cue for playback if necessary - if (!m_fCued) { - Cue (); - } - if (looping == 1) { m_bLooping = true; } else { m_bLooping = false; } + // Cue for playback if necessary + if (!m_fCued) { + Cue (); + } + m_nTimeStarted = timer_get_milliseconds(); Set_Volume(volume); -- 2.39.2