mirror of
https://codeberg.org/armin/rmx-19.git
synced 2026-10-11 16:51:55 +02:00
add generative evolution, cross-mod and reverb FX; expand preset bank
- 4 new params (xmod/xmix/evolve/warp) with free-running brownian evolution - evolution: tune drift, osc2 detune sway, osc-mix crossfade, filter cutoff wander, resonance growl, warp drive/bias, cross-mod bloom - per-voice unison detune spread for fat stacks - FX engine: 3-tap ensemble chorus, filtered-feedback ping-pong delay, Schroeder hall reverb; new FX types 4-7 (REV HALL/ENS+REV/DLY+REV/CATHEDRAL) - 195 presets: 40-field realignment, genre-tuned FX identities, showcase eval - calibrate banks vs attack-inclusive peak (median 0.263); fix square-LFO on filter sustain collapse
This commit is contained in:
parent
bc417e1cc1
commit
35d6cd014a
8 changed files with 2016 additions and 601 deletions
|
|
@ -14,6 +14,7 @@ struct VParams
|
|||
float vol = 0.85f, pan = 0.0f, poly = 10.f, glide = 0.f, tune = 0.f;
|
||||
float hq = 0.0f;
|
||||
float arpOn = 0, arpRate = 2, arpPattern = 0, arpOct = 1, arpGate = 70;
|
||||
float xmod = 0, xmix = 0, evolve = 0, warp = 0;
|
||||
|
||||
void update (const juce::AudioProcessorValueTreeState& apvts)
|
||||
{
|
||||
|
|
@ -38,6 +39,10 @@ struct VParams
|
|||
arpPattern = get ("arppattern");
|
||||
arpOct = get ("arpoct");
|
||||
arpGate = get ("arpgate");
|
||||
xmod = get ("xmod");
|
||||
xmix = get ("xmix");
|
||||
evolve = get ("evolve");
|
||||
warp = get ("warp");
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -131,12 +136,15 @@ private:
|
|||
float panL = 0.71f, panR = 0.71f;
|
||||
float curFreq = 0.0f, targetFreq = 0.0f;
|
||||
double ph1 = 0.0, ph2 = 0.0, lfoPh = 0.0;
|
||||
double ph1r = 0.0, ph2r = 0.0; // unwrapped phase for animated waves (FM/PWM/SUPRSW)
|
||||
float lfoSH = 0.0f;
|
||||
int lfoIdx = 0;
|
||||
Env amp, flt;
|
||||
float lp = 0.0f, bp = 0.0f, f1c = 0.0f;
|
||||
float fcSm = 0.0f;
|
||||
float outSmooth = 0.0f;
|
||||
float drift = 0.0f, driftT = 0.0f; // slow random-unstable tuning wander
|
||||
float dtSp = 0.0f; // unison detune spread (per voice, cents)
|
||||
};
|
||||
|
||||
static constexpr int maxVoice = 16;
|
||||
|
|
@ -150,7 +158,12 @@ private:
|
|||
int stealIdx = 0;
|
||||
juce::Random rng;
|
||||
juce::Array<int> sustainedNotes;
|
||||
double evoGoalT = 0.0; // samples until the next evolution excursion
|
||||
float evoCur = 0.0f; // brownian wander in [-1, 1] (texture-scale)
|
||||
float evoGoal = 0.0f; // excursion target, re-picked every 7-18 s
|
||||
float evoSlow = 0.0f; // much slower wander (soundscape-scale, 1-3 min)
|
||||
float curDetune1 = 0.0f; // cached for noteOn (unison spread sizing)
|
||||
|
||||
float osc (int wave, double ph);
|
||||
float osc (int wave, double ph, double phRaw);
|
||||
Voice* acquireVoice();
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue