2024-10-31 01:43:00 +01:00
|
|
|
#pragma once
|
|
|
|
|
|
2024-12-07 15:28:33 +01:00
|
|
|
#include "config-node.h"
|
2024-11-01 02:38:47 +01:00
|
|
|
#include "datatypes.h"
|
2024-12-15 01:47:53 +01:00
|
|
|
#include "node-handle.h"
|
2024-10-31 01:43:00 +01:00
|
|
|
#include "node.h"
|
2024-12-09 01:40:13 +01:00
|
|
|
#include "raylib.h"
|
2024-10-31 01:43:00 +01:00
|
|
|
#include <map>
|
2024-12-13 01:15:55 +01:00
|
|
|
#include <memory>
|
2024-10-31 01:43:00 +01:00
|
|
|
|
2024-12-08 02:25:57 +01:00
|
|
|
namespace VISEQ::APP::UI{
|
|
|
|
|
class AppUI;
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
namespace VISEQ::GRAPH::NODES {
|
2026-01-06 02:44:18 +01:00
|
|
|
|
|
|
|
|
enum Handles {NOTE = 0, CC, PC, PB, AT, PP};
|
2024-10-31 01:43:00 +01:00
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
class MidiNode : public Node{
|
2024-12-08 02:25:57 +01:00
|
|
|
friend class APP::UI::AppUI;
|
|
|
|
|
|
2024-12-07 15:28:33 +01:00
|
|
|
private:
|
2024-12-07 22:09:06 +01:00
|
|
|
MIDI::MidiNote midiNote;
|
|
|
|
|
MIDI::MidiCC midiCC;
|
2024-12-11 01:16:06 +01:00
|
|
|
MIDI::MidiPC midiPC;
|
2024-12-07 22:09:06 +01:00
|
|
|
MIDI::MidiPitchBend midiPitchBend;
|
|
|
|
|
MIDI::MidiAftertouch midiAftertouch;
|
|
|
|
|
MIDI::MidiPolyPressure midiPolyPressure;
|
2024-12-15 01:47:53 +01:00
|
|
|
|
2024-12-28 15:13:16 +01:00
|
|
|
std::map<Handles, std::vector<std::shared_ptr<NodeHandle<int>>>> midiHandles;
|
|
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
public:
|
2024-11-14 01:37:16 +01:00
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
struct NodeMidiOut{
|
|
|
|
|
int i;
|
|
|
|
|
std::string name;
|
|
|
|
|
bool enabled;
|
|
|
|
|
};
|
2024-11-02 15:52:16 +01:00
|
|
|
|
2024-12-09 01:40:13 +01:00
|
|
|
MidiNode() {init();}
|
|
|
|
|
MidiNode(Vec2Df position) : Node(position) {init();}
|
2024-10-31 01:43:00 +01:00
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
NodeType nodeType = NodeType::MIDINODE;
|
2024-12-13 01:15:55 +01:00
|
|
|
|
|
|
|
|
//std::vector<std::shared_ptr<ControlNode>> controlNodes;
|
2024-10-31 01:43:00 +01:00
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
bool send_note = true;
|
|
|
|
|
bool send_cc = false;
|
|
|
|
|
bool send_pc = false;
|
|
|
|
|
bool send_pitch_bend = false;
|
2024-11-01 02:38:47 +01:00
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
int midi_out = -1;
|
|
|
|
|
|
|
|
|
|
std::map<int, NodeMidiOut> midi_outs;
|
2024-11-01 02:38:47 +01:00
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
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;
|
2024-12-09 01:40:13 +01:00
|
|
|
|
2026-01-06 02:44:18 +01:00
|
|
|
void init();
|
|
|
|
|
std::shared_ptr<MidiNode> 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<std::weak_ptr<ConfigNode>> getConnectedConfigNodes() const ;
|
|
|
|
|
void update() override ;
|
|
|
|
|
void modMidiNote(int incr);
|
|
|
|
|
void modMidiCC(int incr);
|
|
|
|
|
void modMidiPC(int incr);
|
|
|
|
|
void modMidiPitchBend(int incr);
|
|
|
|
|
void modMidiAftertouch(int incr);
|
|
|
|
|
void modMidiPolyPressure(int incr);
|
|
|
|
|
void interact();
|
|
|
|
|
void draw(Vec2Df mouse, Camera2D cam) override ;
|
2026-01-12 00:16:36 +01:00
|
|
|
|
|
|
|
|
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<MidiNode>& N);
|
|
|
|
|
friend void from_json(const json& j, std::shared_ptr<MidiNode>& N);
|
2024-11-03 03:48:49 +01:00
|
|
|
};
|
2026-01-12 00:16:36 +01:00
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
}
|