Ticket #8064: pitchbend.diff

File pitchbend.diff, 3.1 KB (added by SF/jamieson630, 22 years ago)

Patch against a September 24 CVS snapshot

  • scummvm/scumm/imuse.cpp

    RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
    retrieving revision 1.12
    diff -u -r1.12 imuse.cpp
     
    31103110
    31113111void Part::set_pitchbend(int value)
    31123112{
    3113         _pitchbend = value * _pitchbend_factor >> 6;
     3113        _pitchbend = value;
    31143114        changed(IMuseDriver::pcMod);
    31153115}
    31163116
     
    39933993        if (what & pcMod) {
    39943994                for (mc = part->_mc->adl(); mc; mc = mc->_next) {
    39953995                        adlib_note_on(mc->_channel, mc->_note + part->_transpose_eff,
    3996                                                                                 part->_pitchbend + part->_detune_eff);
     3996                                      (part->_pitchbend * part->_pitchbend_factor >> 6) + part->_detune_eff);
    39973997                }
    39983998        }
    39993999
     
    42784278
    42794279        if (_midi_pitchbend_last[chan] != pitchbend) {
    42804280                _midi_pitchbend_last[chan] = pitchbend;
    4281                 tmp = (pitchbend << 2) + 0x2000;
     4281                tmp = pitchbend + 0x2000;
    42824282                _md->send(((tmp >> 7) & 0x7F) << 16 | (tmp & 0x7F) << 8 | 0xE0 | chan);
    42834283        }
    42844284}
     
    45704570
    45714571        if (what & pcMod)
    45724572                midiPitchBend(mc->_chan,
    4573                                                                         clamp(part->_pitchbend + part->_detune_eff +
    4574                                                                                                 (part->_transpose_eff << 7), -2048, 2047));
     4573                              clamp(part->_pitchbend +
     4574                                                (part->_detune_eff * 64 / 12) +
     4575                                    (part->_transpose_eff * 8192 / 12), -8192, 8191));
    45754576
    45764577        if (what & pcVolume)
    45774578                midiVolume(mc->_chan, part->_vol_eff);
  • scummvm/sound/mididrv.cpp

    RCS file: /cvsroot/scummvm/scummvm/sound/mididrv.cpp,v
    retrieving revision 1.5
    diff -u -r1.5 mididrv.cpp
     
    8787}
    8888
    8989void CALLBACK MidiDriver_WIN::midi_callback(HMIDIOUT hmo, UINT wMsg,
    90                                                                                                                                                                                 DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
     90                                            DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
    9191{
    9292
    9393        switch (wMsg) {
     
    111111                MMRESULT res = midiOutOpen((HMIDIOUT *) & _mo, MIDI_MAPPER, NULL, NULL, 0);
    112112                if (res != MMSYSERR_NOERROR)
    113113                        check_error(res);
     114
     115                // Send initial pitch bend sensitivity values for +/- 12 semitones.
     116                // For information on control change registered parameters,
     117                // which includes the Pitch Bend sensitivity settings,
     118                // visit http://www.midi.org/about-midi/table3.htm,
     119                // Table 3a.
     120                int chan;
     121                for (chan = 0; chan < 16; ++chan) {
     122                        send(( 0 << 16) | (101 << 8) | (0xB0 | chan));
     123                        send(( 0 << 16) | (100 << 8) | (0xB0 | chan));
     124                        send((12 << 16) | (  6 << 8) | (0xB0 | chan));
     125                        send(( 0 << 16) | ( 38 << 8) | (0xB0 | chan));
     126                } // next for
    114127        } else {
    115128                /* streaming mode */
    116129                MIDIPROPTIMEDIV mptd;
    117130                UINT _midi_device_id = 0;
    118131
    119132                check_error(midiStreamOpen(&_ms, &_midi_device_id, 1,
    120                                                                                                                         (uint32)midi_callback, (uint32)this, CALLBACK_FUNCTION));
     133                                  (uint32)midi_callback, (uint32)this, CALLBACK_FUNCTION));
    121134
    122135                prepare();
    123136