GUI: implement MIDI learn
This commit is contained in:
parent
6d1d91ca68
commit
a5a65d4db3
|
@ -1926,7 +1926,26 @@ bool FurnaceGUI::loop() {
|
||||||
midiLock.unlock();
|
midiLock.unlock();
|
||||||
|
|
||||||
// parse message here
|
// parse message here
|
||||||
logD("message is %.2x\n",msg.type);
|
if (learning!=-1) {
|
||||||
|
if (learning>=0 && learning<(int)midiMap.binds.size()) {
|
||||||
|
midiMap.binds[learning].type=msg.type>>4;
|
||||||
|
midiMap.binds[learning].channel=msg.type&15;
|
||||||
|
midiMap.binds[learning].data1=msg.data[0];
|
||||||
|
switch (msg.type>>4) {
|
||||||
|
case TA_MIDI_NOTE_OFF:
|
||||||
|
case TA_MIDI_NOTE_ON:
|
||||||
|
case TA_MIDI_AFTERTOUCH:
|
||||||
|
case TA_MIDI_PITCH_BEND:
|
||||||
|
case TA_MIDI_CONTROL:
|
||||||
|
midiMap.binds[learning].data2=msg.data[1];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
midiMap.binds[learning].data2=128;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
learning=-1;
|
||||||
|
} else {
|
||||||
int action=midiMap.at(msg);
|
int action=midiMap.at(msg);
|
||||||
if (action!=0) {
|
if (action!=0) {
|
||||||
doAction(action);
|
doAction(action);
|
||||||
|
@ -1947,6 +1966,7 @@ bool FurnaceGUI::loop() {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
midiLock.lock();
|
midiLock.lock();
|
||||||
midiQueue.pop();
|
midiQueue.pop();
|
||||||
|
@ -2714,6 +2734,7 @@ bool FurnaceGUI::init() {
|
||||||
midiQueue.push(msg);
|
midiQueue.push(msg);
|
||||||
midiLock.unlock();
|
midiLock.unlock();
|
||||||
e->setMidiBaseChan(cursor.xCoarse);
|
e->setMidiBaseChan(cursor.xCoarse);
|
||||||
|
if (learning!=-1) return -2;
|
||||||
if (midiMap.at(msg)) return -2;
|
if (midiMap.at(msg)) return -2;
|
||||||
return curIns;
|
return curIns;
|
||||||
});
|
});
|
||||||
|
@ -2803,6 +2824,7 @@ FurnaceGUI::FurnaceGUI():
|
||||||
aboutSin(0),
|
aboutSin(0),
|
||||||
aboutHue(0.0f),
|
aboutHue(0.0f),
|
||||||
backupTimer(15.0),
|
backupTimer(15.0),
|
||||||
|
learning(-1),
|
||||||
mainFont(NULL),
|
mainFont(NULL),
|
||||||
iconFont(NULL),
|
iconFont(NULL),
|
||||||
patFont(NULL),
|
patFont(NULL),
|
||||||
|
|
|
@ -636,6 +636,7 @@ class FurnaceGUI {
|
||||||
std::mutex midiLock;
|
std::mutex midiLock;
|
||||||
std::queue<TAMidiMessage> midiQueue;
|
std::queue<TAMidiMessage> midiQueue;
|
||||||
MIDIMap midiMap;
|
MIDIMap midiMap;
|
||||||
|
int learning;
|
||||||
|
|
||||||
ImFont* mainFont;
|
ImFont* mainFont;
|
||||||
ImFont* iconFont;
|
ImFont* iconFont;
|
||||||
|
|
|
@ -506,12 +506,18 @@ void FurnaceGUI::drawSettings() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
ImGui::Button(ICON_FA_SQUARE_O "##BLearn");
|
if (ImGui::Button((learning==(int)i)?(ICON_FA_SQUARE "##BLearn"):(ICON_FA_SQUARE_O "##BLearn"))) {
|
||||||
// TODO!
|
if (learning==(int)i) {
|
||||||
|
learning=-1;
|
||||||
|
} else {
|
||||||
|
learning=i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
if (ImGui::Button(ICON_FA_TIMES "##BRemove")) {
|
if (ImGui::Button(ICON_FA_TIMES "##BRemove")) {
|
||||||
midiMap.binds.erase(midiMap.binds.begin()+i);
|
midiMap.binds.erase(midiMap.binds.begin()+i);
|
||||||
|
if (learning==(int)i) learning=-1;
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue