From 04bf1294167fbaa1f193a3b105ebdd25ae07136d Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Wed, 24 May 2006 06:11:39 +0000 Subject: Fix compressed sound in makeWAVStream() svn-id: r22596 --- sound/wave.cpp | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/sound/wave.cpp b/sound/wave.cpp index 0256d23226..63bd498686 100644 --- a/sound/wave.cpp +++ b/sound/wave.cpp @@ -162,21 +162,32 @@ bool loadWAVFromStream(Common::SeekableReadStream &stream, int &size, int &rate, AudioStream *makeWAVStream(Common::SeekableReadStream &stream) { int size, rate; - byte flags; + byte *data, flags; uint16 type; int blockAlign; if (!loadWAVFromStream(stream, size, rate, flags, &type, &blockAlign)) return 0; - if (type == 17) // MS IMA ADPCM - return makeADPCMStream(&stream, size, kADPCMMSIma, rate, (flags & Audio::Mixer::FLAG_STEREO) ? 2 : 1); - if (type == 2) // MS ADPCM - return makeADPCMStream(&stream, size, kADPCMMS, rate, (flags & Audio::Mixer::FLAG_STEREO) ? 2 : 1, blockAlign); - - byte *data = (byte *)malloc(size); - assert(data); - stream.read(data, size); + if (type == 17) { // MS IMA ADPCM + Audio::AudioStream *sndStream = Audio::makeADPCMStream(&stream, size, Audio::kADPCMMSIma, rate, (flags & Audio::Mixer::FLAG_STEREO) ? 2 : 1, blockAlign); + data = (byte *)malloc(size * 4); + assert(data); + size = sndStream->readBuffer((int16*)data, size * 2); + size *= 2; // 16bits. + delete sndStream; + } else if (type == 2) { // MS ADPCM + Audio::AudioStream *sndStream = Audio::makeADPCMStream(&stream, size, Audio::kADPCMMS, rate, (flags & Audio::Mixer::FLAG_STEREO) ? 2 : 1, blockAlign); + data = (byte *)malloc(size * 4); + assert(data); + size = sndStream->readBuffer((int16*)data, size * 2); + size *= 2; // 16bits. + delete sndStream; + } else { + data = (byte *)malloc(size); + assert(data); + stream.read(data, size); + } // Since we allocated our own buffer for the data, we must set the autofree flag. flags |= Audio::Mixer::FLAG_AUTOFREE; -- cgit v1.2.3