From 91bddb8df6dbcb9489322fd8768938c84c30ae44 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 25 Jan 2024 15:29:37 -0500 Subject: [PATCH] add MIDI debug issue #1701 --- src/engine/engine.cpp | 4 ++++ src/engine/engine.h | 5 +++++ src/engine/playback.cpp | 7 +++++++ src/gui/debugWindow.cpp | 7 +++++++ 4 files changed, 23 insertions(+) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 971559719..0151828d0 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -3412,6 +3412,10 @@ void DivEngine::setMidiCallback(std::function what) { midiCallback=what; } +void DivEngine::setMidiDebug(bool enable) { + midiDebug=enable; +} + bool DivEngine::sendMidiMessage(TAMidiMessage& msg) { if (output==NULL) { logW("output is NULL!"); diff --git a/src/engine/engine.h b/src/engine/engine.h index 340e74c2e..c1d60bbea 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -497,6 +497,7 @@ class DivEngine { short effectSlotMap[4096]; int midiBaseChan; bool midiPoly; + bool midiDebug; size_t midiAgeCounter; blip_buffer_t* samp_bb; @@ -1208,6 +1209,9 @@ class DivEngine { // send MIDI message bool sendMidiMessage(TAMidiMessage& msg); + // enable MIDI debug + void setMidiDebug(bool enable); + // perform secure/sync operation void synchronized(const std::function& what); @@ -1329,6 +1333,7 @@ class DivEngine { cmdStreamInt(NULL), midiBaseChan(0), midiPoly(true), + midiDebug(false), midiAgeCounter(0), samp_bb(NULL), samp_bbInLen(0), diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index be8bc6de4..091924fa2 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -1841,6 +1841,13 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi // process MIDI events (TODO: everything) if (output) if (output->midiIn) while (!output->midiIn->queue.empty()) { TAMidiMessage& msg=output->midiIn->queue.front(); + if (midiDebug) { + if (msg.type==TA_MIDI_SYSEX) { + logD("MIDI debug: %.2X SysEx",msg.type); + } else { + logD("MIDI debug: %.2X %.2X %.2X",msg.type,msg.data[0],msg.data[1]); + } + } int ins=-1; if ((ins=midiCallback(msg))!=-2) { int chan=msg.type&15; diff --git a/src/gui/debugWindow.cpp b/src/gui/debugWindow.cpp index ce56f470b..2d4a64e70 100644 --- a/src/gui/debugWindow.cpp +++ b/src/gui/debugWindow.cpp @@ -432,6 +432,13 @@ void FurnaceGUI::drawDebug() { ImGui::TreePop(); } + if (ImGui::TreeNode("MIDI Debug")) { + if (ImGui::Button("Enable Debug (go to log viewer")) { + e->setMidiDebug(true); + nextWindow=GUI_WINDOW_LOG; + } + ImGui::TreePop(); + } if (ImGui::TreeNode("Visualizer Debug")) { if (ImGui::BeginTable("visX",3,ImGuiTableFlags_Borders)) { ImGui::TableNextRow(ImGuiTableRowFlags_Headers);