aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scumm/imuse.cpp24
-rw-r--r--sound/mididrv.cpp15
-rw-r--r--sound/mididrv.h8
3 files changed, 18 insertions, 29 deletions
diff --git a/scumm/imuse.cpp b/scumm/imuse.cpp
index 0c2949375e..8010dee0ed 100644
--- a/scumm/imuse.cpp
+++ b/scumm/imuse.cpp
@@ -608,7 +608,7 @@ class IMuseGM : public IMuseDriver {
IMuseInternal *_se;
OSystem *_system;
MidiDriver *_md;
- MidiChannelGM _midi_channels[9];
+ MidiChannelGM _midi_channels[16];
int16 _midi_pitchbend_last[16];
byte _midi_pitchbend_factor_last[16];
@@ -4550,11 +4550,7 @@ void IMuseGM::midiPitchBend(byte chan, int16 pitchbend)
void IMuseGM::midiPitchBendFactor (byte chan, byte factor) {
if (_midi_pitchbend_factor_last[chan] != factor) {
_midi_pitchbend_factor_last[chan] = factor;
- _md->setPitchBendRange (chan, factor); // For high-level semantic drivers (such as QTMA)
- _md->send(( 0 << 16) | (101 << 8) | (0xB0 | chan));
- _md->send(( 0 << 16) | (100 << 8) | (0xB0 | chan));
- _md->send((factor << 16) | ( 6 << 8) | (0xB0 | chan));
- _md->send(( 0 << 16) | ( 38 << 8) | (0xB0 | chan));
+ _md->setPitchBendRange (chan, factor);
}
}
@@ -4776,13 +4772,15 @@ void IMuseGM::update_pris()
lopri = 255;
lomc = NULL;
for (i = ARRAYSIZE(_midi_channels), mc = _midi_channels;; mc++) {
- if (!mc->_part) {
- lomc = mc;
- break;
- }
- if (mc->_part->_pri_eff <= lopri) {
- lopri = mc->_part->_pri_eff;
- lomc = mc;
+ if (mc->_chan != 9) {
+ if (!mc->_part) {
+ lomc = mc;
+ break;
+ }
+ if (mc->_part->_pri_eff <= lopri) {
+ lopri = mc->_part->_pri_eff;
+ lomc = mc;
+ }
}
if (!--i) {
diff --git a/sound/mididrv.cpp b/sound/mididrv.cpp
index bf28e0316c..e67311d19d 100644
--- a/sound/mididrv.cpp
+++ b/sound/mididrv.cpp
@@ -961,21 +961,6 @@ int MidiDriver_CORE::open(int mode)
// start the output
AudioOutputUnitStart(au_output);
-#if 1
- // Send initial pitch bend sensitivity values for +/- 12 semitones.
- // For information on control change registered parameters,
- // which includes the Pitch Bend sensitivity settings,
- // visit http://www.midi.org/about-midi/table3.htm,
- // Table 3a.
- int chan;
- for (chan = 0; chan < 16; ++chan) {
- MusicDeviceMIDIEvent(au_MusicDevice, (0xB0 | chan), 101, 0, 0);
- MusicDeviceMIDIEvent(au_MusicDevice, (0xB0 | chan), 100, 0, 0);
- MusicDeviceMIDIEvent(au_MusicDevice, (0xB0 | chan), 6, 12, 0);
- MusicDeviceMIDIEvent(au_MusicDevice, (0xB0 | chan), 38, 0, 0);
- } // next for
-#endif
-
return 0;
}
diff --git a/sound/mididrv.h b/sound/mididrv.h
index f93f854471..6544f7f885 100644
--- a/sound/mididrv.h
+++ b/sound/mididrv.h
@@ -99,7 +99,13 @@ public:
static const char *get_error_name(int error_code);
// HIGH-LEVEL SEMANTIC METHODS
- virtual void setPitchBendRange (byte channel, uint range) = 0;
+ virtual void setPitchBendRange (byte channel, uint range)
+ {
+ send(( 0 << 16) | (101 << 8) | (0xB0 | channel));
+ send(( 0 << 16) | (100 << 8) | (0xB0 | channel));
+ send((range << 16) | ( 6 << 8) | (0xB0 | channel));
+ send(( 0 << 16) | ( 38 << 8) | (0xB0 | channel));
+ }
};