forked from trishume/screentunes
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathscreentunes.js
124 lines (113 loc) · 3.18 KB
/
screentunes.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
(function() {
var canvas;
var ctx;
var start = null;
var t = null;
var minimum = 0;
var maximum = 0;
var stage = 0;
var baseFreq = 0; // frequency, NOT bar height
var AnimationFrame = (function() {
var FPS = 16.6666666667; // 1000 / 60 = Frames Per Second
var RAF = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame || function(a) { window.setTimeout(a, FPS); };
var CAF = window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.msCancelAnimationFrame || window.oCancelAnimationFrame || function(a) { window.clearTimeout(a); };
return {
request: function(a) {
RAF(a);
},
cancel: function(a) {
CAF(a);
}
};
})();
function resize() {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
/* $("#canvas").css("width", w + "px");
$("#canvas").css("height", h + "px"); */
/* render(); */
}
function bar(y, height) {
ctx.fillRect(0,y,canvas.width,height);
}
function bars(spacing, height) {
ctx.fillStyle = "rgb(0,0,0)";
var y = 0;
var maxy = canvas.height;
while(y < maxy) {
bar(y,height);
y += spacing + height;
}
}
function note(height) {
if(height > 0) {
bars(height, height);
}
}
function render() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
var magic = (maximum - minimum) * (Math.sin(t / 2000))/2 + (maximum + minimum)/2;
bars(magic, magic);
}
function toneGen (pitch) {
return baseFreq * Math.pow(2, -pitch/12);
}
function play() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
var pitch;
$.getJSON("song.json", function(data){
var rel = t % data.duration;
$.each(data, function(i, field) {
if(rel > i) {
pitch = field;
}
});
});
if (pitch !== "s")
{
note(toneGen(pitch));
}
}
function setExtrema(id, extrema) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
extrema = -49 * $(id).val() / 99 + 51;
note(extrema);
}
function frame(timestamp) {
if (start === null && stage === 2) {
start = timestamp;
}
t = timestamp - start;
if(stage === 0) {
setExtrema("#min", minimum);
} else if (stage === 1) {
setExtrema("#max", maximum);
} else {
if($("#music").prop("checked")) {
play();
} else {
render();
}
}
AnimationFrame.request(frame);
}
$(document).ready(function() {
$.ajaxSetup({ async: false });
canvas = document.getElementById("main");
ctx = canvas.getContext("2d");
$(window).bind("resize", resize);
$("#tune2").hide();
$("#is_set1").click(function() {
stage++;
$("#tune1").hide();
$("#tune2").show();
});
$("#is_set2").click(function() {
stage++;
$("#tune2").hide();
baseFreq = (minimum + maximum) / 2.82842712475; // 2*sqrt(2)
});
resize();
AnimationFrame.request(frame);
});
})();