aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/titanic/sound/audio_buffer.h12
-rw-r--r--engines/titanic/sound/music_room_handler.cpp4
-rw-r--r--engines/titanic/sound/wave_file.cpp2
3 files changed, 16 insertions, 2 deletions
diff --git a/engines/titanic/sound/audio_buffer.h b/engines/titanic/sound/audio_buffer.h
index c775c5bb35..6d074a356d 100644
--- a/engines/titanic/sound/audio_buffer.h
+++ b/engines/titanic/sound/audio_buffer.h
@@ -44,7 +44,7 @@ private:
* Leave a critical section
*/
void leaveCriticalSection();
-public:
+private:
bool _finished;
public:
CAudioBuffer(int maxSize);
@@ -75,6 +75,11 @@ public:
bool full() const { return _data.full(); }
/**
+ * Returns true if the audio buffering is finished
+ */
+ bool isFinished() const { return _finished && empty(); }
+
+ /**
* Adds a value to the buffer
*/
void push(int16 value);
@@ -93,6 +98,11 @@ public:
* Reads out a specified number of samples
*/
int read(int16 *values, int count);
+
+ /**
+ * Marks the buffer as finishing, and that no more new data will arrive
+ */
+ void finalize() { _finished = true; }
};
} // End of namespace Titanic
diff --git a/engines/titanic/sound/music_room_handler.cpp b/engines/titanic/sound/music_room_handler.cpp
index 5c1cd6012d..b7d6ea189e 100644
--- a/engines/titanic/sound/music_room_handler.cpp
+++ b/engines/titanic/sound/music_room_handler.cpp
@@ -232,6 +232,10 @@ void CMusicRoomHandler::updateAudio() {
_audioBuffer->push(audioData, size);
delete[] audioData;
}
+
+ if (_instrumentsActive == 0)
+ // Reaching end of music
+ _audioBuffer->finalize();
}
void CMusicRoomHandler::updateInstruments() {
diff --git a/engines/titanic/sound/wave_file.cpp b/engines/titanic/sound/wave_file.cpp
index ae633a2149..c2a66cfdcb 100644
--- a/engines/titanic/sound/wave_file.cpp
+++ b/engines/titanic/sound/wave_file.cpp
@@ -52,7 +52,7 @@ int AudioBufferStream::readBuffer(int16 *buffer, const int numSamples) {
}
bool AudioBufferStream::endOfData() const {
- return _audioBuffer->_finished;
+ return _audioBuffer->isFinished();
}
/*------------------------------------------------------------------------*/