#pragma once #include "libremidi/libremidi.hpp" #include #include #include #include #include #include "datatypes.h" namespace VISEQ::MIDI { struct NoteTimer{ int midi_out; int channel; int note; int velocity; float start; int gate; bool erase = false; }; class Midi { public: Midi() { init(); enumerate(); } libremidi::observer obs; std::map> midi_outs; std::vector midi_in_ports; std::vector midi_out_ports; std::vector virtual_midi_out_ports; std::vector notes; float timer; void init(); void enumerate(); void open_midi_out(MidiOutPort *out_port); void close_midi_out(MidiOutPort *out_port); void open_midi_out(VirtualMidiOutPort *out_port); void close_midi_out(VirtualMidiOutPort *out_port); void note(int midi_out, int channel, int note, int velocity, int gate); void cc(int midi_out, int channel, int cc, int value); void pitch_bend(int midi_out, int channel, int pitch_value); void all_notes_off(); void update(); }; }