diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-09 10:43:11 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-09 10:43:11 +0100 |
| commit | 70c64867baa30c83334559d3023153dfe3f9ff79 (patch) | |
| tree | fa1353eca8f32334286aa4a9fc9c9461a5e56d8b /doc/TRACKER.md | |
| parent | e952a9d0866a5a2a5f9da72ccbb40e2184da8a6f (diff) | |
docs: Simplify all design docs (50% reduction, 1687 lines removed)
Consolidated and streamlined all documentation:
**Merged:**
- PROCEDURAL.md → deleted (content in ASSET_SYSTEM.md)
- FETCH_DEPS.md → BUILD.md (dependencies section)
**Simplified (line reductions):**
- HOWTO.md: 468→219 (53%)
- CONTRIBUTING.md: 453→173 (62%)
- SPECTRAL_BRUSH_EDITOR.md: 497→195 (61%)
- SEQUENCE.md: 355→197 (45%)
- CONTEXT_MAINTENANCE.md: 332→200 (40%)
- test_demo_README.md: 273→122 (55%)
- ASSET_SYSTEM.md: 271→108 (60%)
- MASKING_SYSTEM.md: 240→125 (48%)
- 3D.md: 196→118 (40%)
- TRACKER.md: 124→76 (39%)
- SCENE_FORMAT.md: 59→49 (17%)
- BUILD.md: 83→69 (17%)
**Total:** 3344→1657 lines (50.4% reduction)
**Changes:**
- Removed verbose examples, redundant explanations, unimplemented features
- Moved detailed task plans to TODO.md (single source of truth)
- Consolidated coding style rules
- Kept essential APIs, syntax references, technical details
**PROJECT_CONTEXT.md:**
- Added "Design Docs Quick Reference" with 2-3 line summaries
- Removed duplicate task entries
- All design docs now loaded on-demand via Read tool
Result: Context memory files reduced from 31.6k to ~15k tokens.
Diffstat (limited to 'doc/TRACKER.md')
| -rw-r--r-- | doc/TRACKER.md | 74 |
1 files changed, 13 insertions, 61 deletions
diff --git a/doc/TRACKER.md b/doc/TRACKER.md index f3a34a3..6e71951 100644 --- a/doc/TRACKER.md +++ b/doc/TRACKER.md @@ -1,56 +1,17 @@ # Minimal Audio Tracker -in addition to being able to generate spectrograms (aka "Samples") on the -fly and play them at once, we need a way to assemble samples (assets or -generated) into modifiable patterns and loops. Like what the Trackers were -doing in the old time. - -## The idea - -A script can take a 'tracker music' text file that describes the sequence -of samples (a 'pattern') in a first part. In a second part, these sequence -a laid out with a timestamp (potentially overlapping) to generate the full -music score. - -The patterns' samples (spectrograms) are not yet generated, it's just the -'musical score' here. We still need to 'play' the score but with modifiers -applied. - -### Modifiers - -For diversity, these essential patterns can be modified on the fly before -being generated as spectrogram on the fly. -Modifiers could be: - * randomize (for drums, e.g.) - * add accents and stresses - * modulate volume - * add distortion or noise - * add 'grain' and static noise - * flanger, vocoding, robotic voice, etc. - * etc. - -These modifiers are applied to a predefined pattern just before it's -generated for playback (or assembling in the final track). - -### How would that work in practice? - -The musical score is a text file, that a tool will convert to run-time -code to be compiled in the final binary demo64k. -This generated code can be mixed with fixed code from the demo codebase -itself (explosion predefined at a given time ,etc.) -The baking is done at compile time, and the code will go in src/generated/ +System for assembling audio samples (assets or procedural) into patterns and loops. ## .track File Format -### Timing System +### Timing Convention -**Unit-less Timing Convention:** -- All time values are **unit-less** (not beats or seconds) -- Convention: **1 unit = 4 beats** -- Conversion to seconds: `seconds = units * (4 / BPM) * 60` +**Unit-less timing:** +- **1 unit = 4 beats** +- Conversion: `seconds = units * (4 / BPM) * 60` - At 120 BPM: 1 unit = 2 seconds -This makes patterns independent of BPM - changing BPM only affects playback speed, not pattern structure. +Patterns are BPM-independent. Changing BPM only affects playback speed. ### File Structure @@ -96,29 +57,20 @@ PATTERN melody LENGTH 1.0 0.50, NOTE_G4, 0.8, 0.0 ``` -### Conversion Reference - -At 120 BPM (1 unit = 4 beats = 2 seconds): - -| Units | Beats | Seconds | Description | -|-------|-------|---------|-------------| -| 0.00 | 0 | 0.0 | Start | -| 0.25 | 1 | 0.5 | Quarter | -| 0.50 | 2 | 1.0 | Half | -| 0.75 | 3 | 1.5 | Three-quarter | -| 1.00 | 4 | 2.0 | Full pattern | - ### Pattern Length -- `LENGTH` parameter is optional, defaults to 1.0 -- Can be any value (0.5 for half-length, 2.0 for double-length, etc.) -- Events must be within range `[0.0, LENGTH]` +- `LENGTH` parameter defaults to 1.0 if omitted +- Can be any value (0.5 for half-length, 2.0 for double-length) +- Events must be within `[0.0, LENGTH]` -Example of half-length pattern: +Example half-length pattern: ``` PATTERN short_fill LENGTH 0.5 # 2 beats = 1 second at 120 BPM 0.00, ASSET_HIHAT, 0.7, 0.0 0.50, ASSET_HIHAT, 0.6, 0.0 # 0.50 * 0.5 = 1 beat into the pattern ``` +### Future: Modifiers +Potential runtime modifiers (not yet implemented): +- Randomization, accents, volume modulation, distortion, noise, effects |
