2024-10-19 04:08:46 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "libremidi/libremidi.hpp"
|
|
|
|
|
|
2026-06-23 00:05:41 +02:00
|
|
|
#include <libremidi/configurations.hpp>
|
|
|
|
|
#include <libremidi/defaults.hpp>
|
|
|
|
|
#include <libremidi/output_configuration.hpp>
|
2024-10-19 17:41:31 +02:00
|
|
|
#include <map>
|
2024-10-19 04:08:46 +02:00
|
|
|
#include <memory>
|
2024-10-20 01:17:18 +02:00
|
|
|
#include "datatypes.h"
|
2024-10-19 04:08:46 +02:00
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
namespace VISEQ::MIDI {
|
2024-10-19 04:08:46 +02:00
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
struct NoteTimer{
|
|
|
|
|
int midi_out;
|
|
|
|
|
int channel;
|
|
|
|
|
int note;
|
|
|
|
|
int velocity;
|
|
|
|
|
float start;
|
|
|
|
|
int gate;
|
|
|
|
|
bool erase = false;
|
|
|
|
|
};
|
2024-10-19 04:08:46 +02:00
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
class Midi {
|
2024-10-19 04:08:46 +02:00
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
public:
|
|
|
|
|
Midi() {
|
2026-06-24 00:38:49 +02:00
|
|
|
init();
|
2024-11-03 03:48:49 +01:00
|
|
|
enumerate();
|
|
|
|
|
}
|
2024-10-20 02:01:30 +02:00
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
libremidi::observer obs;
|
2024-10-19 04:08:46 +02:00
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
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;
|
2026-06-24 00:38:49 +02:00
|
|
|
std::vector<VirtualMidiOutPort> virtual_midi_out_ports;
|
2026-06-23 00:05:41 +02:00
|
|
|
|
2024-10-19 04:08:46 +02:00
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
std::vector<NoteTimer> notes;
|
2024-10-19 04:08:46 +02:00
|
|
|
|
2024-11-03 03:48:49 +01:00
|
|
|
float timer;
|
2026-06-24 00:38:49 +02:00
|
|
|
|
|
|
|
|
void init();
|
|
|
|
|
|
2026-01-06 02:44:18 +01:00
|
|
|
void enumerate();
|
|
|
|
|
void open_midi_out(MidiOutPort *out_port);
|
|
|
|
|
void close_midi_out(MidiOutPort *out_port);
|
2026-06-24 00:38:49 +02:00
|
|
|
void open_midi_out(VirtualMidiOutPort *out_port);
|
|
|
|
|
void close_midi_out(VirtualMidiOutPort *out_port);
|
2026-01-06 02:44:18 +01:00
|
|
|
void note(int midi_out, int channel, int note, int velocity, int gate);
|
|
|
|
|
void cc(int midi_out, int channel, int cc, int value);
|
2026-07-17 02:03:27 +02:00
|
|
|
void pc(int midi_out, int channel, int value);
|
2026-01-06 02:44:18 +01:00
|
|
|
void pitch_bend(int midi_out, int channel, int pitch_value);
|
2026-07-17 02:03:27 +02:00
|
|
|
void aftertouch(int midi_out, int channel, int aftertouch_value);
|
|
|
|
|
void polypressure(int midi_out, int channel, int note, int polypressure_value);
|
2026-06-24 00:38:49 +02:00
|
|
|
void all_notes_off();
|
2026-01-06 02:44:18 +01:00
|
|
|
void update();
|
2024-11-03 03:48:49 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|