aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Kołodziejski2002-12-28 21:46:49 +0000
committerPaweł Kołodziejski2002-12-28 21:46:49 +0000
commit3102fd42e33d6feb810833737d11f9675d839667 (patch)
tree75ed8d789618a93021a70a98447e3b8d4a91b8bf
parentf63cb964685392d4954f23ce25abc7132ec4b375 (diff)
downloadscummvm-rg350-3102fd42e33d6feb810833737d11f9675d839667.tar.gz
scummvm-rg350-3102fd42e33d6feb810833737d11f9675d839667.tar.bz2
scummvm-rg350-3102fd42e33d6feb810833737d11f9675d839667.zip
added more stuff for CMI music
svn-id: r6241
-rw-r--r--scumm/sound.cpp16
-rw-r--r--scumm/sound.h1
2 files changed, 15 insertions, 2 deletions
diff --git a/scumm/sound.cpp b/scumm/sound.cpp
index bcd44c1c54..62c0bf95d5 100644
--- a/scumm/sound.cpp
+++ b/scumm/sound.cpp
@@ -1053,7 +1053,10 @@ void Sound::bundleMusicHandler(Scumm * scumm) {
tag = READ_BE_UINT32(ptr); ptr += 4;
switch(tag) {
case MKID_BE('FRMT'):
- size = READ_BE_UINT32(ptr); ptr += 24;
+ ptr += 12;
+ _bundleMusicSampleBits = READ_BE_UINT32(ptr); ptr += 4;
+ rate = READ_BE_UINT32(ptr); ptr += 4;
+ channels = READ_BE_UINT32(ptr); ptr += 4;
break;
case MKID_BE('TEXT'):
case MKID_BE('REGN'):
@@ -1099,7 +1102,16 @@ void Sound::bundleMusicHandler(Scumm * scumm) {
ptr = _musicBundleBufFinal;
byte * buffer = NULL;
- uint32 final_size = decode12BitsSample(ptr, &buffer, size);
+ uint32 final_size;
+ if (_bundleMusicSampleBits == 12) {
+ final_size = decode12BitsSample(ptr, &buffer, size);
+ } else if (_bundleMusicSampleBits == 16) {
+ buffer = (byte*)malloc(size);
+ final_size = size;
+ memcpy(buffer, ptr, size);
+ } else {
+ warning("Sound::bundleMusicHandler to do more playStream options...");
+ }
if (_bundleMusicTrack == -1) {
_bundleMusicTrack = _scumm->_mixer->playStream(NULL, _scumm->_mixer->_beginSlots - 1, buffer, final_size, rate,
diff --git a/scumm/sound.h b/scumm/sound.h
index d388576327..082ed5969f 100644
--- a/scumm/sound.h
+++ b/scumm/sound.h
@@ -54,6 +54,7 @@ enum {
int32 _bundleMusicTrack;
bool _musicBundleToBeChanged;
bool _musicBundleToBeRemoved;
+ int32 _bundleMusicSampleBits;
File *_sfxFile;
uint32 _talk_sound_a1, _talk_sound_a2, _talk_sound_b1, _talk_sound_b2;