1 #ifndef AL_PRESETMIDI_H
2 #define AL_PRESETMIDI_H
45 #include "al/io/al_MIDI.hpp"
46 #include "al/ui/al_PresetHandler.hpp"
63 PresetMIDI(
int deviceIndex) : mPresetHandler(
nullptr) {
66 mRtMidiIn.openPort(deviceIndex);
67 printf(
"PresetMIDI: Opened port to %s\n",
68 mRtMidiIn.getPortName(deviceIndex).c_str());
69 }
catch (RtMidiError &error) {
70 std::cerr << error.getMessage() << std::endl;
71 std::cerr <<
"PresetMIDI Warning: Could not open MIDI port "
72 << deviceIndex << std::endl;
74 mMorphBinding.channel = mMorphBinding.controlNumber = -1;
79 mPresetHandler = &presetHandler;
80 setPresetHandler(*mPresetHandler);
83 void enable() { mEnabled =
true; }
84 void disable() { mEnabled =
false; }
87 open(deviceIndex, presetHandler);
92 setPresetHandler(presetHandler);
95 void open(
int deviceIndex) {
98 if (mRtMidiIn.isPortOpen()) {
99 mRtMidiIn.closePort();
102 if (deviceIndex >= 0 && deviceIndex < (
int)mRtMidiIn.getPortCount()) {
103 mRtMidiIn.openPort(deviceIndex);
104 printf(
"PresetMIDI: Opened port to %s\n",
105 mRtMidiIn.getPortName(deviceIndex).c_str());
107 std::cerr <<
"PresetMIDI Warning: Could not open MIDI port "
108 << deviceIndex << std::endl;
110 }
catch (RtMidiError &error) {
111 std::cerr << error.getMessage() << std::endl;
112 std::cerr <<
"PresetMIDI Warning: Could not open MIDI port "
113 << deviceIndex << std::endl;
118 mRtMidiIn.closePort();
119 MIDIMessageHandler::clearBindings();
122 bool isOpen() {
return mRtMidiIn.isPortOpen(); }
125 mPresetHandler = &presetHandler;
147 void connectNoteToPreset(
int channel,
float presetLow,
int noteLow,
148 float presetHigh = -1,
int noteHigh = -1);
150 void connectProgramToPreset(
int channel,
float presetLow,
int programLow,
151 float presetHigh = -1,
int programHigh = -1);
153 void setMorphControl(
int controlNumber,
int channel,
float min,
float max);
157 std::vector<NoteBinding> getCurrentNoteBindings() {
return mNoteBindings; }
158 std::vector<ProgramBinding> getCurrentProgramBindings() {
159 return mProgramBindings;
164 MorphBinding mMorphBinding;
166 PresetHandler *mPresetHandler;
169 std::vector<NoteBinding> mNoteBindings;
170 std::vector<ProgramBinding> mProgramBindings;
void bindTo(RtMidiIn &RtMidiIn, unsigned port=0)
Bind handler to a MIDI input.
The PresetHandler class handles sorting and recalling of presets.
The PresetMIDI class connects PresetHandler objects to MIDI messages.
virtual void onMIDIMessage(const MIDIMessage &m) override
Called when a MIDI message is received.
T min(const T &v1, const T &v2, const T &v3)
T max(const T &v1, const T &v2, const T &v3)