summaryrefslogtreecommitdiff
path: root/libs/music/player.d/main_static.js
diff options
context:
space:
mode:
Diffstat (limited to 'libs/music/player.d/main_static.js')
-rw-r--r--libs/music/player.d/main_static.js80
1 files changed, 79 insertions, 1 deletions
diff --git a/libs/music/player.d/main_static.js b/libs/music/player.d/main_static.js
index 213dcc9..f4077bb 100644
--- a/libs/music/player.d/main_static.js
+++ b/libs/music/player.d/main_static.js
@@ -420,13 +420,26 @@ NSAudio={
};
NSVisualization={
- nbins:1024,
+ nbinsp:10,
+ nbins:Math.pow(2,10),
spectgrmw:1200,
spectrw:0.7,
spectrm:0.08125,
caps:[],
cctx:null,
spectgrmp:0,
+ _61spbins:29,
+ _61spfintv:Math.pow(1024,1./29),
+ _61spbinw:9,
+ _61spaccel:.35,
+ _61spmaxvel:6.17274873,
+ _61spgvel:.025,
+ _61spelas:1.33*.617274873,
+ _61spf:6.17274873,
+ _61spelasth:.017274873,
+ _61spcaps:new Float32Array(29),
+ _61spcapsv:new Float32Array(29),
+ _61spft:new Date(),
init:function()
{
window.requestAnimationFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame;
@@ -459,6 +472,68 @@ NSVisualization={
}
}
},
+ update_61_spectrum:function()
+ {
+ const cctx=this.cctx,canvas=NSUI.canvas;
+ cctx.clearRect(0,0,canvas.width,canvas.height);
+ try{
+ let freqdomv=new Float32Array(NSAudio.anlznode.frequencyBinCount);
+ NSAudio.anlznode.getFloatFrequencyData(freqdomv);
+ let binl=Math.pow(2,(this._61spbinw-1)*this.nbinsp/(this._61spbins-1+this._61spbinw))-1;
+ let _61spfdomv=new Float32Array(this._61spbins);
+ const ft=new Date()-this._61spft;
+ this._61spft=new Date();
+ const rft=ft/1000*24;
+ for(let i=0;i<this._61spbins;++i)
+ {
+ let binr=Math.pow(2,(i+this._61spbinw)*this.nbinsp/(this._61spbins-1+this._61spbinw))-1;
+ if(Math.floor(binr)<=Math.floor(binl))binr=binl+1;
+ let binli=Math.floor(binl);
+ let binri=Math.floor(binr);
+ const clamp=(x)=>Math.max(0,Math.min(1,x));
+ _61spfdomv[i]=Math.pow(freqdomv.
+ slice(binli,binri+1).
+ reduce(
+ (s,c)=>s+
+ clamp(
+ (c-NSAudio.anlznode.minDecibels)
+ /(NSAudio.anlznode.maxDecibels-NSAudio.anlznode.minDecibels)
+ )/(binri-binli+1)
+ ,0),2);//iS tHiS dBv^2?
+ binl=binr;
+
+ if(ft>1000)
+ {
+ this._61spcaps[i]=0;
+ this._61spcapsv[i]=0;
+ continue;
+ }
+ let vel=this._61spgvel*this._61spcapsv[i];
+ if(this._61spcaps[i]-vel*rft<=_61spfdomv[i])
+ {
+ let elf=0;
+ if(vel>rft*this._61spelasth)
+ elf=this._61spcapsv[i]*this._61spelas;
+ this._61spcapsv[i]=(this._61spcaps[i]-vel*rft-_61spfdomv[i])*this._61spf-elf;
+ this._61spcaps[i]=_61spfdomv[i];
+ }
+ else
+ {
+ if(this._61spcapsv[i]+rft*this._61spaccel<=this._61spmaxvel)
+ this._61spcapsv[i]+=rft*this._61spaccel;
+ else this._61spcapsv[i]=this._61spmaxvel;
+ vel=this._61spgvel*this._61spcapsv[i];
+ this._61spcaps[i]-=Math.min(rft*vel,this._61spcaps[i]);
+ }
+
+ cctx.fillStyle=`rgba(70,130,180,${0.36+0.64*_61spfdomv[i]})`;
+ cctx.fillRect(i*(canvas.width/this._61spbins),canvas.height-(canvas.height*_61spfdomv[i]),canvas.width/this._61spbins*0.96,canvas.height*_61spfdomv[i]);
+
+ cctx.fillStyle='rgb(110,139,161)';
+ cctx.fillRect(i*(canvas.width/this._61spbins),canvas.height-(canvas.height*this._61spcaps[i])-4,canvas.width/this._61spbins*0.96,4);
+ }
+ }catch(e){}
+ },
update_scope:function()
{
const cctx=this.cctx,canvas=NSUI.canvas;
@@ -511,6 +586,9 @@ NSVisualization={
case 'spectrum':
NSVisualization.update_spectrum();
break;
+ case 'spspectrum':
+ NSVisualization.update_61_spectrum();
+ break;
case 'scope':
NSVisualization.update_scope();
break;