sketch
by mohayonao
HTML
<script src="http://mohayonao.github.io/neume.js/build/neume.min.js"></script>
<button id="start">start</button>
<div style="margin-top:25px">
間引いた
<img src="https://dchtm6r471mui.cloudfront.net/hackpad.com_nQh1kQoCssB_p.254153_1414717474999_midi.png" style="width:100%" />
</div>
JavaScript
// パラメータを変えたら ↑ の [Run] が必要です
var PATTERN = 1; // 1 or 2
var BPM = 120; // テンポ
var ROOT = 528; // C の周波数
var attackTime = 4.78; // sec
var sustainLevel = 0.3; //
var releaseTime = 46.4; // sec
var gateOffTime = 12; // sec (発音12秒後にreleaseする)
var volume = 0.25; // vol1-13 的な音量
// 楽譜データ
var scale = [ 1, 16/15, 9/8, 6/5, 5/4, 4/3, 45/32, 3/2, 8/5, 5/3, 9/5, 15/8 ];
var Score = [];
Score[0] = null;
Score[1] = {
name: "PT1",
score: [
[9,10],[4,748],[0,1442],[1,1533],[5,1234],[4,0],[11,4],[8,1427],[1,1293],[9,5],[4,317],[0,1110],[1,802],[8,2],[4,5],[6,2],[11,2047],[9,6],[12,981]
],
freqs: toFrequencies([71,67,0,65,64,62,60,59,57,55,0,52,50], scale)
};
Score[2] = {
name: "PT2",
score: [
[0,1788],[2,3106],[4,2],[6,1552],[7,1],[9,2],[1,1018],[4,11],[8,1],[10,1157]
],
freqs: toFrequencies([71,69,66,65,64,62,60,59,57,55,53,52,48], scale)
};
function toFrequencies(list, scale) {
return list.map(function(midi) {
return ROOT * scale[midi % 12] * Math.pow(2, Math.floor(midi / 12) - 6);
});
}
function midiratio(midi) {
return Math.pow(2, midi / 12);
}
// プログラム
var Neume = neume(new AudioContext());
var Synth = new Neume(function($, freq) {
var out;
out = $("sin", { freq: freq });
out = $("asr", {
a: attackTime, s: sustainLevel * volume, r: releaseTime
}, out).release("+" + gateOffTime).on("end", function(e) {
this.stop(e.playbackTime);
});
return out;
});
var timer = null;
function synthProcess(index) {
var data = Score[PATTERN];
if (!data) return;
var score = data.score;
index %= score.length;
var noteId = score[index][0];
var nextDur = score[index][1] * (120/BPM) * (2/480);
new Synth(data.freqs[noteId]).on("end", function(e) {
this.stop(e.playbackTime);
}).start();
console.log(noteId);
timer = new Neume.Timeout(nextDur, function() {
synthProcess(index...