summaryrefslogtreecommitdiff
path: root/public/js/vendor/Audiolet.min.js
blob: 388c5c54d7235b5ed07e339f1f79780647508799 (plain)
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
var AudioletBuffer=function(a,c){this.numberOfChannels=a;this.length=c;this.channels=[];for(var b=0;b<this.numberOfChannels;b++){this.channels.push(new Float32Array(c))}this.unslicedChannels=[];for(var b=0;b<this.numberOfChannels;b++){this.unslicedChannels.push(this.channels[b])}this.isEmpty=false;this.channelOffset=0};AudioletBuffer.prototype.getChannelData=function(a){return(this.channels[a])};AudioletBuffer.prototype.set=function(a){var b=a.numberOfChannels;for(var c=0;c<b;c++){this.channels[c].set(a.getChannelData(c))}};AudioletBuffer.prototype.setSection=function(c,g,f,b){f=f||0;b=b||0;var d=c.numberOfChannels;for(var e=0;e<d;e++){f+=c.channelOffset;b+=this.channelOffset;var a=this.unslicedChannels[e].subarray(b,b+g);var h=c.unslicedChannels[e].subarray(f,f+g);
/*!
           var channel1 = this.getChannelData(i).subarray(outputOffset,
           outputOffset +
           length);
           var channel2 = buffer.getChannelData(i).subarray(inputOffset,
           inputOffset +
           length);
         */
a.set(h)}};AudioletBuffer.prototype.add=function(b){var f=this.length;var d=b.numberOfChannels;for(var e=0;e<d;e++){var a=this.getChannelData(e);var g=b.getChannelData(e);for(var c=0;c<f;c++){a[c]+=g[c]}}};AudioletBuffer.prototype.addSection=function(f,b,h,a){h=h||0;a=a||0;var k=f.numberOfChannels;for(var g=0;g<k;g++){var d=this.getChannelData(g);var c=f.getChannelData(g);for(var e=0;e<b;e++){d[e+a]+=c[e+h]}}};AudioletBuffer.prototype.resize=function(n,c,e,g){g=g||0;var j=this.channels;var b=this.unslicedChannels;var d=this.length;var f=this.channelOffset+g;for(var h=0;h<n;h++){var k=j[h];var m=b[h];if(c>d){var l=k;if(!e||!m||m.length<c){m=new Float32Array(c)}k=m.subarray(0,c);if(!e&&l){k.set(l,g)}f=0}else{if(!m){var a=b[0].length;m=new Float32Array(a)}g=f;k=m.subarray(g,g+c)}j[h]=k;b[h]=m}this.channels=j.slice(0,n);this.unslicedChannels=b.slice(0,n);this.length=c;this.numberOfChannels=n;this.channelOffset=f};AudioletBuffer.prototype.push=function(a){var b=a.length;this.resize(this.numberOfChannels,this.length+b);this.setSection(a,b,0,this.length-b)};AudioletBuffer.prototype.pop=function(a){var b=a.length;var c=this.length-b;a.setSection(this,b,c,0);this.resize(this.numberOfChannels,c)};AudioletBuffer.prototype.unshift=function(a){var b=a.length;this.resize(this.numberOfChannels,this.length+b,false,b);this.setSection(a,b,0,0)};AudioletBuffer.prototype.shift=function(a){var b=a.length;a.setSection(this,b,0,0);this.resize(this.numberOfChannels,this.length-b,false,b)};AudioletBuffer.prototype.zero=function(){var b=this.numberOfChannels;for(var c=0;c<b;c++){var e=this.getChannelData(c);var d=this.length;for(var a=0;a<d;a++){e[a]=0}}};AudioletBuffer.prototype.combined=function(){var a=this.channels;var b=this.numberOfChannels;var e=this.length;var d=new Float32Array(b*e);for(var c=0;c<b;c++){d.set(a[c],c*e)}return d};AudioletBuffer.prototype.interleaved=function(){var a=this.channels;var c=this.numberOfChannels;var e=this.length;var f=new Float32Array(c*e);for(var d=0;d<e;d++){for(var b=0;b<c;b++){f[c*d+b]=a[b][d]}}return f};AudioletBuffer.prototype.copy=function(){var a=new AudioletBuffer(this.numberOfChannels,this.length);a.set(this);return a};AudioletBuffer.prototype.load=function(c,a,d){var b=new AudioFileRequest(c,a);b.onSuccess=function(e){this.length=e.length;this.numberOfChannels=e.channels.length;this.unslicedChannels=e.channels;this.channels=e.channels;this.channelOffset=0;if(d){d()}}.bind(this);b.onFailure=function(){console.error("Could not load",c)}.bind(this);b.send()};var AudioletGroup=function(b,a,d){this.audiolet=b;this.inputs=[];for(var c=0;c<a;c++){this.inputs.push(new PassThroughNode(this.audiolet,1,1))}this.outputs=[];for(var c=0;c<d;c++){this.outputs.push(new PassThroughNode(this.audiolet,1,1))}};AudioletGroup.prototype.connect=function(c,b,a){this.outputs[b||0].connect(c,0,a)};AudioletGroup.prototype.disconnect=function(c,b,a){this.outputs[b||0].disconnect(c,0,a)};AudioletGroup.prototype.remove=function(){var a=this.inputs.length;for(var b=0;b<a;b++){this.inputs[b].remove()}var c=this.outputs.length;for(var b=0;b<c;b++){this.outputs[b].remove()}};
/*!
 * @depends AudioletGroup.js
 */
var AudioletDestination=function(c,b,a,d){AudioletGroup.call(this,c,1,0);this.device=new AudioletDevice(c,b,a,d);c.device=this.device;this.scheduler=new Scheduler(c);c.scheduler=this.scheduler;this.upMixer=new UpMixer(c,this.device.numberOfChannels);this.inputs[0].connect(this.scheduler);this.scheduler.connect(this.upMixer);this.upMixer.connect(this.device)};extend(AudioletDestination,AudioletGroup);AudioletDestination.prototype.toString=function(){return"Destination"};var AudioletNode=function(c,b,e,a){this.audiolet=c;this.inputs=[];for(var d=0;d<b;d++){this.inputs.push(new AudioletInput(this,d))}this.outputs=[];for(var d=0;d<e;d++){this.outputs.push(new AudioletOutput(this,d))}if(a){this.generate=a}};AudioletNode.prototype.connect=function(d,c,b){if(d instanceof AudioletGroup){d=d.inputs[b||0];b=0}var a=this.outputs[c||0];var e=d.inputs[b||0];a.connect(e);e.connect(a);this.audiolet.device.needTraverse=true};AudioletNode.prototype.disconnect=function(d,c,b){if(d instanceof AudioletGroup){d=d.inputs[b||0];b=0}var a=this.outputs[c||0];var e=d.inputs[b||0];e.disconnect(a);a.disconnect(e);this.audiolet.device.needTraverse=true};AudioletNode.prototype.setNumberOfOutputChannels=function(a,b){this.outputs[a].numberOfChannels=b};AudioletNode.prototype.linkNumberOfOutputChannels=function(b,a){this.outputs[b].linkNumberOfChannels(this.inputs[a])};AudioletNode.prototype.tick=function(){this.createInputSamples();this.createOutputSamples();this.generate()};AudioletNode.prototype.traverse=function(a){if(a.indexOf(this)==-1){a.push(this);a=this.traverseParents(a)}return a};AudioletNode.prototype.traverseParents=function(c){var a=this.inputs.length;for(var e=0;e<a;e++){var b=this.inputs[e];var f=b.connectedFrom.length;for(var d=0;d<f;d++){c=b.connectedFrom[d].node.traverse(c)}}return c};AudioletNode.prototype.generate=function(){};AudioletNode.prototype.createInputSamples=function(){var a=this.inputs.length;for(var f=0;f<a;f++){var d=this.inputs[f];var h=0;for(var e=0;e<d.connectedFrom.length;e++){var c=d.connectedFrom[e];for(var b=0;b<c.samples.length;b++){var g=c.samples[b];if(b<h){d.samples[b]+=g}else{d.samples[b]=g;h+=1}}}if(d.samples.length>h){d.samples=d.samples.slice(0,h)}}};AudioletNode.prototype.createOutputSamples=function(){var e=this.outputs.length;for(var d=0;d<e;d++){var a=this.outputs[d];var c=a.getNumberOfChannels();if(a.samples.length==c){continue}else{if(a.samples.length>c){a.samples=a.samples.slice(0,c);continue}}for(var b=a.samples.length;b<c;b++){a.samples[b]=0}}};AudioletNode.prototype.remove=function(){var g=this.inputs.length;for(var e=0;e<g;e++){var h=this.inputs[e];var c=h.connectedFrom.length;for(var d=0;d<c;d++){var a=h.connectedFrom[d];var b=a.node;b.disconnect(this,a.index,e)}}var f=this.outputs.length;for(var e=0;e<f;e++){var b=this.outputs[e];var c=b.connectedTo.length;for(var d=0;d<c;d++){var k=b.connectedTo[d];var h=k.node;this.disconnect(h,e,k.index)}}};
/*!
 * @depends AudioletNode.js
 */
function AudioletDevice(c,b,a,d){AudioletNode.call(this,c,1,0);this.sink=Sink(this.tick.bind(this),a,d,b);this.sampleRate=this.sink.sampleRate;this.numberOfChannels=this.sink.channelCount;this.bufferSize=this.sink.preBufferSize;this.writePosition=0;this.buffer=null;this.paused=false;this.needTraverse=true;this.nodes=[]}extend(AudioletDevice,AudioletNode);AudioletDevice.prototype.tick=function(a,d){if(!this.paused){var b=this.inputs[0];var f=a.length/d;for(var e=0;e<f;e++){if(this.needTraverse){this.nodes=this.traverse([]);this.needTraverse=false}for(var c=this.nodes.length-1;c>0;c--){this.nodes[c].tick()}this.createInputSamples();for(var c=0;c<d;c++){a[e*d+c]=b.samples[c]}this.writePosition+=1}}};AudioletDevice.prototype.getPlaybackTime=function(){return this.sink.getPlaybackTime()};AudioletDevice.prototype.getWriteTime=function(){return this.writePosition};AudioletDevice.prototype.pause=function(){this.paused=true};AudioletDevice.prototype.play=function(){this.paused=false};AudioletDevice.prototype.toString=function(){return"Audio Output Device"};var AudioletInput=function(b,a){this.node=b;this.index=a;this.connectedFrom=[];this.samples=[]};AudioletInput.prototype.connect=function(a){this.connectedFrom.push(a)};AudioletInput.prototype.disconnect=function(a){var c=this.connectedFrom.length;for(var b=0;b<c;b++){if(a==this.connectedFrom[b]){this.connectedFrom.splice(b,1);break}}if(this.connectedFrom.length==0){this.samples=[]}};AudioletInput.prototype.toString=function(){return this.node.toString()+"Input #"+this.index};var Audiolet=function(b,a,c){this.output=new AudioletDestination(this,b,a,c)};var AudioletOutput=function(b,a){this.node=b;this.index=a;this.connectedTo=[];this.samples=[];this.linkedInput=null;this.numberOfChannels=1};AudioletOutput.prototype.connect=function(a){this.connectedTo.push(a)};AudioletOutput.prototype.disconnect=function(a){var c=this.connectedTo.length;for(var b=0;b<c;b++){if(a==this.connectedTo[b]){this.connectedTo.splice(b,1);break}}};AudioletOutput.prototype.linkNumberOfChannels=function(a){this.linkedInput=a};AudioletOutput.prototype.unlinkNumberOfChannels=function(){this.linkedInput=null};AudioletOutput.prototype.getNumberOfChannels=function(){if(this.linkedInput&&this.linkedInput.connectedFrom.length){return(this.linkedInput.samples.length)}return(this.numberOfChannels)};AudioletOutput.prototype.toString=function(){return this.node.toString()+"Output #"+this.index+" - "};var AudioletParameter=function(a,c,b){this.node=a;if(typeof c!="undefined"&&c!=null){this.input=a.inputs[c]}else{this.input=null}this.value=b||0};AudioletParameter.prototype.isStatic=function(){return(this.input.samples.length==0)};AudioletParameter.prototype.isDynamic=function(){return(this.input.samples.length>0)};AudioletParameter.prototype.setValue=function(a){this.value=a};AudioletParameter.prototype.getValue=function(){if(this.input!=null&&this.input.samples.length>0){return this.input.samples[0]}else{return this.value}};function extend(a,c){function b(){}b.prototype=c.prototype;a.prototype=new b();a.prototype.constructor=a}
/*!
 * @depends ../core/AudioletNode.js
 */
