| } else | } else | ||||
| if (type1 == 0x0E && type2 == 0x0E) { | if (type1 == 0x0E && type2 == 0x0E) { | ||||
| usb_midi_msg_type = 0xE0; // 0xE0 = usbMIDI.PitchBend | usb_midi_msg_type = 0xE0; // 0xE0 = usbMIDI.PitchBend | ||||
| if (usb_midi_handlePitchChange) | |||||
| (*usb_midi_handlePitchChange)(ch, | |||||
| ((n >> 16) & 0x7F) | ((n >> 17) & 0x3F80)); | |||||
| if (usb_midi_handlePitchChange) { | |||||
| int value = ((n >> 16) & 0x7F) | ((n >> 17) & 0x3F80); | |||||
| value -= 8192; // 0 to 16383 --> -8192 to +8191 | |||||
| (*usb_midi_handlePitchChange)(ch, value); | |||||
| } | |||||
| } else { | } else { | ||||
| return 0; | return 0; | ||||
| } | } | 
| void sendAfterTouch(uint8_t pressure, uint8_t channel, uint8_t cable=0) __attribute__((always_inline)) { | void sendAfterTouch(uint8_t pressure, uint8_t channel, uint8_t cable=0) __attribute__((always_inline)) { | ||||
| send(0xD0, pressure, 0, channel, cable); | send(0xD0, pressure, 0, channel, cable); | ||||
| } | } | ||||
| void sendPitchBend(uint16_t value, uint8_t channel, uint8_t cable=0) __attribute__((always_inline)) { | |||||
| // MIDI 4.3 takes -8192 to +8191. We take 0 to 16383 | |||||
| // MIDI 4.3 also has version that takes float -1.0 to +1.0 | |||||
| void sendPitchBend(int value, uint8_t channel, uint8_t cable=0) __attribute__((always_inline)) { | |||||
| if (value < -8192) { | |||||
| value = -8192; | |||||
| } else if (value > 8191) { | |||||
| value = 8191; | |||||
| } | |||||
| value += 8192; | |||||
| send(0xE0, value, value >> 7, channel, cable); | send(0xE0, value, value >> 7, channel, cable); | ||||
| } | } | ||||
| void sendSysEx(uint32_t length, const uint8_t *data, bool hasTerm=false, uint8_t cable=0) __attribute__((always_inline)) { | void sendSysEx(uint32_t length, const uint8_t *data, bool hasTerm=false, uint8_t cable=0) __attribute__((always_inline)) { | 
| } else | } else | ||||
| if (type1 == 0x0E && type2 == 0xE0) { | if (type1 == 0x0E && type2 == 0xE0) { | ||||
| msg_type = 0xE0; // 0xE0 = usbMIDI.PitchBend | msg_type = 0xE0; // 0xE0 = usbMIDI.PitchBend | ||||
| if (handlePitchChange) (*handlePitchChange)(c, | |||||
| (b2 & 0x7F) | ((b3 & 0x7F) << 7)); | |||||
| if (handlePitchChange) { | |||||
| int value = (b2 & 0x7F) | ((int)(b3 & 0x7F) << 7); | |||||
| value -= 8192; // 0 to 16383 --> -8192 to +8191 | |||||
| (*handlePitchChange)(c, value); | |||||
| } | |||||
| } else { | } else { | ||||
| return false; | return false; | ||||
| } | } | 
| void sendAfterTouch(uint8_t pressure, uint8_t channel, uint8_t cable=0) { | void sendAfterTouch(uint8_t pressure, uint8_t channel, uint8_t cable=0) { | ||||
| send(0xD0, pressure, 0, channel, cable); | send(0xD0, pressure, 0, channel, cable); | ||||
| } | } | ||||
| void sendPitchBend(uint16_t value, uint8_t channel, uint8_t cable=0) { | |||||
| // MIDI 4.3 takes -8192 to +8191. We take 0 to 16383 | |||||
| void sendPitchBend(int value, uint8_t channel, uint8_t cable=0) { | |||||
| if (value < -8192) { | |||||
| value = -8192; | |||||
| } else if (value > 8191) { | |||||
| value = 8191; | |||||
| } | |||||
| value += 8192; | |||||
| send(0xE0, value, value >> 7, channel, cable); | send(0xE0, value, value >> 7, channel, cable); | ||||
| } | } | ||||
| void sendSysEx(uint16_t length, const uint8_t *data, bool hasTerm=false, uint8_t cable=0) { | void sendSysEx(uint16_t length, const uint8_t *data, bool hasTerm=false, uint8_t cable=0) { |