12 bar blues

still got the

Log in to post a comment.

const bluesGuitar    = synth.def( (phase, env) => Math.sign(((phase * 2) % 2) - 1) * env.value);
const nothing = {};

const progression = [
   chord(c4, chords.major), chord(f4, chords.major), chord(c4, chords.major), chord(c4, chords.dom7),
   chord(f4, chords.major), chord(f4, chords.dom7), chord(c4, chords.major),  chord(c4, chords.dom7),
   chord(g4, chords.major), chord(f4, chords.major), chord(c4, chords.major), chord(g4, chords.dom7),
];

loop(() => {
    progression.forEach(c => {
       sleep(playChord(c, 6/8*2));
       sleep(playChord(c, 6/8));
    });
},{name:'chords'});

loop(() => {
    progression.forEach(_ => {
        scale(a, scales.blues_minor, 3);
        sleep(playChord(scale(a, scales.blues_minor, 3), 6/8*pick(0.5, 1, 2, 4, 8), 6/8, 0.25));
    });
},{name:'melody'});

function playChord(c, t = 6/8, interv = 6/8/8, chance = 0.95) {
    [...c].sort(_ => -0.5 + Math.random()).forEach(n => (Math.random() < chance ? bluesGuitar.play(n, {amp: 0.45}) : nothing, sleep(interv))); 
    t -= c.length * interv;
    return t;
}

function pick(...args) {
    return args[Math.random() * args.length | 0];
}