Seedbox v0.1 + firmware, generic kit/synth, ROOT/SCALE pages
Some checks failed
check / check (push) Has been cancelled

First commit of the repo. Contents beyond the v0.1 simulator and layout:

- Full Pico 2 W firmware (firmware/app, drivers, engine port, host test).
- BANK page and 404 mode A/B removed; learned pads play exactly what was learned.
- 404/MiniFreak renamed to KIT/SYNTH throughout (jacks, code, sim, docs,
  layout labels; wiring rebuilt).
- ROLL returns to page select after a re-roll; a freshly learned track turns on.
- LCD contrast 66.
- ROOT and SCALE pages: 21 scales, AUTO = the seed picks; global and sticky.

Intended music change: the scale table grew from 8 to 21 and AUTO picks from
all of them, so every seed's scale changed. Vectors regenerated with
npm run vectors, plus new key-override cases. Flash record is now version 2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-11 20:39:36 +03:00
commit 2196633ed5
77 changed files with 52207 additions and 0 deletions

22
test/cases.js Normal file
View File

@@ -0,0 +1,22 @@
/* The golden-vector case list. Shared by gen-vectors.js and check-vectors.js. */
var SEEDS=[0x5EEDB0C5,0x00000001,0xDEADBEEF,0x12345678,0xC0FFEE00,0x0BADF00D];
var SETS=[[64,32],[0,0],[127,0],[127,127],[100,90],[40,64]]; // [energy, drift]
var BARS=8;
function cases(){
var out=[];
SEEDS.forEach(function(seed){ for(var gen=0;gen<5;gen++) SETS.forEach(function(ed){
out.push({seed:seed,salts:[0,0],gen:gen,energy:ed[0],drift:ed[1],fillBars:[],scale:-1,root:-1});
}); });
// salts (re-rolling one half of the seed) and FILL
[0,2,4].forEach(function(gen){
out.push({seed:0x5EEDB0C5,salts:[3,0],gen:gen,energy:64,drift:32,fillBars:[],scale:-1,root:-1});
out.push({seed:0x5EEDB0C5,salts:[0,5],gen:gen,energy:64,drift:32,fillBars:[],scale:-1,root:-1});
out.push({seed:0x5EEDB0C5,salts:[0,0],gen:gen,energy:80,drift:50,fillBars:[3,7],scale:-1,root:-1});
});
// ROOT / SCALE pages: [seed, gen, scale, root]; -1 = AUTO. Covers 5-, 6-, 7- and 8-note scales and each override alone.
[[0x5EEDB0C5,0,14,2],[0x5EEDB0C5,2,19,9],[0x5EEDB0C5,4,0,7],[0xDEADBEEF,1,18,-1],[0x12345678,3,-1,5],[0xC0FFEE00,0,7,11],[0x00000001,1,20,0]].forEach(function(k){
out.push({seed:k[0],salts:[0,0],gen:k[1],energy:64,drift:32,fillBars:[3],scale:k[2],root:k[3]});
});
return out;
}
module.exports={cases:cases,BARS:BARS};

21
test/check-vectors.js Normal file
View File

@@ -0,0 +1,21 @@
/* Re-renders every golden case with sim/engine.js and compares with test/vectors.
Exit code 0 = engine unchanged. Use the same files to test the C port. */
var fs=require('fs'), path=require('path');
var E=require('../sim/engine.js'), R=require('./render.js');
var dir=path.join(__dirname,'vectors'), fail=0, n=0;
var prim=JSON.parse(fs.readFileSync(path.join(dir,'primitives.json'),'utf8'));
prim.mix.forEach(function(v){ n++; if(R.hex(E.mix(parseInt(v.a,16)>>>0,v.b))!==v.out){ fail++; console.log('mix',v.a,v.b,'differs'); } });
prim.rng.forEach(function(v){ n++; var r=new E.Rng(parseInt(v.seed,16)>>>0); for(var i=0;i<16;i++) if(R.hex(r.next())!==v.next[i]){ fail++; console.log('rng',v.seed,'step',i,'differs'); break; } });
prim.genomes.forEach(function(v){ n++; if(JSON.stringify(E.genome(parseInt(v.seed,16)>>>0))!==JSON.stringify(v.genome)){ fail++; console.log('genome',v.seed,'differs'); } });
fs.readdirSync(dir).filter(function(f){ return /^gen\d/.test(f); }).sort().forEach(function(f){
JSON.parse(fs.readFileSync(path.join(dir,f),'utf8')).cases.forEach(function(c){
n++;
var got=R.renderCase({seed:parseInt(c.seed,16)>>>0,salts:c.salts,gen:c.gen,energy:c.energy,drift:c.drift,fillBars:c.fillBars,scale:c.scale,root:c.root},c.bars.length);
if(got.checksum===c.checksum) return;
fail++;
for(var b=0;b<c.bars.length;b++){ var a=JSON.stringify(c.bars[b].events), g=JSON.stringify(got.bars[b].events);
if(a!==g){ console.log('FAIL',c.id,'first difference in bar',b); break; } }
});
});
console.log(fail? fail+' of '+n+' checks FAILED' : 'all '+n+' checks pass');
process.exit(fail?1:0);

