-
Notifications
You must be signed in to change notification settings - Fork 0
/
music.js
63 lines (49 loc) 路 1.44 KB
/
music.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
// WintAR music
var count = 0;
var pad = "0000000000";
var numberArea = document.querySelector(".binary");
var previousBinarySet = pad.split('');
var notes = ["D4", "E4", "F4", "G4", "A5", "C5", "D5", "E5", "F5", "G5"];
var times = [1.7, 1.5, 1.3, 1.1, .9, .7, .5, .5, .5, .5];
function toBinary(number){
return (number >>> 0).toString(2);
}
function padNumber(numberString) {
return pad.substring(0, pad.length - numberString.length) + numberString;
}
function play() {
var synth = new Tone.PolySynth(16, Tone.SimpleSynth).set({
"volume" : -8,
"oscillator" : {
"type" : "triangle1",
frequency: 40,
detune: 0,
phase: 0
},
"envelope" : {
"attack" : 0.025,
"decay" : 0.25,
"sustain" : 0.28,
"release" : 0.2,
},
}).toMaster();
Tone.Transport.bpm.value = 50;
Tone.Transport.scheduleRepeat(function(time) {
var number = Math.floor(count);
count = count + 1;
var numberString = padNumber(toBinary(number));
numberArea.innerHTML = numberString;
var binaryArray = numberString.split('');
for( var i = 0; i < binaryArray.length; i++ ) {
if( binaryArray[i] === "1" && previousBinarySet[i] !== binaryArray[i]) {
synth.triggerAttackRelease(notes[i], times[i], time);
}
}
previousBinarySet = binaryArray;
if( count > 1023 ) {
count = 0;
}
}, "32i");
Tone.Transport.start();
}
play();