diff options
author | Benjamin Haisch | 2009-01-13 16:18:22 +0000 |
---|---|---|
committer | Benjamin Haisch | 2009-01-13 16:18:22 +0000 |
commit | 78776638d37a0081171e93acef2acda4a30bbc7c (patch) | |
tree | 9492309a9bbbdcffad5e307654354b95a239a7f4 /engines/made/sound.cpp | |
parent | 6801112956e58b73b5ff77a8869af864a30546d8 (diff) | |
download | scummvm-rg350-78776638d37a0081171e93acef2acda4a30bbc7c.tar.gz scummvm-rg350-78776638d37a0081171e93acef2acda4a30bbc7c.tar.bz2 scummvm-rg350-78776638d37a0081171e93acef2acda4a30bbc7c.zip |
Reworked the sound energy code
svn-id: r35845
Diffstat (limited to 'engines/made/sound.cpp')
-rw-r--r-- | engines/made/sound.cpp | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/engines/made/sound.cpp b/engines/made/sound.cpp index 5bf35ce0af..3088ca7361 100644 --- a/engines/made/sound.cpp +++ b/engines/made/sound.cpp @@ -31,9 +31,7 @@ namespace Made { -Common::List<int> soundEnergy; - -void decompressSound(byte *source, byte *dest, uint16 chunkSize, uint16 chunkCount) { +void decompressSound(byte *source, byte *dest, uint16 chunkSize, uint16 chunkCount, SoundEnergyArray *soundEnergyArray) { int16 prevSample = 0, workSample = 0; byte soundBuffer[1025]; @@ -45,6 +43,8 @@ void decompressSound(byte *source, byte *dest, uint16 chunkSize, uint16 chunkCou uint16 ofs = 0; uint16 i = 0, l = 0; byte val; + + SoundEnergyItem soundEnergyItem; const int modeValues[3][4] = { { 2, 8, 0x01, 1}, @@ -52,7 +52,10 @@ void decompressSound(byte *source, byte *dest, uint16 chunkSize, uint16 chunkCou {16, 2, 0x0F, 4} }; - soundEnergy.clear(); + soundEnergyItem.position = 0; + + if (soundEnergyArray) + soundEnergyArray->clear(); while (chunkCount--) { deltaType = (*source) >> 6; @@ -71,8 +74,12 @@ void decompressSound(byte *source, byte *dest, uint16 chunkSize, uint16 chunkCou case 0: memset(soundBuffer, 0x80, workChunkSize); - workSample = 0; - soundEnergy.push_back(0); + workSample = 0; + + soundEnergyItem.energy = 0; + if (soundEnergyArray) + soundEnergyArray->push_back(soundEnergyItem); + break; case 1: @@ -99,14 +106,21 @@ void decompressSound(byte *source, byte *dest, uint16 chunkSize, uint16 chunkCou } } - soundEnergy.push_back(type - 1); + soundEnergyItem.energy = type - 1; + if (soundEnergyArray) + soundEnergyArray->push_back(soundEnergyItem); + break; case 5: for (i = 0; i < workChunkSize; i++) soundBuffer[i] = *source++; workSample = soundBuffer[workChunkSize - 1] - 128; - soundEnergy.push_back(type - 1); + + soundEnergyItem.energy = type - 1; + if (soundEnergyArray) + soundEnergyArray->push_back(soundEnergyItem); + break; default: @@ -137,6 +151,7 @@ void decompressSound(byte *source, byte *dest, uint16 chunkSize, uint16 chunkCou prevSample = workSample; memcpy(dest, soundBuffer, chunkSize); dest += chunkSize; + soundEnergyItem.position += chunkSize; } |