mirror of
https://github.com/godotengine/godot.git
synced 2024-11-10 22:23:07 +00:00
ALSA MIDI driver:
Pith bend message now has correct size (was 2 bytes instead of 3). Recognized (but not implemented) 0xF? messages. SysEx messages will be reocognized as such, but their contents will be ignored.
This commit is contained in:
parent
90a224c6eb
commit
9c48eb1c59
@ -52,7 +52,12 @@ void MIDIDriver::receive_input_packet(uint64_t timestamp, uint8_t *data, uint32_
|
||||
uint32_t param_position = 1;
|
||||
|
||||
if (length >= 1) {
|
||||
if ((data[0] & 0x80) == 0x00) {
|
||||
if (data[0] >= 0xF0) {
|
||||
// channel does not apply to system common messages
|
||||
event->set_channel(0);
|
||||
event->set_message(data[0]);
|
||||
last_received_message = data[0];
|
||||
} else if ((data[0] & 0x80) == 0x00) {
|
||||
// running status
|
||||
event->set_channel(last_received_message & 0xF);
|
||||
event->set_message(last_received_message >> 4);
|
||||
|
@ -43,12 +43,30 @@ static int get_message_size(uint8_t message) {
|
||||
case 0x90: // note on
|
||||
case 0xA0: // aftertouch
|
||||
case 0xB0: // continuous controller
|
||||
case 0xE0: // pitch bend
|
||||
case 0xF2: // song position pointer
|
||||
return 3;
|
||||
|
||||
case 0xC0: // patch change
|
||||
case 0xD0: // channel pressure
|
||||
case 0xE0: // pitch bend
|
||||
case 0xF1: // time code quarter frame
|
||||
case 0xF3: // song select
|
||||
return 2;
|
||||
|
||||
case 0xF0: // SysEx start
|
||||
case 0xF4: // reserved
|
||||
case 0xF5: // reserved
|
||||
case 0xF6: // tune request
|
||||
case 0xF7: // SysEx end
|
||||
case 0xF8: // timing clock
|
||||
case 0xF9: // reserved
|
||||
case 0xFA: // start
|
||||
case 0xFB: // continue
|
||||
case 0xFC: // stop
|
||||
case 0xFD: // reserved
|
||||
case 0xFE: // active sensing
|
||||
case 0xFF: // reset
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 256;
|
||||
@ -83,6 +101,9 @@ void MIDIDriverALSAMidi::thread_func(void *p_udata) {
|
||||
bytes = 0;
|
||||
}
|
||||
expected_size = get_message_size(byte);
|
||||
// After a SysEx start, all bytes are data until a SysEx end, so
|
||||
// we're going to end the command at the SES, and let the common
|
||||
// driver ignore the following data bytes.
|
||||
}
|
||||
|
||||
if (bytes < 256) {
|
||||
|
Loading…
Reference in New Issue
Block a user