mirror of
https://codeberg.org/armin/rmx-19.git
synced 2026-10-11 16:51:55 +02:00
disable generative evolution globally; tame resonance, cross-mod and reverb drive
Zero EVOLVE/WARP on all 195 presets to remove the wind-howl sweep (filter cutoff, resonance, warp bias, detune sway no longer wander). Gate cross-mod bloom by EVOLVE so it stays static when off. Also settle voice-screen params, oscillator/filter levels and fx saturation.
This commit is contained in:
parent
21aac2d355
commit
bf70af0191
3 changed files with 222 additions and 224 deletions
|
|
@ -42,14 +42,14 @@ float SynthEngine::osc (int wave, double ph, double phRaw)
|
|||
sp -= std::floor (sp);
|
||||
s += 1.0 - 2.0 * sp;
|
||||
}
|
||||
return (float) (s * 0.40);
|
||||
return (float) (s * 0.28);
|
||||
}
|
||||
// 8 DBLSAW: saw plus a sub-octave saw (big, weighted low end)
|
||||
case 8:
|
||||
{
|
||||
double sub = ph * 0.5;
|
||||
sub -= std::floor (sub);
|
||||
return (float) (0.62 * (1.0 - 2.0 * ph) + 0.48 * (1.0 - 2.0 * sub));
|
||||
return (float) (0.56 * (1.0 - 2.0 * ph) + 0.44 * (1.0 - 2.0 * sub));
|
||||
}
|
||||
// 9 WARP: saw pushed twice through a wavefolder -> bright, buzzy, raw
|
||||
case 9:
|
||||
|
|
@ -70,10 +70,10 @@ float SynthEngine::osc (int wave, double ph, double phRaw)
|
|||
case 11:
|
||||
{
|
||||
const double a = ph * 2.0 * juce::MathConstants<double>::pi;
|
||||
return (float) (0.85 * std::sin (a)
|
||||
+ 0.55 * std::sin (2.0 * a)
|
||||
+ 0.35 * std::sin (4.0 * a)
|
||||
+ 0.18 * std::sin (8.0 * a));
|
||||
return (float) (0.44 * std::sin (a)
|
||||
+ 0.28 * std::sin (2.0 * a)
|
||||
+ 0.18 * std::sin (4.0 * a)
|
||||
+ 0.09 * std::sin (8.0 * a));
|
||||
}
|
||||
// 12 SEQ: 8 pseudo-random levels per cycle -> digital, step-sequencer
|
||||
case 12:
|
||||
|
|
@ -87,9 +87,9 @@ float SynthEngine::osc (int wave, double ph, double phRaw)
|
|||
case 13:
|
||||
{
|
||||
const double a = ph * 2.0 * juce::MathConstants<double>::pi;
|
||||
return (float) (0.62 * std::sin (a)
|
||||
+ 0.42 * std::sin (a * (6.0 / 5.0))
|
||||
+ 0.38 * std::sin (a * 1.5));
|
||||
return (float) (0.44 * std::sin (a)
|
||||
+ 0.30 * std::sin (a * (6.0 / 5.0))
|
||||
+ 0.27 * std::sin (a * 1.5));
|
||||
}
|
||||
// 14 SUPRPL: 3 stacked phase-offset pulse waves -> fat chorus-box square
|
||||
case 14:
|
||||
|
|
@ -309,11 +309,12 @@ void SynthEngine::render (const VParams& p, float* left, float* right, int num)
|
|||
v.ph1 += d1; if (v.ph1 >= 1.0) v.ph1 -= 1.0;
|
||||
v.ph1r += d1;
|
||||
|
||||
// cross-mod "bloom": the amount itself breathes with the evolution walk,
|
||||
// cross-mod "bloom": the amount breathes with the evolution walk
|
||||
// (scaled by EVOLVE, so at evolve=0 it sits static at its middle value),
|
||||
// sometimes vanishing almost entirely, sometimes saturating
|
||||
float xmA = 0.0f;
|
||||
if ((int) p.xmod > 0 && p.xmix > 0.001f)
|
||||
xmA = p.xmix * (0.10f + 0.90f * (0.5f + 0.5f * evoCur));
|
||||
xmA = p.xmix * (0.55f + 0.45f * evoCur * p.evolve);
|
||||
|
||||
// oscillators, with osc1 phase-modulating osc2 when in FM cross-mod
|
||||
const float o1 = osc ((int) p.osc1w, v.ph1, v.ph1r);
|
||||
|
|
@ -334,8 +335,8 @@ void SynthEngine::render (const VParams& p, float* left, float* right, int num)
|
|||
if (xmA > 0.0f)
|
||||
{
|
||||
const int xm = (int) p.xmod;
|
||||
if (xm == 1) sig += o1 * o2 * 0.6f * xmA;
|
||||
else if (xm == 3) sig += o1 * o2 * 0.9f * xmA;
|
||||
if (xm == 1) sig += o1 * o2 * 0.35f * xmA;
|
||||
else if (xm == 3) sig += o1 * o2 * 0.55f * xmA;
|
||||
}
|
||||
|
||||
// spectral warp: drive + bias swing hard with the texture wander,
|
||||
|
|
@ -374,16 +375,15 @@ void SynthEngine::render (const VParams& p, float* left, float* right, int num)
|
|||
v.bp += f1 * hp;
|
||||
v.lp += f1 * v.bp;
|
||||
|
||||
// The Chamberlin band-pass and high-pass taps carry much less energy
|
||||
// than the low-pass tap for the harmonically rich osc waves (2-4x
|
||||
// quieter in practice), so compensate to keep filter types at a
|
||||
// comparable loudness level.
|
||||
// The Chamberlin band-pass and high-pass taps carry less energy
|
||||
// than the low-pass tap for harmonically rich osc waves, so
|
||||
// compensate to keep filter types at a comparable loudness level.
|
||||
float filtered = sig;
|
||||
switch ((int) p.fltType)
|
||||
{
|
||||
case 1: filtered = v.lp; break;
|
||||
case 2: filtered = v.bp * 2.9f; break;
|
||||
case 3: filtered = hp * 2.7f; break;
|
||||
case 2: filtered = v.bp * 1.5f; break;
|
||||
case 3: filtered = hp * 1.4f; break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue