rmx-19/Source/PluginProcessor.h

69 lines
2.5 KiB
C
Raw Normal View History

#pragma once
#include <juce_audio_processors/juce_audio_processors.h>
#include "Params.h"
#include "PresetBank.h"
#include "SynthEngine.h"
#include <juce_dsp/juce_dsp.h>
class RMX19AudioProcessor : public juce::AudioProcessor
{
public:
RMX19AudioProcessor();
~RMX19AudioProcessor() override;
void prepareToPlay (double sampleRate, int samplesPerBlock) override;
void releaseResources() override;
void processBlock (juce::AudioBuffer<float>&, juce::MidiBuffer&) override;
juce::AudioProcessorEditor* createEditor() override;
bool hasEditor() const override;
const juce::String getName() const override;
bool acceptsMidi() const override { return true; }
bool producesMidi() const override { return false; }
double getTailLengthSeconds() const override { return prm::delaySyncMaxTime() + 2.0; }
int getNumPrograms() override;
int getCurrentProgram() override;
void setCurrentProgram (int) override;
const juce::String getProgramName (int) override;
void changeProgramName (int, const juce::String&) override;
void getStateInformation (juce::MemoryBlock&) override;
void setStateInformation (const void*, int) override;
juce::AudioProcessorValueTreeState apvts;
PresetBank& getBank() { return bank; }
SynthEngine& getEngine() { return engine; }
2026-09-08 21:57:34 +02:00
int getPatchIndex() const noexcept { return patchIndex; }
void selectPatch (int i);
int getActiveVoices() const noexcept { return engine.activeVoices(); }
juce::uint32 getLastMidiTime() const noexcept { return lastMidi; }
2026-09-08 21:57:34 +02:00
float getOutputLevel() const noexcept { return outMeter; }
float getCpu() const noexcept { return cpu; }
private:
void processMidi (juce::MidiBuffer&, const VParams&);
juce::AudioProcessorValueTreeState::ParameterLayout createParams();
class FxEngine;
std::unique_ptr<FxEngine> fx;
2026-09-08 21:57:34 +02:00
class ArpEngine;
std::unique_ptr<ArpEngine> arp;
PresetBank bank;
SynthEngine engine;
int patchIndex = 0;
int lastPatchParam = 0;
juce::uint32 lastMidi = 0;
float cpu = 0.0f;
2026-09-08 21:57:34 +02:00
float outMeter = 0.0f; // smoothed output peak, written on the audio thread
float dcL = 0.0f, dcR = 0.0f, dcPrevL = 0.0f, dcPrevR = 0.0f;
juce::AudioBuffer<float> osBuf; // internal 2x oversample target (HQ mode)
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (RMX19AudioProcessor)
};