midi channel selection yeah :) - midi send message no :(

This commit is contained in:
Sebastian
2024-10-19 04:08:46 +02:00
parent d1542870d5
commit 0d942b6677
4 changed files with 102 additions and 27 deletions
+18 -26
View File
@@ -25,30 +25,22 @@
#include "raygui/raygui.h"
#include "raygui/dark/style_dark.h"
#include "libremidi/libremidi.hpp"
#include "libremidi/message.hpp"
#include "libremidi/observer_configuration.hpp"
#include <cstdlib>
#include <stdio.h>
#include <cmath>
#include "midi.h"
#include "node.h"
#include "signal.h"
#include "connection-manager.h"
libremidi::observer obs;
std::vector<libremidi::midi_out> midi_outs;
libremidi::midi_out midi_out;
std::vector<libremidi::input_port> midi_in_ports;
std::vector<libremidi::output_port> midi_out_ports;
std::vector<Node> nodes;
std::vector<Signal> signals;
ConnectionManager cm;
Midi midi;
Vec2D<float> mouse_pos;
Vec2D<float> drag_start;
@@ -79,7 +71,7 @@ int main(){
app.width = GetMonitorWidth(monitor);
app.height = GetMonitorHeight(monitor);
Camera2D camera = { 0 };
Camera2D camera = { {0} };
camera.target = (Vector2){ app.width/2.0f, app.height/2.0f };
camera.offset = (Vector2){ app.width/2.0f, app.height/2.0f };
camera.rotation = 0.0f;
@@ -89,17 +81,9 @@ int main(){
ToggleFullscreen();
for(const libremidi::input_port& port : obs.get_input_ports()){
midi_in_ports.push_back(port);
}
for(const libremidi::output_port& port : obs.get_output_ports()){
midi_out_ports.push_back(port);
}
for(int i = 0; i < 10; i++){
nodes.emplace(nodes.end(), Node((float)(rand() % app.width*0.5 + app.width*0.25), (float)(rand() % app.height*0.5 + app.height*0.25), 15.0f));
std::cout << nodes.back().position.x << " " << nodes.back().position.y << std::endl;
}
@@ -109,8 +93,6 @@ int main(){
signals[i].last = &nodes.front();
}
midi_out.open_port(midi_out_ports[2]);
Vec2D<float> drag_offset;
Node* connecting_from = nullptr;
@@ -208,11 +190,13 @@ int main(){
s.direction = (s.next->position - s.position).norm();
if(s.position.dist(&s.next->position) < s.speed * 1.5) {
Node* n = cm.next(s.next, s.last);
if(n != s.next && n != nullptr) {
midi.note(s.next->midi_out, 1, 50, 50, 500);
s.last = s.next;
s.next = n;
std::cout << s.last << " " << s.next << std::endl;
midi_out.send_message(libremidi::channel_events::control_change(2, 10, 50));
//std::cout << s.last << " " << s.next << std::endl;
//midi_out.send_message(libremidi::channel_events::control_change(2, 10, 50));
}
}
s.draw(&mouse_pos);
@@ -229,10 +213,18 @@ int main(){
for(auto& n : nodes){
if(n.config){
n.config = !GuiWindowBox((Rectangle){n.position.x + 10, n.position.y + 10,200,300}, "config");
n.config = !GuiWindowBox((Rectangle){n.position.x + 10, n.position.y + 10,240,300}, "config");
int option = n.mode;
GuiComboBox((Rectangle){ n.position.x + 20, n.position.y + 40, 200, 20 }, "Round Robin;Random", &option);
GuiComboBox((Rectangle){ n.position.x + 20, n.position.y + 40, 220, 20 }, "Round Robin;Random", &option);
n.mode = (Distribution)option;
std::string toggle_out_ports = "";
for(auto& mo : midi.midi_out_ports){
toggle_out_ports += mo.port_name + "\n";
}
toggle_out_ports = toggle_out_ports.substr(0, toggle_out_ports.size()-2);
GuiLabel((Rectangle){n.position.x + 20, n.position.y + 60, 220, 20}, "MIDI OUT");
GuiToggleGroup((Rectangle){n.position.x + 20, n.position.y + 80, 220, 20}, toggle_out_ports.c_str(), &n.midi_out);
if(GuiButton((Rectangle){n.position.x + 20, n.position.y + 100 + midi.midi_out_ports.size()*20, 220, 20}, "OPEN PORT")) midi.open_midi_out(n.midi_out);
}
}