var ParameterNode=function(a,b){AudioletNode.call(this,a,1,1);this.parameter=new AudioletParameter(this,0,b)};extend(ParameterNode,AudioletNode);ParameterNode.prototype.generate=function(){this.outputs[0].samples[0]=this.parameter.getValue()};ParameterNode.prototype.toString=function(){return"Parameter Node"};
/*!
 * @depends AudioletNode.js
 */
var PassThroughNode=function(b,a,c){AudioletNode.call(this,b,a,c)};extend(PassThroughNode,AudioletNode);PassThroughNode.prototype.createOutputSamples=function(){var f=this.outputs.length;for(var e=0;e<f;e++){var b=this.inputs[e];var a=this.outputs[e];if(b&&b.samples.length!=0){a.samples=b.samples}else{var d=a.getNumberOfChannels();if(a.samples.length==d){continue}else{if(a.samples.length>d){a.samples=a.samples.slice(0,d);continue}}for(var c=a.samples.length;c<d;c++){a.samples[c]=0}}}};PassThroughNode.prototype.toString=function(){return"Pass Through Node"};var PriorityQueue=function(c,b){if(b){this.compare=b}if(c){this.heap=c;for(var a=0;a<Math.floor(this.heap.length/2);a++){this.siftUp(a)}}else{this.heap=[]}};PriorityQueue.prototype.push=function(a){this.heap.push(a);this.siftDown(0,this.heap.length-1)};PriorityQueue.prototype.pop=function(){var b,a;b=this.heap.pop();if(this.heap.length){var a=this.heap[0];this.heap[0]=b;this.siftUp(0)}else{a=b}return(a)};PriorityQueue.prototype.peek=function(){return(this.heap[0])};PriorityQueue.prototype.isEmpty=function(){return(this.heap.length==0)};PriorityQueue.prototype.siftDown=function(d,a){var b=this.heap[a];while(a>d){var e=(a-1)>>1;var c=this.heap[e];if(this.compare(b,c)){this.heap[a]=c;a=e;continue}break}this.heap[a]=b};PriorityQueue.prototype.siftUp=function(a){var e=this.heap.length;var d=a;var c=this.heap[a];var b=2*a+1;while(b<e){var f=b+1;if(f<e&&!this.compare(this.heap[b],this.heap[f])){b=f}this.heap[a]=this.heap[b];a=b;b=2*a+1}this.heap[a]=c;this.siftDown(d,a)};PriorityQueue.prototype.compare=function(d,c){return(d<c)};
/*!
 * @depends PassThroughNode.js
 */
var Scheduler=function(a,b){PassThroughNode.call(this,a,1,1);this.linkNumberOfOutputChannels(0,0);this.bpm=b||120;this.queue=new PriorityQueue(null,function(d,c){return(d.time<c.time)});this.time=0;this.beat=0;this.beatInBar=0;this.bar=0;this.seconds=0;this.beatsPerBar=0;this.lastBeatTime=0;this.beatLength=60/this.bpm*this.audiolet.device.sampleRate};extend(Scheduler,PassThroughNode);Scheduler.prototype.setTempo=function(a){this.bpm=a;this.beatLength=60/this.bpm*this.audiolet.device.sampleRate};Scheduler.prototype.addRelative=function(a,c){var b={};b.callback=c;b.time=this.time+a*this.beatLength;this.queue.push(b);return b};Scheduler.prototype.addAbsolute=function(b,c){if(b<this.beat||b==this.beat&&this.time>this.lastBeatTime){return null}var a={};a.callback=c;a.time=this.lastBeatTime+(b-this.beat)*this.beatLength;this.queue.push(a);return a};Scheduler.prototype.play=function(b,a,d){var c={};c.patterns=b;c.durationPattern=a;c.callback=d;c.time=this.audiolet.device.getWriteTime();this.queue.push(c);return c};Scheduler.prototype.playAbsolute=function(d,b,a,e){if(d<this.beat||d==this.beat&&this.time>this.lastBeatTime){return null}var c={};c.patterns=b;c.durationPattern=a;c.callback=e;c.time=this.lastBeatTime+(d-this.beat)*this.beatLength;this.queue.push(c);return c};Scheduler.prototype.remove=function(b){var a=this.queue.heap.indexOf(b);if(a!=-1){this.queue.heap.splice(a,1);this.queue=new PriorityQueue(this.queue.heap,function(d,c){return(d.time<c.time)})}};Scheduler.prototype.stop=function(a){this.remove(a)};Scheduler.prototype.tick=function(){PassThroughNode.prototype.tick.call(this);this.tickClock();while(!this.queue.isEmpty()&&this.queue.peek().time<=this.time){var a=this.queue.pop();this.processEvent(a)}};Scheduler.prototype.tickClock=function(){this.time+=1;this.seconds=this.time/this.audiolet.device.sampleRate;if(this.time>=this.lastBeatTime+this.beatLength){this.beat+=1;this.beatInBar+=1;if(this.beatInBar==this.beatsPerBar){this.bar+=1;this.beatInBar=0}this.lastBeatTime+=this.beatLength}};Scheduler.prototype.processEvent=function(a){var h=a.durationPattern;if(h){var g=[];var b=a.patterns;var e=b.length;for(var d=0;d<e;d++){var f=b[d];var j=f.next();if(j!=null){g.push(j)}else{return}}a.callback.apply(null,g);var c;if(h instanceof Pattern){c=h.next()}else{c=h}if(c){a.time+=c*this.beatLength;this.queue.push(a)}}else{a.callback()}};Scheduler.prototype.toString=function(){return"Scheduler"};var Int8Array,Uint8Array,Int16Array,Uint16Array;var Int32Array,Uint32Array,Float32Array,Float64Array;var types=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var original,shim;for(var i=0;i<types.length;++i){if(types[i]){if(types[i].prototype.slice===undefined){original="subarray";shim="slice"}else{if(types[i].prototype.subarray===undefined){original="slice";shim="subarray"}}Object.defineProperty(types[i].prototype,shim,{value:types[i].prototype[original],enumerable:false})}}
/*!
 * @depends ../core/AudioletNode.js
 */
var Add=function(a,b){AudioletNode.call(this,a,2,1);this.linkNumberOfOutputChannels(0,0);this.value=new AudioletParameter(this,1,b||0)};extend(Add,AudioletNode);Add.prototype.generate=function(){var b=this.inputs[0];var a=this.outputs[0];var e=this.value.getValue();var c=b.samples.length;for(var d=0;d<c;d++){a.samples[d]=b.samples[d]+e}};Add.prototype.toString=function(){return"Add"};
/*!
 * @depends ../core/AudioletNode.js
 */
var Divide=function(a,b){AudioletNode.call(this,a,2,1);this.linkNumberOfOutputChannels(0,0);this.value=new AudioletParameter(this,1,b||1)};extend(Divide,AudioletNode);Divide.prototype.generate=function(){var b=this.inputs[0];var a=this.outputs[0];var e=this.value.getValue();var c=b.samples.length;for(var d=0;d<c;d++){a.samples[d]=b.samples[d]/e}};Divide.prototype.toString=function(){return"Divide"};
/*!
 * @depends ../core/AudioletNode.js
 */
var Modulo=function(a,b){AudioletNode.call(this,a,2,1);this.linkNumberOfOutputChannels(0,0);this.value=new AudioletParameter(this,1,b||1)};extend(Modulo,AudioletNode);Modulo.prototype.generate=function(){var b=this.inputs[0];var a=this.outputs[0];var e=this.value.getValue();var c=b.samples.length;for(var d=0;d<c;d++){a.samples[d]=b.samples[d]%e}};Modulo.prototype.toString=function(){return"Modulo"};
/*!
 * @depends ../core/AudioletNode.js
 */
var MulAdd=function(a,c,b){AudioletNode.call(this,a,3,1);this.linkNumberOfOutputChannels(0,0);this.mul=new AudioletParameter(this,1,c||1);this.add=new AudioletParameter(this,2,b||0)};extend(MulAdd,AudioletNode);MulAdd.prototype.generate=function(){var b=this.inputs[0];var a=this.outputs[0];var f=this.mul.getValue();var e=this.add.getValue();var c=b.samples.length;for(var d=0;d<c;d++){a.samples[d]=b.samples[d]*f+e}};MulAdd.prototype.toString=function(){return"Multiplier/Adder"};
/*!
 * @depends ../core/AudioletNode.js
 */
var Multiply=function(a,b){AudioletNode.call(this,a,2,1);this.linkNumberOfOutputChannels(0,0);this.value=new AudioletParameter(this,1,b||1)};extend(Multiply,AudioletNode);Multiply.prototype.generate=function(){var d=this.value.getValue();var a=this.inputs[0];var b=a.samples.length;for(var c=0;c<b;c++){this.outputs[0].samples[c]=a.samples[c]*d}};Multiply.prototype.toString=function(){return"Multiply"};
/*!
 * @depends ../core/AudioletNode.js
 */
var Reciprocal=function(a){AudioletNode.call(this,a,1,1);this.linkNumberOfOutputChannels(0,0)};extend(Reciprocal,AudioletNode);Reciprocal.prototype.generate=function(){var b=this.inputs[0];var a=this.outputs[0];var c=b.samples.length;for(var d=0;d<c;d++){a.samples[d]=1/b.samples[d]}};Reciprocal.prototype.toString=function(){return"Reciprocal"};
/*!
 * @depends ../core/AudioletNode.js
 */
