diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/kyra/vqa.cpp | 33 | ||||
-rw-r--r-- | engines/scumm/imuse_digi/dimuse.cpp | 9 | ||||
-rw-r--r-- | engines/scumm/imuse_digi/dimuse_sndmgr.cpp | 4 | ||||
-rw-r--r-- | engines/scumm/imuse_digi/dimuse_track.cpp | 6 | ||||
-rw-r--r-- | engines/scumm/smush/smush_mixer.cpp | 10 | ||||
-rw-r--r-- | engines/scumm/smush/smush_player.cpp | 8 | ||||
-rw-r--r-- | engines/sword1/sound.cpp | 6 |
7 files changed, 40 insertions, 36 deletions
diff --git a/engines/kyra/vqa.cpp b/engines/kyra/vqa.cpp index 3660bcf217..603b67221b 100644 --- a/engines/kyra/vqa.cpp +++ b/engines/kyra/vqa.cpp @@ -268,8 +268,8 @@ bool VQAMovie::open(const char *filename) { _numPartialCodeBooks = 0; if (_header.flags & 1) { - // A 2-second buffer ought to be enough - _stream = Audio::makeAppendableAudioStream(_header.freq, Audio::Mixer::FLAG_UNSIGNED, 2 * _header.freq * _header.channels); + // TODO/FIXME: Shouldn't we set FLAG_STEREO if _header.channels == 2 (wonders Fingolfin) + _stream = Audio::makeAppendableAudioStream(_header.freq, Audio::Mixer::FLAG_UNSIGNED); } else { _stream = NULL; } @@ -399,9 +399,10 @@ void VQAMovie::displayFrame(uint frameNum) { switch (tag) { case MKID_BE('SND0'): // Uncompressed sound foundSound = true; - inbuf = (byte *)allocBuffer(0, size); + inbuf = new byte[size]; _file.read(inbuf, size); - _stream->append(inbuf, size); + assert(_stream); + _stream->queueBuffer(inbuf, size); break; case MKID_BE('SND1'): // Compressed sound, almost like AUD @@ -409,15 +410,18 @@ void VQAMovie::displayFrame(uint frameNum) { outsize = _file.readUint16LE(); insize = _file.readUint16LE(); - inbuf = (byte *)allocBuffer(0, insize); + inbuf = new byte[insize]; _file.read(inbuf, insize); if (insize == outsize) { - _stream->append(inbuf, insize); + assert(_stream); + _stream->queueBuffer(inbuf, insize); } else { - outbuf = (byte *)allocBuffer(1, outsize); + outbuf = new byte[outsize]; decodeSND1(inbuf, insize, outbuf, outsize); - _stream->append(outbuf, outsize); + assert(_stream); + _stream->queueBuffer(outbuf, outsize); + delete[] inbuf; } break; @@ -589,24 +593,25 @@ void VQAMovie::play() { switch (tag) { case MKID_BE('SND0'): // Uncompressed sound - inbuf = (byte *)allocBuffer(0, size); + inbuf = new byte[size]; _file.read(inbuf, size); - _stream->append(inbuf, size); + _stream->queueBuffer(inbuf, size); break; case MKID_BE('SND1'): // Compressed sound outsize = _file.readUint16LE(); insize = _file.readUint16LE(); - inbuf = (byte *)allocBuffer(0, insize); + inbuf = new byte[insize]; _file.read(inbuf, insize); if (insize == outsize) { - _stream->append(inbuf, insize); + _stream->queueBuffer(inbuf, insize); } else { - outbuf = (byte *)allocBuffer(1, outsize); + outbuf = new byte[outsize]; decodeSND1(inbuf, insize, outbuf, outsize); - _stream->append(outbuf, outsize); + _stream->queueBuffer(outbuf, outsize); + delete[] inbuf; } break; diff --git a/engines/scumm/imuse_digi/dimuse.cpp b/engines/scumm/imuse_digi/dimuse.cpp index 7e70268b12..c249dd57a9 100644 --- a/engines/scumm/imuse_digi/dimuse.cpp +++ b/engines/scumm/imuse_digi/dimuse.cpp @@ -188,9 +188,8 @@ void IMuseDigital::saveOrLoad(Serializer *ser) { track->mixerFlags |= Audio::Mixer::FLAG_LITTLE_ENDIAN; #endif - int32 streamBufferSize = track->iteration; track->stream2 = NULL; - track->stream = Audio::makeAppendableAudioStream(freq, track->mixerFlags, streamBufferSize); + track->stream = Audio::makeAppendableAudioStream(freq, track->mixerFlags); const int pan = (track->pan != 64) ? 2 * track->pan - 127 : 0; const int vol = track->vol / 1000; @@ -324,10 +323,10 @@ void IMuseDigital::callback() { if (_mixer->isReady()) { _mixer->setChannelVolume(track->handle, vol); _mixer->setChannelBalance(track->handle, pan); - track->stream->append(data, result); + track->stream->queueBuffer(data, result); track->regionOffset += result; - } - free(data); + } else + delete[] data; if (_sound->isEndOfRegion(track->soundHandle, track->curRegion)) { switchToNextRegion(track); diff --git a/engines/scumm/imuse_digi/dimuse_sndmgr.cpp b/engines/scumm/imuse_digi/dimuse_sndmgr.cpp index 2b88f37b17..5c7fa5b613 100644 --- a/engines/scumm/imuse_digi/dimuse_sndmgr.cpp +++ b/engines/scumm/imuse_digi/dimuse_sndmgr.cpp @@ -583,11 +583,11 @@ int32 ImuseDigiSndMgr::getDataFromRegion(soundStruct *soundHandle, int region, b if ((soundHandle->bundle) && (!soundHandle->compressed)) { size = soundHandle->bundle->decompressSampleByCurIndex(start + offset, size, buf, header_size, header_outside); } else if (soundHandle->resPtr) { - *buf = (byte *)malloc(size); + *buf = new byte[size]; assert(*buf); memcpy(*buf, soundHandle->resPtr + start + offset + header_size, size); } else if ((soundHandle->bundle) && (soundHandle->compressed)) { - *buf = (byte *)malloc(size); + *buf = new byte[size]; assert(*buf); char fileName[24]; sprintf(fileName, "%s_reg%03d", soundHandle->name, region); diff --git a/engines/scumm/imuse_digi/dimuse_track.cpp b/engines/scumm/imuse_digi/dimuse_track.cpp index 37ae22f47f..6acb2a0318 100644 --- a/engines/scumm/imuse_digi/dimuse_track.cpp +++ b/engines/scumm/imuse_digi/dimuse_track.cpp @@ -176,9 +176,8 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType, type = Audio::Mixer::kMusicSoundType; // setup 1 second stream wrapped buffer - int32 streamBufferSize = track->iteration; track->stream2 = NULL; - track->stream = Audio::makeAppendableAudioStream(freq, track->mixerFlags, streamBufferSize); + track->stream = Audio::makeAppendableAudioStream(freq, track->mixerFlags); _mixer->playInputStream(type, &track->handle, track->stream, -1, vol, pan, false); track->started = true; } @@ -356,8 +355,7 @@ IMuseDigital::Track *IMuseDigital::cloneToFadeOutTrack(Track *track, int fadeDel type = Audio::Mixer::kMusicSoundType; // setup 1 second stream wrapped buffer - int32 streamBufferSize = fadeTrack->iteration; - fadeTrack->stream = Audio::makeAppendableAudioStream(_sound->getFreq(fadeTrack->soundHandle), fadeTrack->mixerFlags, streamBufferSize); + fadeTrack->stream = Audio::makeAppendableAudioStream(_sound->getFreq(fadeTrack->soundHandle), fadeTrack->mixerFlags); _mixer->playInputStream(type, &fadeTrack->handle, fadeTrack->stream, -1, fadeTrack->vol / 1000, fadeTrack->pan, false); fadeTrack->started = true; fadeTrack->used = true; diff --git a/engines/scumm/smush/smush_mixer.cpp b/engines/scumm/smush/smush_mixer.cpp index 9e6631a365..e29a921224 100644 --- a/engines/scumm/smush/smush_mixer.cpp +++ b/engines/scumm/smush/smush_mixer.cpp @@ -105,6 +105,7 @@ bool SmushMixer::handleFrame() { _channels[i].chan->getParameters(stereo, is_16bit, vol, pan); + // Grab the audio data from the channel int32 size = _channels[i].chan->getAvailableSoundDataSize(); byte *data = _channels[i].chan->getSoundData(); @@ -116,15 +117,16 @@ bool SmushMixer::handleFrame() { } if (_mixer->isReady()) { + // Stream the data if (!_channels[i].stream) { - _channels[i].stream = Audio::makeAppendableAudioStream(_channels[i].chan->getRate(), flags, 500000); + _channels[i].stream = Audio::makeAppendableAudioStream(_channels[i].chan->getRate(), flags); _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_channels[i].handle, _channels[i].stream); } _mixer->setChannelVolume(_channels[i].handle, vol); _mixer->setChannelBalance(_channels[i].handle, pan); - _channels[i].stream->append(data, size); - } - delete[] data; + _channels[i].stream->queueBuffer(data, size); // The stream will free the buffer for us + } else + delete[] data; } } } diff --git a/engines/scumm/smush/smush_player.cpp b/engines/scumm/smush/smush_player.cpp index d4b3352be4..3310415f30 100644 --- a/engines/scumm/smush/smush_player.cpp +++ b/engines/scumm/smush/smush_player.cpp @@ -462,7 +462,7 @@ void SmushPlayer::handleIACT(Chunk &b) { c->checkParameters(index, nbframes, size, track_flags, unknown); c->appendData(b, bsize); } else { - byte output_data[4096]; + // TODO: Move this code into another SmushChannel subclass? byte *src = (byte *)malloc(bsize); b.read(src, bsize); byte *d_src = src; @@ -477,6 +477,8 @@ void SmushPlayer::handleIACT(Chunk &b) { _IACTpos += bsize; bsize = 0; } else { + byte *output_data = new byte[4096]; + memcpy(_IACToutput + _IACTpos, d_src, len); byte *dst = output_data; byte *d_src2 = _IACToutput; @@ -507,10 +509,10 @@ void SmushPlayer::handleIACT(Chunk &b) { } while (--count); if (!_IACTstream) { - _IACTstream = Audio::makeAppendableAudioStream(22050, Audio::Mixer::FLAG_STEREO | Audio::Mixer::FLAG_16BITS, 900000); + _IACTstream = Audio::makeAppendableAudioStream(22050, Audio::Mixer::FLAG_STEREO | Audio::Mixer::FLAG_16BITS); _vm->_mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_IACTchannel, _IACTstream); } - _IACTstream->append(output_data, 0x1000); + _IACTstream->queueBuffer(output_data, 0x1000); bsize -= len; d_src += len; diff --git a/engines/sword1/sound.cpp b/engines/sword1/sound.cpp index fd0a37003e..6c255cb4ce 100644 --- a/engines/sword1/sound.cpp +++ b/engines/sword1/sound.cpp @@ -382,10 +382,8 @@ void Sound::initCowSystem(void) { } void Sound::closeCowSystem(void) { - if (_cowFile.isOpen()) - _cowFile.close(); - if (_cowHeader) - free(_cowHeader); + _cowFile.close(); + free(_cowHeader); _cowHeader = NULL; _currentCowFile = 0; } |