From a5f71a3d8bd6bfa6d16909703755473d95b2b28f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 2 Feb 2017 22:36:21 -0500 Subject: TITANIC: Implemented CMusicRoomhandler updateAudio --- engines/titanic/sound/audio_buffer.cpp | 12 +++++----- engines/titanic/sound/audio_buffer.h | 8 +++---- engines/titanic/sound/music_room_handler.cpp | 34 +++++++++++++++++++++++++++- engines/titanic/sound/music_room_handler.h | 1 + engines/titanic/sound/music_wave.cpp | 5 ++++ engines/titanic/sound/music_wave.h | 2 ++ 6 files changed, 51 insertions(+), 11 deletions(-) (limited to 'engines/titanic') diff --git a/engines/titanic/sound/audio_buffer.cpp b/engines/titanic/sound/audio_buffer.cpp index 7de7c47ef1..425b5b3ef8 100644 --- a/engines/titanic/sound/audio_buffer.cpp +++ b/engines/titanic/sound/audio_buffer.cpp @@ -38,21 +38,21 @@ void CAudioBuffer::reset() { _fieldC = _field10 = _buffer.size() / 2; } -const byte *CAudioBuffer::getDataPtr1() const { +byte *CAudioBuffer::getDataPtr1() { return _flag ? &_buffer[_buffer.size() / 2] : &_buffer[0]; } -const byte *CAudioBuffer::getDataPtr2() const { +byte *CAudioBuffer::getDataPtr2() { return _flag ? &_buffer[0] : &_buffer[_buffer.size() / 2]; } -const byte *CAudioBuffer::getPtr1() const { - const byte *ptr = getDataPtr1(); +byte *CAudioBuffer::getPtr1() { + byte *ptr = getDataPtr1(); return ptr + (_buffer.size() / 2 - _fieldC); } -const byte *CAudioBuffer::getPtr2() const { - const byte *ptr = getDataPtr2(); +byte *CAudioBuffer::getPtr2() { + byte *ptr = getDataPtr2(); return ptr + (_buffer.size() / 2 - _field10); } diff --git a/engines/titanic/sound/audio_buffer.h b/engines/titanic/sound/audio_buffer.h index 77027ac042..ea05688377 100644 --- a/engines/titanic/sound/audio_buffer.h +++ b/engines/titanic/sound/audio_buffer.h @@ -42,10 +42,10 @@ public: ~CAudioBuffer(); void reset(); - const byte *getDataPtr1() const; - const byte *getDataPtr2() const; - const byte *getPtr1() const; - const byte *getPtr2() const; + byte *getDataPtr1(); + byte *getDataPtr2(); + byte *getPtr1(); + byte *getPtr2(); int getC() const { return _fieldC; } int get10() const { return _field10; } void setC(int val); diff --git a/engines/titanic/sound/music_room_handler.cpp b/engines/titanic/sound/music_room_handler.cpp index 50e3cdf5f2..ae08af7f69 100644 --- a/engines/titanic/sound/music_room_handler.cpp +++ b/engines/titanic/sound/music_room_handler.cpp @@ -201,7 +201,34 @@ bool CMusicRoomHandler::update() { } void CMusicRoomHandler::updateAudio() { - // TODO + _audioBuffer->enterCriticalSection(); + int size = _audioBuffer->get10(); + int count; + byte *ptr; + + if (size > 0) { + byte *audioPtr = _audioBuffer->getPtr2(); + Common::fill(audioPtr, audioPtr + size, 0); + + for (int waveIdx = 0; waveIdx < 4; ++waveIdx) { + CMusicWave *musicWave = _musicWaves[waveIdx]; + + for (count = size, ptr = audioPtr; count > 0; ) { + int amount = musicWave->setData(ptr, count); + if (amount > 0) { + count -= amount; + ptr += amount; + } else if (!fn2()) { + --_field108; + break; + } + } + } + + _audioBuffer->set10(size); + } + + _audioBuffer->leaveCriticalSection(); } void CMusicRoomHandler::fn1() { @@ -221,4 +248,9 @@ void CMusicRoomHandler::fn1() { } } +bool CMusicRoomHandler::fn2() { + // TODO + return false; +} + } // End of namespace Titanic diff --git a/engines/titanic/sound/music_room_handler.h b/engines/titanic/sound/music_room_handler.h index 9102ad4243..81f50e4b12 100644 --- a/engines/titanic/sound/music_room_handler.h +++ b/engines/titanic/sound/music_room_handler.h @@ -84,6 +84,7 @@ private: void updateAudio(); void fn1(); + bool fn2(); public: CMusicRoomHandler(CProjectItem *project, CSoundManager *soundManager); ~CMusicRoomHandler(); diff --git a/engines/titanic/sound/music_wave.cpp b/engines/titanic/sound/music_wave.cpp index 5038780457..3c4a4cf013 100644 --- a/engines/titanic/sound/music_wave.cpp +++ b/engines/titanic/sound/music_wave.cpp @@ -267,4 +267,9 @@ void CMusicWave::setState(int val) { _field44 = 0; } +int CMusicWave::setData(const byte *data, int count) { + // TODO: Implement + return 0; +} + } // End of namespace Titanic diff --git a/engines/titanic/sound/music_wave.h b/engines/titanic/sound/music_wave.h index eee21a96c2..aa95770dac 100644 --- a/engines/titanic/sound/music_wave.h +++ b/engines/titanic/sound/music_wave.h @@ -106,6 +106,8 @@ public: void reset(); void setState(int val); + + int setData(const byte *data, int count); }; } // End of namespace Titanic -- cgit v1.2.3