| 83 | } |
| 84 | |
| 85 | void setNoteGate(int8_t note, bool gate, int c) { |
| 86 | bool changedNote = gate && gates[c] && (note != notes[c]); |
| 87 | bool enabledGate = gate && !gates[c]; |
| 88 | bool disabledGate = !gate && gates[c]; |
| 89 | if (changedNote || disabledGate) { |
| 90 | // Note off |
| 91 | midi::Message m; |
| 92 | m.setStatus(0x8); |
| 93 | m.setNote(notes[c]); |
| 94 | m.setValue(vels[c]); |
| 95 | m.setFrame(frame); |
| 96 | onMessage(m); |
| 97 | } |
| 98 | if (changedNote || enabledGate) { |
| 99 | // Note on |
| 100 | midi::Message m; |
| 101 | m.setStatus(0x9); |
| 102 | m.setNote(note); |
| 103 | m.setValue(vels[c]); |
| 104 | m.setFrame(frame); |
| 105 | onMessage(m); |
| 106 | } |
| 107 | notes[c] = note; |
| 108 | gates[c] = gate; |
| 109 | } |
| 110 | |
| 111 | void setKeyPressure(int8_t val, int c) { |
| 112 | if (keyPressures[c] == val) |