var Subtract=function(a,b){AudioletNode.call(this,a,2,1);this.linkNumberOfOutputChannels(0,0);this.value=new AudioletParameter(this,1,b||0)};extend(Subtract,AudioletNode);Subtract.prototype.generate=function(){var b=this.inputs[0];var a=this.outputs[0];var e=this.value.getValue();var c=b.samples.length;for(var d=0;d<c;d++){a.samples[d]=b.samples[d]-e}};Subtract.prototype.toString=function(){return"Subtract"};var Tanh=function(a){AudioletNode.call(this,a,1,1);this.linkNumberOfOutputChannels(0,0)};extend(Tanh,AudioletNode);Tanh.prototype.generate=function(){var b=this.inputs[0];var a=this.outputs[0];var c=b.samples.length;for(var d=0;d<c;d++){var e=b.samples[d];a.samples[d]=(Math.exp(e)-Math.exp(-e))/(Math.exp(e)+Math.exp(-e))}};Tanh.prototype.toString=function(){return("Tanh")};
/*!
 * @depends ../core/AudioletNode.js
 */
var Envelope=function(b,d,e,g,a,f){AudioletNode.call(this,b,1,1);this.gate=new AudioletParameter(this,0,d||1);this.levels=[];for(var c=0;c<e.length;c++){this.levels.push(new AudioletParameter(this,null,e[c]))}this.times=[];for(var c=0;c<g.length;c++){this.times.push(new AudioletParameter(this,null,g[c]))}this.releaseStage=a;this.onComplete=f;this.stage=null;this.time=null;this.changeTime=null;this.level=this.levels[0].getValue();this.delta=0;this.gateOn=false};extend(Envelope,AudioletNode);Envelope.prototype.generate=function(){var b=this.gate.getValue();var a=false;if(b&&!this.gateOn){this.gateOn=true;this.stage=0;this.time=0;this.delta=0;this.level=this.levels[0].getValue();if(this.stage!=this.releaseStage){a=true}}if(this.gateOn&&!b){this.gateOn=false;if(this.releaseStage!=null){this.stage=this.releaseStage;a=true}}if(this.changeTime){this.time+=1;if(this.time>=this.changeTime){this.stage+=1;if(this.stage!=this.releaseStage){a=true}else{this.changeTime=null;this.delta=0}}}if(a){if(this.stage!=this.times.length){this.delta=this.calculateDelta(this.stage,this.level);this.changeTime=this.calculateChangeTime(this.stage,this.time)}else{if(this.onComplete){this.onComplete()}this.stage=null;this.time=null;this.changeTime=null;this.delta=0}}this.level+=this.delta;this.outputs[0].samples[0]=this.level};Envelope.prototype.calculateDelta=function(b,d){var c=this.levels[b+1].getValue()-d;var a=this.times[b].getValue()*this.audiolet.device.sampleRate;return(c/a)};Envelope.prototype.calculateChangeTime=function(b,c){var a=this.times[b].getValue()*this.audiolet.device.sampleRate;return(c+a)};Envelope.prototype.toString=function(){return"Envelope"};
/*!
 * @depends Envelope.js
 */
var ADSREnvelope=function(j,e,c,d,g,f,b){var h=[0,1,g,0];var a=[c,d,f];Envelope.call(this,j,e,h,a,2,b);this.attack=this.times[0];this.decay=this.times[1];this.sustain=this.levels[2];this.release=this.levels[2]};extend(ADSREnvelope,Envelope);ADSREnvelope.prototype.toString=function(){return"ADSR Envelope"};
/*!
 * @depends ../core/AudioletNode.js
 */
var BiquadFilter=function(a,b){AudioletNode.call(this,a,2,1);this.linkNumberOfOutputChannels(0,0);this.frequency=new AudioletParameter(this,1,b||22100);this.lastFrequency=null;this.xValues=[];this.yValues=[];this.b0=0;this.b1=0;this.b2=0;this.a0=0;this.a1=0;this.a2=0};extend(BiquadFilter,AudioletNode);BiquadFilter.prototype.calculateCoefficients=function(a){};BiquadFilter.prototype.generate=function(){var k=this.inputs[0];var j=this.outputs[0];var m=this.xValues;var p=this.yValues;var l=this.frequency.getValue();if(l!=this.lastFrequency){this.calculateCoefficients(l);this.lastFrequency=l}var v=this.a0;var u=this.a1;var t=this.a2;var h=this.b0;var g=this.b1;var f=this.b2;var d=k.samples.length;for(var n=0;n<d;n++){if(n>=m.length){m.push([0,0]);p.push([0,0])}var r=m[n];var q=r[0];var o=r[1];var e=p[n];var b=e[0];var a=e[1];var s=k.samples[n];var c=(h/v)*s+(g/v)*q+(f/v)*o-(u/v)*b-(t/v)*a;j.samples[n]=c;r[0]=s;r[1]=q;e[0]=c;e[1]=b}};BiquadFilter.prototype.toString=function(){return"Biquad Filter"};
/*!
 * @depends BiquadFilter.js
 */
var AllPassFilter=function(a,b){BiquadFilter.call(this,a,b)};extend(AllPassFilter,BiquadFilter);AllPassFilter.prototype.calculateCoefficients=function(e){var b=2*Math.PI*e/this.audiolet.device.sampleRate;var a=Math.cos(b);var c=Math.sin(b);var d=c/(2/Math.sqrt(2));this.b0=1-d;this.b1=-2*a;this.b2=1+d;this.a0=1+d;this.a1=-2*a;this.a2=1-d};AllPassFilter.prototype.toString=function(){return"All Pass Filter"};
/*!
 * @depends ../core/AudioletNode.js
 */
var Amplitude=function(b,c,a){AudioletNode.call(this,b,3,1);this.linkNumberOfOutputChannels(0,0);this.followers=[];this.attack=new AudioletParameter(this,1,c||0.01);this.release=new AudioletParameter(this,2,a||0.01)};extend(Amplitude,AudioletNode);Amplitude.prototype.generate=function(){var h=this.inputs[0];var a=this.outputs[0];var f=this.followers;var b=f.length;var l=this.audiolet.device.sampleRate;var d=this.attack.getValue();d=Math.pow(0.01,1/(d*l));var j=this.release.getValue();j=Math.pow(0.01,1/(j*l));var g=h.samples.length;for(var c=0;c<g;c++){if(c>=b){f.push(0)}var e=f[c];var k=Math.abs(h.samples[c]);if(k>e){e=d*(e-k)+k}else{e=j*(e-k)+k}a.samples[c]=e;f[c]=e}};Amplitude.prototype.toString=function(){return("Amplitude")};
/*!
 * @depends ../core/PassThroughNode.js
 */
var BadValueDetector=function(a,b){PassThroughNode.call(this,a,1,1);this.linkNumberOfOutputChannels(0,0);if(b){this.callback=b}};extend(BadValueDetector,PassThroughNode);BadValueDetector.prototype.callback=function(b,a){console.error(b+" detected at channel "+a)};BadValueDetector.prototype.generate=function(){var a=this.inputs[0];var b=a.samples.length;for(var c=0;c<b;c++){var d=a.samples[c];if(typeof d=="undefined"||d==null||isNaN(d)||d==Infinity||d==-Infinity){this.callback(d,c)}}};BadValueDetector.prototype.toString=function(){return"Bad Value Detector"};
/*!
 * @depends BiquadFilter.js
 */
var BandPassFilter=function(a,b){BiquadFilter.call(this,a,b)};extend(BandPassFilter,BiquadFilter);BandPassFilter.prototype.calculateCoefficients=function(e){var b=2*Math.PI*e/this.audiolet.device.sampleRate;var a=Math.cos(b);var c=Math.sin(b);var d=c/(2/Math.sqrt(2));this.b0=d;this.b1=0;this.b2=-d;this.a0=1+d;this.a1=-2*a;this.a2=1-d};BandPassFilter.prototype.toString=function(){return"Band Pass Filter"};
/*!
 * @depends BiquadFilter.js
 */
var BandRejectFilter=function(a,b){BiquadFilter.call(this,a,b)};extend(BandRejectFilter,BiquadFilter);BandRejectFilter.prototype.calculateCoefficients=function(e){var b=2*Math.PI*e/this.audiolet.device.sampleRate;var a=Math.cos(b);var c=Math.sin(b);var d=c/(2/Math.sqrt(2));this.b0=1;this.b1=-2*a;this.b2=1;this.a0=1+d;this.a1=-2*a;this.a2=1-d};BandRejectFilter.prototype.toString=function(){return"Band Reject Filter"};
/*!
 * @depends ../core/AudioletNode.js
 */
var BitCrusher=function(a,b){AudioletNode.call(this,a,2,1);this.linkNumberOfOutputChannels(0,0);this.bits=new AudioletParameter(this,1,b)};extend(BitCrusher,AudioletNode);BitCrusher.prototype.generate=function(){var a=this.inputs[0];var d=Math.pow(2,this.bits.getValue())-1;var b=a.samples.length;for(var c=0;c<b;c++){this.outputs[0].samples[c]=Math.floor(a.samples[c]*d)/d}};BitCrusher.prototype.toString=function(){return"BitCrusher"};
/*!
 * @depends ../core/AudioletNode.js
 */
var BufferPlayer=function(c,b,e,d,a,f){AudioletNode.call(this,c,3,1);this.buffer=b;this.setNumberOfOutputChannels(0,this.buffer.numberOfChannels);this.position=d||0;this.playbackRate=new AudioletParameter(this,0,e||1);this.restartTrigger=new AudioletParameter(this,1,0);this.startPosition=new AudioletParameter(this,2,d||0);this.loop=new AudioletParameter(this,3,a||0);this.onComplete=f;this.restartTriggerOn=false;this.playing=true};extend(BufferPlayer,AudioletNode);BufferPlayer.prototype.generate=function(){var c=this.outputs[0];var d=c.samples.length;if(this.buffer.length==0||!this.playing){for(var e=0;e<d;e++){c.samples[e]=0}return}var g=this.playbackRate.getValue();var b=this.restartTrigger.getValue();var f=this.startPosition.getValue();var a=this.loop.getValue();if(b>0&&!this.restartTriggerOn){this.position=f;this.restartTriggerOn=true;this.playing=true}if(b<=0&&this.restartTriggerOn){this.restartTriggerOn=false}var d=this.buffer.channels.length;for(var e=0;e<d;e++){var h=this.buffer.getChannelData(e);c.samples[e]=h[Math.floor(this.position)]}this.position+=g;if(this.position>=this.buffer.length){if(a){this.position%=this.buffer.length}else{this.playing=false;if(this.onComplete){this.onComplete()}}}};BufferPlayer.prototype.toString=function(){return("Buffer player")};
/*!
 * @depends ../core/AudioletNode.js
 */
var CombFilter=function(a,d,c,b){AudioletNode.call(this,a,3,1);this.linkNumberOfOutputChannels(0,0);this.maximumDelayTime=d;this.delayTime=new AudioletParameter(this,1,c||1);this.decayTime=new AudioletParameter(this,2,b);this.buffers=[];this.readWriteIndex=0};extend(CombFilter,AudioletNode);CombFilter.prototype.generate=function(){var k=this.inputs[0];var c=this.outputs[0];var l=this.audiolet.device.sampleRate;var f=this.delayTime.getValue()*l;var h=this.decayTime.getValue()*l;var a=Math.exp(-3*f/h);var j=k.samples.length;for(var e=0;e<j;e++){if(e>=this.buffers.length){var b=this.maximumDelayTime*l;this.buffers.push(new Float32Array(b))}var d=this.buffers[e];var g=d[this.readWriteIndex];c.samples[e]=g;d[this.readWriteIndex]=k.samples[e]+a*g}this.readWriteIndex+=1;if(this.readWriteIndex>=f){this.readWriteIndex=0}};CombFilter.prototype.toString=function(){return"Comb Filter"};
/*!
 * @depends ../core/AudioletNode.js
 */
