Files
seedbox/test/vectors/primitives.json
Gee 346c820b10
Some checks failed
check / check (push) Has been cancelled
Split kit and keys; KEYS GEN with MOTIF, 303, TURING, ARP
- 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>
2026-10-11 21:50:41 +03:00

617 lines
7.3 KiB
JSON

{
"note": "mix(a,b) hash, xorshift32 Rng (next, below(n), chance(p)) and genome(seed, salts). genome keys are the JS field names.",
"mix": [
{
"a": "0x00000000",
"b": 0,
"out": "0x6D2B79F5"
},
{
"a": "0x00000001",
"b": 0,
"out": "0x514E28B7"
},
{
"a": "0x00000000",
"b": 1,
"out": "0x11FD02EB"
},
{
"a": "0x5EEDB0C5",
"b": 4606284,
"out": "0x5E77CB5F"
},
{
"a": "0xFFFFFFFF",
"b": -1,
"out": "0xB19FEA7C"
},
{
"a": "0xDEADBEEF",
"b": -1,
"out": "0x95CB1F45"
},
{
"a": "0x00003039",
"b": 20060,
"out": "0x34949A58"
}
],
"rng": [
{
"seed": "0x00000000",
"next": [
"0x40AEC71F",
"0x91E00C19",
"0x9C0FE128",
"0x6570F69D",
"0x0FCE02CC",
"0x3D6B45E7",
"0xEF266E8C",
"0x7C080117",
"0xF9713F42",
"0x0DBB11CE",
"0x9FDE27EF",
"0x3F5EA5BE",
"0x96CB190A",
"0x48AE5C1F",
"0xE6924CA9",
"0x4FE05E6A"
],
"below_1_to_16": [
0,
1,
1,
1,
0,
1,
6,
3,
8,
0,
6,
2,
7,
3,
13,
4
],
"chance_i_times_4096": [
0,
0,
0,
0,
1,
1,
0,
0,
0,
1,
1,
1,
1,
1,
0,
1
]
},
{
"seed": "0x00000001",
"next": [
"0x00042021",
"0x04080601",
"0x9DCCA8C5",
"0x1255994F",
"0x8EF917D1",
"0x2C6F5BD0",
"0x25B2331A",
"0x19F91CB2",
"0x77877125",
"0xADD02374",
"0x9E6002CB",
"0x591C9737",
"0xB4B84B8A",
"0x04E3F8AE",
"0x0536AFF5",
"0xC9C495B1"
],
"below_1_to_16": [
0,
0,
1,
0,
2,
1,
1,
0,
4,
6,
6,
4,
9,
0,
0,
12
],
"chance_i_times_4096": [
0,
1,
0,
1,
0,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
1
]
},
{
"seed": "0x5EEDB0C5",
"next": [
"0xF659F35F",
"0xCE7C9F86",
"0xEC025940",
"0x426B5075",
"0x24D96CA7",
"0x20FC8821",
"0x8EE6EB7D",
"0x22A53599",
"0x06DCA5D2",
"0xDEB330C1",
"0xADC2DE14",
"0x36048794",
"0x783CC90F",
"0xC2B669A1",
"0xFFCB8260",
"0x7F7F71C3"
],
"below_1_to_16": [
0,
1,
2,
1,
0,
0,
3,
1,
0,
8,
7,
2,
6,
10,
14,
7
],
"chance_i_times_4096": [
0,
0,
0,
0,
1,
1,
0,
1,
1,
0,
0,
1,
1,
1,
0,
1
]
},
{
"seed": "0xDEADBEEF",
"next": [
"0x477D20B7",
"0x8E1D9142",
"0xBA8C2458",
"0xFEE0503B",
"0x680E0348",
"0xA48DB81B",
"0x6254EA5C",
"0x1CFDAFB3",
"0x8878FDF6",
"0x6F08B4B5",
"0x4A5B273A",
"0xF9327CE4",
"0x637A51D3",
"0x01448B13",
"0x94F2C300",
"0x5EC60C69"
],
"below_1_to_16": [
0,
1,
2,
3,
2,
3,
2,
0,
4,
4,
3,
11,
5,
0,
8,
5
],
"chance_i_times_4096": [
0,
0,
0,
0,
0,
0,
0,
1,
0,
1,
1,
0,
1,
1,
1,
1
]
}
],
"genomes": [
{
"seed": "0x5EEDB0C5",
"salts": [
0,
0
],
"genome": {
"steps": 14,
"form": [
0,
1,
0,
1
],
"formName": "ABAB",
"fillP": 110,
"rot": 1,
"swing": 35,
"arc": 0,
"layback": 0,
"dens": [
59,
77
],
"accentCycle": 3,
"frame": 7,
"freeK": 4,
"freeRot": 3,
"scale": 0,
"root": 5,
"monoLen": 0,
"monoRange": 1,
"hocket": 180,
"bassDeg": 2,
"prog": [
0,
6,
5,
4
],
"motifLen": 5
}
},
{
"seed": "0x00000001",
"salts": [
0,
0
],
"genome": {
"steps": 16,
"form": [
0,
0,
1,
0
],
"formName": "AABA",
"fillP": 102,
"rot": 0,
"swing": 35,
"arc": 2,
"layback": 1,
"dens": [
53,
68
],
"accentCycle": 7,
"frame": 3,
"freeK": 2,
"freeRot": 15,
"scale": 19,
"root": 0,
"monoLen": 2,
"monoRange": 1,
"hocket": 90,
"bassDeg": 2,
"prog": [
0,
2,
5,
4
],
"motifLen": 3
}
},
{
"seed": "0xDEADBEEF",
"salts": [
0,
0
],
"genome": {
"steps": 12,
"form": [
0,
0,
0,
0
],
"formName": "AAAA",
"fillP": 80,
"rot": 0,
"swing": 50,
"arc": 1,
"layback": 0,
"dens": [
78,
78
],
"accentCycle": 5,
"frame": 0,
"freeK": 3,
"freeRot": 14,
"scale": 5,
"root": 1,
"monoLen": 0,
"monoRange": 2,
"hocket": 170,
"bassDeg": 4,
"prog": [
0,
3,
5,
6
],
"motifLen": 5
}
},
{
"seed": "0x00009AAB",
"salts": [
0,
0
],
"genome": {
"steps": 20,
"form": [
0,
1,
0,
1
],
"formName": "ABAB",
"fillP": 60,
"rot": 1,
"swing": 0,
"arc": 0,
"layback": 1,
"dens": [
66,
42
],
"accentCycle": 7,
"frame": 6,
"freeK": 2,
"freeRot": 12,
"scale": 5,
"root": 3,
"monoLen": 0,
"monoRange": 2,
"hocket": 165,
"bassDeg": 2,
"prog": [
0,
6,
5,
4
],
"motifLen": 3
}
},
{
"seed": "0x5EEDB0C5",
"salts": [
3,
0
],
"genome": {
"steps": 14,
"form": [
0,
1,
0,
1
],
"formName": "ABAB",
"fillP": 110,
"rot": 1,
"swing": 35,
"arc": 0,
"layback": 0,
"dens": [
89,
77
],
"accentCycle": 0,
"frame": 1,
"freeK": 3,
"freeRot": 12,
"scale": 0,
"root": 5,
"monoLen": 0,
"monoRange": 1,
"hocket": 180,
"bassDeg": 2,
"prog": [
0,
6,
5,
4
],
"motifLen": 5
}
},
{
"seed": "0x5EEDB0C5",
"salts": [
0,
5
],
"genome": {
"steps": 14,
"form": [
0,
1,
0,
1
],
"formName": "ABAB",
"fillP": 110,
"rot": 1,
"swing": 35,
"arc": 0,
"layback": 0,
"dens": [
59,
33
],
"accentCycle": 3,
"frame": 7,
"freeK": 4,
"freeRot": 3,
"scale": 12,
"root": 11,
"monoLen": 2,
"monoRange": 1,
"hocket": 170,
"bassDeg": 3,
"prog": [
0,
4,
5,
3
],
"motifLen": 5
}
},
{
"seed": "0x12345678",
"salts": [
0,
0
],
"genome": {
"steps": 16,
"form": [
0,
1,
0,
1
],
"formName": "ABAB",
"fillP": 43,
"rot": 1,
"swing": 0,
"arc": 2,
"layback": 1,
"dens": [
49,
72
],
"accentCycle": 5,
"frame": 4,
"freeK": 2,
"freeRot": 5,
"scale": 10,
"root": 2,
"monoLen": 1,
"monoRange": 2,
"hocket": 165,
"bassDeg": 2,
"prog": [
0,
6,
5,
4
],
"motifLen": 5
}
},
{
"seed": "0xC0FFEE00",
"salts": [
0,
0
],
"genome": {
"steps": 16,
"form": [
0,
0,
1,
0
],
"formName": "AABA",
"fillP": 115,
"rot": 0,
"swing": 0,
"arc": 1,
"layback": 0,
"dens": [
49,
47
],
"accentCycle": 3,
"frame": 3,
"freeK": 4,
"freeRot": 9,
"scale": 12,
"root": 3,
"monoLen": 0,
"monoRange": 1,
"hocket": 180,
"bassDeg": 4,
"prog": [
0,
6,
5,
4
],
"motifLen": 5
}
}
]
}