diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/draci/sound.cpp | 7 | ||||
-rw-r--r-- | engines/m4/sound.cpp | 24 | ||||
-rw-r--r-- | engines/made/resource.cpp | 10 | ||||
-rw-r--r-- | engines/mohawk/sound.cpp | 9 | ||||
-rw-r--r-- | engines/saga/sound.cpp | 9 | ||||
-rw-r--r-- | engines/saga/sound.h | 2 | ||||
-rw-r--r-- | engines/scumm/he/sound_he.cpp | 16 | ||||
-rw-r--r-- | engines/sky/intro.cpp | 6 | ||||
-rw-r--r-- | engines/sword1/sound.cpp | 6 |
9 files changed, 39 insertions, 50 deletions
diff --git a/engines/draci/sound.cpp b/engines/draci/sound.cpp index 88421abe97..dfe5b7a045 100644 --- a/engines/draci/sound.cpp +++ b/engines/draci/sound.cpp @@ -197,14 +197,13 @@ void Sound::playSoundBuffer(Audio::SoundHandle *handle, const SoundSample &buffe byte flags = Audio::FLAG_UNSIGNED; - if (loop) - flags |= Audio::FLAG_LOOP; - const Audio::Mixer::SoundType soundType = (handleType == kVoiceHandle) ? Audio::Mixer::kSpeechSoundType : Audio::Mixer::kSFXSoundType; // Don't use DisposeAfterUse::YES, because our caching system deletes samples by itself. - Audio::AudioStream *stream = Audio::makeRawMemoryStream(buffer._data, buffer._length, DisposeAfterUse::NO, buffer._frequency, flags, 0, 0); + Audio::AudioStream *stream = Audio::makeLoopingAudioStream( + Audio::makeRawMemoryStream(buffer._data, buffer._length, DisposeAfterUse::NO, buffer._frequency, flags), + loop ? 0 : 1); _mixer->playInputStream(soundType, handle, stream, -1, volume); } diff --git a/engines/m4/sound.cpp b/engines/m4/sound.cpp index cf2f54fb9a..654ce7bcbd 100644 --- a/engines/m4/sound.cpp +++ b/engines/m4/sound.cpp @@ -70,7 +70,6 @@ bool Sound::isHandleActive(SndHandle *handle) { } void Sound::playSound(const char *soundName, int volume, bool loop, int channel) { - byte flags; Common::SeekableReadStream *soundStream = _vm->res()->get(soundName); SndHandle *handle; if (channel < 0) { @@ -90,15 +89,13 @@ void Sound::playSound(const char *soundName, int volume, bool loop, int channel) _vm->res()->toss(soundName); handle->type = kEffectHandle; - flags = Audio::FLAG_UNSIGNED; - - if (loop) - flags |= Audio::FLAG_LOOP; _vm->res()->toss(soundName); // Sound format is 8bit mono, unsigned, 11025kHz - Audio::AudioStream *stream = Audio::makeRawMemoryStream(buffer, bufferSize, DisposeAfterUse::YES, 11025, flags, 0, 0); + Audio::AudioStream *stream = Audio::makeLoopingAudioStream( + Audio::makeRawMemoryStream(buffer, bufferSize, DisposeAfterUse::YES, 11025, Audio::FLAG_UNSIGNED), + loop ? 0 : 1); _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &handle->handle, stream, -1, volume); } @@ -137,7 +134,6 @@ void Sound::stopSound(int channel) { } void Sound::playVoice(const char *soundName, int volume) { - byte flags; Common::SeekableReadStream *soundStream = _vm->res()->get(soundName); SndHandle *handle = getHandle(); byte *buffer; @@ -146,12 +142,11 @@ void Sound::playVoice(const char *soundName, int volume) { soundStream->read(buffer, soundStream->size()); handle->type = kEffectHandle; - flags = Audio::FLAG_UNSIGNED; _vm->res()->toss(soundName); // Voice format is 8bit mono, unsigned, 11025kHz - Audio::AudioStream *stream = Audio::makeRawMemoryStream(buffer, soundStream->size(), DisposeAfterUse::YES, 11025, flags); + Audio::AudioStream *stream = Audio::makeRawMemoryStream(buffer, soundStream->size(), DisposeAfterUse::YES, 11025, Audio::FLAG_UNSIGNED); _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &handle->handle, stream, -1, volume); } @@ -246,14 +241,9 @@ void Sound::playDSRSound(int soundIndex, int volume, bool loop) { return; } - byte flags; SndHandle *handle = getHandle(); handle->type = kEffectHandle; - flags = Audio::FLAG_UNSIGNED; - - if (loop) - flags |= Audio::FLAG_LOOP; // Get sound data FabDecompressor fab; @@ -268,9 +258,11 @@ void Sound::playDSRSound(int soundIndex, int volume, bool loop) { buffer, _dsrFile.dsrEntries[soundIndex]->uncompSize); // Play sound - Audio::AudioStream *stream = Audio::makeRawMemoryStream(buffer, + Audio::AudioStream *stream = Audio::makeLoopingAudioStream( + Audio::makeRawMemoryStream(buffer, _dsrFile.dsrEntries[soundIndex]->uncompSize, DisposeAfterUse::YES, - _dsrFile.dsrEntries[soundIndex]->frequency, flags, 0, 0); + _dsrFile.dsrEntries[soundIndex]->frequency, Audio::FLAG_UNSIGNED), + loop ? 0 : 1); _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &handle->handle, stream, -1, volume); /* diff --git a/engines/made/resource.cpp b/engines/made/resource.cpp index b29e1b8fb0..80c8a28687 100644 --- a/engines/made/resource.cpp +++ b/engines/made/resource.cpp @@ -261,11 +261,13 @@ void SoundResource::load(byte *source, int size) { } Audio::AudioStream *SoundResource::getAudioStream(int soundRate, bool loop) { - byte flags = Audio::FLAG_UNSIGNED; - if (loop) - flags |= Audio::FLAG_LOOP; + Audio::RewindableAudioStream *stream = + Audio::makeRawMemoryStream(_soundData, _soundSize, DisposeAfterUse::NO, soundRate, Audio::FLAG_UNSIGNED); - return Audio::makeRawMemoryStream(_soundData, _soundSize, DisposeAfterUse::NO, soundRate, flags, 0, 0); + if (loop) + return Audio::makeLoopingAudioStream(stream, 0); + else + return stream; } void SoundResourceV1::load(byte *source, int size) { diff --git a/engines/mohawk/sound.cpp b/engines/mohawk/sound.cpp index e0b95c96e0..e9c577283e 100644 --- a/engines/mohawk/sound.cpp +++ b/engines/mohawk/sound.cpp @@ -481,12 +481,9 @@ Audio::AudioStream *Sound::makeOldMohawkWaveStream(Common::SeekableReadStream *s stream->read(data, size); delete stream; - byte flags = Audio::FLAG_UNSIGNED; - - if (loop) - flags |= Audio::FLAG_LOOP; - - return Audio::makeRawMemoryStream(data, size, DisposeAfterUse::YES, rate, flags, 0, 0); + return Audio::makeLoopingAudioStream( + Audio::makeRawMemoryStream(data, size, DisposeAfterUse::YES, rate, Audio::FLAG_UNSIGNED), + loop ? 0 : 1); } SndHandle *Sound::getHandle() { diff --git a/engines/saga/sound.cpp b/engines/saga/sound.cpp index 39867c9f37..cf647d0c53 100644 --- a/engines/saga/sound.cpp +++ b/engines/saga/sound.cpp @@ -64,19 +64,18 @@ SndHandle *Sound::getHandle() { return NULL; // for compilers that don't support NORETURN } -void Sound::playSoundBuffer(Audio::SoundHandle *handle, SoundBuffer &buffer, int volume, +void Sound::playSoundBuffer(Audio::SoundHandle *handle, const SoundBuffer &buffer, int volume, sndHandleType handleType, bool loop) { Audio::AudioStream *stream = 0; - if (loop) - buffer.flags |= Audio::FLAG_LOOP; - Audio::Mixer::SoundType soundType = (handleType == kVoiceHandle) ? Audio::Mixer::kSpeechSoundType : Audio::Mixer::kSFXSoundType; if (!buffer.isCompressed) { - stream = Audio::makeRawMemoryStream(buffer.buffer, buffer.size, DisposeAfterUse::YES, buffer.frequency, buffer.flags, 0, 0); + stream = Audio::makeLoopingAudioStream( + Audio::makeRawMemoryStream(buffer.buffer, buffer.size, DisposeAfterUse::YES, buffer.frequency, buffer.flags), + loop ? 0 : 1); } else { // TODO / FIXME: It seems we don't loop compressed audio at all, but do loop uncompressed data. diff --git a/engines/saga/sound.h b/engines/saga/sound.h index 0aeb54a55f..845c0ab573 100644 --- a/engines/saga/sound.h +++ b/engines/saga/sound.h @@ -87,7 +87,7 @@ public: private: - void playSoundBuffer(Audio::SoundHandle *handle, SoundBuffer &buffer, int volume, + void playSoundBuffer(Audio::SoundHandle *handle, const SoundBuffer &buffer, int volume, sndHandleType handleType, bool loop); SndHandle *getHandle(); diff --git a/engines/scumm/he/sound_he.cpp b/engines/scumm/he/sound_he.cpp index 5b19322290..48adca2ca9 100644 --- a/engines/scumm/he/sound_he.cpp +++ b/engines/scumm/he/sound_he.cpp @@ -528,7 +528,7 @@ byte *findSoundTag(uint32 tag, byte *ptr) { } void SoundHE::playHESound(int soundID, int heOffset, int heChannel, int heFlags) { - Audio::AudioStream *stream = 0; + Audio::RewindableAudioStream *stream = 0; byte *ptr, *spoolPtr; int size = -1; int priority, rate; @@ -636,7 +636,6 @@ void SoundHE::playHESound(int soundID, int heOffset, int heChannel, int heFlags) // TODO: Extra sound flags if (heFlags & 1) { - flags |= Audio::FLAG_LOOP; _heChannel[heChannel].timer = 0; } else { _heChannel[heChannel].timer = size * 1000 / rate; @@ -668,11 +667,12 @@ void SoundHE::playHESound(int soundID, int heOffset, int heChannel, int heFlags) #ifdef SCUMM_LITTLE_ENDIAN flags |= Audio::FLAG_LITTLE_ENDIAN; #endif - stream = Audio::makeRawMemoryStream(sound + heOffset, size - heOffset, DisposeAfterUse::YES, rate, flags, 0, 0); + stream = Audio::makeRawMemoryStream(sound + heOffset, size - heOffset, DisposeAfterUse::YES, rate, flags); } else { - stream = Audio::makeRawMemoryStream(ptr + memStream.pos() + heOffset, size - heOffset, DisposeAfterUse::YES, rate, flags, 0, 0); + stream = Audio::makeRawMemoryStream(ptr + memStream.pos() + heOffset, size - heOffset, DisposeAfterUse::YES, rate, flags); } - _mixer->playInputStream(type, &_heSoundChannels[heChannel], stream, soundID); + _mixer->playInputStream(type, &_heSoundChannels[heChannel], + Audio::makeLoopingAudioStream(stream, (heFlags & 1) ? 0 : 1), soundID); } // Support for sound in Humongous Entertainment games else if (READ_BE_UINT32(ptr) == MKID_BE('DIGI') || READ_BE_UINT32(ptr) == MKID_BE('TALK')) { @@ -722,7 +722,6 @@ void SoundHE::playHESound(int soundID, int heOffset, int heChannel, int heFlags) // TODO: Extra sound flags if (heFlags & 1) { - flags |= Audio::FLAG_LOOP; _heChannel[heChannel].timer = 0; } else { _heChannel[heChannel].timer = size * 1000 / rate; @@ -730,8 +729,9 @@ void SoundHE::playHESound(int soundID, int heOffset, int heChannel, int heFlags) _mixer->stopHandle(_heSoundChannels[heChannel]); - stream = Audio::makeRawMemoryStream(ptr + heOffset + 8, size, DisposeAfterUse::NO, rate, flags, 0, 0); - _mixer->playInputStream(type, &_heSoundChannels[heChannel], stream, soundID); + stream = Audio::makeRawMemoryStream(ptr + heOffset + 8, size, DisposeAfterUse::NO, rate, flags); + _mixer->playInputStream(type, &_heSoundChannels[heChannel], + Audio::makeLoopingAudioStream(stream, (heFlags & 1) ? 0 : 1), soundID); } // Support for PCM music in 3DO versions of Humongous Entertainment games else if (READ_BE_UINT32(ptr) == MKID_BE('MRAW')) { diff --git a/engines/sky/intro.cpp b/engines/sky/intro.cpp index d5318d66f1..991a763750 100644 --- a/engines/sky/intro.cpp +++ b/engines/sky/intro.cpp @@ -680,7 +680,7 @@ bool Intro::doIntro(bool floppyIntro) { bool Intro::nextPart(uint16 *&data) { uint8 *vData = NULL; - Audio::AudioStream *stream = 0; + Audio::RewindableAudioStream *stream = 0; // return false means cancel intro uint16 command = *data++; @@ -757,8 +757,8 @@ bool Intro::nextPart(uint16 *&data) { case LOOPBG: _mixer->stopID(SOUND_BG); stream = Audio::makeRawMemoryStream(_bgBuf + 256, _bgSize - 768, DisposeAfterUse::YES, - 11025, Audio::FLAG_UNSIGNED | Audio::FLAG_LOOP, 0, 0); - _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_bgSfx, stream, SOUND_BG); + 11025, Audio::FLAG_UNSIGNED); + _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_bgSfx, Audio::makeLoopingAudioStream(stream, 0), SOUND_BG); return true; case PLAYBG: _mixer->stopID(SOUND_BG); diff --git a/engines/sword1/sound.cpp b/engines/sword1/sound.cpp index 5840b165e5..d3ef4382e0 100644 --- a/engines/sword1/sound.cpp +++ b/engines/sword1/sound.cpp @@ -270,9 +270,9 @@ void Sound::playSample(QueueElement *elem) { flags = Audio::FLAG_UNSIGNED; if (READ_LE_UINT16(sampleData + 0x16) == 2) flags |= Audio::FLAG_STEREO; - if (_fxList[elem->id].type == FX_LOOP) - flags |= Audio::FLAG_LOOP; - Audio::AudioStream *stream = Audio::makeRawMemoryStream(sampleData + 0x2C, size, DisposeAfterUse::NO, 11025, flags, 0, 0); + Audio::AudioStream *stream = Audio::makeLoopingAudioStream( + Audio::makeRawMemoryStream(sampleData + 0x2C, size, DisposeAfterUse::NO, 11025, flags), + (_fxList[elem->id].type == FX_LOOP) ? 0 : 1); _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &elem->handle, stream, elem->id, volume, pan); } } |