34
test/gen-vectors.js Normal file
View File

@@ -0,0 +1,34 @@
/* Regenerates test/vectors/*.json from sim/engine.js.
Only run this when you MEAN to change the music. Otherwise run check-vectors.js. */
var fs=require('fs'), path=require('path');
var E=require('../sim/engine.js'), C=require('./cases.js'), R=require('./render.js');
var dir=path.join(__dirname,'vectors');
var FORMAT='events: [tick, lane, voice, vel, len, track]. lane 0 = kit (voice 0 kick, 1 snare, 2 hat, 3 perc), lane 1 = synth (voice = MIDI pitch). scale/root: -1 = AUTO (the seed picks). Every track is listed; on/off is applied at output. Ticks: 840 per quarter, 210 per 16th.';
// 1. primitives: hash, RNG, genome. Port these first.
var mixV=[], pairs=[[0,0],[1,0],[0,1],[0x5EEDB0C5,0x46494C],[0xFFFFFFFF,0xFFFFFFFF],[0xDEADBEEF,-1],[12345,0x4E55+7]];
pairs.forEach(function(p){ mixV.push({a:R.hex(p[0]>>>0),b:p[1]|0,out:R.hex(E.mix(p[0]>>>0,p[1]))}); });
var rngV=[]; [0,1,0x5EEDB0C5,0xDEADBEEF].forEach(function(s){ var r=new E.Rng(s), seq=[], below=[], ch=[];
for(var i=0;i<16;i++) seq.push(R.hex(r.next()));
r=new E.Rng(s); for(i=0;i<16;i++) below.push(r.below(i+1));
r=new E.Rng(s); for(i=0;i<16;i++) ch.push(r.chance(i*4096)?1:0);
rngV.push({seed:R.hex(s>>>0),next:seq,below_1_to_16:below,chance_i_times_4096:ch}); });
var genV=C.cases().filter(function(c,i,a){ return a.findIndex(function(d){ return d.seed===c.seed; })===i; })
.map(function(c){ return {seed:R.hex(c.seed),genome:E.genome(c.seed>>>0)}; });
fs.writeFileSync(path.join(dir,'primitives.json'),JSON.stringify({note:'mix(a,b) hash, xorshift32 Rng (next, below(n), chance(p)) and genome(seed). genome keys are the JS field names.',mix:mixV,rng:rngV,genomes:genV},null,1)+'\n');
// 2. full renders, one file per generator
var byGen={}, index=[];
C.cases().forEach(function(c){
var out=R.renderCase(c,C.BARS), id=R.caseId(c);
(byGen[c.gen]=byGen[c.gen]||[]).push({id:id,seed:R.hex(c.seed),salts:c.salts,gen:c.gen,energy:c.energy,drift:c.drift,fillBars:c.fillBars,scale:c.scale,root:c.root,checksum:out.checksum,bars:out.bars.map(function(b){
return {bar:b.bar,sec:b.sec,fill:b.fill,barTicks:b.barTicks,events:b.events}; })});
index.push({id:id,checksum:out.checksum});
});
Object.keys(byGen).forEach(function(g){
var s=JSON.stringify({generator:E.GEN_NAMES[g],format:FORMAT,cases:byGen[g]});
s=s.replace(/\],\[/g,'],\n['); // one event per line keeps git diffs readable
fs.writeFileSync(path.join(dir,'gen'+g+'-'+E.GEN_NAMES[g].toLowerCase()+'.json'),s+'\n');
});
fs.writeFileSync(path.join(dir,'index.json'),JSON.stringify({bars:C.BARS,cases:index},null,1)+'\n');
console.log('wrote',index.length,'cases');

14
test/render.js Normal file
View File

