Round 1 findings and fixes, all previously uncommitted: - FXProcessor per-slot DSP history repair (HEAD does not compile without it) - SynthVoice::getModulationValue, editor control-lock guard - ExactCompare.h naming the deliberate exact float comparisons - KnobLookAndFeel replacing the never-installed SerumLookAndFeel - 55 first-party compiler warnings to 0 - AGENT.md renamed to AGENTS.md across Source/ - graft repository context graph and its hooks - JANITOR_TASKS.md and UI_UX_AUDIT.md records
1.7 KiB
1.7 KiB
params module
Related source files
This directory contains guidance; the implementation remains in ../Params.h
and ../Params.cpp.
Rules
- Use the
ids::namespace for every APVTS parameter ID string. - Require one
ids::entry per audio parameter, and one entry only. - Reach indexed parameters through the
paramIds::arrays in../Params.h, which pair each ID with its slot:paramIds::oscillators,paramIds::envAttack,paramIds::lfoRate,paramIds::fxType,paramIds::macrosand their siblings. Use a singleids::entry only when the parameter has no index. - Use
enum classfor every enum. Give each a trailingCountenumerator. - Use
inline constexprfor parameter ID strings andk-prefixed integer constants. - Keep all 0..1 to physical unit conversions in the
maps::namespace. - Keep the wavetable name table (
kWavetableNames) in sync withkNumWavetables. - Return an empty
juce::Stringfrom enum-to-string switches for unknown values. - Never re-declare a parameter ID string literal outside Params.h.
- Never add a physical unit mapping anywhere but
maps::.
IF-THEN
- IF you add an audio parameter THEN add its ID to
ids::and, when it has physical units, add its mapping tomaps::before any engine or GUI code reads it. - IF a switch converts an enum to a string THEN include a default case that returns an empty string.
Examples
// BAD: re-declares the ID and drifts from Params.h
if (auto* p = apvts.getParameter ("f1Cutoff"))
return p->getValue();
// GOOD: one source of truth
if (auto* p = apvts.getParameter (ids::f1Cutoff))
return p->getValue();
This file overrides /AGENTS.md where they conflict.