# samples/ Two different things live here, and the distinction matters: **`Cheetah_SpecDrum/`** — the SOURCE. WAV files, committed, the thing a fresh clone needs to rebuild identical firmware. **`smpNN.raw`** — build products. 8-bit signed mono 48kHz, generated by `tools/importbank.py`, git-ignored. `tools/mksamples.py` bakes them into `samples.h` at build time, which is also generated and also ignored. ## Rebuilding the bank ```sh python tools/importbank.py samples/Cheetah_SpecDrum/ cmake --build build ``` `importbank.py` resamples to 48kHz, trims silence, matches loudness across the whole bank, and dithers on the way down to 8 bits. See its docstring, and `importwav.py` for why each of those steps is the way it is. ## A bank, not a per-voice list Entry `NN` is not "voice NN's sound" — it is entry NN of a library. Which voice plays which entry is a separate mapping, `kVoiceSample` in `../samples_default.h`. That indirection is deliberate: the WebUI will eventually let any entry be assigned to any of the twelve slots, and two voices can share one recording without a second copy in flash. So changing which sample a drum plays means editing `kVoiceSample`, not re-importing audio. ## What is currently baked Five of the Cheetah SpecDrum's `orig_*` kit: | Bank | Sample | Voice slot | |---|---|---| | 0 | `orig_1_kick` | 0 kick | | 1 | `orig_2_snare` | 2 snare | | 2 | `orig_6_hihat_c` | 4 closed hat | | 3 | `orig_7_hihat_o` | 6 open hat | | 4 | `orig_8_clap` | 11 clap | 31KB, about 1.5% of flash. The other seven voices stay synthesised — a mix, not a wholesale swap, which is the point of the card. ## Source Cheetah SpecDrum sample ROMs (1986), from the ZX Spectrum drum machine of the same name. Downloaded from ****, which archives the original ROM sets. The `afro_`, `electro_`, `latin_` and `orig_` groups are its four factory kits. Only five of `orig_` are baked in today; the other 27 files are here to be swapped in by editing `kVoiceSample` — no re-import needed, since the bank is indices rather than audio.