aboutsummaryrefslogtreecommitdiff
path: root/engines/made/sound.cpp
diff options
context:
space:
mode:
authorBenjamin Haisch2009-01-13 16:18:22 +0000
committerBenjamin Haisch2009-01-13 16:18:22 +0000
commit78776638d37a0081171e93acef2acda4a30bbc7c (patch)
tree9492309a9bbbdcffad5e307654354b95a239a7f4 /engines/made/sound.cpp
parent6801112956e58b73b5ff77a8869af864a30546d8 (diff)
downloadscummvm-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.cpp31
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;
}