/
audio-tuna-effects.js
122 lines (108 loc) · 3.29 KB
/
audio-tuna-effects.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
( function(Dataflow) {
var Base = Dataflow.node("base");
var AudioBase = Dataflow.node("audio-base");
var setupTunaModules = function(dataflow){
// Make Tuna effect modules
var tuna = new Tuna(dataflow.audioContext);
var tunaModules = {
Overdrive: {},
Filter: {},
Cabinet: {},
Delay: {},
Convolver: {},
Compressor: {},
WahWah: {},
Tremolo: {},
Phaser: {},
Chorus: {}
};
var modelExtender = {
initialize: function(){
AudioBase.Model.prototype.initialize.call(this);
var tunaNode = this.audioOutput = new tuna[this.tunaName](this.get('state'));
var audioInput = this.audioInput = tunaNode.input;
},
setState: function(name, value){
AudioBase.Model.prototype.setState.call(this, name, value);
if (!this["input"+name]) {
if (this.audioOutput[name] !== undefined) {
if (this.audioOutput[name].value !== undefined) {
this.audioOutput[name].value = value;
} else {
this.audioOutput[name] = value;
}
} else {
// ?
}
}
}
};
var viewExtender = {
initialize: function(options){
AudioBase.View.prototype.initialize.call(this, options);
// this.$(".inner").text("...");
// $(this.inputs.el).children(".int, .float").each(function(num, el){
// var input = $('<input type="number" style="width:2em;"></input>');
// $(el).children(".label").prepend(input);
// });
}
};
for (var mod in tunaModules) {
var name = "tuna-"+mod.toLowerCase();
var node = tunaModules[mod].node = Dataflow.node(name);
// var tunaNode = new tuna[mod]();
// var audioInput = tunaNode.input;
var extender = _.extend(
{
defaults: {
label: "",
type: name,
x: 200,
y: 100,
state: {}
},
inputs:[
{
id: "in",
type: "audio"
}
],
outputs:[
{
id: "out",
type: "audio"
}
],
tunaName: mod
// audioOutput: tunaNode,
// audioInput: audioInput
},
modelExtender
);
for (var prop in tuna[mod].prototype.defaults) {
var tunaInput = tuna[mod].prototype.defaults[prop];
var input = {};
input.id = prop;
input.type = tunaInput.type;
if (tunaInput.value !== undefined) {
input.value = tunaInput.value;
extender.defaults.state[prop] = input.value;
}
if (tunaInput.min !== undefined) {
input.min = tunaInput.min;
}
if (tunaInput.max !== undefined) {
input.max = tunaInput.max;
}
if (tunaInput.automatable !== undefined) {
input.automatable = tunaInput.automatable;
}
extender.inputs.push(input);
}
// console.log(extender.inputs);
var Model = tunaModules[mod].node.Model = AudioBase.Model.extend(extender);
var View = tunaModules[mod].node.View = AudioBase.View.extend(viewExtender);
}
};
Dataflow.on("audioContextReady", setupTunaModules);
}(Dataflow.prototype) );