@@ -0,0 +1,14 @@
/* Renders one case to rows [tick,lane,voice,vel,len,track] per bar, plus a whole-case checksum. */
var E=require('../sim/engine.js');
function hex(n){ return '0x'+('00000000'+(n>>>0).toString(16).toUpperCase()).slice(-8); }
function renderCase(c,bars){
var st={seed:c.seed>>>0,salts:c.salts.slice()}, all=[], out=[];
for(var b=0;b<bars;b++){
var r=E.renderBar(st,{gen:c.gen,energy:c.energy,drift:c.drift,fill:c.fillBars.indexOf(b)>=0,scale:c.scale,root:c.root},b);
var ev=r.events.map(function(e){ return [e.t,e.lane,e.v,e.vel,e.len,e.tr]; });
out.push({bar:b,sec:r.sec,fill:!!r.fill,barTicks:r.barTicks,events:ev}); all=all.concat(ev);
}
return {bars:out,checksum:hex(E.checksum(all))};
}
function caseId(c){ return hex(c.seed).slice(2)+'_s'+c.salts.join('-')+'_g'+c.gen+'_e'+c.energy+'_d'+c.drift+(c.fillBars.length?'_f'+c.fillBars.join('-'):'')+(c.scale>=0?'_sc'+c.scale:'')+(c.root>=0?'_r'+c.root:''); }
module.exports={renderCase:renderCase,caseId:caseId,hex:hex};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

789
test/vectors/index.json Normal file
View File