var Sine=function(a,b){AudioletNode.call(this,a,1,1);this.frequency=new AudioletParameter(this,0,b||440);this.phase=0};extend(Sine,AudioletNode);Sine.prototype.generate=function(){var a=this.outputs[0];var c=this.frequency.getValue();var b=this.audiolet.device.sampleRate;a.samples[0]=Math.sin(this.phase);this.phase+=2*Math.PI*c/b;if(this.phase>2*Math.PI){this.phase%=2*Math.PI}};Sine.prototype.toString=function(){return"Sine"};
/*!
 * @depends ../core/AudioletNode.js
 * @depends Sine.js
 */
var CrossFade=function(b,a){AudioletNode.call(this,b,3,1);this.linkNumberOfOutputChannels(0,0);this.position=new AudioletParameter(this,2,a||0.5)};extend(CrossFade,AudioletNode);CrossFade.prototype.generate=function(){var j=this.inputs[0];var h=this.inputs[1];var c=this.outputs[0];var g=this.position.getValue();var b=g*Math.PI/2;var f=Math.cos(b);var e=Math.sin(b);var k=c.samples.length;for(var d=0;d<k;d++){var a=j.samples[d]||0;var l=h.samples[d]||0;c.samples[d]=a*f+l*e}};CrossFade.prototype.toString=function(){return"Cross Fader"};
/*!
 * @depends ../core/AudioletNode.js
 */
var DampedCombFilter=function(b,e,d,c,a){AudioletNode.call(this,b,4,1);this.linkNumberOfOutputChannels(0,0);this.maximumDelayTime=e;this.delayTime=new AudioletParameter(this,1,d||1);this.decayTime=new AudioletParameter(this,2,c);this.damping=new AudioletParameter(this,3,a);var f=e*this.audiolet.device.sampleRate;this.buffers=[];this.readWriteIndex=0;this.filterStores=[]};extend(DampedCombFilter,AudioletNode);DampedCombFilter.prototype.generate=function(){var m=this.inputs[0];var c=this.outputs[0];var n=this.audiolet.device.sampleRate;var g=this.delayTime.getValue()*n;var k=this.decayTime.getValue()*n;var d=this.damping.getValue();var a=Math.exp(-3*g/k);var l=m.samples.length;for(var f=0;f<l;f++){if(f>=this.buffers.length){var b=this.maximumDelayTime*n;this.buffers.push(new Float32Array(b))}if(f>=this.filterStores.length){this.filterStores.push(0)}var e=this.buffers[f];var h=this.filterStores[f];var j=e[this.readWriteIndex];h=(j*(1-d))+(h*d);c.samples[f]=j;e[this.readWriteIndex]=m.samples[f]+a*h;this.filterStores[f]=h}this.readWriteIndex+=1;if(this.readWriteIndex>=g){this.readWriteIndex=0}};DampedCombFilter.prototype.toString=function(){return"Damped Comb Filter"};
/*!
 * @depends ../core/AudioletNode.js
 */
var DCFilter=function(b,a){AudioletNode.call(this,b,2,1);this.linkNumberOfOutputChannels(0,0);this.coefficient=new AudioletParameter(this,1,a||0.995);this.xValues=[];this.yValues=[]};extend(DCFilter,AudioletNode);DCFilter.prototype.generate=function(){var c=this.coefficient.getValue();var a=this.inputs[0];var b=a.samples.length;for(var e=0;e<b;e++){if(e>=this.xValues.length){this.xValues.push(0)}if(e>=this.yValues.length){this.yValues.push(0)}var d=a.samples[e];var f=d-this.xValues[e]+c*this.yValues[e];this.outputs[0].samples[e]=f;this.xValues[e]=d;this.yValues[e]=f}};DCFilter.prototype.toString=function(){return"DC Filter"};
/*!
 * @depends ../core/AudioletNode.js
 */
var Delay=function(a,c,b){AudioletNode.call(this,a,2,1);this.linkNumberOfOutputChannels(0,0);this.maximumDelayTime=c;this.delayTime=new AudioletParameter(this,1,b||1);var d=c*this.audiolet.device.sampleRate;this.buffers=[];this.readWriteIndex=0};extend(Delay,AudioletNode);Delay.prototype.generate=function(){var c=this.inputs[0];var b=this.outputs[0];var e=this.audiolet.device.sampleRate;var g=this.delayTime.getValue()*e;var d=c.samples.length;for(var f=0;f<d;f++){if(f>=this.buffers.length){var h=this.maximumDelayTime*e;this.buffers.push(new Float32Array(h))}var a=this.buffers[f];b.samples[f]=a[this.readWriteIndex];a[this.readWriteIndex]=c.samples[f]}this.readWriteIndex+=1;if(this.readWriteIndex>=g){this.readWriteIndex=0}};Delay.prototype.toString=function(){return"Delay"};
/*!
 * @depends ../core/AudioletNode.js
 */
var DiscontinuityDetector=function(b,a,c){AudioletNode.call(this,b,1,1);this.linkNumberOfOutputChannels(0,0);this.threshold=a||0.2;if(c){this.callback=c}this.lastValues=[]};extend(DiscontinuityDetector,AudioletNode);DiscontinuityDetector.prototype.callback=function(a,b){console.error("Discontinuity of "+a+" detected on channel "+b)};DiscontinuityDetector.prototype.generate=function(){var b=this.inputs[0];var a=this.outputs[0];var c=b.samples.length;for(var d=0;d<c;d++){if(d>=this.lastValues.length){this.lastValues.push(0)}var e=b.samples[d];var f=Math.abs(this.lastValues[d]-e);if(f>this.threshold){this.callback(f,d)}this.lastValues[d]=e}};DiscontinuityDetector.prototype.toString=function(){return"Discontinuity Detector"};
/*!
 * @depends ../core/AudioletNode.js
 */
var FeedbackDelay=function(b,e,d,a,c){AudioletNode.call(this,b,4,1);this.linkNumberOfOutputChannels(0,0);this.maximumDelayTime=e;this.delayTime=new AudioletParameter(this,1,d||1);this.feedback=new AudioletParameter(this,2,a||0.5);this.mix=new AudioletParameter(this,3,c||1);var f=e*this.audiolet.device.sampleRate;this.buffers=[];this.readWriteIndex=0};extend(FeedbackDelay,AudioletNode);FeedbackDelay.prototype.generate=function(){var j=this.inputs[0];var c=this.outputs[0];var k=this.audiolet.output.device.sampleRate;var g=this.delayTime.getValue()*k;var a=this.feedback.getValue();var n=this.mix.getValue();var h=j.samples.length;var d=this.buffers.length;for(var f=0;f<h;f++){if(f>=d){var b=this.maximumDelayTime*k;this.buffers.push(new Float32Array(b))}var e=this.buffers[f];var m=j.samples[f];var l=e[this.readWriteIndex];c.samples[f]=n*l+(1-n)*m;e[this.readWriteIndex]=m+a*l}this.readWriteIndex+=1;if(this.readWriteIndex>=g){this.readWriteIndex=0}};FeedbackDelay.prototype.toString=function(){return"Feedback Delay"};
/*!
 * @depends ../core/AudioletNode.js
 */
var FFT=function(a,b){AudioletNode.call(this,a,2,1);this.linkNumberOfOutputChannels(0,0);this.bufferSize=b;this.readWriteIndex=0;this.buffer=new Float32Array(this.bufferSize);this.realBuffer=new Float32Array(this.bufferSize);this.imaginaryBuffer=new Float32Array(this.bufferSize);this.reverseTable=new Uint32Array(this.bufferSize);this.calculateReverseTable()};extend(FFT,AudioletNode);FFT.prototype.generate=function(){var b=this.inputs[0];var a=this.outputs[0];if(b.samples.length==0){return}this.buffer[this.readWriteIndex]=b.samples[0];a.samples[0]=[this.realBuffer[this.readWriteIndex],this.imaginaryBuffer[this.readWriteIndex]];this.readWriteIndex+=1;if(this.readWriteIndex>=this.bufferSize){this.transform();this.readWriteIndex=0}};FFT.prototype.calculateReverseTable=function(){var a=1;var c=this.bufferSize>>1;while(a<this.bufferSize){for(var b=0;b<a;b++){this.reverseTable[b+a]=this.reverseTable[b]+c}a=a<<1;c=c>>1}};FFT.prototype.transform=function(){for(var e=0;e<this.bufferSize;e++){this.realBuffer[e]=this.buffer[this.reverseTable[e]];this.imaginaryBuffer[e]=0}var f=1;while(f<this.bufferSize){var l=Math.cos(-Math.PI/f);var c=Math.sin(-Math.PI/f);var g=1;var k=0;for(var b=0;b<f;b++){var e=b;while(e<this.bufferSize){var d=e+f;var h=(g*this.realBuffer[d])-(k*this.imaginaryBuffer[d]);var a=(g*this.imaginaryBuffer[d])+(k*this.realBuffer[d]);this.realBuffer[d]=this.realBuffer[e]-h;this.imaginaryBuffer[d]=this.imaginaryBuffer[e]-a;this.realBuffer[e]+=h;this.imaginaryBuffer[e]+=a;e+=f<<1}var j=g;g=(j*l)-(k*c);k=(j*c)+(k*l)}f=f<<1}};FFT.prototype.toString=function(){return"FFT"};
/*!
 * @depends ../operators/Multiply.js
 */
var Gain=function(a,b){Multiply.call(this,a,b);this.gain=this.value};extend(Gain,Multiply);Gain.prototype.toString=function(){return("Gain")};
/*!
 * @depends BiquadFilter.js
 */
var HighPassFilter=function(a,b){BiquadFilter.call(this,a,b)};extend(HighPassFilter,BiquadFilter);HighPassFilter.prototype.calculateCoefficients=function(e){var b=2*Math.PI*e/this.audiolet.device.sampleRate;var a=Math.cos(b);var c=Math.sin(b);var d=c/(2/Math.sqrt(2));this.b0=(1+a)/2;this.b1=-(1+a);this.b2=this.b0;this.a0=1+d;this.a1=-2*a;this.a2=1-d};HighPassFilter.prototype.toString=function(){return"High Pass Filter"};
/*!
 * @depends ../core/AudioletNode.js
 */
