refactor(params): structure parameter IDs into typed groups
Introduce paramIds namespace with Oscillator struct and constexpr arrays for envelope, LFO, FX, and macro parameter IDs. Replace the scattered local const char* arrays in Engine and PluginEditor with references to these shared definitions. Return ModSource::Count from modSourceFromString for unknown strings instead of silently mapping to Lfo1. Simplify isPerVoiceSource and isPerVoiceTarget to range-based expressions.
This commit is contained in:
+1
-1
@@ -50,7 +50,7 @@ ModSource modSourceFromString (const juce::String& s)
|
|||||||
for (int i = 0; i < kNumModSources; ++i)
|
for (int i = 0; i < kNumModSources; ++i)
|
||||||
if (s == modSourceToString ((ModSource) i))
|
if (s == modSourceToString ((ModSource) i))
|
||||||
return (ModSource) i;
|
return (ModSource) i;
|
||||||
return ModSource::Lfo1;
|
return ModSource::Count;
|
||||||
}
|
}
|
||||||
|
|
||||||
juce::String modTargetName (ModTarget t)
|
juce::String modTargetName (ModTarget t)
|
||||||
|
|||||||
+46
-20
@@ -226,6 +226,50 @@ inline constexpr int kNumFxSlots = 8;
|
|||||||
inline constexpr int kMaxUnison = 16;
|
inline constexpr int kMaxUnison = 16;
|
||||||
inline constexpr int kNumVoices = 32;
|
inline constexpr int kNumVoices = 32;
|
||||||
|
|
||||||
|
namespace paramIds
|
||||||
|
{
|
||||||
|
struct Oscillator
|
||||||
|
{
|
||||||
|
const char *on, *wave, *wtPos, *warp, *warpAmt, *coarse, *fine, *level;
|
||||||
|
const char *pan, *unison, *detune, *spread, *phase, *randPhase;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline constexpr Oscillator oscillators[kNumOscillators] = {
|
||||||
|
{ ids::oscAOn, ids::oscAWave, ids::oscAWtPos, ids::oscAWarp, ids::oscAWarpAmt,
|
||||||
|
ids::oscACoarse, ids::oscAFine, ids::oscALevel, ids::oscAPan, ids::oscAUnison,
|
||||||
|
ids::oscADetune, ids::oscASpread, ids::oscAPhase, ids::oscARandPh },
|
||||||
|
{ ids::oscBOn, ids::oscBWave, ids::oscBWtPos, ids::oscBWarp, ids::oscBWarpAmt,
|
||||||
|
ids::oscBCoarse, ids::oscBFine, ids::oscBLevel, ids::oscBPan, ids::oscBUnison,
|
||||||
|
ids::oscBDetune, ids::oscBSpread, ids::oscBPhase, ids::oscBRandPh }
|
||||||
|
};
|
||||||
|
|
||||||
|
inline constexpr const char* envAttack[] = { ids::env1A, ids::env2A, ids::env3A, ids::env4A };
|
||||||
|
inline constexpr const char* envDecay[] = { ids::env1D, ids::env2D, ids::env3D, ids::env4D };
|
||||||
|
inline constexpr const char* envSustain[] = { ids::env1S, ids::env2S, ids::env3S, ids::env4S };
|
||||||
|
inline constexpr const char* envRelease[] = { ids::env1R, ids::env2R, ids::env3R, ids::env4R };
|
||||||
|
inline constexpr const char* envCurve[] = { ids::env1Curve, ids::env2Curve, ids::env3Curve, ids::env4Curve };
|
||||||
|
inline constexpr const char* lfoRate[] = { ids::lfo1Rate, ids::lfo2Rate, ids::lfo3Rate, ids::lfo4Rate };
|
||||||
|
inline constexpr const char* lfoSync[] = { ids::lfo1Sync, ids::lfo2Sync, ids::lfo3Sync, ids::lfo4Sync };
|
||||||
|
inline constexpr const char* lfoBeat[] = { ids::lfo1Beat, ids::lfo2Beat, ids::lfo3Beat, ids::lfo4Beat };
|
||||||
|
inline constexpr const char* lfoShape[] = { ids::lfo1Shape, ids::lfo2Shape, ids::lfo3Shape, ids::lfo4Shape };
|
||||||
|
inline constexpr const char* lfoPhase[] = { ids::lfo1Phase, ids::lfo2Phase, ids::lfo3Phase, ids::lfo4Phase };
|
||||||
|
inline constexpr const char* lfoFade[] = { ids::lfo1Fade, ids::lfo2Fade, ids::lfo3Fade, ids::lfo4Fade };
|
||||||
|
inline constexpr const char* lfoDelay[] = { ids::lfo1Delay, ids::lfo2Delay, ids::lfo3Delay, ids::lfo4Delay };
|
||||||
|
inline constexpr const char* fxType[] = { ids::fx1Type, ids::fx2Type, ids::fx3Type, ids::fx4Type,
|
||||||
|
ids::fx5Type, ids::fx6Type, ids::fx7Type, ids::fx8Type };
|
||||||
|
inline constexpr const char* fxMix[] = { ids::fx1Mix, ids::fx2Mix, ids::fx3Mix, ids::fx4Mix,
|
||||||
|
ids::fx5Mix, ids::fx6Mix, ids::fx7Mix, ids::fx8Mix };
|
||||||
|
inline constexpr const char* fxP1[] = { ids::fx1P1, ids::fx2P1, ids::fx3P1, ids::fx4P1,
|
||||||
|
ids::fx5P1, ids::fx6P1, ids::fx7P1, ids::fx8P1 };
|
||||||
|
inline constexpr const char* fxP2[] = { ids::fx1P2, ids::fx2P2, ids::fx3P2, ids::fx4P2,
|
||||||
|
ids::fx5P2, ids::fx6P2, ids::fx7P2, ids::fx8P2 };
|
||||||
|
inline constexpr const char* fxP3[] = { ids::fx1P3, ids::fx2P3, ids::fx3P3, ids::fx4P3,
|
||||||
|
ids::fx5P3, ids::fx6P3, ids::fx7P3, ids::fx8P3 };
|
||||||
|
inline constexpr const char* fxP4[] = { ids::fx1P4, ids::fx2P4, ids::fx3P4, ids::fx4P4,
|
||||||
|
ids::fx5P4, ids::fx6P4, ids::fx7P4, ids::fx8P4 };
|
||||||
|
inline constexpr const char* macros[] = { ids::macro1, ids::macro2, ids::macro3, ids::macro4 };
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// Modulation sources / destinations
|
// Modulation sources / destinations
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -261,14 +305,7 @@ inline constexpr int kNumModSources = (int) ModSource::Count;
|
|||||||
// Is a given source per-voice (i.e. needs a value for each voice)?
|
// Is a given source per-voice (i.e. needs a value for each voice)?
|
||||||
inline bool isPerVoiceSource (ModSource s)
|
inline bool isPerVoiceSource (ModSource s)
|
||||||
{
|
{
|
||||||
switch (s)
|
return (s >= ModSource::Env1 && s <= ModSource::Note) || s == ModSource::Random;
|
||||||
{
|
|
||||||
case ModSource::Env1: case ModSource::Env2:
|
|
||||||
case ModSource::Env3: case ModSource::Env4:
|
|
||||||
case ModSource::Velocity: case ModSource::Note:
|
|
||||||
case ModSource::Random: return true;
|
|
||||||
default: return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Does a source already span -1..1 (bipolar range)?
|
// Does a source already span -1..1 (bipolar range)?
|
||||||
@@ -280,18 +317,7 @@ inline bool isBipolarSource (ModSource s)
|
|||||||
// Is a given target a per-voice parameter?
|
// Is a given target a per-voice parameter?
|
||||||
inline bool isPerVoiceTarget (ModTarget t)
|
inline bool isPerVoiceTarget (ModTarget t)
|
||||||
{
|
{
|
||||||
switch (t)
|
return t != ModTarget::Master && ! (t >= ModTarget::Fx1Mix && t <= ModTarget::Fx8Mix);
|
||||||
{
|
|
||||||
case ModTarget::Master:
|
|
||||||
case ModTarget::FilterMix: case ModTarget::FilterOut:
|
|
||||||
case ModTarget::Fx1Mix: case ModTarget::Fx2Mix:
|
|
||||||
case ModTarget::Fx3Mix: case ModTarget::Fx4Mix:
|
|
||||||
case ModTarget::Fx5Mix: case ModTarget::Fx6Mix:
|
|
||||||
case ModTarget::Fx7Mix: case ModTarget::Fx8Mix:
|
|
||||||
return false;
|
|
||||||
default:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
juce::String modSourceName (ModSource s);
|
juce::String modSourceName (ModSource s);
|
||||||
|
|||||||
Reference in New Issue
Block a user