Interpolated Probability Drums

by yotammann

HTML

<script src="https://tonejs.github.io/CDN/r6/Tone.min.js"></script>
<script src="https://tonejs.github.io/build/Tone.js"></script>
<script src="https://tonejs.github.io/Logo/build/Waveform.js"></script>

JavaScript

var kickUrl = "https://tonejs.github.io/examples/audio/505/kick.mp3";
var snareUrl = "https://tonejs.github.io/examples/audio/505/snare.mp3";
var hhUrl = "https://tonejs.github.io/examples/audio/505/hh.mp3";

var kick = new Tone.Player(kickUrl).toMaster();
kick.retrigger = true;
var snare = new Tone.Player(snareUrl).toMaster();
snare.retrigger = true;
var hh = new Tone.Player(hhUrl).toMaster();
hh.retrigger = true;


var kickProb =  new Tone.CtrlInterpolate([
	[1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0],
	[1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0],
]);

var snareProb =  new Tone.CtrlInterpolate([
	[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
	[0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0],
]);

var hhProb =  new Tone.CtrlInterpolate([
	[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
	[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
]);

var steps = 12;
var beatTime = 0.25;
var beats = 8 * steps;

Tone.Buffer.on("load", function(){
	var now = kick.now();
  
  for (var i = 0; i < beats; i++){
  	//move all the interpolation
		hhProb.index = i / beats;
		snareProb.index = i / beats;
		kickProb.index = i / beats;
  	var measureBeat = i % steps;
    var measureTime = i * beatTime + now;
    
 		if (Math.random() < kickProb.value[measureBeat]){
    	kick.start(measureTime);
    }
    if (Math.random() < snareProb.value[measureBeat]){
    	snare.start(measureTime);
    }
    if (Math.random() < hhProb.value[measureBeat]){
    	hh.start(measureTime);
    }
  }
});