aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/sound/music_room_handler.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2017-02-12 08:05:33 -0500
committerPaul Gilbert2017-02-12 08:05:33 -0500
commit0e2c667fa86dceef5ec263949e5464d12cf6c4ec (patch)
treeba26c2ccc740ff4dc13c05f74d72d038c18a4e29 /engines/titanic/sound/music_room_handler.cpp
parentd4a718bf8407e92b3866343a12035891d92d78b8 (diff)
downloadscummvm-rg350-0e2c667fa86dceef5ec263949e5464d12cf6c4ec.tar.gz
scummvm-rg350-0e2c667fa86dceef5ec263949e5464d12cf6c4ec.tar.bz2
scummvm-rg350-0e2c667fa86dceef5ec263949e5464d12cf6c4ec.zip
TITANIC: Simplify implementation of CAudioBuffer
Diffstat (limited to 'engines/titanic/sound/music_room_handler.cpp')
-rw-r--r--engines/titanic/sound/music_room_handler.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/engines/titanic/sound/music_room_handler.cpp b/engines/titanic/sound/music_room_handler.cpp
index e50384e0f8..d464a1d95d 100644
--- a/engines/titanic/sound/music_room_handler.cpp
+++ b/engines/titanic/sound/music_room_handler.cpp
@@ -40,7 +40,7 @@ CMusicRoomHandler::CMusicRoomHandler(CProjectItem *project, CSoundManager *sound
Common::fill(&_array5[0], &_array5[4], 0.0);
Common::fill(&_position[0], &_position[4], 0);
- _audioBuffer = new CAudioBuffer(176400);
+ _audioBuffer = new CAudioBuffer(88200);
}
CMusicRoomHandler::~CMusicRoomHandler() {
@@ -96,7 +96,6 @@ void CMusicRoomHandler::setup(int volume) {
update();
_waveFile = _soundManager->loadMusic(_audioBuffer, DisposeAfterUse::NO);
- _audioBuffer->advanceRead(_audioBuffer->getBytesToRead());
update();
}
@@ -203,14 +202,15 @@ bool CMusicRoomHandler::update() {
void CMusicRoomHandler::updateAudio() {
_audioBuffer->enterCriticalSection();
- int size = _audioBuffer->getWriteBytesLeft();
+
+ int size = _audioBuffer->freeSize();
int count;
int16 *ptr;
if (size > 0) {
- // Null out the destination write area
- int16 *audioPtr = _audioBuffer->getWritePtr();
- Common::fill(audioPtr, audioPtr + size / sizeof(uint16), 0);
+ // Create a temporary buffer for merging the instruments into
+ int16 *audioData = new int16[size];
+ Common::fill(audioData, audioData + size, 0);
for (MusicInstrument instrument = BELLS; instrument <= BASS;
instrument = (MusicInstrument)((int)instrument + 1)) {
@@ -218,7 +218,7 @@ void CMusicRoomHandler::updateAudio() {
// Iterate through each of the four instruments and do an additive
// read that will merge their data onto the output buffer
- for (count = size, ptr = audioPtr; count > 0; ) {
+ for (count = size, ptr = audioData; count > 0; ) {
int amount = musicWave->read(ptr, count);
if (amount > 0) {
count -= amount;
@@ -230,7 +230,8 @@ void CMusicRoomHandler::updateAudio() {
}
}
- _audioBuffer->advanceWrite(size);
+ _audioBuffer->push(audioData, size);
+ delete[] audioData;
}
_audioBuffer->leaveCriticalSection();