@@ -0,0 +1,789 @@
{
"bars": 8,
"cases": [
{
"id": "5EEDB0C5_s0-0_g0_e64_d32",
"checksum": "0x4F5DE957"
},
{
"id": "5EEDB0C5_s0-0_g0_e0_d0",
"checksum": "0x21423F8D"
},
{
"id": "5EEDB0C5_s0-0_g0_e127_d0",
"checksum": "0x047B79A5"
},
{
"id": "5EEDB0C5_s0-0_g0_e127_d127",
"checksum": "0x706D45DF"
},
{
"id": "5EEDB0C5_s0-0_g0_e100_d90",
"checksum": "0x514A841A"
},
{
"id": "5EEDB0C5_s0-0_g0_e40_d64",
"checksum": "0xD7D4FEF1"
},
{
"id": "5EEDB0C5_s0-0_g1_e64_d32",
"checksum": "0x4175DD2C"
},
{
"id": "5EEDB0C5_s0-0_g1_e0_d0",
"checksum": "0xC8BE2789"
},
{
"id": "5EEDB0C5_s0-0_g1_e127_d0",
"checksum": "0xFBB77BE9"
},
{
"id": "5EEDB0C5_s0-0_g1_e127_d127",
"checksum": "0xEFC24FAA"
},
{
"id": "5EEDB0C5_s0-0_g1_e100_d90",
"checksum": "0x4410BA5C"
},
{
"id": "5EEDB0C5_s0-0_g1_e40_d64",
"checksum": "0xA6DCEC5A"
},
{
"id": "5EEDB0C5_s0-0_g2_e64_d32",
"checksum": "0x03978773"
},
{
"id": "5EEDB0C5_s0-0_g2_e0_d0",
"checksum": "0x2381EB35"
},
{
"id": "5EEDB0C5_s0-0_g2_e127_d0",
"checksum": "0x2F3A4EB9"
},
{
"id": "5EEDB0C5_s0-0_g2_e127_d127",
"checksum": "0xA21D7C70"
},
{
"id": "5EEDB0C5_s0-0_g2_e100_d90",
"checksum": "0x56AEEC48"
},
{
"id": "5EEDB0C5_s0-0_g2_e40_d64",
"checksum": "0xB8F4407B"
},
{
"id": "5EEDB0C5_s0-0_g3_e64_d32",
"checksum": "0x55C2ED60"
},
{
"id": "5EEDB0C5_s0-0_g3_e0_d0",
"checksum": "0xD5FD1E2D"
},
{
"id": "5EEDB0C5_s0-0_g3_e127_d0",
"checksum": "0x29C313A5"
},
{
"id": "5EEDB0C5_s0-0_g3_e127_d127",
"checksum": "0x31BFD6A0"
},
{
"id": "5EEDB0C5_s0-0_g3_e100_d90",
"checksum": "0x626428CC"
},
{
"id": "5EEDB0C5_s0-0_g3_e40_d64",
"checksum": "0xF53B86E4"
},
{
"id": "5EEDB0C5_s0-0_g4_e64_d32",
"checksum": "0x8C01C1F9"
},
{
"id": "5EEDB0C5_s0-0_g4_e0_d0",
"checksum": "0x49195CD6"
},
{
"id": "5EEDB0C5_s0-0_g4_e127_d0",
"checksum": "0x2B77305E"
},
{
"id": "5EEDB0C5_s0-0_g4_e127_d127",
"checksum": "0xBCE32A21"
},
{
"id": "5EEDB0C5_s0-0_g4_e100_d90",
"checksum": "0x049DE447"
},
{
"id": "5EEDB0C5_s0-0_g4_e40_d64",
"checksum": "0x19D81B14"
},
{
"id": "00000001_s0-0_g0_e64_d32",
"checksum": "0x1B668BA7"
},
{
"id": "00000001_s0-0_g0_e0_d0",
"checksum": "0xB317F8A3"
},
{
"id": "00000001_s0-0_g0_e127_d0",
"checksum": "0xB8A7A475"
},
{
"id": "00000001_s0-0_g0_e127_d127",
"checksum": "0xFD32AF12"
},
{
"id": "00000001_s0-0_g0_e100_d90",
"checksum": "0x2A4AF905"
},
{
"id": "00000001_s0-0_g0_e40_d64",
"checksum": "0x261DB9CA"
},
{
"id": "00000001_s0-0_g1_e64_d32",
"checksum": "0x963CE4D1"
},
{
"id": "00000001_s0-0_g1_e0_d0",
"checksum": "0xADEFE751"
},
{
"id": "00000001_s0-0_g1_e127_d0",
"checksum": "0xE7CAE585"
},
{
"id": "00000001_s0-0_g1_e127_d127",
"checksum": "0x2C0DC228"
},
{
"id": "00000001_s0-0_g1_e100_d90",
"checksum": "0xA7173DAC"
},
{
"id": "00000001_s0-0_g1_e40_d64",
"checksum": "0x3135C017"
},
{
"id": "00000001_s0-0_g2_e64_d32",
"checksum": "0xFD1D01E5"
},
{
"id": "00000001_s0-0_g2_e0_d0",
"checksum": "0xE9837637"
},
{
"id": "00000001_s0-0_g2_e127_d0",
"checksum": "0x9D751F13"
},
{
"id": "00000001_s0-0_g2_e127_d127",
"checksum": "0x2DCF4824"
},
{
"id": "00000001_s0-0_g2_e100_d90",
"checksum": "0xF0ED3D0F"
},
{
"id": "00000001_s0-0_g2_e40_d64",
"checksum": "0x370EE4B9"
},
{
"id": "00000001_s0-0_g3_e64_d32",
"checksum": "0x403E0B96"
},
{
"id": "00000001_s0-0_g3_e0_d0",
"checksum": "0x24DCABC8"
},
{
"id": "00000001_s0-0_g3_e127_d0",
"checksum": "0x2800F8EA"
},
{
"id": "00000001_s0-0_g3_e127_d127",
"checksum": "0xC62FB65A"
},
{
"id": "00000001_s0-0_g3_e100_d90",
"checksum": "0xFED1503D"
},
{
"id": "00000001_s0-0_g3_e40_d64",
"checksum": "0x43796A8B"
},
{
"id": "00000001_s0-0_g4_e64_d32",
"checksum": "0x9AAECD27"
},
{
"id": "00000001_s0-0_g4_e0_d0",
"checksum": "0xF5408301"
},
{
"id": "00000001_s0-0_g4_e127_d0",
"checksum": "0x0438ABF1"
},
{
"id": "00000001_s0-0_g4_e127_d127",
"checksum": "0x54D1C6C0"
},
{
"id": "00000001_s0-0_g4_e100_d90",
"checksum": "0xC73622DC"
},
{
"id": "00000001_s0-0_g4_e40_d64",
"checksum": "0x29952EAD"
},
{
"id": "DEADBEEF_s0-0_g0_e64_d32",
"checksum": "0x797AF814"
},
{
"id": "DEADBEEF_s0-0_g0_e0_d0",
"checksum": "0xC2D63031"
},
{
"id": "DEADBEEF_s0-0_g0_e127_d0",
"checksum": "0xEC6B6DC5"
},
{
"id": "DEADBEEF_s0-0_g0_e127_d127",
"checksum": "0x3D0EE1E3"
},
{
"id": "DEADBEEF_s0-0_g0_e100_d90",
"checksum": "0xB515BF46"
},
{
"id": "DEADBEEF_s0-0_g0_e40_d64",
"checksum": "0x9C91B1FE"
},
{
"id": "DEADBEEF_s0-0_g1_e64_d32",
"checksum": "0x756DCDCF"
},
{
"id": "DEADBEEF_s0-0_g1_e0_d0",
"checksum": "0xB507F6C5"
},
{
"id": "DEADBEEF_s0-0_g1_e127_d0",
"checksum": "0x88872B09"
},
{
"id": "DEADBEEF_s0-0_g1_e127_d127",
"checksum": "0x8B392FD7"
},
{
"id": "DEADBEEF_s0-0_g1_e100_d90",
"checksum": "0x027972EC"
},
{
"id": "DEADBEEF_s0-0_g1_e40_d64",
"checksum": "0x145A52B4"
},
{
"id": "DEADBEEF_s0-0_g2_e64_d32",
"checksum": "0x8C44AE71"
},
{
"id": "DEADBEEF_s0-0_g2_e0_d0",
"checksum": "0xC565B151"
},
{
"id": "DEADBEEF_s0-0_g2_e127_d0",
"checksum": "0x50688071"
},
{
"id": "DEADBEEF_s0-0_g2_e127_d127",
"checksum": "0xB394F949"
},
{
"id": "DEADBEEF_s0-0_g2_e100_d90",
"checksum": "0x99546B5F"
},
{
"id": "DEADBEEF_s0-0_g2_e40_d64",
"checksum": "0x01377919"
},
{
"id": "DEADBEEF_s0-0_g3_e64_d32",
"checksum": "0xDB5C3174"
},
{
"id": "DEADBEEF_s0-0_g3_e0_d0",
"checksum": "0x793380FD"
},
{
"id": "DEADBEEF_s0-0_g3_e127_d0",
"checksum": "0xDF07368D"
},
{
"id": "DEADBEEF_s0-0_g3_e127_d127",
"checksum": "0x1BF6126D"
},
{
"id": "DEADBEEF_s0-0_g3_e100_d90",
"checksum": "0x846CD40B"
},
{
"id": "DEADBEEF_s0-0_g3_e40_d64",
"checksum": "0x3EF11E79"
},
{
"id": "DEADBEEF_s0-0_g4_e64_d32",
"checksum": "0x3358C89B"
},
{
"id": "DEADBEEF_s0-0_g4_e0_d0",
"checksum": "0xD03B2AF3"
},
{
"id": "DEADBEEF_s0-0_g4_e127_d0",
"checksum": "0x213A658F"
},
{
"id": "DEADBEEF_s0-0_g4_e127_d127",
"checksum": "0x6C4F5E2A"
},
{
"id": "DEADBEEF_s0-0_g4_e100_d90",
"checksum": "0x181E5284"
},
{
"id": "DEADBEEF_s0-0_g4_e40_d64",
"checksum": "0x1BCB4282"
},
{
"id": "12345678_s0-0_g0_e64_d32",
"checksum": "0x5A4F3C08"
},
{
"id": "12345678_s0-0_g0_e0_d0",
"checksum": "0x331E7A09"
},
{
"id": "12345678_s0-0_g0_e127_d0",
"checksum": "0xA3674ADD"
},
{
"id": "12345678_s0-0_g0_e127_d127",
"checksum": "0x83884A89"
},
{
"id": "12345678_s0-0_g0_e100_d90",
"checksum": "0x130C35C4"
},
{
"id": "12345678_s0-0_g0_e40_d64",
"checksum": "0xFE2109A6"
},
{
"id": "12345678_s0-0_g1_e64_d32",
"checksum": "0x8B245E0C"
},
{
"id": "12345678_s0-0_g1_e0_d0",
"checksum": "0x3E84A555"
},
{
"id": "12345678_s0-0_g1_e127_d0",
"checksum": "0xAAB67769"
},
{
"id": "12345678_s0-0_g1_e127_d127",
"checksum": "0x3DD0B079"
},
{
"id": "12345678_s0-0_g1_e100_d90",
"checksum": "0x88F591F9"
},
{
"id": "12345678_s0-0_g1_e40_d64",
"checksum": "0xEF44FDC2"
},
{
"id": "12345678_s0-0_g2_e64_d32",
"checksum": "0x6D0725F2"
},
{
"id": "12345678_s0-0_g2_e0_d0",
"checksum": "0x8C33A579"
},
{
"id": "12345678_s0-0_g2_e127_d0",
"checksum": "0x8FFBCA05"
},
{
"id": "12345678_s0-0_g2_e127_d127",
"checksum": "0x18819E92"
},
{
"id": "12345678_s0-0_g2_e100_d90",
"checksum": "0x59F8D5BB"
},
{
"id": "12345678_s0-0_g2_e40_d64",
"checksum": "0xC682051E"
},
{
"id": "12345678_s0-0_g3_e64_d32",
"checksum": "0xD0EA040D"
},
{
"id": "12345678_s0-0_g3_e0_d0",
"checksum": "0xA70CFBDD"
},
{
"id": "12345678_s0-0_g3_e127_d0",
"checksum": "0x3535E98D"
},
{
"id": "12345678_s0-0_g3_e127_d127",
"checksum": "0x16A8AB23"
},
{
"id": "12345678_s0-0_g3_e100_d90",
"checksum": "0xAFF8C3A6"
},
{
"id": "12345678_s0-0_g3_e40_d64",
"checksum": "0x8F9EF374"
},
{
"id": "12345678_s0-0_g4_e64_d32",
"checksum": "0x97C66D44"
},
{
"id": "12345678_s0-0_g4_e0_d0",
"checksum": "0xB8EA077E"
},
{
"id": "12345678_s0-0_g4_e127_d0",
"checksum": "0x92FE51BE"
},
{
"id": "12345678_s0-0_g4_e127_d127",
"checksum": "0xD9E2F70E"
},
{
"id": "12345678_s0-0_g4_e100_d90",
"checksum": "0x882625B9"
},
{
"id": "12345678_s0-0_g4_e40_d64",
"checksum": "0xC26462BD"
},
{
"id": "C0FFEE00_s0-0_g0_e64_d32",
"checksum": "0x409C226C"
},
{
"id": "C0FFEE00_s0-0_g0_e0_d0",
"checksum": "0x6DC8B525"
},
{
"id": "C0FFEE00_s0-0_g0_e127_d0",
"checksum": "0xEED3EB25"
},
{
"id": "C0FFEE00_s0-0_g0_e127_d127",
"checksum": "0x2A4D1330"
},
{
"id": "C0FFEE00_s0-0_g0_e100_d90",
"checksum": "0x81D06CC9"
},
{
"id": "C0FFEE00_s0-0_g0_e40_d64",
"checksum": "0xB02166B8"
},
{
"id": "C0FFEE00_s0-0_g1_e64_d32",
"checksum": "0x9D21C166"
},
{
"id": "C0FFEE00_s0-0_g1_e0_d0",
"checksum": "0xFEFB871D"
},
{
"id": "C0FFEE00_s0-0_g1_e127_d0",
"checksum": "0x70E58385"
},
{
"id": "C0FFEE00_s0-0_g1_e127_d127",
"checksum": "0xBB8654C4"
},
{
"id": "C0FFEE00_s0-0_g1_e100_d90",
"checksum": "0x2854DE5D"
},
{
"id": "C0FFEE00_s0-0_g1_e40_d64",
"checksum": "0x67A2217F"
},
{
"id": "C0FFEE00_s0-0_g2_e64_d32",
"checksum": "0x7BEE9F19"
},
{
"id": "C0FFEE00_s0-0_g2_e0_d0",
"checksum": "0x7B8332C9"
},
{
"id": "C0FFEE00_s0-0_g2_e127_d0",
"checksum": "0x65B3D6C5"
},
{
"id": "C0FFEE00_s0-0_g2_e127_d127",
"checksum": "0x232BB94B"
},
{
"id": "C0FFEE00_s0-0_g2_e100_d90",
"checksum": "0x8A7EE028"
},
{
"id": "C0FFEE00_s0-0_g2_e40_d64",
"checksum": "0xE8731798"
},
{
"id": "C0FFEE00_s0-0_g3_e64_d32",
"checksum": "0xBA4FDBDC"
},
{
"id": "C0FFEE00_s0-0_g3_e0_d0",
"checksum": "0x29BA4BB5"
},
{
"id": "C0FFEE00_s0-0_g3_e127_d0",
"checksum": "0x84A8ADFD"
},
{
"id": "C0FFEE00_s0-0_g3_e127_d127",
"checksum": "0x98E5C8DE"
},
{
"id": "C0FFEE00_s0-0_g3_e100_d90",
"checksum": "0xC2C59DE5"
},
{
"id": "C0FFEE00_s0-0_g3_e40_d64",
"checksum": "0x54D6D8F3"
},
{
"id": "C0FFEE00_s0-0_g4_e64_d32",
"checksum": "0x477C2799"
},
{
"id": "C0FFEE00_s0-0_g4_e0_d0",
"checksum": "0xF057EBE5"
},
{
"id": "C0FFEE00_s0-0_g4_e127_d0",
"checksum": "0xBF2A4C45"
},
{
"id": "C0FFEE00_s0-0_g4_e127_d127",
"checksum": "0x699081A3"
},
{
"id": "C0FFEE00_s0-0_g4_e100_d90",
"checksum": "0x549E5CBC"
},
{
"id": "C0FFEE00_s0-0_g4_e40_d64",
"checksum": "0x58BA5FEF"
},
{
"id": "0BADF00D_s0-0_g0_e64_d32",
"checksum": "0x954515B3"
},
{
"id": "0BADF00D_s0-0_g0_e0_d0",
"checksum": "0xECD6B65D"
},
{
"id": "0BADF00D_s0-0_g0_e127_d0",
"checksum": "0x320DFCCD"
},
{
"id": "0BADF00D_s0-0_g0_e127_d127",
"checksum": "0x9136FE16"
},
{
"id": "0BADF00D_s0-0_g0_e100_d90",
"checksum": "0xBFE1652E"
},
{
"id": "0BADF00D_s0-0_g0_e40_d64",
"checksum": "0xB06D7C1B"
},
{
"id": "0BADF00D_s0-0_g1_e64_d32",
"checksum": "0x95EA2C4A"
},
{
"id": "0BADF00D_s0-0_g1_e0_d0",
"checksum": "0xACE809ED"
},
{
"id": "0BADF00D_s0-0_g1_e127_d0",
"checksum": "0x505897A5"
},
{
"id": "0BADF00D_s0-0_g1_e127_d127",
"checksum": "0x18BB7F1F"
},
{
"id": "0BADF00D_s0-0_g1_e100_d90",
"checksum": "0xAF303405"
},
{
"id": "0BADF00D_s0-0_g1_e40_d64",
"checksum": "0x83D7E35B"
},
{
"id": "0BADF00D_s0-0_g2_e64_d32",
"checksum": "0x1D9A1E48"
},
{
"id": "0BADF00D_s0-0_g2_e0_d0",
"checksum": "0xB506D305"
},
{
"id": "0BADF00D_s0-0_g2_e127_d0",
"checksum": "0x00B1BB95"
},
{
"id": "0BADF00D_s0-0_g2_e127_d127",
"checksum": "0xDE2D6A59"
},
{
"id": "0BADF00D_s0-0_g2_e100_d90",
"checksum": "0x12258F4F"
},
{
"id": "0BADF00D_s0-0_g2_e40_d64",
"checksum": "0xBE863461"
},
{
"id": "0BADF00D_s0-0_g3_e64_d32",
"checksum": "0x8C83C9BB"
},
{
"id": "0BADF00D_s0-0_g3_e0_d0",
"checksum": "0x424BC27D"
},
{
"id": "0BADF00D_s0-0_g3_e127_d0",
"checksum": "0x6D55EA75"
},
{
"id": "0BADF00D_s0-0_g3_e127_d127",
"checksum": "0xD0A8C249"
},
{
"id": "0BADF00D_s0-0_g3_e100_d90",
"checksum": "0xF414BA93"
},
{
"id": "0BADF00D_s0-0_g3_e40_d64",
"checksum": "0x73277AF0"
},
{
"id": "0BADF00D_s0-0_g4_e64_d32",
"checksum": "0xF8E95F3F"
},
{
"id": "0BADF00D_s0-0_g4_e0_d0",
"checksum": "0x73E27C78"
},
{
"id": "0BADF00D_s0-0_g4_e127_d0",
"checksum": "0x4907E37C"
},
{
"id": "0BADF00D_s0-0_g4_e127_d127",
"checksum": "0xA7C479CA"
},
{
"id": "0BADF00D_s0-0_g4_e100_d90",
"checksum": "0xF8EA9EA7"
},
{
"id": "0BADF00D_s0-0_g4_e40_d64",
"checksum": "0xCC25D6B6"
},
{
"id": "5EEDB0C5_s3-0_g0_e64_d32",
"checksum": "0x4BC1C255"
},
{
"id": "5EEDB0C5_s0-5_g0_e64_d32",
"checksum": "0x1D608FBA"
},
{
"id": "5EEDB0C5_s0-0_g0_e80_d50_f3-7",
"checksum": "0xF613C7F0"
},
{
"id": "5EEDB0C5_s3-0_g2_e64_d32",
"checksum": "0xCDA54E56"
},
{
"id": "5EEDB0C5_s0-5_g2_e64_d32",
"checksum": "0xCD7A1CF7"
},
{
"id": "5EEDB0C5_s0-0_g2_e80_d50_f3-7",
"checksum": "0x13BCBDA8"
},
{
"id": "5EEDB0C5_s3-0_g4_e64_d32",
"checksum": "0x13CF5E5E"
},
{
"id": "5EEDB0C5_s0-5_g4_e64_d32",
"checksum": "0x5E1C452C"
},
{
"id": "5EEDB0C5_s0-0_g4_e80_d50_f3-7",
"checksum": "0xFFD1BA41"
},
{
"id": "5EEDB0C5_s0-0_g0_e64_d32_f3_sc14_r2",
"checksum": "0x1F87B79B"
},
{
"id": "5EEDB0C5_s0-0_g2_e64_d32_f3_sc19_r9",
"checksum": "0x186EFC62"
},
{
"id": "5EEDB0C5_s0-0_g4_e64_d32_f3_sc0_r7",
"checksum": "0x6A3A6680"
},
{
"id": "DEADBEEF_s0-0_g1_e64_d32_f3_sc18",
"checksum": "0x7A5704D3"
},
{
"id": "12345678_s0-0_g3_e64_d32_f3_r5",
"checksum": "0x6D812076"
},
{
"id": "C0FFEE00_s0-0_g0_e64_d32_f3_sc7_r11",
"checksum": "0x28DFCADD"
},
{
"id": "00000001_s0-0_g1_e64_d32_f3_sc20_r0",
"checksum": "0x02ADD2DB"
}
]
}

