midi channel selection yeah :) - midi send message no :(
This commit is contained in:
+72
@@ -0,0 +1,72 @@
|
||||
#pragma once
|
||||
|
||||
#include "libremidi/libremidi.hpp"
|
||||
#include "libremidi/message.hpp"
|
||||
#include "libremidi/observer_configuration.hpp"
|
||||
#include "raylib.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <ostream>
|
||||
|
||||
|
||||
struct NoteTimer{
|
||||
int midi_out;
|
||||
int channel;
|
||||
int note;
|
||||
int velocity;
|
||||
int start;
|
||||
int length;
|
||||
};
|
||||
|
||||
|
||||
class Midi {
|
||||
|
||||
public:
|
||||
Midi() {
|
||||
|
||||
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);
|
||||
}
|
||||
std::cout << midi_out_ports.size() << std::endl;
|
||||
}
|
||||
|
||||
libremidi::observer obs;
|
||||
|
||||
std::vector<std::shared_ptr<libremidi::midi_out>> midi_outs;
|
||||
std::vector<libremidi::input_port> midi_in_ports;
|
||||
std::vector<libremidi::output_port> midi_out_ports;
|
||||
|
||||
std::vector<NoteTimer> notes;
|
||||
|
||||
float timer;
|
||||
|
||||
void open_midi_out(int midi_n){
|
||||
std::cout << midi_n << std::endl;
|
||||
|
||||
auto out = std::make_shared<libremidi::midi_out>();
|
||||
out->open_port(midi_out_ports[midi_n]);
|
||||
midi_outs.push_back(out);
|
||||
}
|
||||
|
||||
void note(int midi_out, int channel, int note, int velocity, int length){
|
||||
midi_outs[midi_out]->send_message(libremidi::channel_events::note_on(channel, note, velocity));
|
||||
notes.emplace_back(midi_out, channel, note, velocity, GetTime(), length);
|
||||
}
|
||||
|
||||
void update(){
|
||||
float time = GetTime();
|
||||
for( auto it = notes.begin(); it != notes.end(); ++it){
|
||||
if(time - it->start > ((float)it->length / 1000.0f)){
|
||||
midi_outs[it->midi_out]->send_message(libremidi::channel_events::note_off(it->channel, it->note, it->velocity));
|
||||
notes.erase(it);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user