sketch

by mohayonao

HTML

<script src="http://mohayonao.github.io/neume.js/build/neume.min.js"></script>
<button id="start">start</button>

JavaScript

var score = [[329.6275569128699,195.99771799087463],null,null,null,null,null,[391.99543598174927],null,null,null,[293.6647679174076],null,null,[329.6275569128699,220,164.81377845643496],null,null,null,[391.99543598174927],null,null,[329.6275569128699,195.99771799087463],[493.8833012561241],null,null,[391.99543598174927],null,[329.6275569128699,261.6255653005986,220,164.81377845643496],null,null,null,null,[293.6647679174076,246.94165062806206,195.99771799087463,146.8323839587038]];

var Neume = neume(new AudioContext());

var Synth = new Neume(function($, freq) {
    var out;
    
    out = $("sin", { freq: freq });
    out = $("asr", {
        a: 4.78, s: 0.2, r: 46.4
    }, out).release("+12").on("end", function(e) {
        this.stop(e.playbackTime);
    });
    
    return out;
});

var timer = null;
$("#start").on("click", function() {
    if (timer) {
        timer.stop();
        timer = null;
        $(this).css("color", "black");
    } else {
        timer = new Neume.Interval(2, function(e) {
            var i = e.count % score.length;
            score[i] && score[i].forEach(function(freq) {
                new Synth(freq).start();
            });
        }).start();
        $(this).css("color", "red");
    }
});