From 741c5530d6b0df99f901568a0a5ea5e601941a3d Mon Sep 17 00:00:00 2001 From: brandly Date: Sat, 17 Oct 2015 14:52:50 -0400 Subject: [PATCH] update web audio API methods createDelay and createGain --- build/ThreeAudio-tquery.js | 10 ++--- build/ThreeAudio-tquery.min.js | 56 ++++++++++++++-------------- build/ThreeAudio.js | 10 ++--- build/ThreeAudio.min.js | 68 +++++++++++++++++----------------- src/Source.js | 10 ++--- 5 files changed, 77 insertions(+), 77 deletions(-) diff --git a/build/ThreeAudio-tquery.js b/build/ThreeAudio-tquery.js index e585a36..3168a96 100644 --- a/build/ThreeAudio-tquery.js +++ b/build/ThreeAudio-tquery.js @@ -805,8 +805,8 @@ ThreeAudio.Source.prototype = { }; // Create audible/inaudible inputs for analysis - this.audible = c.createDelayNode(); - this.inaudible = c.createDelayNode(); + this.audible = c.createDelay(); + this.inaudible = c.createDelay(); // Wait for audio metadata before initializing analyzer if (this.element.readyState >= 3) { @@ -864,18 +864,18 @@ ThreeAudio.Source.prototype = { filter.analyser.fftSize = fftSize; // Create delay node to compensate for FFT lag. - filter.delayNode = c.createDelayNode(); + filter.delayNode = c.createDelay(); filter.delayNode.delayTime.value = 0; // Create gain node to offset filter loss. - filter.gainNode = c.createGainNode(); + filter.gainNode = c.createGain(); filter.gainNode.gain.value = spec.gain; filters[key] = filter; }); // Create playback delay to compensate for FFT lag. - this.delay = c.createDelayNode(); + this.delay = c.createDelay(); this.processingDelay = this.fftSize * 2 / c.sampleRate; this.delay.delayTime.value = this.processingDelay; diff --git a/build/ThreeAudio-tquery.min.js b/build/ThreeAudio-tquery.min.js index afbd207..6298df1 100644 --- a/build/ThreeAudio-tquery.min.js +++ b/build/ThreeAudio-tquery.min.js @@ -1,51 +1,51 @@ var MicroEvent=function(){};MicroEvent.prototype={bind:function(a,c){this._events=this._events||{};this._events[a]=this._events[a]||[];this._events[a].push(c)},unbind:function(a,c){this._events=this._events||{};!1!==a in this._events&&this._events[a].splice(this._events[a].indexOf(c),1)},trigger:function(a){this._events=this._events||{};if(!1!==a in this._events)for(var c=0;cthis.peak&&(this.peakBand=s,this.peak=g),c[s]= +function FourierTransform(a,c){this.bufferSize=a;this.sampleRate=c;this.bandwidth=2/a*c/2;this.spectrum=new Float32Array(a/2);this.real=new Float32Array(a);this.imag=new Float32Array(a);this.peak=this.peakBand=0;this.getBandFrequency=function(a){return this.bandwidth*a+this.bandwidth/2};this.calculateSpectrum=function(){for(var c=this.spectrum,e=this.real,d=this.imag,n=2/this.bufferSize,k=Math.sqrt,g,m,r=0,p=a/2;rthis.peak&&(this.peakBand=r,this.peak=g),c[r]= g}}function DFT(a,c){FourierTransform.call(this,a,c);var f=a/2*a,e=2*Math.PI;this.sinTable=new Float32Array(f);this.cosTable=new Float32Array(f);for(var d=0;d>1,d;f>=1}this.sinTable=new Float32Array(a);this.cosTable=new Float32Array(a);for(d=0;d>>1,d=d-1,k=1,g=0,m;a[0]=c[0];do{g+=n;a[k]=c[g];a[g]=c[k];k++;for(m=n<<1;m>>=1,!((g^=m)&m););g>=k&&(a[k]=c[g],a[g]=c[k],a[d-k]=c[d-g],a[d-g]=c[d-k]);k++}while(k>>1,a=a-1,d=1,n=0,k;this.reverseTable[0]=0;do{n+=c;this.reverseTable[d]=n;this.reverseTable[n]= d;d++;for(k=c<<1;k>>=1,!((n^=k)&k););n>=d&&(this.reverseTable[d]=n,this.reverseTable[n]=d,this.reverseTable[a-d]=a-n,this.reverseTable[a-n]=a-d);d++}while(d>>1,g=2/c,m,s,p,q,t,h,w,r,y,u,x,z,E,F,H,B,C,D,I,J,K;this.reverseBinPermute(e,a);q=0;for(var A=4;q>>1;p>>>=1;){q=0;a<<=1;A=a<<1;m=a>>>2;s=a>>>3;do{if(1!==m)for(v=q;vthis.peak&&(this.peakBand=k,this.peak=d),f[k]=d;f[0]=g*e[0];return f};(function(a){for(var c in a)if(!window[c])throw"Error: ThreeAudio requires "+a[c];})({THREE:"Three.js",MicroEvent:"MicroEvent.js"});window.ThreeAudio=window.ThreeAudio||{};ThreeAudio.getShader=function(a){var c=document.getElementById(a);return c&&(c.innerText||c.textContent)||a};window._=window._||{}; +RFFT.prototype.forward=function(a){var c=this.bufferSize,f=this.spectrum,e=this.trans,d=2*Math.PI,n=Math.sqrt,k=c>>>1,g=2/c,m,r,p,q,y,h,u,t,z,w,v,E,F,G,I,B,C,D,J,K,L;this.reverseBinPermute(e,a);q=0;for(var A=4;q>>1;p>>>=1;){q=0;a<<=1;A=a<<1;m=a>>>2;r=a>>>3;do{if(1!==m)for(x=q;xthis.peak&&(this.peakBand=k,this.peak=d),f[k]=d;f[0]=g*e[0];return f};(function(a){for(var c in a)if(!window[c])throw"Error: ThreeAudio requires "+a[c];})({THREE:"Three.js",MicroEvent:"MicroEvent.js"});window.ThreeAudio=window.ThreeAudio||{};ThreeAudio.getShader=function(a){var c=document.getElementById(a);return c&&(c.innerText||c.textContent)||a};window._=window._||{}; _.each=_.each||function(a,c){if(a.forEach)return a.forEach(c);for(key in a)c(a[key],key,a)};_.extend=_.extend||function(a){_.each([].slice.call(arguments,1),function(c){for(var f in c)a[f]=c[f]});return a};MicroEvent.prototype.on=function(){MicroEvent.prototype.bind.apply(this,arguments);return this};MicroEvent.prototype.emit=function(){MicroEvent.prototype.trigger.apply(this,arguments);return this}; MicroEvent.mixin=function(a){for(var c=["bind","unbind","trigger","on","emit"],f=0;fa;++a){var k=d,g=a,m;m=n[a];for(var s=m.length,p=0,q=0;qm;++m){for(a=d=0;am;++m){for(a=d=0;aa;++a){for(var k=a,g=n[a],m=g.length,r=0,p=0;pm;++m){for(a=d=0;am;++m){for(a= +d=0;an;)k.pop();e.set(k);d.forward(e);for(var q=this.spectrum=d.real,p=d.real,e=d.imag,d=0;dt){var h=Math.max(q[d-1],q[d+1]);if(p>h&&(h=Math.min(q[d-1],q[d+1]),0.5r.strength;)m.splice(m.length-1,1),delete g[r.index];var y=this.fMin,u=0,x=0,z=null;_.each(m,function(c){var d=0;if(!(c.offsetd&&(d=e);d+=c.strength*c.permanence;c.score=d;d>u?(z=c,x=u,u=d):d>x&&(x=d)}});z&&(z.score=u?1-x/u:0,z.confidence=Math.min(1,z.score+z.permanence),this.beat?this.beat.confidence< -z.confidence?this.beat=z:this.beat!=z&&(this.beat.confidence*=0.95):this.beat=z,240this.stddev&&(d=this.mean,c.beat.locked=!0,c.beat.bpm=this.offsetToBPM(this.n/d)));0=f&&5this.beat.confidence?(this.measure=0,c.beat.is=!0,c.beat.maybe=!0):this.beat&&(f=this.beat.window/2,f=(this.measure+f)%d-f,p= -this.jitter&&Math.max(3,Math.min(this.jitter+1,10))||10,Math.abs(f)=f&&51+0.2*this.found+0.5/this.stddev-this.missed/10||0==this.found||4=d)this.measure-=d;p&&f&&(0>maybe?(this.found=Math.max(0,this.found-1),this.missed=Math.min(10,this.missed+1),c.beat.missed=!0,c.beat.predicted=!0):(this.found=Math.min(10,this.found+1),this.missed=Math.max(0,this.missed-3)),1>this.found?(p=!1,c.beat.maybe=!0,c.beat.predicted= -!0,this.debouncePredict=0):4q&&(c=a.offset/p.offset,c=Math.max(0,1-4*Math.abs(c-Math.round(c))));a.match=c})}var t=[""+Math.round(10*g.bpm)/10+" BPM ("+Math.round(100*g.confidence)+"%) P:"+Math.round(100*g.permanence)+" \u00b5 = "+Math.round(10*this.mean)/10+" \u03c3 = "+ -Math.round(100*this.stddev)/100+" "+this.found+"f "+this.missed+"m"];_.each(k,function(a){var c=Math.round(10*m.offsetToBPM(a.offset))/10;t.push([c," bpm - ",Math.round(100*a.strength),"% P: ",Math.round(100*a.permanence)].join(""))});this.t.innerHTML=t.join("
");var h=this.g;h.fillStyle="#000000";h.fillRect(0,169,512,102);for(var w=0,r=2;rn;)k.pop();e.set(k);d.forward(e);for(var q=this.spectrum=d.real,p=d.real,e=d.imag,d=0;dy&&p>Math.max(q[d-1],q[d+1])&&.5u.strength;)m.splice(m.length-1,1),delete g[u.index];var t=this.fMin,z=0,w=0,v=null;_.each(m,function(c){var d=0;if(!(c.offsetd&&(d=e);d+=c.strength*c.permanence;c.score=d;d>z?(v=c,w=z,z=d):d>w&&(w=d)}});v&&(v.score=z?1-w/z:0,v.confidence=Math.min(1,v.score+v.permanence),this.beat?this.beat.confidencethis.stddev&&(d=this.mean,c.beat.locked=!0,c.beat.bpm=this.offsetToBPM(this.n/d)));0=f&&5this.beat.confidence?(this.measure=0,c.beat.is=!0,c.beat.maybe=!0):this.beat&&(f=this.beat.window/2,f=(this.measure+f)%d-f,Math.abs(f)<(this.jitter&& +Math.max(3,Math.min(this.jitter+1,10))||10)?(this.measure=0,1>=f&&51+.2*this.found+.5/this.stddev-this.missed/10||0==this.found||4=d)this.measure-=d;p&&f&&(0>maybe?(this.found=Math.max(0,this.found-1),this.missed=Math.min(10,this.missed+1),c.beat.missed=!0,c.beat.predicted=!0):(this.found=Math.min(10,this.found+1),this.missed=Math.max(0,this.missed-3)),1>this.found?(p=!1,c.beat.maybe=!0,c.beat.predicted=!0,this.debouncePredict= +0):4q&&(c=a.offset/p.offset,c=Math.max(0,1-4*Math.abs(c-Math.round(c))));a.match=c})}var y=[""+Math.round(10*g.bpm)/10+" BPM ("+Math.round(100*g.confidence)+"%) P:"+Math.round(100*g.permanence)+" \u00b5 = "+Math.round(10*this.mean)/10+" \u03c3 = "+Math.round(100* +this.stddev)/100+" "+this.found+"f "+this.missed+"m"];_.each(k,function(a){var c=Math.round(10*m.offsetToBPM(a.offset))/10;y.push([c," bpm - ",Math.round(100*a.strength),"% P: ",Math.round(100*a.permanence)].join(""))});this.t.innerHTML=y.join("
");var h=this.g;h.fillStyle="#000000";h.fillRect(0,169,512,102);for(var u=0,t=2;t= 3) { @@ -864,18 +864,18 @@ ThreeAudio.Source.prototype = { filter.analyser.fftSize = fftSize; // Create delay node to compensate for FFT lag. - filter.delayNode = c.createDelayNode(); + filter.delayNode = c.createDelay(); filter.delayNode.delayTime.value = 0; // Create gain node to offset filter loss. - filter.gainNode = c.createGainNode(); + filter.gainNode = c.createGain(); filter.gainNode.gain.value = spec.gain; filters[key] = filter; }); // Create playback delay to compensate for FFT lag. - this.delay = c.createDelayNode(); + this.delay = c.createDelay(); this.processingDelay = this.fftSize * 2 / c.sampleRate; this.delay.delayTime.value = this.processingDelay; diff --git a/build/ThreeAudio.min.js b/build/ThreeAudio.min.js index 88d4196..defa1a1 100644 --- a/build/ThreeAudio.min.js +++ b/build/ThreeAudio.min.js @@ -1,49 +1,49 @@ var MicroEvent=function(){};MicroEvent.prototype={bind:function(a,c){this._events=this._events||{};this._events[a]=this._events[a]||[];this._events[a].push(c)},unbind:function(a,c){this._events=this._events||{};!1!==a in this._events&&this._events[a].splice(this._events[a].indexOf(c),1)},trigger:function(a){this._events=this._events||{};if(!1!==a in this._events)for(var c=0;cthis.peak&&(this.peakBand=s,this.peak=h),c[s]= -h}}function DFT(a,c){FourierTransform.call(this,a,c);var f=a/2*a,e=2*Math.PI;this.sinTable=new Float32Array(f);this.cosTable=new Float32Array(f);for(var d=0;dthis.peak&&(this.peakBand=r,this.peak=g),c[r]= +g}}function DFT(a,c){FourierTransform.call(this,a,c);var f=a/2*a,e=2*Math.PI;this.sinTable=new Float32Array(f);this.cosTable=new Float32Array(f);for(var d=0;d>1,d;f>=1}this.sinTable=new Float32Array(a);this.cosTable=new Float32Array(a);for(d=0;d>>1,d=d-1,m=1,h=0,k;a[0]=c[0];do{h+=n;a[m]=c[h];a[h]=c[m];m++;for(k=n<<1;k>>=1,!((h^=k)&k););h>=m&&(a[m]=c[h],a[h]=c[m],a[d-m]=c[d-h],a[d-h]=c[d-m]);m++}while(m>>1,a=a-1,d=1,n=0,m;this.reverseTable[0]=0;do{n+=c;this.reverseTable[d]=n;this.reverseTable[n]= +FFT.prototype.forward=function(a){var c=this.bufferSize,f=this.cosTable,e=this.sinTable,d=this.reverseTable,n=this.real,m=this.imag;if(Math.pow(2,Math.floor(Math.log(c)/Math.LN2))!==c)throw"Invalid buffer size, must be a power of 2.";if(c!==a.length)throw"Supplied buffer is not the same size as defined FFT. FFT Size: "+c+" Buffer Size: "+a.length;var g=1,k,r,p,q,y,h;for(h=0;h>>1,d=d-1,m=1,g=0,k;a[0]=c[0];do{g+=n;a[m]=c[g];a[g]=c[m];m++;for(k=n<<1;k>>=1,!((g^=k)&k););g>=m&&(a[m]=c[g],a[g]=c[m],a[d-m]=c[d-g],a[d-g]=c[d-m]);m++}while(m>>1,a=a-1,d=1,n=0,m;this.reverseTable[0]=0;do{n+=c;this.reverseTable[d]=n;this.reverseTable[n]= d;d++;for(m=c<<1;m>>=1,!((n^=m)&m););n>=d&&(this.reverseTable[d]=n,this.reverseTable[n]=d,this.reverseTable[a-d]=a-n,this.reverseTable[a-n]=a-d);d++}while(d>>1,h=2/c,k,s,p,q,t,g,w,r,y,u,x,z,E,F,H,B,C,D,I,J,K;this.reverseBinPermute(e,a);q=0;for(var A=4;q>>1;p>>>=1;){q=0;a<<=1;A=a<<1;k=a>>>2;s=a>>>3;do{if(1!==k)for(v=q;vthis.peak&&(this.peakBand=m,this.peak=d),f[m]=d;f[0]=h*e[0];return f};(function(a){for(var c in a)if(!window[c])throw"Error: ThreeAudio requires "+a[c];})({THREE:"Three.js",MicroEvent:"MicroEvent.js"});window.ThreeAudio=window.ThreeAudio||{};ThreeAudio.getShader=function(a){var c=document.getElementById(a);return c&&(c.innerText||c.textContent)||a};window._=window._||{}; +RFFT.prototype.forward=function(a){var c=this.bufferSize,f=this.spectrum,e=this.trans,d=2*Math.PI,n=Math.sqrt,m=c>>>1,g=2/c,k,r,p,q,y,h,u,t,z,w,v,E,F,G,I,B,C,D,J,K,L;this.reverseBinPermute(e,a);q=0;for(var A=4;q>>1;p>>>=1;){q=0;a<<=1;A=a<<1;k=a>>>2;r=a>>>3;do{if(1!==k)for(x=q;xthis.peak&&(this.peakBand=m,this.peak=d),f[m]=d;f[0]=g*e[0];return f};(function(a){for(var c in a)if(!window[c])throw"Error: ThreeAudio requires "+a[c];})({THREE:"Three.js",MicroEvent:"MicroEvent.js"});window.ThreeAudio=window.ThreeAudio||{};ThreeAudio.getShader=function(a){var c=document.getElementById(a);return c&&(c.innerText||c.textContent)||a};window._=window._||{}; _.each=_.each||function(a,c){if(a.forEach)return a.forEach(c);for(key in a)c(a[key],key,a)};_.extend=_.extend||function(a){_.each([].slice.call(arguments,1),function(c){for(var f in c)a[f]=c[f]});return a};MicroEvent.prototype.on=function(){MicroEvent.prototype.bind.apply(this,arguments);return this};MicroEvent.prototype.emit=function(){MicroEvent.prototype.trigger.apply(this,arguments);return this}; MicroEvent.mixin=function(a){for(var c=["bind","unbind","trigger","on","emit"],f=0;fa;++a){var m=d,h=a,k;k=n[a];for(var s=k.length,p=0,q=0;qk;++k){for(a=d=0;ak;++k){for(a=d=0;aa;++a){for(var m=a,g=n[a],k=g.length,r=0,p=0;pk;++k){for(a=d=0;ak;++k){for(a= +d=0;an;)m.pop();e.set(m);d.forward(e);for(var q=this.spectrum=d.real,p=d.real,e=d.imag,d=0;dt){var g=Math.max(q[d-1],q[d+1]);if(p>g&&(g=Math.min(q[d-1],q[d+1]),0.5r.strength;)k.splice(k.length-1,1),delete h[r.index];var y=this.fMin,u=0,x=0,z=null;_.each(k,function(c){var d=0;if(!(c.offsetd&&(d=e);d+=c.strength*c.permanence;c.score=d;d>u?(z=c,x=u,u=d):d>x&&(x=d)}});z&&(z.score=u?1-x/u:0,z.confidence=Math.min(1,z.score+z.permanence),this.beat?this.beat.confidence< -z.confidence?this.beat=z:this.beat!=z&&(this.beat.confidence*=0.95):this.beat=z,240this.stddev&&(d=this.mean,c.beat.locked=!0,c.beat.bpm=this.offsetToBPM(this.n/d)));0=f&&5this.beat.confidence?(this.measure=0,c.beat.is=!0,c.beat.maybe=!0):this.beat&&(f=this.beat.window/2,f=(this.measure+f)%d-f,p= -this.jitter&&Math.max(3,Math.min(this.jitter+1,10))||10,Math.abs(f)=f&&51+0.2*this.found+0.5/this.stddev-this.missed/10||0==this.found||4=d)this.measure-=d;p&&f&&(0>maybe?(this.found=Math.max(0,this.found-1),this.missed=Math.min(10,this.missed+1),c.beat.missed=!0,c.beat.predicted=!0):(this.found=Math.min(10,this.found+1),this.missed=Math.max(0,this.missed-3)),1>this.found?(p=!1,c.beat.maybe=!0,c.beat.predicted= -!0,this.debouncePredict=0):4q&&(c=a.offset/p.offset,c=Math.max(0,1-4*Math.abs(c-Math.round(c))));a.match=c})}var t=[""+Math.round(10*h.bpm)/10+" BPM ("+Math.round(100*h.confidence)+"%) P:"+Math.round(100*h.permanence)+" \u00b5 = "+Math.round(10*this.mean)/10+" \u03c3 = "+ -Math.round(100*this.stddev)/100+" "+this.found+"f "+this.missed+"m"];_.each(m,function(a){var c=Math.round(10*k.offsetToBPM(a.offset))/10;t.push([c," bpm - ",Math.round(100*a.strength),"% P: ",Math.round(100*a.permanence)].join(""))});this.t.innerHTML=t.join("
");var g=this.g;g.fillStyle="#000000";g.fillRect(0,169,512,102);for(var w=0,r=2;rn;)m.pop();e.set(m);d.forward(e);for(var q=this.spectrum=d.real,p=d.real,e=d.imag,d=0;dy&&p>Math.max(q[d-1],q[d+1])&&.5u.strength;)k.splice(k.length-1,1),delete g[u.index];var t=this.fMin,z=0,w=0,v=null;_.each(k,function(c){var d=0;if(!(c.offsetd&&(d=e);d+=c.strength*c.permanence;c.score=d;d>z?(v=c,w=z,z=d):d>w&&(w=d)}});v&&(v.score=z?1-w/z:0,v.confidence=Math.min(1,v.score+v.permanence),this.beat?this.beat.confidencethis.stddev&&(d=this.mean,c.beat.locked=!0,c.beat.bpm=this.offsetToBPM(this.n/d)));0=f&&5this.beat.confidence?(this.measure=0,c.beat.is=!0,c.beat.maybe=!0):this.beat&&(f=this.beat.window/2,f=(this.measure+f)%d-f,Math.abs(f)<(this.jitter&& +Math.max(3,Math.min(this.jitter+1,10))||10)?(this.measure=0,1>=f&&51+.2*this.found+.5/this.stddev-this.missed/10||0==this.found||4=d)this.measure-=d;p&&f&&(0>maybe?(this.found=Math.max(0,this.found-1),this.missed=Math.min(10,this.missed+1),c.beat.missed=!0,c.beat.predicted=!0):(this.found=Math.min(10,this.found+1),this.missed=Math.max(0,this.missed-3)),1>this.found?(p=!1,c.beat.maybe=!0,c.beat.predicted=!0,this.debouncePredict= +0):4q&&(c=a.offset/p.offset,c=Math.max(0,1-4*Math.abs(c-Math.round(c))));a.match=c})}var y=[""+Math.round(10*g.bpm)/10+" BPM ("+Math.round(100*g.confidence)+"%) P:"+Math.round(100*g.permanence)+" \u00b5 = "+Math.round(10*this.mean)/10+" \u03c3 = "+Math.round(100* +this.stddev)/100+" "+this.found+"f "+this.missed+"m"];_.each(m,function(a){var c=Math.round(10*k.offsetToBPM(a.offset))/10;y.push([c," bpm - ",Math.round(100*a.strength),"% P: ",Math.round(100*a.permanence)].join(""))});this.t.innerHTML=y.join("
");var h=this.g;h.fillStyle="#000000";h.fillRect(0,169,512,102);for(var u=0,t=2;t= 3) { @@ -111,18 +111,18 @@ ThreeAudio.Source.prototype = { filter.analyser.fftSize = fftSize; // Create delay node to compensate for FFT lag. - filter.delayNode = c.createDelayNode(); + filter.delayNode = c.createDelay(); filter.delayNode.delayTime.value = 0; // Create gain node to offset filter loss. - filter.gainNode = c.createGainNode(); + filter.gainNode = c.createGain(); filter.gainNode.gain.value = spec.gain; filters[key] = filter; }); // Create playback delay to compensate for FFT lag. - this.delay = c.createDelayNode(); + this.delay = c.createDelay(); this.processingDelay = this.fftSize * 2 / c.sampleRate; this.delay.delayTime.value = this.processingDelay;