aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm
diff options
context:
space:
mode:
authorJohannes Schickel2009-09-18 15:12:27 +0000
committerJohannes Schickel2009-09-18 15:12:27 +0000
commitc20bc5ea99dd73fd641e71eee67358f0304c0706 (patch)
tree61659a4462a8d07dad392ad49862c4b8a1aaba3d /engines/scumm
parent6f9f2ddf37abddc272a0bd772b1081be831d6746 (diff)
downloadscummvm-rg350-c20bc5ea99dd73fd641e71eee67358f0304c0706.tar.gz
scummvm-rg350-c20bc5ea99dd73fd641e71eee67358f0304c0706.tar.bz2
scummvm-rg350-c20bc5ea99dd73fd641e71eee67358f0304c0706.zip
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
Diffstat (limited to 'engines/scumm')
-rw-r--r--engines/scumm/imuse/imuse_internal.h3
-rw-r--r--engines/scumm/imuse/imuse_part.cpp21
2 files changed, 19 insertions, 5 deletions
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