123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- #include "midi_driver.h"
- #include "core/os/os.h"
- #include "main/input_default.h"
- MIDIDriver *MIDIDriver::singleton = NULL;
- MIDIDriver *MIDIDriver::get_singleton() {
- return singleton;
- }
- void MIDIDriver::set_singleton() {
- singleton = this;
- }
- void MIDIDriver::receive_input_packet(uint64_t timestamp, uint8_t *data, uint32_t length) {
- Ref<InputEventMIDI> event;
- event.instance();
- if (length >= 1) {
- event->set_channel(data[0] & 0xF);
- event->set_message(data[0] >> 4);
- }
- switch (event->get_message()) {
- case MIDI_MESSAGE_AFTERTOUCH:
- if (length >= 3) {
- event->set_pitch(data[1]);
- event->set_pressure(data[2]);
- }
- break;
- case MIDI_MESSAGE_CONTROL_CHANGE:
- if (length >= 3) {
- event->set_controller_number(data[1]);
- event->set_controller_value(data[2]);
- }
- break;
- case MIDI_MESSAGE_NOTE_ON:
- case MIDI_MESSAGE_NOTE_OFF:
- case MIDI_MESSAGE_PITCH_BEND:
- if (length >= 3) {
- event->set_pitch(data[1]);
- event->set_velocity(data[2]);
- }
- break;
- case MIDI_MESSAGE_PROGRAM_CHANGE:
- if (length >= 2) {
- event->set_instrument(data[1]);
- }
- break;
- case MIDI_MESSAGE_CHANNEL_PRESSURE:
- if (length >= 2) {
- event->set_pressure(data[1]);
- }
- break;
- }
- InputDefault *id = Object::cast_to<InputDefault>(Input::get_singleton());
- id->parse_input_event(event);
- }
- PoolStringArray MIDIDriver::get_connected_inputs() {
- PoolStringArray list;
- return list;
- }
- MIDIDriver::MIDIDriver() {
- set_singleton();
- }
|