static void RT_MIDI_send_msg_to_patch(struct Patch *patch, MidiMessage message, int64_t seq_time){ if (message.isNoteOn()) RT_PATCH_play_note(patch, message.getNoteNumber(), -1, message.getVelocity() / 127.0f, 0.0f, seq_time); else if (message.isNoteOff()) RT_PATCH_stop_note(patch, message.getNoteNumber(), -1, seq_time); else if (message.isAftertouch()) RT_PATCH_change_velocity(patch, message.getNoteNumber(), -1, message.getChannelPressureValue() / 127.0f, seq_time); else { const uint8_t *raw_data = message.getRawData(); int len = message.getRawDataSize(); R_ASSERT_RETURN_IF_FALSE(len>=1 && len<=3); uint32_t msg; if (len==3) msg = MIDI_msg_pack3(raw_data[0],raw_data[1],raw_data[2]); else if (len==2) msg = MIDI_msg_pack2(raw_data[0],raw_data[1]); else if (len==1) msg = MIDI_msg_pack1(raw_data[0]); else return; RT_PATCH_send_raw_midi_message(patch, msg, seq_time); } }
static void scheduled_stop_note(int64_t time, const union SuperType *args){ struct Tracks *track = args[0].pointer; struct Notes *note = args[1].pointer; RT_PATCH_stop_note(track->patch, note->note, note->id, time); }