diff options
-rw-r--r-- | scumm/imuse.cpp | 24 | ||||
-rw-r--r-- | sound/mididrv.cpp | 15 | ||||
-rw-r--r-- | sound/mididrv.h | 8 |
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)); + } }; |