| name | audio-sequencer |
| description | Architecture standards, file layout, Step models, pattern generators, clip chains, and project JSON persistence guidelines for audio/sequencer library components. |
Audio Sequencer Guidelines
Use these rules and guidelines when creating, refactoring, or integrating sequence, pattern generation, clip chain, or project persistence components.
1. Directory & File Layout
All reusable sequencer components belong in audio/sequencer/:
audio/sequencer/
├── Step.h # Step data model & SEQ_STEPS override guard
├── Clip.h # Clip & ParamValue data structures
├── Generator.h # Algorithmic pattern generators (Kick, Bass, Drum, Perc, Snare, Hat, Clap)
├── SequenceUtils.h # Sequence manipulation (stretch, compress, clear)
├── ClipChain.h # Clip chain helper utilities (add, remove, clear, toggle)
└── ProjectIO.h # JSON project & clip persistence (saveClip, loadClip, saveProject, loadProject)
2. Step Data Model (Step.h)
3. Clip Data Model (Clip.h)
4. Algorithmic Pattern Generators (Generator.h)
- All pattern generators live in
namespace Generator.
- Provide both 4-parameter overloads (
p1, p2, p3) for UI parameter knobs and 1-parameter default overloads (sequence) for exact function pointer type matching:
namespace Generator {
inline float rand01();
inline int randInt(int min, int max);
inline void clearSequence(std::vector<Step>& sequence);
inline void generateKick(std::vector<Step>& sequence, float p1, float p2, float p3);
inline void generateKick(std::vector<Step>& sequence);
inline void generateBass(std::vector<Step>& sequence, float p1, float p2, float p3);
inline void generateBass(std::vector<Step>& sequence);
inline void generateDrum;
;
}
5. Sequence Manipulation (SequenceUtils.h)
Use inline helper functions for track sequence transformations:
stretchSequence(sequence, genLen, isSynth, setLen): Expands step spacing by 2x.
compressSequence(sequence, genLen, isSynth, setLen): Compresses step spacing by 2x.
clearSequence(sequence): Resets step activity across SEQ_STEPS.
6. Clip Chain Management (ClipChain.h)
Manipulate clip chain vectors using shared utility functions:
addClipToChain(chain, clipIdx): Appends clip index to track chain.
removeClipFromChain(chain, index): Erases item at index from track chain.
clearChain(chain): Erases all items from track chain.
toggleChainPlaying(chainPlaying, chainActiveIdx): Toggles chain playback mode.
7. Project & Clip JSON Persistence (ProjectIO.h)
- Uses
nlohmann/json.hpp for project file I/O.
- Utilizes C++17 SFINAE member-detection type traits (
has_noteRepeat, has_chain) to support any application Track or Studio structure without tight coupling:
saveClip(trk, clipIdx);
loadClip(trk, clipIdx);
loadProjectFromJSON(studio, path);
saveProjectToJSON(studio, path);
getCurrentLoadedProject(projectFolder);
setCurrentLoadedProject(filename, projectFolder);
8. Integration Checklist
When adding sequencer features to a new or existing application: