TITANIC: Renamings and comments for music classes

This commit is contained in:
Paul Gilbert 2017-02-08 20:30:18 -05:00
parent d8a103d9e2
commit 059a2b3751
6 changed files with 49 additions and 35 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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;
}

View File

@ -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;

View File

@ -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