From c20bc5ea99dd73fd641e71eee67358f0304c0706 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Fri, 18 Sep 2009 15:12:27 +0000 Subject: Implement proper pan reversal for Roland MT-32 in iMuse (as desribed in bug report #1088045 "MI2: Minor problems in native MT-32 mode"). svn-id: r44184 --- engines/scumm/imuse/imuse_internal.h | 3 +++ engines/scumm/imuse/imuse_part.cpp | 21 ++++++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) (limited to 'engines/scumm') diff --git a/engines/scumm/imuse/imuse_internal.h b/engines/scumm/imuse/imuse_internal.h index 3ff2432f3e..2efeda2798 100644 --- a/engines/scumm/imuse/imuse_internal.h +++ b/engines/scumm/imuse/imuse_internal.h @@ -367,6 +367,9 @@ struct Part : public Serializable { Part(); void saveLoadWithSerializer(Serializer *ser); + +private: + void setPanPosition(uint8 value); }; diff --git a/engines/scumm/imuse/imuse_part.cpp b/engines/scumm/imuse/imuse_part.cpp index c581f4ba3b..35deddcbd6 100644 --- a/engines/scumm/imuse/imuse_part.cpp +++ b/engines/scumm/imuse/imuse_part.cpp @@ -136,8 +136,7 @@ void Part::set_pri(int8 pri) { void Part::set_pan(int8 pan) { _pan_eff = clamp((_pan = pan) + _player->getPan(), -64, 63); - if (_mc) - _mc->panPosition(_pan_eff + 0x40); + setPanPosition(_pan_eff + 0x40); } void Part::set_transpose(int8 transpose) { @@ -164,8 +163,7 @@ void Part::chorusLevel(byte value) { _mc->chorusLevel(value); } -void Part::effectLevel(byte value) -{ +void Part::effectLevel(byte value) { _effect_level = value; if (_mc) _mc->effectLevel(value); @@ -330,7 +328,7 @@ void Part::sendAll() { _mc->volume(_vol_eff); _mc->sustain(_pedal); _mc->modulationWheel(_modwheel); - _mc->panPosition(_pan_eff + 0x40); + setPanPosition(_pan_eff + 0x40); _mc->effectLevel(_effect_level); if (_instrument.isValid()) _instrument.send(_mc); @@ -369,4 +367,17 @@ void Part::allNotesOff() { _mc->allNotesOff(); } +void Part::setPanPosition(uint8 value) { + if (!_mc) + return; + + // As described in bug report #1088045 "MI2: Minor problems in native MT-32 mode" + // the original iMuse MT-32 driver did revert the panning. So we do the same + // here in our code to have correctly panned sound output. + if (_player->_se->isNativeMT32()) + value = 127 - value; + + _mc->panPosition(value); +} + } // End of namespace Scumm -- cgit v1.2.3