memlnaut-nisps/modes/MEMLNautModeVerbFX.hpp
2026-03-18 16:29:54 +00:00

85 lines
2.6 KiB
C++

#pragma once
#include "../src/memllib/interface/MIDIInOut.hpp"
#include "./AudioApps/VerbFXAudioApp.hpp"
#include "MEMLNautMode.hpp"
#include <memory>
#include <array>
#include "../XiasriAnalysis.hpp"
#include "../src/memllib/utils/sharedMem.hpp"
#include "../src/memllib/audio/AudioDriver.hpp"
#include "../src/memllib/examples/InterfaceRL.hpp"
#include "../src/memllib/PicoDefs.hpp"
class MEMLNautModeVerbFX {
public:
constexpr static size_t kN_InputParams = MEMLNAUT_ANALOG_INPUTS;
InterfaceRL interface;
std::shared_ptr<InterfaceRL> interfacePtr;
// XiasriAnalysis mlAnalysis{kSampleRate};
// SharedBuffer<float, XiasriAnalysis::kN_Params> machine_list_buffer;
VerbFXAudioApp<> audioAppVerbFX;
std::shared_ptr<MIDIInOut> midi_interf;
void setupInterface() {
interface.setup(kN_InputParams, VerbFXAudioApp<>::kN_Params);
interface.bindInterface(MEMLNAUT_INPUT_MODE, JOYSTICK_IS_4D);
interfacePtr = make_non_owning(interface);
}
String getHelpTitle() {
return "VerbFX Mode";
}
__force_inline stereosample_t process(stereosample_t x) {
return audioAppVerbFX.Process(x);
}
void setupMIDI(std::shared_ptr<MIDIInOut> new_midi_interf) {
midi_interf = new_midi_interf;
midi_interf->Setup(0);
midi_interf->SetMIDISendChannel(1);
interface.bindMIDI(midi_interf, true);
}
void addViews() {
};
void setupAudio(float sample_rate) {
audioAppVerbFX.Setup(sample_rate, interfacePtr);
// Reinitialize XiasriAnalysis filters after maxiSettings is properly configured
// mlAnalysis.ReinitFilters();
}
__force_inline void loop() {
audioAppVerbFX.loop();
}
__force_inline void analyse(stereosample_t x) {
// union {
// XiasriAnalysis::parameters_t p;
// float v[XiasriAnalysis::kN_Params];
// } param_u;
// param_u.p = mlAnalysis.Process(x.L + x.R);
// // Write params into shared_buffer
// machine_list_buffer.writeNonBlocking(param_u.v, XiasriAnalysis::kN_Params);
}
__force_inline void processAnalysisParams() {
// // Read SharedBuffer
// std::vector<float> mlist_params(XiasriAnalysis::kN_Params, 0);
// machine_list_buffer.readNonBlocking(mlist_params);
// // Send parameters to RL interface
// interface.readAnalysisParameters(mlist_params);
// PERIODIC_RUN(
// Serial.printf("%f %f %f\n", mlist_params[0], mlist_params[1], mlist_params[2]);
// , 100);
}
void loopCore0() {}
};