mirror of
https://codeberg.org/armin/rmx-19.git
synced 2026-10-11 16:51:55 +02:00
66 lines
No EOL
2.4 KiB
C++
66 lines
No EOL
2.4 KiB
C++
#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() + 1.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; }
|
|
int getPatchIndex() const noexcept { return patchIndex; }
|
|
void selectPatch (int i);
|
|
int getActiveVoices() const noexcept { return engine.activeVoices(); }
|
|
juce::uint32 getLastMidiTime() const noexcept { return lastMidi; }
|
|
float getCpu() const noexcept { return cpu; }
|
|
|
|
private:
|
|
void processMidi (juce::MidiBuffer&, const VParams&);
|
|
void smoothGain (juce::AudioBuffer<float>& buffer, float targetVol);
|
|
|
|
juce::AudioProcessorValueTreeState::ParameterLayout createParams();
|
|
|
|
class FxEngine;
|
|
std::unique_ptr<FxEngine> fx;
|
|
|
|
PresetBank bank;
|
|
SynthEngine engine;
|
|
int patchIndex = 0;
|
|
int lastPatchParam = 0;
|
|
juce::uint32 lastMidi = 0;
|
|
float cpu = 0.0f;
|
|
float dcL = 0.0f, dcR = 0.0f, dcPrevL = 0.0f, dcPrevR = 0.0f;
|
|
float volSmooth = 1.0f;
|
|
juce::AudioBuffer<float> osBuf; // internal 2x oversample target (HQ mode)
|
|
|
|
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (RMX19AudioProcessor)
|
|
}; |