aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/titanic/sound/audio_buffer.cpp22
-rw-r--r--engines/titanic/sound/audio_buffer.h29
-rw-r--r--engines/titanic/sound/music_room_handler.cpp2
-rw-r--r--engines/titanic/sound/music_wave.cpp1
4 files changed, 37 insertions, 17 deletions
diff --git a/engines/titanic/sound/audio_buffer.cpp b/engines/titanic/sound/audio_buffer.cpp
index 6798c8b312..aa4bb8ca7f 100644
--- a/engines/titanic/sound/audio_buffer.cpp
+++ b/engines/titanic/sound/audio_buffer.cpp
@@ -24,7 +24,7 @@
namespace Titanic {
-CAudioBuffer::CAudioBuffer(int bufferSize) : _flag(true), _field18(0) {
+CAudioBuffer::CAudioBuffer(int bufferSize) : _flag(true), _disabled(false) {
_buffer.resize(bufferSize);
reset();
}
@@ -35,7 +35,7 @@ CAudioBuffer::~CAudioBuffer() {
void CAudioBuffer::reset() {
_flag = true;
- _fieldC = _writeBytesLeft = _buffer.size() / 2;
+ _readBytesLeft = _writeBytesLeft = _buffer.size() / 2;
}
byte *CAudioBuffer::getBegin() {
@@ -46,9 +46,9 @@ byte *CAudioBuffer::getEnd() {
return _flag ? &_buffer[0] : &_buffer[_buffer.size() / 2];
}
-byte *CAudioBuffer::getPtr1() {
+uint16 *CAudioBuffer::getReadPtr() {
byte *ptr = getBegin();
- return ptr + (_buffer.size() / 2 - _fieldC);
+ return (uint16 *)(ptr + (_buffer.size() / 2 - _readBytesLeft));
}
uint16 *CAudioBuffer::getWritePtr() {
@@ -56,11 +56,11 @@ uint16 *CAudioBuffer::getWritePtr() {
return (uint16 *)(ptr + (_buffer.size() / 2 - _writeBytesLeft));
}
-void CAudioBuffer::setC(int val) {
- _fieldC -= val;
- if (_fieldC < 0) {
- _fieldC = 0;
- } else if (val && !_writeBytesLeft) {
+void CAudioBuffer::advanceRead(int size) {
+ _readBytesLeft -= size;
+ if (_readBytesLeft < 0) {
+ _readBytesLeft = 0;
+ } else if (size && !_writeBytesLeft) {
reverse();
}
}
@@ -69,14 +69,14 @@ void CAudioBuffer::advanceWrite(int size) {
_writeBytesLeft -= size;
if (_writeBytesLeft < 0) {
_writeBytesLeft = 0;
- } else if (size && !_fieldC) {
+ } else if (size && !_readBytesLeft) {
reverse();
}
}
void CAudioBuffer::reverse() {
_flag = !_flag;
- _fieldC = _writeBytesLeft = _buffer.size() / 2;
+ _readBytesLeft = _writeBytesLeft = _buffer.size() / 2;
}
void CAudioBuffer::enterCriticalSection() {
diff --git a/engines/titanic/sound/audio_buffer.h b/engines/titanic/sound/audio_buffer.h
index 5b6fb11072..32a5790e57 100644
--- a/engines/titanic/sound/audio_buffer.h
+++ b/engines/titanic/sound/audio_buffer.h
@@ -48,20 +48,39 @@ private:
void reverse();
public:
Common::Array<byte> _buffer;
- int _fieldC;
+ int _readBytesLeft;
int _writeBytesLeft;
bool _flag;
- int _field18;
+ bool _disabled;
public:
CAudioBuffer(int bufferSize);
~CAudioBuffer();
+ /**
+ * Resets the audio buffer
+ */
void reset();
- byte *getPtr1();
+ /**
+ * Gets a pointer to the start of previously written data
+ */
+ uint16 *getReadPtr();
+
+ /**
+ * Returns the number of bytes that can be read
+ */
+ int getBytesToRead() const { return _readBytesLeft; }
+
+ /**
+ * Advances the read index
+ */
+ void advanceRead(int size);
+
+ /**
+ * Gets a pointer to the remainder of the audio buffer that
+ * can be written to
+ */
uint16 *getWritePtr();
- int getC() const { return _fieldC; }
- void setC(int val);
/**
* Returns how many bytes can be written before hitting the
diff --git a/engines/titanic/sound/music_room_handler.cpp b/engines/titanic/sound/music_room_handler.cpp
index e716ebc233..d3ced801ea 100644
--- a/engines/titanic/sound/music_room_handler.cpp
+++ b/engines/titanic/sound/music_room_handler.cpp
@@ -96,7 +96,7 @@ void CMusicRoomHandler::setup(int volume) {
update();
_waveFile = _soundManager->loadMusic(_audioBuffer, DisposeAfterUse::NO);
- _audioBuffer->setC(_audioBuffer->getC());
+ _audioBuffer->advanceRead(_audioBuffer->getBytesToRead());
update();
}
diff --git a/engines/titanic/sound/music_wave.cpp b/engines/titanic/sound/music_wave.cpp
index 2dc7b02c3e..5a1ae73884 100644
--- a/engines/titanic/sound/music_wave.cpp
+++ b/engines/titanic/sound/music_wave.cpp
@@ -326,6 +326,7 @@ void CMusicWave::setupArray(int minVal, int maxVal) {
// TODO: Figure out if the weird shift can be represented as a simpler equation
uint32 arrSize = ((uint32)minVal << 29) - (uint32)minVal + maxVal;
+
_array = new double[arrSize / 8];
_arrayIndex = maxVal;