JSFiddle - React, Tailwind, and code Playground
JavaScript
var allinstruments = drumpatterns.basic.instruments;
var song = [figure,len,bpm,expfactor];
for(var i in allinstruments) {
for(var n=0; n<len; n++) {
if(typeof(chances[i]) == 'undefined' || typeof(chances[i][(n % figure) + 1]) == 'undefined' ) {
var bet = false;
} else {
var chanceidx = (n % (Object.keys(chances[i]).length));
var depth = chanceidx / (Object.keys(chances[i]).length);
var perc = Math.min(Object.keys(chances[i]).length, Math.max(1, (Object.keys(chances[i]).length * (1 - 2 * Math.abs(depth - 0.5)))));
if(displace[i]) {
perc = (perc + 1) % (Object.keys(chances[i]).length) + 1;
}
var bet = ((Math.random() * 100).toFixed()*1) < chances[i][perc];
}
song.push(bet ? 1 : 0);
}
}