aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/sound
diff options
context:
space:
mode:
authorPaul Gilbert2017-02-08 20:30:18 -0500
committerPaul Gilbert2017-02-08 20:30:18 -0500
commit059a2b375182270012d5b4313e9cd04fedf7054e (patch)
tree4d79abacb7c659b6ad63cff166f6ad4fdc1f4141 /engines/titanic/sound
parentd8a103d9e26f4d9ddb4b17f418559044b003343a (diff)
downloadscummvm-rg350-059a2b375182270012d5b4313e9cd04fedf7054e.tar.gz
scummvm-rg350-059a2b375182270012d5b4313e9cd04fedf7054e.tar.bz2
scummvm-rg350-059a2b375182270012d5b4313e9cd04fedf7054e.zip
TITANIC: Renamings and comments for music classes
Diffstat (limited to 'engines/titanic/sound')
-rw-r--r--engines/titanic/sound/music_room_handler.cpp2
-rw-r--r--engines/titanic/sound/music_wave.cpp16
-rw-r--r--engines/titanic/sound/music_wave.h12
-rw-r--r--engines/titanic/sound/qmixer.cpp6
-rw-r--r--engines/titanic/sound/wave_file.cpp43
-rw-r--r--engines/titanic/sound/wave_file.h5
6 files changed, 49 insertions, 35 deletions
diff --git a/engines/titanic/sound/music_room_handler.cpp b/engines/titanic/sound/music_room_handler.cpp
index d3ced801ea..8c0ac88ab6 100644
--- a/engines/titanic/sound/music_room_handler.cpp
+++ b/engines/titanic/sound/music_room_handler.cpp
@@ -290,7 +290,7 @@ bool CMusicRoomHandler::fn2(int index) {
if (vp._field0 == 0x7FFFFFFF || _array1[index]._muteControl)
_musicWaves[index]->setSize(size);
else
- _musicWaves[index]->processArray(getPitch(index, arrIndex), size);
+ _musicWaves[index]->chooseInstrument(getPitch(index, arrIndex), size);
if (_array1[index]._directionControl == _array2[index]._directionControl) {
++arrIndex;
diff --git a/engines/titanic/sound/music_wave.cpp b/engines/titanic/sound/music_wave.cpp
index 5f111a440d..2b89c700b2 100644
--- a/engines/titanic/sound/music_wave.cpp
+++ b/engines/titanic/sound/music_wave.cpp
@@ -53,7 +53,7 @@ CMusicWave::CMusicWave(CProjectItem *project, CSoundManager *soundManager, Music
_project(project), _soundManager(soundManager), _instrument(instrument) {
Common::fill(&_gameObjects[0], &_gameObjects[4], (CGameObject *)nullptr);
_floatVal = 0.0;
- _field34 = -1;
+ _waveIndex = -1;
_readPos = 0;
_readIncrement = 0;
_size = 0;
@@ -254,7 +254,7 @@ void CMusicWave::trigger() {
}
void CMusicWave::reset() {
- _field34 = 0;
+ _waveIndex = 0;
_readPos = 0;
_readIncrement = 0;
_size = 0;
@@ -262,7 +262,7 @@ void CMusicWave::reset() {
}
void CMusicWave::setSize(uint total) {
- _field34 = -1;
+ _waveIndex = -1;
_readPos = 0;
_readIncrement = 0;
_size = total;
@@ -276,8 +276,8 @@ int CMusicWave::read(uint16 *ptr, uint size) {
if (size >= _size)
size = _size;
- if (_field34 != -1) {
- const byte *data = _items[_field34]._waveFile->lock();
+ if (_waveIndex != -1) {
+ const byte *data = _items[_waveIndex]._waveFile->lock();
assert(data);
const uint16 *src = (const uint16 *)data;
@@ -291,14 +291,14 @@ int CMusicWave::read(uint16 *ptr, uint size) {
*ptr++ = val;
}
- _items[_field34]._waveFile->unlock(data);
+ _items[_waveIndex]._waveFile->unlock(data);
}
_size -= size;
return size;
}
-void CMusicWave::processArray(int index, int size) {
+void CMusicWave::chooseInstrument(int index, int size) {
if (!_array)
setupArray(-36, 36);
@@ -314,7 +314,7 @@ void CMusicWave::processArray(int index, int size) {
int arrIndex = _arrayIndex - _items[minIndex]._value + index;
- _field34 = minIndex;
+ _waveIndex = minIndex;
_readPos = 0;
_readIncrement = (int)(_array[arrIndex] * 256);
_size = size;
diff --git a/engines/titanic/sound/music_wave.h b/engines/titanic/sound/music_wave.h
index d1ccb33f30..baed60c907 100644
--- a/engines/titanic/sound/music_wave.h
+++ b/engines/titanic/sound/music_wave.h
@@ -54,7 +54,7 @@ private:
MusicWaveInstrument _instrument;
CProjectItem *_project;
CGameObject *_gameObjects[4];
- int _field34;
+ int _waveIndex;
int _readPos;
int _readIncrement;
uint _size;
@@ -66,6 +66,11 @@ private:
*/
CWaveFile *createWaveFile(const CString &name);
+ /**
+ * Sets up an array used for figuring out the sequence in which to
+ * play the different wave files for each instrument to give the
+ * music based on the console's settings
+ */
void setupArray(int minVal, int maxVal);
public:
double _floatVal;
@@ -116,7 +121,10 @@ public:
*/
int read(uint16 *ptr, uint size);
- void processArray(int index, int freq);
+ /**
+ * Figure out which wave file to use next
+ */
+ void chooseInstrument(int index, int freq);
};
} // End of namespace Titanic
diff --git a/engines/titanic/sound/qmixer.cpp b/engines/titanic/sound/qmixer.cpp
index b3910f846a..1854260f54 100644
--- a/engines/titanic/sound/qmixer.cpp
+++ b/engines/titanic/sound/qmixer.cpp
@@ -204,9 +204,9 @@ void QMixer::qsWaveMixPump() {
if (sound._started && !_mixer->isSoundHandleActive(sound._soundHandle)) {
if (sound._loops == -1 || sound._loops-- > 0) {
// Need to loop the sound again
- sound._waveFile->_stream->rewind();
+ sound._waveFile->_audioStream->rewind();
_mixer->playStream(sound._waveFile->_soundType,
- &sound._soundHandle, sound._waveFile->_stream,
+ &sound._soundHandle, sound._waveFile->_audioStream,
-1, channel.getRawVolume(), 0, DisposeAfterUse::NO);
} else {
// Sound is finished
@@ -230,7 +230,7 @@ void QMixer::qsWaveMixPump() {
// Calculate an effective volume based on distance of source
_mixer->playStream(sound._waveFile->_soundType,
- &sound._soundHandle, sound._waveFile->_stream,
+ &sound._soundHandle, sound._waveFile->_audioStream,
-1, channel.getRawVolume(), 0, DisposeAfterUse::NO);
sound._started = true;
}
diff --git a/engines/titanic/sound/wave_file.cpp b/engines/titanic/sound/wave_file.cpp
index 3082bbfb86..5d9987a33f 100644
--- a/engines/titanic/sound/wave_file.cpp
+++ b/engines/titanic/sound/wave_file.cpp
@@ -28,12 +28,14 @@
namespace Titanic {
-CWaveFile::CWaveFile() : _soundManager(nullptr), _stream(nullptr),
- _soundType(Audio::Mixer::kPlainSoundType) {
+#define WAV_DATA_OFFSET 0x46
+
+CWaveFile::CWaveFile() : _soundManager(nullptr), _audioStream(nullptr),
+ _rawData(nullptr), _soundType(Audio::Mixer::kPlainSoundType) {
setup();
}
-CWaveFile::CWaveFile(QSoundManager *owner) : _soundManager(owner), _stream(nullptr),
+CWaveFile::CWaveFile(QSoundManager *owner) : _soundManager(owner), _audioStream(nullptr),
_soundType(Audio::Mixer::kPlainSoundType) {
setup();
}
@@ -49,9 +51,9 @@ void CWaveFile::setup() {
}
CWaveFile::~CWaveFile() {
- if (_stream) {
+ if (_audioStream) {
_soundManager->soundFreed(_soundHandle);
- delete _stream;
+ delete _audioStream;
}
if (_disposeAudioBuffer == DisposeAfterUse::YES && _audioBuffer)
@@ -59,20 +61,20 @@ CWaveFile::~CWaveFile() {
}
uint CWaveFile::getDurationTicks() const {
- if (!_stream)
+ if (!_audioStream)
return 0;
// FIXME: The original uses acmStreamSize to calculate
// a desired size. Since I have no idea how the system API
// method works, for now I'm using a simple ratio of a
// sample output to input value
- uint dataSize = _dataSize - 0x46;
+ uint dataSize = _dataSize - WAV_DATA_OFFSET;
double newSize = (double)dataSize * (1475712.0 / 199836.0);
- return (uint)(newSize * 1000.0 / _stream->getRate());
+ return (uint)(newSize * 1000.0 / _audioStream->getRate());
}
bool CWaveFile::loadSound(const CString &name) {
- assert(!_stream);
+ assert(!_audioStream);
StdCWadFile file;
if (!file.open(name))
@@ -80,7 +82,12 @@ bool CWaveFile::loadSound(const CString &name) {
Common::SeekableReadStream *stream = file.readStream();
_dataSize = stream->size();
- _stream = Audio::makeWAVStream(stream->readStream(_dataSize), DisposeAfterUse::YES);
+ _rawData = new byte[_dataSize];
+ stream->read(_rawData, _dataSize);
+
+ _audioStream = Audio::makeWAVStream(
+ new Common::MemoryReadStream(_rawData, _dataSize, DisposeAfterUse::YES),
+ DisposeAfterUse::YES);
_soundType = Audio::Mixer::kSFXSoundType;
return true;
@@ -95,7 +102,7 @@ bool CWaveFile::loadSpeech(CDialogueFile *dialogueFile, int speechIndex) {
dialogueFile->read(res, data, res->_size);
_dataSize = res->_size;
- _stream = Audio::makeWAVStream(new Common::MemoryReadStream(data, _dataSize, DisposeAfterUse::YES),
+ _audioStream = Audio::makeWAVStream(new Common::MemoryReadStream(data, _dataSize, DisposeAfterUse::YES),
DisposeAfterUse::YES);
_soundType = Audio::Mixer::kSpeechSoundType;
@@ -103,7 +110,7 @@ bool CWaveFile::loadSpeech(CDialogueFile *dialogueFile, int speechIndex) {
}
bool CWaveFile::loadMusic(const CString &name) {
- assert(!_stream);
+ assert(!_audioStream);
StdCWadFile file;
if (!file.open(name))
@@ -111,7 +118,7 @@ bool CWaveFile::loadMusic(const CString &name) {
Common::SeekableReadStream *stream = file.readStream();
_dataSize = stream->size();
- _stream = Audio::makeWAVStream(stream->readStream(_dataSize), DisposeAfterUse::YES);
+ _audioStream = Audio::makeWAVStream(stream->readStream(_dataSize), DisposeAfterUse::YES);
_soundType = Audio::Mixer::kMusicSoundType;
return true;
@@ -127,19 +134,17 @@ bool CWaveFile::loadMusic(CAudioBuffer *buffer, DisposeAfterUse::Flag disposeAft
}
uint CWaveFile::getFrequency() const {
- return _stream->getRate();
+ return _audioStream->getRate();
}
void CWaveFile::reset() {
- _stream->rewind();
+ _audioStream->rewind();
}
const byte *CWaveFile::lock() {
switch (_loadMode) {
- case LOADMODE_AUDIO_BUFFER:
- // TODO: At this point, locking returning a pointer to a buffer
- // into a QSound wave mixer, for pushing out
- error("TODO: Handle pushing data to sound");
+ case LOADMODE_SCUMMVM:
+ return _rawData + WAV_DATA_OFFSET;
default:
return nullptr;
diff --git a/engines/titanic/sound/wave_file.h b/engines/titanic/sound/wave_file.h
index 976979b58e..019ee9413e 100644
--- a/engines/titanic/sound/wave_file.h
+++ b/engines/titanic/sound/wave_file.h
@@ -43,7 +43,8 @@ private:
void setup();
public:
QSoundManager *_soundManager;
- Audio::SeekableAudioStream *_stream;
+ byte *_rawData;
+ Audio::SeekableAudioStream *_audioStream;
Audio::SoundHandle _soundHandle;
Audio::Mixer::SoundType _soundType;
@@ -94,7 +95,7 @@ public:
/**
* Returns true if the wave file has data loaded
*/
- bool isLoaded() const { return _stream != nullptr; }
+ bool isLoaded() const { return _audioStream != nullptr; }
/**
* Return the frequency of the loaded wave file