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);
}
}
});