#pragma once #include "config-node.h" #include "datatypes.h" #include "node-handle.h" #include "node.h" #include "raylib.h" #include #include namespace VISEQ::APP::UI{ class AppUI; } namespace VISEQ::GRAPH::NODES { enum Handles {NOTE = 0, CC, PC, PB, AT, PP}; class MidiNode : public Node{ friend class APP::UI::AppUI; private: MIDI::MidiNote midiNote; MIDI::MidiCC midiCC; MIDI::MidiPC midiPC; MIDI::MidiPitchBend midiPitchBend; MIDI::MidiAftertouch midiAftertouch; MIDI::MidiPolyPressure midiPolyPressure; public: struct NodeMidiOut{ int i; bool enabled; std::string name; }; MidiNode() {init();} MidiNode(Vec2Df position) : Node(position) {init();} NodeType nodeType = NodeType::MIDINODE; //std::vector> controlNodes; bool send_note = true; bool send_cc = false; bool send_pc = false; bool send_pitch_bend = false; bool send_aftertouch = false; bool send_polypressure = false; int midi_out = -1; std::map selected_midi_outs; bool gui_midi_channel_edit = false; bool gui_midi_note_edit = false; bool gui_midi_velocity_edit = false; bool gui_midi_gate_edit = false; float start = 0; float fade = 0; float time = 0; float last = 0; void init(); std::shared_ptr getPtr(); virtual NodeType getNodeType() const override; void setMidiPort(int midi_port, bool _state); void trigger() override ; void setMode(int _mode) override ; MIDI::MidiNote getNotes() const ; MIDI::MidiCC getCC() const ; MIDI::MidiPC getPC() const ; MIDI::MidiPitchBend getPitchBend() const ; MIDI::MidiAftertouch getAftertouch() const ; MIDI::MidiPolyPressure getPolyPressure() const ; std::vector> getConnectedConfigNodes() const ; void update() override ; void modMidiChannel(int incr); void modMidiNoteValue(int incr); void modMidiNoteVelocity(int incr); void modMidiNoteGate(int incr); void modMidiCCValue(int incr); void modMidiCCControl(int incr); void modMidiPCValue(int incr); void modMidiPCProgram(int incr); void modMidiPitchBend(int incr); void modMidiAftertouch(int incr); void modMidiPolyPressureValue(int incr); void modMidiPolyPressureNote(int incr); void interact(); void draw(Vec2Df mouse, Camera2D cam) override ; friend void to_json(json& j, const MidiNode& N); friend void from_json(const json& j, MidiNode& N); friend void to_json(json& j, const std::shared_ptr& N); friend void from_json(const json& j, std::shared_ptr& N); }; }