aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/titanic/sound/audio_buffer.cpp12
-rw-r--r--engines/titanic/sound/audio_buffer.h8
-rw-r--r--engines/titanic/sound/music_room_handler.cpp34
-rw-r--r--engines/titanic/sound/music_room_handler.h1
-rw-r--r--engines/titanic/sound/music_wave.cpp5
-rw-r--r--engines/titanic/sound/music_wave.h2
6 files changed, 51 insertions, 11 deletions
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