var IFFT=function(a,b){AudioletNode.call(this,a,2,1);this.linkNumberOfOutputChannels(0,0);this.bufferSize=b;this.readWriteIndex=0;this.buffer=new Float32Array(this.bufferSize);this.realBuffer=new Float32Array(this.bufferSize);this.imaginaryBuffer=new Float32Array(this.bufferSize);this.reverseTable=new Uint32Array(this.bufferSize);this.calculateReverseTable();this.reverseReal=new Float32Array(this.bufferSize);this.reverseImaginary=new Float32Array(this.bufferSize)};extend(IFFT,AudioletNode);IFFT.prototype.generate=function(){var c=this.inputs[0];var b=this.outputs[0];if(!c.samples.length){return}var a=c.samples[0];this.realBuffer[this.readWriteIndex]=a[0];this.imaginaryBuffer[this.readWriteIndex]=a[1];b.samples[0]=this.buffer[this.readWriteIndex];this.readWriteIndex+=1;if(this.readWriteIndex>=this.bufferSize){this.transform();this.readWriteIndex=0}};IFFT.prototype.calculateReverseTable=function(){var a=1;var c=this.bufferSize>>1;while(a<this.bufferSize){for(var b=0;b<a;b++){this.reverseTable[b+a]=this.reverseTable[b]+c}a=a<<1;c=c>>1}};IFFT.prototype.transform=function(){var e=1;for(var f=0;f<this.bufferSize;f++){this.imaginaryBuffer[f]*=-1}for(var f=0;f<this.bufferSize;f++){this.reverseReal[f]=this.realBuffer[this.reverseTable[f]];this.reverseImaginary[f]=this.imaginaryBuffer[this.reverseTable[f]]}this.realBuffer.set(this.reverseReal);this.imaginaryBuffer.set(this.reverseImaginary);while(e<this.bufferSize){var l=Math.cos(-Math.PI/e);var c=Math.sin(-Math.PI/e);var g=1;var k=0;for(var b=0;b<e;b++){f=b;while(f<this.bufferSize){var d=f+e;var h=(g*this.realBuffer[d])-(k*this.imaginaryBuffer[d]);var a=(g*this.imaginaryBuffer[d])+(k*this.realBuffer[d]);this.realBuffer[d]=this.realBuffer[f]-h;this.imaginaryBuffer[d]=this.imaginaryBuffer[f]-a;this.realBuffer[f]+=h;this.imaginaryBuffer[f]+=a;f+=e<<1}var j=g;g=(j*l)-(k*c);k=(j*c)+(k*l)}e=e<<1}for(f=0;f<this.bufferSize;f++){this.buffer[f]=this.realBuffer[f]/this.bufferSize}};IFFT.prototype.toString=function(){return"IFFT"};
/*!
 * @depends ../core/AudioletNode.js
 */
var Lag=function(a,c,b){AudioletNode.call(this,a,2,1);this.value=new AudioletParameter(this,0,c||0);this.lag=new AudioletParameter(this,1,b||1);this.lastValue=0;this.log001=Math.log(0.001)};extend(Lag,AudioletNode);Lag.prototype.generate=function(){var c=this.inputs[0];var b=this.outputs[0];var e=this.audiolet.device.sampleRate;var f=this.value.getValue();var g=this.lag.getValue();var d=Math.exp(this.log001/(g*e));var a=((1-d)*f)+(d*this.lastValue);b.samples[0]=a;this.lastValue=a};Lag.prototype.toString=function(){return"Lag"};
/*!
 * @depends ../core/AudioletGroup.js
 */
var Limiter=function(c,b,d,a){AudioletNode.call(this,c,4,1);this.linkNumberOfOutputChannels(0,0);this.threshold=new AudioletParameter(this,1,b||0.95);this.attack=new AudioletParameter(this,2,d||0.01);this.release=new AudioletParameter(this,2,a||0.4);this.followers=[]};extend(Limiter,AudioletNode);Limiter.prototype.generate=function(){var h=this.inputs[0];var a=this.outputs[0];var m=this.audiolet.device.sampleRate;var b=Math.pow(0.01,1/(this.attack.getValue()*m));var j=Math.pow(0.01,1/(this.release.getValue()*m));var d=this.threshold.getValue();var g=h.samples.length;for(var c=0;c<g;c++){if(c>=this.followers.length){this.followers.push(0)}var f=this.followers[c];var l=h.samples[c];var e=Math.abs(l);if(e>f){f=b*(f-e)+e}else{f=j*(f-e)+e}var k=f-d;if(k>0){a.samples[c]=l/(1+k)}else{a.samples[c]=l}this.followers[c]=f}};Limiter.prototype.toString=function(){return"Limiter"};
/*!
 * @depends ../core/AudioletNode.js
 */
var LinearCrossFade=function(b,a){AudioletNode.call(this,b,3,1);this.linkNumberOfOutputChannels(0,0);this.position=new AudioletParameter(this,2,a||0.5)};extend(LinearCrossFade,AudioletNode);LinearCrossFade.prototype.generate=function(){var h=this.inputs[0];var g=this.inputs[1];var b=this.outputs[0];var f=this.position.getValue();var e=1-f;var c=f;var j=b.samples.length;for(var d=0;d<j;d++){var a=h.samples[d]||0;var k=g.samples[d]||0;b.samples[d]=a*e+k*c}};LinearCrossFade.prototype.toString=function(){return"Linear Cross Fader"};
/*!
 * @depends BiquadFilter.js
 */
var LowPassFilter=function(a,b){BiquadFilter.call(this,a,b)};extend(LowPassFilter,BiquadFilter);LowPassFilter.prototype.calculateCoefficients=function(e){var b=2*Math.PI*e/this.audiolet.device.sampleRate;var a=Math.cos(b);var c=Math.sin(b);var d=c/(2/Math.sqrt(2));this.b0=(1-a)/2;this.b1=1-a;this.b2=this.b0;this.a0=1+d;this.a1=-2*a;this.a2=1-d};LowPassFilter.prototype.toString=function(){return"Low Pass Filter"};
/*!
 * @depends ../core/AudioletNode.js
 */
var Pan=function(a,b){AudioletNode.call(this,a,2,1);this.setNumberOfOutputChannels(0,2);if(b==null){var b=0.5}this.pan=new AudioletParameter(this,1,b)};extend(Pan,AudioletNode);Pan.prototype.generate=function(){var c=this.inputs[0];var b=this.outputs[0];var e=this.pan.getValue();var d=c.samples[0]||0;var a=e*Math.PI/2;b.samples[0]=d*Math.cos(a);b.samples[1]=d*Math.sin(a)};Pan.prototype.toString=function(){return"Stereo Panner"};
/*!
 * @depends Envelope.js
 */
var PercussiveEnvelope=function(b,c,g,a,e){var d=[0,1,0];var f=[g,a];Envelope.call(this,b,c,d,f,null,e);this.attack=this.times[0];this.release=this.times[1]};extend(PercussiveEnvelope,Envelope);PercussiveEnvelope.prototype.toString=function(){return"Percussive Envelope"};
/*!
 * @depends ../core/AudioletNode.js
 */
var Pulse=function(a,b,c){AudioletNode.call(this,a,2,1);this.frequency=new AudioletParameter(this,0,b||440);this.pulseWidth=new AudioletParameter(this,1,c||0.5);this.phase=0};extend(Pulse,AudioletNode);Pulse.prototype.generate=function(){var c=this.pulseWidth.getValue();this.outputs[0].samples[0]=(this.phase<c)?1:-1;var b=this.frequency.getValue();var a=this.audiolet.device.sampleRate;this.phase+=b/a;if(this.phase>1){this.phase%=1}};Pulse.prototype.toString=function(){return"Pulse"};
/*!
 * @depends ../core/AudioletNode.js
 * @depends ../core/AudioletGroup.js
 */
var Reverb=function(d,g,a,c){AudioletNode.call(this,d,4,1);this.initialMix=0.33;this.fixedGain=0.015;this.initialDamping=0.5;this.scaleDamping=0.4;this.initialRoomSize=0.5;this.scaleRoom=0.28;this.offsetRoom=0.7;this.combTuning=[1116,1188,1277,1356,1422,1491,1557,1617];this.allPassTuning=[556,441,341,225];var g=g||this.initialMix;this.mix=new AudioletParameter(this,1,g);var a=a||this.initialRoomSize;this.roomSize=new AudioletParameter(this,2,a);var c=c||this.initialDamping;this.damping=new AudioletParameter(this,3,c);this.combBuffers=[];this.combIndices=[];this.filterStores=[];var b=this.combTuning.length;for(var f=0;f<b;f++){this.combBuffers.push(new Float32Array(this.combTuning[f]));this.combIndices.push(0);this.filterStores.push(0)}this.allPassBuffers=[];this.allPassIndices=[];var e=this.allPassTuning.length;for(var f=0;f<e;f++){this.allPassBuffers.push(new Float32Array(this.allPassTuning[f]));this.allPassIndices.push(0)}};extend(Reverb,AudioletNode);Reverb.prototype.generate=function(){var k=this.mix.getValue();var m=this.roomSize.getValue();var d=this.damping.getValue();var a=this.combTuning.length;var s=this.allPassTuning.length;var q=this.inputs[0].samples[0]||0;var j=q;q*=this.fixedGain;var c=q;var d=d*this.scaleDamping;var e=m*this.scaleRoom+this.offsetRoom;for(var r=0;r<a;r++){var o=this.combIndices[r];var p=this.combBuffers[r];var n=this.filterStores[r];var h=p[o];n=(h*(1-d))+(n*d);q+=h;p[o]=c+e*n;o+=1;if(o>=p.length){o=0}this.combIndices[r]=o;this.filterStores[r]=n}for(var r=0;r<s;r++){var b=this.allPassBuffers[r];var g=this.allPassIndices[r];var l=q;var f=b[g];q=-q+f;b[g]=l+(f*0.5);g+=1;if(g>=b.length){g=0}this.allPassIndices[r]=g}this.outputs[0].samples[0]=k*q+(1-k)*j};Reverb.prototype.toString=function(){return"Reverb"};
/*!
 * @depends ../core/AudioletNode.js
 */
var Saw=function(a,b){AudioletNode.call(this,a,1,1);this.frequency=new AudioletParameter(this,0,b||440);this.phase=0};extend(Saw,AudioletNode);Saw.prototype.generate=function(){var a=this.outputs[0];var c=this.frequency.getValue();var b=this.audiolet.device.sampleRate;a.samples[0]=((this.phase/2+0.25)%0.5-0.25)*4;this.phase+=c/b;if(this.phase>1){this.phase%=1}};Saw.prototype.toString=function(){return"Saw"};
/*!
 * @depends ../core/AudioletNode.js
 */
var SoftClip=function(a){AudioletNode.call(this,a,1,1);this.linkNumberOfOutputChannels(0,0)};extend(SoftClip,AudioletNode);SoftClip.prototype.generate=function(){var b=this.inputs[0];var a=this.outputs[0];var c=b.samples.length;for(var d=0;d<c;d++){var e=b.samples[d];if(e>0.5||e<-0.5){a.samples[d]=(Math.abs(e)-0.25)/e}else{a.samples[d]=e}}};SoftClip.prototype.toString=function(){return("SoftClip")};
/*!
 * @depends ../core/AudioletNode.js
 */
var Square=function(a,b){AudioletNode.call(this,a,1,1);this.frequency=new AudioletParameter(this,0,b||440);this.phase=0};extend(Square,AudioletNode);Square.prototype.generate=function(){var a=this.outputs[0];var c=this.frequency.getValue();var b=this.audiolet.device.sampleRate;a.samples[0]=this.phase>0.5?1:-1;this.phase+=c/b;if(this.phase>1){this.phase%=1}};Square.prototype.toString=function(){return"Square"};
/*!
 * @depends ../core/AudioletNode.js
 */
