diff options
-rw-r--r-- | engines/cine/sound.cpp | 4 | ||||
-rw-r--r-- | engines/drascula/sound.cpp | 8 | ||||
-rw-r--r-- | engines/saga/sound.cpp | 1 | ||||
-rw-r--r-- | engines/sword1/sound.cpp | 24 | ||||
-rw-r--r-- | engines/teenagent/teenagent.cpp | 6 | ||||
-rw-r--r-- | engines/tinsel/sound.cpp | 4 |
6 files changed, 33 insertions, 14 deletions
diff --git a/engines/cine/sound.cpp b/engines/cine/sound.cpp index 736241c3b1..ba98dd7865 100644 --- a/engines/cine/sound.cpp +++ b/engines/cine/sound.cpp @@ -32,6 +32,7 @@ #include "sound/audiostream.h" #include "sound/fmopl.h" +#include "sound/raw.h" #include "sound/mods/soundfx.h" namespace Cine { @@ -844,7 +845,8 @@ void PaulaSound::update() { void PaulaSound::playSoundChannel(int channel, int frequency, uint8 *data, int size, int volume) { assert(frequency > 0); frequency = PAULA_FREQ / frequency; - _mixer->playRaw(Audio::Mixer::kSFXSoundType, &_channelsTable[channel], data, size, DisposeAfterUse::YES, frequency, 0); + Audio::AudioStream *stream = Audio::makeRawMemoryStream(data, size, DisposeAfterUse::YES, frequency, 0); + _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_channelsTable[channel], stream); _mixer->setChannelVolume(_channelsTable[channel], volume * Audio::Mixer::kMaxChannelVolume / 63); } diff --git a/engines/drascula/sound.cpp b/engines/drascula/sound.cpp index 0a4876e802..2b5e9c101b 100644 --- a/engines/drascula/sound.cpp +++ b/engines/drascula/sound.cpp @@ -23,9 +23,12 @@ * */ +#include "sound/audiocd.h" +#include "sound/audiostream.h" #include "sound/mixer.h" +#include "sound/raw.h" #include "sound/voc.h" -#include "sound/audiocd.h" + #include "common/config-manager.h" #include "drascula/drascula.h" @@ -182,8 +185,9 @@ void DrasculaEngine::playFile(const char *fname) { if (ConfMan.getBool("speech_mute")) memset(soundData, 0x80, soundSize); // Mute speech but keep the pause - _mixer->playRaw(Audio::Mixer::kSpeechSoundType, &_soundHandle, soundData, soundSize - 64, DisposeAfterUse::YES, + Audio::AudioStream *stream = Audio::makeRawMemoryStream(soundData, soundSize - 64, DisposeAfterUse::YES, 11025, Audio::Mixer::FLAG_UNSIGNED); + _mixer->playInputStream(Audio::Mixer::kSpeechSoundType, &_soundHandle, stream); } else warning("playFile: Could not open %s", fname); } diff --git a/engines/saga/sound.cpp b/engines/saga/sound.cpp index 90698690ea..75b5c61ad9 100644 --- a/engines/saga/sound.cpp +++ b/engines/saga/sound.cpp @@ -31,6 +31,7 @@ #include "sound/audiostream.h" #include "sound/mixer.h" #include "sound/adpcm.h" +#include "sound/raw.h" namespace Saga { diff --git a/engines/sword1/sound.cpp b/engines/sword1/sound.cpp index 1c471a8de1..a95744011f 100644 --- a/engines/sword1/sound.cpp +++ b/engines/sword1/sound.cpp @@ -260,7 +260,7 @@ void Sound::playSample(QueueElement *elem) { if (SwordEngine::isPsx()) { ; uint32 size = READ_LE_UINT32(sampleData); Audio::AudioStream *audStream = Audio::makeLoopingAudioStream(new Audio::VagStream(new Common::MemoryReadStream(sampleData + 4, size-4)), (_fxList[elem->id].type == FX_LOOP) ? 0 : 1); - _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &elem->handle, audStream, elem->id, volume, pan, DisposeAfterUse::NO, false, false); + _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &elem->handle, audStream, elem->id, volume, pan, DisposeAfterUse::NO); } else { uint32 size = READ_LE_UINT32(sampleData + 0x28); uint8 flags; @@ -351,17 +351,24 @@ bool Sound::startSpeech(uint16 roomNo, uint16 localNo) { debug(6, "startSpeech(%d, %d): locIndex %d, sampleSize %d, index %d", roomNo, localNo, locIndex, sampleSize, index); + Audio::AudioStream *stream = 0; + if (sampleSize) { uint8 speechVol = (_speechVolR + _speechVolL) / 2; int8 speechPan = (_speechVolR - _speechVolL) / 2; if ((_cowMode == CowWave) || (_cowMode == CowDemo)) { uint32 size; int16 *data = uncompressSpeech(index + _cowHeaderSize, sampleSize, &size); - if (data) - _mixer->playRaw(Audio::Mixer::kSpeechSoundType, &_speechHandle, data, size, DisposeAfterUse::YES, 11025, SPEECH_FLAGS, SOUND_SPEECH_ID, speechVol, speechPan); + if (data) { + stream = Audio::makeRawMemoryStream((byte *)data, size, DisposeAfterUse::YES, 11025, SPEECH_FLAGS); + _mixer->playInputStream(Audio::Mixer::kSpeechSoundType, &_speechHandle, stream, SOUND_SPEECH_ID, speechVol, speechPan); + } } else if (_cowMode == CowPSX && sampleSize != 0xffffffff) { _cowFile.seek(index * 2048); - _mixer->playInputStream(Audio::Mixer::kSpeechSoundType, &_speechHandle, new Audio::VagStream(_cowFile.readStream(sampleSize)), SOUND_SPEECH_ID, speechVol, speechPan); + Common::MemoryReadStream *tmp = _cowFile.readStream(sampleSize); + assert(tmp); + stream = new Audio::VagStream(tmp); + _mixer->playInputStream(Audio::Mixer::kSpeechSoundType, &_speechHandle, stream, SOUND_SPEECH_ID, speechVol, speechPan); // with compressed audio, we can't calculate the wave volume. // so default to talking. for (int cnt = 0; cnt < 480; cnt++) @@ -373,7 +380,8 @@ bool Sound::startSpeech(uint16 roomNo, uint16 localNo) { _cowFile.seek(index); Common::MemoryReadStream *tmp = _cowFile.readStream(sampleSize); assert(tmp); - _mixer->playInputStream(Audio::Mixer::kSpeechSoundType, &_speechHandle, Audio::makeFlacStream(tmp, DisposeAfterUse::YES), SOUND_SPEECH_ID, speechVol, speechPan); + stream = Audio::makeFlacStream(tmp, DisposeAfterUse::YES); + _mixer->playInputStream(Audio::Mixer::kSpeechSoundType, &_speechHandle, stream, SOUND_SPEECH_ID, speechVol, speechPan); // with compressed audio, we can't calculate the wave volume. // so default to talking. for (int cnt = 0; cnt < 480; cnt++) @@ -386,7 +394,8 @@ bool Sound::startSpeech(uint16 roomNo, uint16 localNo) { _cowFile.seek(index); Common::MemoryReadStream *tmp = _cowFile.readStream(sampleSize); assert(tmp); - _mixer->playInputStream(Audio::Mixer::kSpeechSoundType, &_speechHandle, Audio::makeVorbisStream(tmp, DisposeAfterUse::YES), SOUND_SPEECH_ID, speechVol, speechPan); + stream = Audio::makeVorbisStream(tmp, DisposeAfterUse::YES); + _mixer->playInputStream(Audio::Mixer::kSpeechSoundType, &_speechHandle, stream, SOUND_SPEECH_ID, speechVol, speechPan); // with compressed audio, we can't calculate the wave volume. // so default to talking. for (int cnt = 0; cnt < 480; cnt++) @@ -399,7 +408,8 @@ bool Sound::startSpeech(uint16 roomNo, uint16 localNo) { _cowFile.seek(index); Common::MemoryReadStream *tmp = _cowFile.readStream(sampleSize); assert(tmp); - _mixer->playInputStream(Audio::Mixer::kSpeechSoundType, &_speechHandle, Audio::makeMP3Stream(tmp, DisposeAfterUse::YES), SOUND_SPEECH_ID, speechVol, speechPan); + stream = Audio::makeMP3Stream(tmp, DisposeAfterUse::YES); + _mixer->playInputStream(Audio::Mixer::kSpeechSoundType, &_speechHandle, stream, SOUND_SPEECH_ID, speechVol, speechPan); // with compressed audio, we can't calculate the wave volume. // so default to talking. for (int cnt = 0; cnt < 480; cnt++) diff --git a/engines/teenagent/teenagent.cpp b/engines/teenagent/teenagent.cpp index 83cb8e10b2..29eedd7c52 100644 --- a/engines/teenagent/teenagent.cpp +++ b/engines/teenagent/teenagent.cpp @@ -29,6 +29,7 @@ #include "common/system.h" #include "engines/advancedDetector.h" #include "sound/mixer.h" +#include "sound/raw.h" #include "graphics/cursorman.h" #include "graphics/thumbnail.h" #include "teenagent/console.h" @@ -893,11 +894,12 @@ void TeenAgentEngine::playSoundNow(byte id) { } uint size = in->size(); - char *data = new char[size]; + byte *data = (byte *)malloc(size); in->read(data, size); //debug(0, "playing %u samples...", size); - _mixer->playRaw(Audio::Mixer::kSFXSoundType, &_soundHandle, data, size, DisposeAfterUse::YES, 11025, 0); + Audio::AudioStream *stream = Audio::makeRawMemoryStream(data, size, DisposeAfterUse::YES, 11025, 0); + _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_soundHandle, stream); } diff --git a/engines/tinsel/sound.cpp b/engines/tinsel/sound.cpp index 8c3ddbaf3f..64c89dcd22 100644 --- a/engines/tinsel/sound.cpp +++ b/engines/tinsel/sound.cpp @@ -43,6 +43,7 @@ #include "sound/vag.h" #include "sound/flac.h" #include "sound/mp3.h" +#include "sound/raw.h" #include "sound/vorbis.h" #include "gui/message.h" @@ -153,8 +154,7 @@ bool SoundManager::playSample(int id, Audio::Mixer::SoundType type, Audio::Sound #endif break; default: - _vm->_mixer->playRaw(type, &curChan.handle, sampleBuf, sampleLen, DisposeAfterUse::YES, 22050, - Audio::Mixer::FLAG_UNSIGNED); + sampleStream = Audio::makeRawMemoryStream(sampleBuf, sampleLen, DisposeAfterUse::YES, 22050, Audio::Mixer::FLAG_UNSIGNED); break; } if (sampleStream) { |