/* 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=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};