var Triangle=function(a,b){AudioletNode.call(this,a,1,1);this.frequency=new AudioletParameter(this,0,b||440);this.phase=0};extend(Triangle,AudioletNode);Triangle.prototype.generate=function(){var a=this.outputs[0];var c=this.frequency.getValue();var b=this.audiolet.device.sampleRate;a.samples[0]=1-4*Math.abs((this.phase+0.25)%1-0.5);this.phase+=c/b;if(this.phase>1){this.phase%=1}};Triangle.prototype.toString=function(){return"Triangle"};
/*!
 * @depends ../core/AudioletNode.js
 */
var TriggerControl=function(b,a){AudioletNode.call(this,b,0,1);this.trigger=new AudioletParameter(this,null,a||0)};extend(TriggerControl,AudioletNode);TriggerControl.prototype.generate=function(){if(this.trigger.getValue()>0){this.outputs[0].samples[0]=1;this.trigger.setValue(0)}else{this.outputs[0].samples[0]=0}};TriggerControl.prototype.toString=function(){return"Trigger Control"};
/*!
 * @depends ../core/AudioletNode.js
 */
var UpMixer=function(a,b){AudioletNode.call(this,a,1,1);this.outputs[0].numberOfChannels=b};extend(UpMixer,AudioletNode);UpMixer.prototype.generate=function(){var c=this.inputs[0];var b=this.outputs[0];var e=c.samples.length;var a=b.samples.length;if(e==a){b.samples=c.samples}else{for(var d=0;d<a;d++){b.samples[d]=c.samples[d%e]}}};UpMixer.prototype.toString=function(){return"UpMixer"};var WebKitBufferPlayer=function(a,b){AudioletNode.call(this,a,0,1);this.onComplete=b;this.isWebKit=this.audiolet.device.sink instanceof Sink.sinks.webkit;this.ready=false;this.setNumberOfOutputChannels(0,0);if(!this.isWebKit){return}this.context=this.audiolet.device.sink._context;this.jsNode=null;this.source=null;this.ready=false;this.loaded=false;this.buffers=[];this.readPosition=0;this.endTime=null};extend(WebKitBufferPlayer,AudioletNode);WebKitBufferPlayer.prototype.load=function(a,b,c){if(!this.isWebKit){return}this.stop();this.xhr=new XMLHttpRequest();this.xhr.open("GET",a,true);this.xhr.responseType="arraybuffer";this.xhr.onload=this.onLoad.bind(this,b,c);this.xhr.onerror=c;this.xhr.send()};WebKitBufferPlayer.prototype.stop=function(){this.ready=false;this.loaded=false;this.buffers=[];this.readPosition=0;this.endTime=null;this.setNumberOfOutputChannels(0);this.disconnectWebKitNodes()};WebKitBufferPlayer.prototype.disconnectWebKitNodes=function(){if(this.source&&this.jsNode){this.source.disconnect(this.jsNode);this.jsNode.disconnect(this.context.destination);this.source=null;this.jsNode=null}};WebKitBufferPlayer.prototype.onLoad=function(a,b){this.context.decodeAudioData(this.xhr.response,function(c){this.onDecode(c);a()}.bind(this),b)};WebKitBufferPlayer.prototype.onDecode=function(a){this.fileBuffer=a;this.source=this.context.createBufferSource();this.source.buffer=this.fileBuffer;var b=this.fileBuffer.numberOfChannels;this.setNumberOfOutputChannels(0,b);this.jsNode=this.context.createJavaScriptNode(4096,b,0);this.jsNode.onaudioprocess=this.onData.bind(this);this.source.connect(this.jsNode);this.jsNode.connect(this.context.destination);this.source.noteOn(0);this.endTime=this.context.currentTime+this.fileBuffer.duration;this.loaded=true};WebKitBufferPlayer.prototype.onData=function(c){if(this.loaded){this.ready=true}var a=c.inputBuffer.numberOfChannels;for(var b=0;b<a;b++){this.buffers[b]=c.inputBuffer.getChannelData(b);this.readPosition=0}};WebKitBufferPlayer.prototype.generate=function(){if(!this.ready){return}var a=this.outputs[0];var b=a.samples.length;for(var c=0;c<b;c++){a.samples[c]=this.buffers[c][this.readPosition]}this.readPosition+=1;if(this.context.currentTime>this.endTime){this.stop();this.onComplete()}};
/*!
 * @depends ../core/AudioletNode.js
 */
var WhiteNoise=function(a){AudioletNode.call(this,a,0,1)};extend(WhiteNoise,AudioletNode);WhiteNoise.prototype.generate=function(){this.outputs[0].samples[0]=Math.random()*2-1};WhiteNoise.prototype.toString=function(){return"White Noise"};var Pattern=function(){};Pattern.prototype.next=function(){return null};Pattern.prototype.valueOf=function(a){if(a instanceof Pattern){return(a.next())}else{return(a)}};Pattern.prototype.reset=function(){};
/*!
 * @depends Pattern.js
 */
var PArithmetic=function(c,b,a){Pattern.call(this);this.start=c;this.value=c;this.step=b;this.repeats=a;this.position=0};extend(PArithmetic,Pattern);PArithmetic.prototype.next=function(){var a;if(this.position==0){a=this.value;this.position+=1}else{if(this.position<this.repeats){var b=this.valueOf(this.step);if(b!=null){this.value+=b;a=this.value;this.position+=1}else{a=null}}else{a=null}}return(a)};PArithmetic.prototype.reset=function(){this.value=this.start;this.position=0;if(this.step instanceof Pattern){this.step.reset()}};var Pseries=PArithmetic;
/*!
 * @depends Pattern.js
 */
var PChoose=function(b,a){Pattern.call(this);this.list=b;this.repeats=a||1;this.position=0};extend(PChoose,Pattern);PChoose.prototype.next=function(){var b;if(this.position<this.repeats){var a=Math.floor(Math.random()*this.list.length);var c=this.list[a];var d=this.valueOf(c);if(d!=null){if(!(c instanceof Pattern)){this.position+=1}b=d}else{if(c instanceof Pattern){c.reset()}this.position+=1;b=this.next()}}else{b=null}return(b)};PChoose.prototype.reset=function(){this.position=0;for(var a=0;a<this.list.length;a++){var b=this.list[a];if(b instanceof Pattern){b.reset()}}};var Prand=PChoose;
/*!
 * @depends Pattern.js
 */
var PGeometric=function(c,b,a){Pattern.call(this);this.start=c;this.value=c;this.step=b;this.repeats=a;this.position=0};extend(PGeometric,Pattern);PGeometric.prototype.next=function(){var a;if(this.position==0){a=this.value;this.position+=1}else{if(this.position<this.repeats){var b=this.valueOf(this.step);if(b!=null){this.value*=b;a=this.value;this.position+=1}else{a=null}}else{a=null}}return(a)};PGeometric.prototype.reset=function(){this.value=this.start;this.position=0;if(this.step instanceof Pattern){this.step.reset()}};var Pgeom=PGeometric;
/*!
 * @depends Pattern.js
 */
var PProxy=function(a){Pattern.call(this);if(a){this.pattern=a}};extend(PProxy,Pattern);PProxy.prototype.next=function(){var a;if(this.pattern){var a=this.pattern.next()}else{a=null}return a};var Pp=PProxy;
/*!
 * @depends Pattern.js
 */
var PRandom=function(a,c,b){Pattern.call(this);this.low=a;this.high=c;this.repeats=b;this.position=0};extend(PRandom,Pattern);PRandom.prototype.next=function(){var b;if(this.position<this.repeats){var a=this.valueOf(this.low);var c=this.valueOf(this.high);if(a!=null&&c!=null){b=a+Math.random()*(c-a);this.position+=1}else{b=null}}else{b=null}return(b)};PRandom.prototype.reset=function(){this.position=0};var Pwhite=PRandom;
/*!
 * @depends Pattern.js
 */
var PSequence=function(b,a,c){Pattern.call(this);this.list=b;this.repeats=a||1;this.position=0;this.offset=c||0};extend(PSequence,Pattern);PSequence.prototype.next=function(){var b;if(this.position<this.repeats*this.list.length){var a=(this.position+this.offset)%this.list.length;var c=this.list[a];var d=this.valueOf(c);if(d!=null){if(!(c instanceof Pattern)){this.position+=1}b=d}else{if(c instanceof Pattern){c.reset()}this.position+=1;b=this.next()}}else{b=null}return(b)};PSequence.prototype.reset=function(){this.position=0;for(var a=0;a<this.list.length;a++){var b=this.list[a];if(b instanceof Pattern){b.reset()}}};var Pseq=PSequence;
/*!
 * @depends Pattern.js
 */
var PSeries=function(b,a,c){Pattern.call(this);this.list=b;this.repeats=a||1;this.position=0;this.offset=c||0};extend(PSeries,Pattern);PSeries.prototype.next=function(){var b;if(this.position<this.repeats){var a=(this.position+this.offset)%this.list.length;var c=this.list[a];var d=this.valueOf(c);if(d!=null){if(!(c instanceof Pattern)){this.position+=1}b=d}else{if(c instanceof Pattern){c.reset()}this.position+=1;b=this.next()}}else{b=null}return(b)};PSeries.prototype.reset=function(){this.position=0;for(var a=0;a<this.list.length;a++){var b=this.list[a];if(b instanceof Pattern){b.reset()}}};var Pser=PSeries;
/*!
 * @depends Pattern.js
 */
var PShuffle=function(d,a){Pattern.call(this);this.list=[];while(d.length){var b=Math.floor(Math.random()*d.length);var c=d.splice(b,1);this.list.push(c)}this.repeats=a;this.position=0};extend(PShuffle,Pattern);PShuffle.prototype.next=function(){var b;if(this.position<this.repeats*this.list.length){var a=(this.position+this.offset)%this.list.length;var c=this.list[a];var d=this.valueOf(c);if(d!=null){if(!(c instanceof Pattern)){this.position+=1}b=d}else{if(c instanceof Pattern){c.reset()}this.position+=1;b=this.next()}}else{b=null}return(b)};var Pshuffle=PShuffle;var Scale=function(b,a){this.degrees=b;this.tuning=a||new EqualTemperamentTuning(12)};Scale.prototype.getFrequency=function(d,a,b){var c=a;b+=Math.floor(d/this.degrees.length);d%=this.degrees.length;c*=Math.pow(this.tuning.octaveRatio,b);c*=this.tuning.ratios[this.degrees[d]];return c};
/*!
 * @depends Scale.js
 */
var MajorScale=function(){Scale.call(this,[0,2,4,5,7,9,11])};extend(MajorScale,Scale);
/*!
 * @depends Scale.js
 */
var MinorScale=function(){Scale.call(this,[0,2,3,5,7,8,10])};extend(MinorScale,Scale);var Tuning=function(d,c){this.semitones=d;this.octaveRatio=c||2;this.ratios=[];var b=this.semitones.length;for(var a=0;a<b;a++){this.ratios.push(Math.pow(2,this.semitones[a]/b))}};
/*!
 * @depends Tuning.js
 */