View File

@@ -0,0 +1,506 @@
{
"note": "mix(a,b) hash, xorshift32 Rng (next, below(n), chance(p)) and genome(seed). 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",
"genome": {
"steps": 14,
"form": [
0,
1,
0,
1
],
"formName": "ABAB",
"scale": 18,
"root": 6,
"dens": [
81,
37
],
"fillP": 47,
"monoLen": 1,
"monoRange": 2,
"rot": 0,
"hocket": 85,
"bassDeg": 2,
"prog": [
0,
3,
0,
4
],
"swing": 35,
"arc": 1,
"motifLen": 5,
"accentCycle": 3,
"layback": 0,
"frame": 2,
"freeK": 3,
"freeRot": 5
}
},
{
"seed": "0x00000001",
"genome": {
"steps": 16,
"form": [
0,
0,
1,
0
],
"formName": "AABA",
"scale": 16,
"root": 2,
"dens": [
80,
95
],
"fillP": 110,
"monoLen": 1,
"monoRange": 2,
"rot": 0,
"hocket": 90,
"bassDeg": 3,
"prog": [
0,
5,
0,
5
],
"swing": 21,
"arc": 1,
"motifLen": 3,
"accentCycle": 3,
"layback": 0,
"frame": 0,
"freeK": 2,
"freeRot": 1
}
},
{
"seed": "0xDEADBEEF",
"genome": {
"steps": 12,
"form": [
0,
0,
0,
0
],
"formName": "AAAA",
"scale": 10,
"root": 0,
"dens": [
91,
66
],
"fillP": 40,
"monoLen": 0,
"monoRange": 2,
"rot": 1,
"hocket": 170,
"bassDeg": 4,
"prog": [
0,
1,
0,
6
],
"swing": 50,
"arc": 2,
"motifLen": 4,
"accentCycle": 5,
"layback": 0,
"frame": 7,
"freeK": 4,
"freeRot": 3
}
},
{
"seed": "0x12345678",
"genome": {
"steps": 16,
"form": [
0,
1,
0,
1
],
"formName": "ABAB",
"scale": 0,
"root": 5,
"dens": [
50,
83
],
"fillP": 111,
"monoLen": 1,
"monoRange": 1,
"rot": 2,
"hocket": 170,
"bassDeg": 3,
"prog": [
0,
0,
5,
4
],
"swing": 0,
"arc": 1,
"motifLen": 5,
"accentCycle": 3,
"layback": 0,
"frame": 1,
"freeK": 3,
"freeRot": 9
}
},
{
"seed": "0xC0FFEE00",
"genome": {
"steps": 16,
"form": [
0,
0,
1,
0
],
"formName": "AABA",
"scale": 19,
"root": 0,
"dens": [
42,
74
],
"fillP": 78,
"monoLen": 1,
"monoRange": 2,
"rot": 2,
"hocket": 210,
"bassDeg": 2,
"prog": [
0,
0,
3,
3
],
"swing": 21,
"arc": 1,
"motifLen": 3,
"accentCycle": 5,
"layback": 0,
"frame": 3,
"freeK": 3,
"freeRot": 12
}
},
{
"seed": "0x0BADF00D",
"genome": {
"steps": 16,
"form": [
0,
0,
1,
0
],
"formName": "AABA",
"scale": 9,
"root": 6,
"dens": [
46,
85
],
"fillP": 92,
"monoLen": 1,
"monoRange": 1,
"rot": 1,
"hocket": 90,
"bassDeg": 2,
"prog": [
0,
3,
0,
4
],
"swing": 35,
"arc": 2,
"motifLen": 3,
"accentCycle": 3,
"layback": 0,
"frame": 3,
"freeK": 2,
"freeRot": 9
}
}
]
}