diff options
author | Travis Howell | 2006-05-24 06:11:39 +0000 |
---|---|---|
committer | Travis Howell | 2006-05-24 06:11:39 +0000 |
commit | 04bf1294167fbaa1f193a3b105ebdd25ae07136d (patch) | |
tree | f40eeee6984cbc018d87c257df1704233a023fd9 | |
parent | f7bacd746f6e9276c611b9d019b2114c487ead0f (diff) | |
download | scummvm-rg350-04bf1294167fbaa1f193a3b105ebdd25ae07136d.tar.gz scummvm-rg350-04bf1294167fbaa1f193a3b105ebdd25ae07136d.tar.bz2 scummvm-rg350-04bf1294167fbaa1f193a3b105ebdd25ae07136d.zip |
Fix compressed sound in makeWAVStream()
svn-id: r22596
-rw-r--r-- | sound/wave.cpp | 29 |
1 files 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; |