#pragma once #include namespace prm { enum class Id : int { osc1Wave, osc2Wave, detune, oscMix, fltType, fltCutoff, fltRes, fltEnv, fltKey, ampA, ampD, ampS, ampR, fenvA, fenvD, fenvS, fenvR, lfoRate, lfoShape, lfoDepth, lfoTarget, fxType, fxAmt, fxTime, vol, pan, poly, glide, tune, hq }; constexpr int num = 30; struct Desc { const char* id; const char* name; const char* shortName; float min, max, def; bool discrete; float fine, coarse; }; const Desc& desc (Id id); bool validId (int i); juce::AudioProcessorValueTreeState::ParameterLayout createLayout(); juce::String formatParam (Id id, float v); float changeParam (Id id, float cur, int dir, bool coarse); const char* waveName (int w); const char* fltTypeName (int t); const char* lfoShapeName (int s); const char* lfoTargetName (int t); const char* fxTypeName (int t); constexpr int delaySyncCount = 11; const char* delaySyncName (int s); // "OFF", "1/16", ... double delaySyncBeats (int s); // beat multiple for sync delay float delaySyncMaxTime(); // max delay seconds needed for slow sync } // namespace prm