var EqualTemperamentTuning=function(b){var c=[];for(var a=0;a<b;a++){c.push(a)}Tuning.call(this,c,2)};extend(EqualTemperamentTuning,Tuning);var Sink=this.Sink=function(d){function c(j,h,l,f){var e=c.sinks.list,g;for(g=0;g<e.length;g++){if(e[g].enabled){try{return new e[g](j,h,l,f)}catch(k){}}}throw c.Error(2)}function b(){}c.SinkClass=b;b.prototype=c.prototype={sampleRate:44100,channelCount:2,bufferSize:4096,writePosition:0,previousHit:0,ringOffset:0,channelMode:"interleaved",isReady:false,start:function(g,f,h,e){this.channelCount=isNaN(f)||f===null?this.channelCount:f;this.bufferSize=isNaN(h)||h===null?this.bufferSize:h;this.sampleRate=isNaN(e)||e===null?this.sampleRate:e;this.readFn=g;this.activeRecordings=[];this.previousHit=+new Date();c.EventEmitter.call(this);c.emit("init",[this].concat([].slice.call(arguments)))},process:function(g,h){this.emit("preprocess",arguments);if(this.ringBuffer){(this.channelMode==="interleaved"?this.ringSpin:this.ringSpinInterleaved).apply(this,arguments)}if(this.channelMode==="interleaved"){this.emit("audioprocess",arguments);if(this.readFn){this.readFn.apply(this,arguments)}}else{var e=c.deinterleave(g,this.channelCount),f=[e].concat([].slice.call(arguments,1));this.emit("audioprocess",f);if(this.readFn){this.readFn.apply(this,f)}c.interleave(e,this.channelCount,g)}this.emit("postprocess",arguments);this.previousHit=+new Date();this.writePosition+=g.length/h},getPlaybackTime:function(){return this.writePosition-this.bufferSize},ready:function(){if(this.isReady){return}this.isReady=true;this.emit("ready",[])}};function a(l,j,f,h,g){f=f||j.prototype;j.prototype=new c.SinkClass();j.prototype.type=l;j.enabled=!h;var e;for(e in f){if(f.hasOwnProperty(e)){j.prototype[e]=f[e]}}a[l]=j;a.list[g?"unshift":"push"](j)}c.sinks=c.devices=a;c.sinks.list=[];c.singleton=function(){var e=c.apply(null,arguments);c.singleton=function(){return e};return e};d.Sink=c;return c}(function(){return this}());void function(a){function b(){var c;for(c in b.prototype){if(b.prototype.hasOwnProperty(c)){this[c]=b.prototype[c]}}this._listeners={}}b.prototype={_listeners:null,emit:function(d,c){if(this._listeners[d]){for(var e=0;e<this._listeners[d].length;e++){this._listeners[d][e].apply(this,c)}}return this},on:function(c,d){this._listeners[c]=this._listeners[c]||[];this._listeners[c].push(d);return this},off:function(c,e){if(this._listeners[c]){if(!e){delete this._listeners[c];return this}for(var d=0;d<this._listeners[c].length;d++){if(this._listeners[c][d]===e){this._listeners[c].splice(d--,1)}}if(!this._listeners[c].length){delete this._listeners[c]}}return this}};a.EventEmitter=b;b.call(a)}(this.Sink);void function(a){a.doInterval=function(f,d){var e,c;function b(g){if(a.inlineWorker.working&&!g){e=a.inlineWorker('setInterval(function (){ postMessage("tic"); }, '+d+");");e.onmessage=function(){f()};c=function(){e.terminate()}}else{e=setInterval(f,d);c=function(){clearInterval(e)}}}if(a.inlineWorker.ready){b()}else{a.inlineWorker.on("ready",function(){b()})}return function(){if(!c){if(!a.inlineWorker.ready){a.inlineWorker.on("ready",function(){if(c){c()}})}}else{c()}}}}(this.Sink);void function(d){var b,h,j,f;void function(k,m){function l(p,q){var n,o=q.slice();for(n=o.shift();typeof n!=="undefined";n=o.shift()){n=Function("return typeof "+n+p+'=== "undefined" ? undefined : '+n+p)();if(n){return n}}}b=l("Blob",k);h=l("BlobBuilder",k);j=l("URL",m);f=l("btoa",[""])}(["","Moz","WebKit","MS"],["","webkit"]);var g=b&&j&&function(l,k){return j.createObjectURL(new b([l],{type:k}))};var c=h&&j&&function(l,k){var m=new h();m.append(l);return j.createObjectURL(m.getBlob(k))};var a=f&&function(l,k){return"data:"+k+";base64,"+f(l)};var e=g||c||a;if(!e){return}if(g){e.createBlob=g}if(c){e.createBlobBuilder=c}if(a){e.createData=a}if(b){e.Blob=b}if(h){e.BlobBuilder=h}if(j){e.URL=j}d.createDynURL=e;d.revokeDynURL=function(k){if(typeof k==="string"&&k.indexOf("data:")===0){return false}else{return j.revokeObjectURL(k)}}}(this.Sink);void function(a){function b(d){if(!b.hasOwnProperty(d)){throw b(1)}if(!(this instanceof b)){return new b(d)}var c;for(c in b[d]){if(b[d].hasOwnProperty(c)){this[c]=b[d][c]}}this.code=d}b.prototype=new Error();b.prototype.toString=function(){return"SinkError 0x"+this.code.toString(16)+": "+this.message};b[1]={message:"No such error code.",explanation:"The error code does not exist."};b[2]={message:"No audio sink available.",explanation:"The audio device may be busy, or no supported output API is available for this browser."};b[16]={message:"Buffer underflow.",explanation:"Trying to recover..."};b[17]={message:"Critical recovery fail.",explanation:"The buffer underflow has reached a critical point, trying to recover, but will probably fail anyway."};b[18]={message:"Buffer size too large.",explanation:"Unable to allocate the buffer due to excessive length, please try a smaller buffer. Buffer size should probably be smaller than the sample rate."};a.Error=b}(this.Sink);void function(b){var d=Object.defineProperty?function(g,e,f){Object.defineProperty(g,e,{value:f,configurable:true,writable:true})}:function(g,e,f){g[e]=f};function c(){d(this,"terminate",this._terminate);b.revokeDynURL(this._url);delete this._url;delete this._terminate;return this.terminate()}function a(e){function f(l,m,j){try{var k=l(m,"text/javascript");var o=new Worker(k);d(o,"_url",k);d(o,"_terminate",o.terminate);d(o,"terminate",c);if(a.type){return o}a.type=j;a.createURL=l;return o}catch(n){return null}}var h=b.createDynURL;var g;if(a.createURL){return f(a.createURL,e,a.type)}g=f(h.createBlob,e,"blob");if(g){return g}g=f(h.createBlobBuilder,e,"blobbuilder");if(g){return g}g=f(h.createData,e,"data");return g}b.EventEmitter.call(a);a.test=function(){a.ready=a.working=false;a.type="";a.createURL=null;var g=a("this.onmessage=function(e){postMessage(e.data)}");var f="inlineWorker";function e(h){if(a.ready){return}a.ready=true;a.working=h;a.emit("ready",[h]);a.off("ready");if(h&&g){g.terminate()}g=null}if(!g){setTimeout(function(){e(false)},0)}else{g.onmessage=function(h){e(h.data===f)};g.postMessage(f);setTimeout(function(){e(false)},1000)}};b.inlineWorker=a;a.test()}(this.Sink);void function(a){a.sinks("audiodata",function(){var m=this,d=0,k=null,j=new Audio(),h,g,e,f,l,b;m.start.apply(m,arguments);m.preBufferSize=isNaN(arguments[4])||arguments[4]===null?this.preBufferSize:arguments[4];function c(){if(k){h=j.mozWriteAudio(k);d+=h;if(h<k.length){k=k.subarray(h);return k}k=null}g=j.mozCurrentSampleOffset();e=Number(g+(l!==g?m.bufferSize:m.preBufferSize)*m.channelCount-d);if(g===l){m.emit("error",[a.Error(16)])}if(e>0||l===g){m.ready();try{f=new Float32Array(l===g?m.preBufferSize*m.channelCount:m.forceBufferSize?e<m.bufferSize*2?m.bufferSize*2:e:e)}catch(n){m.emit("error",[a.Error(18)]);m.kill();return}m.process(f,m.channelCount);h=m._audio.mozWriteAudio(f);if(h<f.length){k=f.subarray(h)}d+=h}l=g}j.mozSetup(m.channelCount,m.sampleRate);this._timers=[];this._timers.push(a.doInterval(function(){if(+new Date()-m.previousHit>2000){m._audio=j=new Audio();j.mozSetup(m.channelCount,m.sampleRate);d=0;m.emit("error",[a.Error(17)])}},1000));this._timers.push(a.doInterval(c,m.interval));m._bufferFill=c;m._audio=j},{bufferSize:24576,preBufferSize:24576,forceBufferSize:false,interval:100,kill:function(){while(this._timers.length){this._timers.shift()()}this.emit("kill")},getPlaybackTime:function(){return this._audio.mozCurrentSampleOffset()/this.channelCount}},false,true);a.sinks.moz=a.sinks.audiodata}(this.Sink);void function(a){a.sinks("dummy",function(){var b=this;b.start.apply(b,arguments);function c(){var d=new Float32Array(b.bufferSize*b.channelCount);b.process(d,b.channelCount)}b._kill=a.doInterval(c,b.bufferSize/b.sampleRate*1000);b._callback=c},{kill:function(){this._kill();this.emit("kill")}},true)}(this.Sink);(function(b,a){a=b.sinks;function d(f){var e=document.createElement("audio");if(f){e.src=f}return e}a("wav",function(){var e=this,j=new a.wav.wavAudio(),k=typeof k==="undefined"?audioLib.PCMData:k;e.start.apply(e,arguments);var g=new Float32Array(e.bufferSize*e.channelCount),h=new Float32Array(e.bufferSize*e.channelCount);if(!d().canPlayType("audio/wav; codecs=1")||!btoa){throw 0}function f(){if(e._audio.hasNextFrame){return}e.ready();b.memcpy(h,0,g,0);e.process(g,e.channelCount);e._audio.setSource("data:audio/wav;base64,"+btoa(audioLib.PCMData.encode({data:g,sampleRate:e.sampleRate,channelCount:e.channelCount,bytesPerSample:e.quality})));if(!e._audio.currentFrame.src){e._audio.nextClip()}}e.kill=b.doInterval(f,40);e._bufferFill=f;e._audio=j},{quality:1,bufferSize:22050,getPlaybackTime:function(){var e=this._audio;return(e.currentFrame?e.currentFrame.currentTime*this.sampleRate:0)+e.samples}});function c(){var e=this;e.currentFrame=d();e.nextFrame=d();e._onended=function(){e.samples+=e.bufferSize;e.nextClip()}}c.prototype={samples:0,nextFrame:null,currentFrame:null,_onended:null,hasNextFrame:false,nextClip:function(){var e=this.currentFrame;this.currentFrame=this.nextFrame;this.nextFrame=e;this.hasNextFrame=false;this.currentFrame.play()},setSource:function(e){this.nextFrame.src=e;this.nextFrame.addEventListener("ended",this._onended,true);this.hasNextFrame=true}};a.wav.wavAudio=c}(this.Sink));(function(a,b){var c=typeof window==="undefined"?null:window.webkitAudioContext||window.AudioContext;a("webaudio",function(l,k,g,m){var n=this,d=a.webaudio.getContext(),j=null,h=null,f=null;n.start.apply(n,arguments);j=d.createJavaScriptNode(n.bufferSize,0,n.channelCount);function e(v){var o=v.outputBuffer,q=o.numberOfChannels,s,p,r=o.length,w=o.size,t=new Array(q),u;n.ready();h=h&&h.length===r*q?h:new Float32Array(r*q);f=f&&f.length===h.length?f:new Float32Array(r*q);h.set(f);for(s=0;s<q;s++){t[s]=o.getChannelData(s)}n.process(h,n.channelCount);for(s=0;s<r;s++){for(p=0;p<q;p++){t[p][s]=h[s*n.channelCount+p]}}}n.sampleRate=d.sampleRate;j.onaudioprocess=e;j.connect(d.destination);n._context=d;n._node=j;n._callback=e;b.push(j)},{kill:function(){this._node.disconnect(0);for(var d=0;d<b.length;d++){if(b[d]===this._node){b.splice(d--,1)}}this._node=this._context=null;this.emit("kill")},getPlaybackTime:function(){return this._context.currentTime*this.sampleRate}},false,true);a.webkit=a.webaudio;a.webaudio.fix82795=b;a.webaudio.getContext=function(){var d=new c();a.webaudio.getContext=function(){return d};return d}}(this.Sink.sinks,[]));(function(a){a.sinks("worker",function(){var b=this,e=(function(){return this}()),c=null,h=null,d=null;b.start.apply(b,arguments);importScripts();function f(o){if(!b.isReady){b.initMSP(o)}b.ready();var m=b.channelCount,j=o.audioLength,p,k;c=c&&c.length===j*m?c:new Float32Array(j*m);h=h&&h.length===c.length?h:new Float32Array(j*m);d=d&&d.length===c.length?d:new Float32Array(j*m);c.set(d);h.set(d);b.process(c,b.channelCount);for(p=0;p<m;p++){for(k=0;k<j;k++){h[p*o.audioLength+k]=c[p+k*m]}}o.writeAudio(h)}function g(s){if(!b.isReady){b.initWA(s)}b.ready();var j=s.outputBuffer,m=j.numberOfChannels,p,k,o=j.length,t=j.size,q=new Array(m),r;c=c&&c.length===o*m?c:new Float32Array(o*m);d=d&&d.length===c.length?d:new Float32Array(o*m);c.set(d);for(p=0;p<m;p++){q[p]=j.getChannelData(p)}b.process(c,b.channelCount);for(p=0;p<o;p++){for(k=0;k<m;k++){q[k][p]=c[p*b.channelCount+k]}}}e.onprocessmedia=f;e.onaudioprocess=g;b._mspBufferFill=f;b._waBufferFill=g},{ready:false,initMSP:function(b){this.channelCount=b.audioChannels;this.sampleRate=b.audioSampleRate;this.bufferSize=b.audioLength*this.channelCount;this.ready=true;this.emit("ready",[])},initWA:function(d){var c=d.outputBuffer;this.channelCount=c.numberOfChannels;this.sampleRate=c.sampleRate;this.bufferSize=c.length*this.channelCount;this.ready=true;this.emit("ready",[])}})}(this.Sink));(function(a){a.deinterleave=function(c,g){var b=c.length,f=b/g,d=[],e,h;for(e=0;e<g;e++){d[e]=new Float32Array(f);for(h=0;h<f;h++){d[e][h]=c[h*g+e]}}return d};a.interleave=function(d,g,c){g=g||d.length;var b=d[0].length,f=d.length,e,h;c=c||new Float32Array(b*g);for(e=0;e<f;e++){for(h=0;h<b;h++){c[e+h*g]=d[e][h]}}return c};a.mix=function(e){var d=[].slice.call(arguments,1),b,f,g;for(g=0;g<d.length;g++){b=Math.max(e.length,d[g].length);for(f=0;f<b;f++){e[f]+=d[g][f]}}return e};a.resetBuffer=function(c){var b=c.length,d;for(d=0;d<b;d++){c[d]=0}return c};a.clone=function(d,b){var c=d.length,e;b=b||new Float32Array(c);for(e=0;e<c;e++){b[e]=d[e]}return b};a.createDeinterleaved=function(e,d){var b=new Array(d),c;for(c=0;c<d;c++){b[c]=new Float32Array(e)}return b};a.memcpy=function(f,b,g,d,e){f=f.subarray||f.slice?f:f.buffer;g=g.subarray||g.slice?g:g.buffer;f=b?f.subarray?f.subarray(b,e&&b+e):f.slice(b,e&&b+e):f;if(g.set){g.set(f,d)}else{for(var c=0;c<f.length;c++){g[c+d]=f[c]}}return g};a.memslice=function(b,d,c){return b.subarray?b.subarray(d,c):b.slice(d,c)};a.mempad=function(b,c,d){c=c.length?c:new (b.constructor)(c);a.memcpy(b,0,c,d);return c};a.linspace=function(h,c,d){var b,e,g,f;d=d.length?(b=d.length)&&d:Array(b=d);f=(c-h)/--b;for(g=h+f,e=1;e<b;e++,g+=f){d[e]=g}d[0]=h;d[b]=c;return d};a.ftoi=function(d,f,c){var e,b=Math.pow(2,f-1);c=c||new (d.constructor)(d.length);for(e=0;e<d.length;e++){c[e]=~~(b*d[e])}return c}}(this.Sink));(function(a){function b(e,d){a.EventEmitter.call(this);this.bufferSize=isNaN(e)||e===null?this.bufferSize:e;this.channelCount=isNaN(d)||d===null?this.channelCount:d;var c=this;this.callback=function(){return c.process.apply(c,arguments)};this.resetBuffer()}b.prototype={buffer:null,zeroBuffer:null,parentSink:null,bufferSize:4096,channelCount:2,offset:null,resetBuffer:function(){this.buffer=new Float32Array(this.bufferSize);this.zeroBuffer=new Float32Array(this.bufferSize)},process:function(c,e){if(this.offset===null){this.loadBuffer()}for(var d=0;d<c.length;d++){if(this.offset>=this.buffer.length){this.loadBuffer()}c[d]=this.buffer[this.offset++]}},loadBuffer:function(){this.offset=0;a.memcpy(this.zeroBuffer,0,this.buffer,0);this.emit("audioprocess",[this.buffer,this.channelCount])}};a.Proxy=b;a.prototype.createProxy=function(d){var c=new a.Proxy(d,this.channelCount);c.parentSink=this;this.on("audioprocess",c.callback);return c}}(this.Sink));(function(a){(function(){function b(c,d){if(c&&d){b[c]=d}else{if(c&&b[c] instanceof Function){a.interpolate=b[c]}}return b[c]}a.interpolation=b;b("linear",function(c,g){var f=Math.floor(g),e=f+1,d=g-f;e=e<c.length?e:0;return c[f]*(1-d)+c[e]*d});b("nearest",function(c,d){return d>=c.length-0.5?c[0]:c[Math.round(d)]});b("linear")}());a.resample=function(j,b,o,p,d){var h=arguments.length,f=h===2?b:h===3?b/o:p/b*d/o,g=j.length,c=Math.ceil(g/f),m=new Float32Array(c),k,e;for(k=0,e=0;k<g;k+=f){m[e++]=a.interpolate(j,k)}return m}}(this.Sink));void function(b){b.on("init",function(c){c.activeRecordings=[];c.on("postprocess",c.recordData)});b.prototype.activeRecordings=null;b.prototype.record=function(){var c=new b.Recording(this);this.emit("record",[c]);return c};b.prototype.recordData=function(d){var f=this.activeRecordings,e,c=f.length;for(e=0;e<c;e++){f[e].add(d)}};function a(c){this.boundTo=c;this.buffers=[];c.activeRecordings.push(this)}a.prototype={add:function(c){this.buffers.push(c)},clear:function(){this.buffers=[]},stop:function(){var c=this.boundTo.activeRecordings,d;for(d=0;d<c.length;d++){if(c[d]===this){c.splice(d--,1)}}},join:function(){var g=0,h=0,e=this.buffers,c,j,f,d=e.length;for(f=0;f<d;f++){g+=e[f].length}c=new Float32Array(g);for(f=0;f<d;f++){for(j=0;j<e[f].length;j++){c[h+j]=e[f][j]}h+=e[f].length}return c}};b.Recording=a}(this.Sink);void function(b){function a(){if(this.ringBuffer){(this.channelMode==="interleaved"?this.ringSpin:this.ringSpinInterleaved).apply(this,arguments)}}b.on("init",function(c){c.on("preprocess",a)});b.prototype.ringBuffer=null;b.prototype.ringSpin=function(e){var f=this.ringBuffer,d=e.length,c=f.length,h=this.ringOffset,g;for(g=0;g<d;g++){e[g]+=f[h];h=(h+1)%c}this.ringOffset=h};b.prototype.ringSpinDeinterleaved=function(j){var h=this.ringBuffer,g=j.length,c=h.length,f=h[0].length,o=c*f,e=this.ringOffset,k,d;for(k=0;k<g;k+=c){for(d=0;d<c;d++){j[k+d]+=h[d][e]}e=(e+1)%f}this.ringOffset=d}}(this.Sink);void function(a,b){b=a.prototype;a.on("init",function(c){c.asyncBuffers=[];c.syncBuffers=[];c.on("preprocess",c.writeBuffersSync);c.on("postprocess",c.writeBuffersAsync)});b.writeMode="async";b.asyncBuffers=b.syncBuffers=null;b.writeBuffersAsync=function(e){var d=this.asyncBuffers,c=e.length,f,h,g,k,j;if(d){for(g=0;g<d.length;g++){f=d[g];h=f.b.length;j=f.d;f.d-=Math.min(j,c);for(k=0;k+j<c&&k<h;k++){e[k+j]+=f.b[k]}f.b=f.b.subarray(k+j);if(g>=h){d.splice(g--,1)}}}};b.writeBuffersSync=function(e){var d=this.syncBuffers,c=e.length,f=0,g=0;for(;f<c&&d.length;f++){e[f]+=d[0][g];if(d[0].length<=g){d.splice(0,1);g=0;continue}g++}if(d.length){d[0]=d[0].subarray(g)}};b.writeBufferAsync=function(d,e){d=this.mode==="deinterleaved"?a.interleave(d,this.channelCount):d;var c=this.asyncBuffers;c.push({b:d,d:isNaN(e)?~~((+new Date()-this.previousHit)/1000*this.sampleRate):e});return c.length};b.writeBufferSync=function(d){d=this.mode==="deinterleaved"?a.interleave(d,this.channelCount):d;var c=this.syncBuffers;c.push(d);return c.length};b.writeBuffer=function(){return this[this.writeMode==="async"?"writeBufferAsync":"writeBufferSync"].apply(this,arguments)};b.getSyncWriteOffset=function(){var c=this.syncBuffers,e=0,d;for(d=0;d<c.length;d++){e+=c[d].length}return e}}(this.Sink);