diff options
-rw-r--r-- | scumm/sound.cpp | 16 | ||||
-rw-r--r-- | scumm/sound.h | 1 |
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; |