Split kit and keys; KEYS GEN with MOTIF, 303, TURING, ARP
Some checks failed
check / check (push) Has been cancelled
Some checks failed
check / check (push) Has been cancelled
- genome(seed, salts) now has three parts with their own RNG streams: shared (steps, form, swing, arc, layback, fill odds, phase offset), kit (density, frame, accent cycle, free snare) and keys (scale/root, progression, motif, hocket, bass tone, note lengths, range). ROLL KEYS now renews the harmony too; ROLL KIT leaves the keys alone. - Keys generators share one signature and can fix note lengths: MOTIF (the old line), 303 (acid bass, answers in the rests, drone or silent pad), TURING (8/16-bit shift register, DRIFT flips bits, 16-bar window), ARP (triad/7th arpeggio, roots on kicks). - Pages: KIT GEN, KEYS GEN; ROLL shows KIT / KEYS; slots keep both gens. - Flash record v3 (old settings ignored). Bring-up golden checksums updated. - C port matches; host test and ASan/UBSan pass. Intended music change: every seed sounds different (genome split, new generators). Vectors regenerated with npm run vectors; the case grid now crosses all kit and keys generators, with TURING runs past its window. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -21,9 +21,9 @@ static const char *const SW_NAME[3] = { "SEED", "RUN", "PUSH" };
|
||||
/* engine self-test: golden cases from test/vectors (8 bars each) */
|
||||
typedef struct { uint32_t seed; int gen, energy, drift; uint32_t checksum; } golden_t;
|
||||
static const golden_t GOLDEN[3] = {
|
||||
{ 0x5EEDB0C5, 0, 64, 32, 0x4F5DE957 }, /* 5EEDB0C5_s0-0_g0_e64_d32 */
|
||||
{ 0x5EEDB0C5, 3, 127, 0, 0x29C313A5 }, /* 5EEDB0C5_s0-0_g3_e127_d0, dense */
|
||||
{ 0x5EEDB0C5, 4, 64, 32, 0x8C01C1F9 }, /* 5EEDB0C5_s0-0_g4_e64_d32, AMENIZER */
|
||||
{ 0x5EEDB0C5, 0, 64, 32, 0xC055F3A7 }, /* 5EEDB0C5_s0-0_g0_k0_e64_d32 */
|
||||
{ 0x5EEDB0C5, 3, 127,127, 0x1CF02038 }, /* 5EEDB0C5_s0-0_g3_k0_e127_d127, dense */
|
||||
{ 0x5EEDB0C5, 4, 64, 32, 0x487CBA24 }, /* 5EEDB0C5_s0-0_g4_k0_e64_d32, AMENIZER */
|
||||
};
|
||||
static int engine_ok;
|
||||
static uint32_t engine_worst_us;
|
||||
@@ -35,7 +35,7 @@ static void engine_selftest(void){
|
||||
engine_ok = 1; engine_worst_us = 0;
|
||||
for(c = 0; c < 3; c++){
|
||||
sb_state st = { GOLDEN[c].seed, {0, 0} };
|
||||
sb_params p = { GOLDEN[c].gen, GOLDEN[c].energy, GOLDEN[c].drift, 0, -1, -1 };
|
||||
sb_params p = { GOLDEN[c].gen, SB_KEYS_MOTIF, GOLDEN[c].energy, GOLDEN[c].drift, 0, -1, -1 };
|
||||
uint32_t h = SB_FNV_INIT;
|
||||
for(b = 0; b < 8; b++){
|
||||
uint64_t t0 = time_us_64();
|
||||
|
||||
Reference in New Issue
Block a user