Files
viseq/src/midi-node.h
T
2026-07-17 02:03:27 +02:00

102 lines
2.6 KiB
C++

#pragma once
#include "config-node.h"
#include "datatypes.h"
#include "node-handle.h"
#include "node.h"
#include "raylib.h"
#include <map>
#include <memory>
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<std::shared_ptr<ControlNode>> 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<int, NodeMidiOut> 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<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 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<MidiNode>& N);
friend void from_json(const json& j, std::shared_ptr<MidiNode>& N);
};
}