diff options
Diffstat (limited to 'scumm/smush/imuse_channel.cpp')
-rw-r--r-- | scumm/smush/imuse_channel.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/scumm/smush/imuse_channel.cpp b/scumm/smush/imuse_channel.cpp index 0c4d531b89..5106a7b76c 100644 --- a/scumm/smush/imuse_channel.cpp +++ b/scumm/smush/imuse_channel.cpp @@ -306,8 +306,14 @@ int32 ImuseChannel::availableSoundData(void) const { void ImuseChannel::getSoundData(int16 * snd, int32 size) { if(_dataSize <= 0 || _bitsize <= 8) error("invalid call to imuse_channel::read_sound_data()"); if(_channels == 2) size *= 2; - for(int32 i = 0; i < size; i++) - snd[i] = READ_BE_UINT16(_sbuffer + 2 * i); + if(_rate == 11025) { + for(int32 i = 0; i < size; i++) + snd[i * 2] = READ_BE_UINT16(_sbuffer + 2 * i); + snd[i * 2 + 1] = snd[i * 2]; + } else { + for(int32 i = 0; i < size; i++) + snd[i] = READ_BE_UINT16(_sbuffer + 2 * i); + } delete []_sbuffer; assert(_sbufferSize == 2 * size); _sbuffer = 0; @@ -318,8 +324,14 @@ void ImuseChannel::getSoundData(int16 * snd, int32 size) { void ImuseChannel::getSoundData(int8 * snd, int32 size) { if(_dataSize <= 0 || _bitsize > 8) error("invalid call to imuse_channel::read_sound_data()"); if(_channels == 2) size *= 2; - for(int32 i = 0; i < size; i++) - snd[i] = _sbuffer[i]; + if(_rate == 11025) { + for(int32 i = 0; i < size; i++) + snd[i * 2] = _sbuffer[i]; + snd[i * 2 + 1] = _sbuffer[i]; + } else { + for(int32 i = 0; i < size; i++) + snd[i] = _sbuffer[i]; + } delete []_sbuffer; _sbuffer = 0; _sbufferSize = 0; |