This commit is contained in:
chriskiefer 2026-04-13 17:07:31 +01:00
parent d095688cd9
commit 972d3e7961
3 changed files with 45 additions and 1 deletions

View file

@ -32,6 +32,26 @@ public:
static constexpr float frequencies[nFREQs] = {100, 200, 400,800, 400, 800, 100,1600,100,400,100,50,1600,200,100,800,400}; static constexpr float frequencies[nFREQs] = {100, 200, 400,800, 400, 800, 100,1600,100,400,100,50,1600,200,100,800,400};
static constexpr size_t nVoiceSpaces=7; static constexpr size_t nVoiceSpaces=7;
// Focus group bitmasks
static constexpr uint32_t kFocusSeq = (1u << 0);
static constexpr uint32_t kFocusSyn = (1u << 1);
// Per-param group membership: params 0-13 = sequencer, 14-63 = synthesis
static constexpr std::array<uint32_t, NPARAMS> kParamGroupMask = {
// 0-13: sequencer (14 entries)
kFocusSeq, kFocusSeq, kFocusSeq, kFocusSeq, kFocusSeq, kFocusSeq, kFocusSeq,
kFocusSeq, kFocusSeq, kFocusSeq, kFocusSeq, kFocusSeq, kFocusSeq, kFocusSeq,
// 14-63: synthesis (50 entries)
kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn,
kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn,
kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn,
kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn,
kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn,
kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn,
kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn, kFocusSyn,
kFocusSyn,
};
std::array<VoiceSpace<NPARAMS>, nVoiceSpaces> voiceSpaces; std::array<VoiceSpace<NPARAMS>, nVoiceSpaces> voiceSpaces;
VoiceSpaceFn<NPARAMS> currentVoiceSpace; VoiceSpaceFn<NPARAMS> currentVoiceSpace;

View file

@ -2,9 +2,11 @@
#include "../src/memllib/interface/MIDIInOut.hpp" #include "../src/memllib/interface/MIDIInOut.hpp"
#include "../src/memllib/hardware/memlnaut/display/XYPadView.hpp" #include "../src/memllib/hardware/memlnaut/display/XYPadView.hpp"
#include "../src/memllib/hardware/memlnaut/display/BlockSelectView.hpp"
#include "../src/memllib/hardware/memlnaut/MEMLNaut.hpp" #include "../src/memllib/hardware/memlnaut/MEMLNaut.hpp"
#include "AudioApps/MEMLCeliumAudioApp.hpp" #include "AudioApps/MEMLCeliumAudioApp.hpp"
#include "../src/memllib/examples/InterfaceRL.hpp" #include "../src/memllib/examples/InterfaceRL.hpp"
#include "../src/memllib/audio/FocusManager.hpp"
#include "../src/memllib/PicoDefs.hpp" #include "../src/memllib/PicoDefs.hpp"
#include "MEMLNautMode.hpp" #include "MEMLNautMode.hpp"
#include <memory> #include <memory>
@ -22,6 +24,8 @@ public:
bool sequencerPlaying = false; bool sequencerPlaying = false;
FocusManager<MEMLCeliumAudioApp<>::kN_Params, 2> focusManager;
void setupInterface() { void setupInterface() {
interface.setup(kN_InputParams, MEMLCeliumAudioApp<>::kN_Params); interface.setup(kN_InputParams, MEMLCeliumAudioApp<>::kN_Params);
@ -29,6 +33,13 @@ public:
interface.setModeInfo("memlcelium", "MEMLCelium"); interface.setModeInfo("memlcelium", "MEMLCelium");
interfacePtr = make_non_owning(interface); interfacePtr = make_non_owning(interface);
focusManager.setGroupName(0, "Seq");
focusManager.setGroupName(1, "Synth");
focusManager.setParamGroups(MEMLCeliumAudioApp<>::kParamGroupMask);
interface.paramTransformHook = [this](std::vector<float>& p) {
focusManager.applyInPlace(p);
};
MEMLNaut::Instance()->setTogA2Callback([this](bool state) { // scr_ref no longer captured directly MEMLNaut::Instance()->setTogA2Callback([this](bool state) { // scr_ref no longer captured directly
Serial.println(state ? "TogA2 ON" : "TogA2 OFF"); Serial.println(state ? "TogA2 ON" : "TogA2 OFF");
if (state) { if (state) {
@ -76,6 +87,19 @@ public:
} }
void addViews() { void addViews() {
// Focus screen — select which parameter groups are live
auto focusView = std::make_shared<BlockSelectView>(
"Focus", TFT_CYAN, 2, 120, 70, TFT_BLACK,
std::vector<String>{"Seq", "Synth"}, TFT_DARKGREY, 2);
focusView->SetOnSelectCallback([this, focusView](size_t id) {
size_t groupIdx = id - 1;
uint32_t newMask = focusManager.getSelectedMask() ^ (1u << groupIdx);
focusManager.setFocus(newMask, interface.getLastAction());
focusView->toggleAlt(groupIdx);
});
MEMLNaut::Instance()->disp->InsertViewAfter(interface.rlStatsView, focusView);
std::shared_ptr<VoiceSpaceSelectView> voiceSpaceSelectView; std::shared_ptr<VoiceSpaceSelectView> voiceSpaceSelectView;
voiceSpaceSelectView = std::make_shared<VoiceSpaceSelectView>("Voice Spaces"); voiceSpaceSelectView = std::make_shared<VoiceSpaceSelectView>("Voice Spaces");

@ -1 +1 @@
Subproject commit 6bf7d2c362541047f02fdbf2f6dc359873bcd51f Subproject commit 188496d4621cec7008d83404b80578597b67414b