Browse Source

Use signed values for MIDI pitch bend (same as Arduino MIDI lib)

main
PaulStoffregen 6 years ago
parent
commit
6bacd44c58
2 changed files with 10 additions and 4 deletions
  1. +7
    -3
      USBHost_t36.h
  2. +3
    -1
      midi.cpp

+ 7
- 3
USBHost_t36.h View File

@@ -890,9 +890,13 @@ public:
void sendAfterTouch(uint8_t pressure, uint8_t channel, uint8_t cable=0) {
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
// 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) {
if (value < -8192) {
value = -8192;
} else if (value > 8191) {
value = 8191;
}
value += 8192;
send(0xE0, value, value >> 7, channel, cable);
}
void sendSysEx(uint32_t length, const uint8_t *data, bool hasTerm=false, uint8_t cable=0) {

+ 3
- 1
midi.cpp View File

@@ -430,7 +430,9 @@ bool MIDIDevice::read(uint8_t channel)
if (type1 == 0x0E && type2 == 0x0E) {
msg_type = 0xE0; // 0xE0 = Pitch Bend
if (handlePitchChange) {
(*handlePitchChange)(ch, ((n >> 16) & 0x7F) | ((n >> 17) & 0x3F80));
int value = ((n >> 16) & 0x7F) | ((n >> 17) & 0x3F80);
value -= 8192; // 0 to 16383 --> -8192 to +8191
(*handlePitchChange)(ch, value);
}
} else {
return false;

Loading…
Cancel
Save