diff options
author | Paweł Kołodziejski | 2002-05-19 20:38:53 +0000 |
---|---|---|
committer | Paweł Kołodziejski | 2002-05-19 20:38:53 +0000 |
commit | 4aabb0378c88d77d544aad41376552f9ce4fa198 (patch) | |
tree | 815c7a7dc8209854697477a2e29de443830c720a /sound.cpp | |
parent | c9a53bcf7616ded009df401cc84dbc90e1b4092f (diff) | |
download | scummvm-rg350-4aabb0378c88d77d544aad41376552f9ce4fa198.tar.gz scummvm-rg350-4aabb0378c88d77d544aad41376552f9ce4fa198.tar.bz2 scummvm-rg350-4aabb0378c88d77d544aad41376552f9ce4fa198.zip |
The Dig: stereo samples and mixer
svn-id: r4359
Diffstat (limited to 'sound.cpp')
-rw-r--r-- | sound.cpp | 55 |
1 files changed, 30 insertions, 25 deletions
@@ -116,35 +116,40 @@ void Scumm::processSoundQues() } if (tag == MKID_BE('DATA')) break; } - if (chan == 1) - { - if (bits == 8) { - byte * buffer = (byte*)malloc (size); - memcpy(buffer, ptr, size); + if (bits == 8) { + byte * buffer = (byte*)malloc (size); + memcpy(buffer, ptr, size); + if (chan == 1) { _mixer->play_raw(NULL, buffer, size, rate, SoundMixer::FLAG_AUTOFREE | SoundMixer::FLAG_UNSIGNED); } - if (bits == 12) { - uint32 s_size = (size * 2) / 3; - byte * buffer = (byte*)malloc (s_size + 4); - uint32 l = 0, r = 0, tmp; - for (; l < size; l += 3) - { - tmp = (ptr[l + 1] & 0x0f) << 8; - tmp = (tmp | ptr[l + 0]) << 4; - tmp -= 0x8000; - buffer[r++] = (uint8)((tmp >> 8) & 0xff); - buffer[r++] = (uint8)(tmp & 0xff); - - tmp = (ptr[l + 1] & 0xf0) << 4; - tmp = (tmp | ptr[l + 2]) << 4; - tmp -= 0x8000; - buffer[r++] = (uint8)((tmp >> 8) & 0xff); - buffer[r++] = (uint8)(tmp & 0xff); - } + else if (chan == 2) { + _mixer->play_raw(NULL, buffer, size, rate, SoundMixer::FLAG_AUTOFREE | SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_STEREO); + } + } + if (bits == 12) { + uint32 s_size = (size * 4) / 3; + byte * buffer = (byte*)malloc (s_size + 4); + uint32 l = 0, r = 0, tmp; + for (; l < size; l += 3) + { + tmp = (ptr[l + 1] & 0x0f) << 8; + tmp = (tmp | ptr[l + 0]) << 4; + tmp -= 0x8000; + buffer[r++] = (uint8)((tmp >> 8) & 0xff); + buffer[r++] = (uint8)(tmp & 0xff); + + tmp = (ptr[l + 1] & 0xf0) << 4; + tmp = (tmp | ptr[l + 2]) << 4; + tmp -= 0x8000; + buffer[r++] = (uint8)((tmp >> 8) & 0xff); + buffer[r++] = (uint8)(tmp & 0xff); + } + if (chan == 1) { _mixer->play_raw(NULL, buffer, s_size, rate, SoundMixer::FLAG_AUTOFREE | SoundMixer::FLAG_16BITS); } - } else { - warning("DIG: ignoring stereo sample"); + else if (chan == 2) { + _mixer->play_raw(NULL, buffer, s_size, rate, SoundMixer::FLAG_AUTOFREE | SoundMixer::FLAG_16BITS | SoundMixer::FLAG_STEREO); + } } } } |