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

62 lines
1.5 KiB
C++

#pragma once
#include "libremidi/libremidi.hpp"
#include <libremidi/configurations.hpp>
#include <libremidi/defaults.hpp>
#include <libremidi/output_configuration.hpp>
#include <map>
#include <memory>
#include "datatypes.h"
namespace VISEQ::MIDI {
struct NoteTimer{
int midi_out;
int channel;
int note;
int velocity;
float start;
int gate;
bool erase = false;
};
class Midi {
public:
Midi() {
init();
enumerate();
}
libremidi::observer obs;
std::map<int, std::shared_ptr<libremidi::midi_out>> midi_outs;
std::vector<libremidi::input_port> midi_in_ports;
std::vector<MidiOutPort> midi_out_ports;
std::vector<VirtualMidiOutPort> virtual_midi_out_ports;
std::vector<NoteTimer> notes;
float timer;
void init();
void enumerate();
void open_midi_out(MidiOutPort *out_port);
void close_midi_out(MidiOutPort *out_port);
void open_midi_out(VirtualMidiOutPort *out_port);
void close_midi_out(VirtualMidiOutPort *out_port);
void note(int midi_out, int channel, int note, int velocity, int gate);
void cc(int midi_out, int channel, int cc, int value);
void pc(int midi_out, int channel, int value);
void pitch_bend(int midi_out, int channel, int pitch_value);
void aftertouch(int midi_out, int channel, int aftertouch_value);
void polypressure(int midi_out, int channel, int note, int polypressure_value);
void all_notes_off();
void update();
};
}