-
Notifications
You must be signed in to change notification settings - Fork 47
Expand file tree
/
Copy pathsynth.html
More file actions
60 lines (50 loc) · 1.26 KB
/
synth.html
File metadata and controls
60 lines (50 loc) · 1.26 KB
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
<b>Note this is broken on Chrome ATM.</b>
<p>Play with <b>AWSEDFTGYHUJK</b> keys.</p>
<script src="jsfx.js"></script>
<script>
var modules = [
jsfx.Module.Frequency,
jsfx.Module.Vibrato,
jsfx.Module.Guitar,
jsfx.Module.Volume
];
var base = function(){
return {
Frequency: { Slide: (Math.random() - 0.5)/5 },
Vibrato: {
Depth: Math.random() / 10,
Frequency: Math.random() * 10 + 5
},
Volume: { Master: 1, Attack: 0, Punch: 1, Release: 1, Decay: 3 }
};
};
var live = jsfx.Live({}, modules);
var scale = "AWSEDFTGYHUJK";
document.onkeydown = function(ev){
var key = String.fromCharCode(ev.which);
var note = scale.indexOf(key);
var freq = 440 * Math.pow(2, note/12);
var params = MergeParams(base, { "Frequency": {"Start": freq}});
live._play(params);
};
// modifies the override
function MergeParams(base, override){
if(typeof base === 'function'){
base = base();
} else {
base = JSON.parse(JSON.stringify(base));
}
if(typeof override === 'function'){
override = override();
}
for(var name in override){
if(typeof base[name] === 'undefined'){
base[name] = {};
}
for(var param in override[name]){
base[name][param] = override[name][param];
}
}
return base;
}
</script>