UNPKG

aframe-gui

Version:
1 lines 2.08 kB
!function(e){function t(n){if(a[n])return a[n].exports;var i=a[n]={exports:{},id:n,loaded:!1};return e[n].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var a={};return t.m=e,t.c=a,t.p="",t(0)}([function(e,t){if("undefined"==typeof AFRAME)throw new Error("Component attempted to register before AFRAME was available.");var a;AFRAME.registerSystem("audioanalyser",{init:function(){this.analysers={}},getOrCreateAnalyser:function(e){a||(a=new AudioContext);var t=this.analysers,n=a.createAnalyser(),i=e.src,s=i.getAttribute("src");if(t[s])return t[s];var l=a.createMediaElementSource(i);return l.connect(n),n.connect(a.destination),n.smoothingTimeConstant=e.smoothingTimeConstant,n.fftSize=e.fftSize,t[s]=n,t[s]}}),AFRAME.registerComponent("audioanalyser",{schema:{enableBeatDetection:{"default":!0},enableLevels:{"default":!0},enableWaveform:{"default":!0},enableVolume:{"default":!0},fftSize:{"default":2048},smoothingTimeConstant:{"default":.8},src:{type:"selector"},unique:{"default":!1}},init:function(){this.analyser=null,this.levels=null,this.waveform=null,this.volume=0},update:function(){function e(e){a.analyser=e,a.levels=new Uint8Array(a.analyser.frequencyBinCount),a.waveform=new Uint8Array(a.analyser.fftSize),a.el.emit("audioanalyser-ready",{analyser:e})}var t=this.data,a=this,n=this.system;t.src&&e(t.unique?n.createAnalyser(t):n.getOrCreateAnalyser(t))},tick:function(){var e=this.data;if(this.analyser){if((e.enableLevels||e.enableVolume)&&this.analyser.getByteFrequencyData(this.levels),e.enableWaveform&&this.analyser.getByteTimeDomainData(this.waveform),e.enableVolume||e.enableBeatDetection){for(var t=0,a=0;a<this.levels.length;a++)t+=this.levels[a];this.volume=t/this.levels.length}if(e.enableBeatDetection){var n=.99,i=60,s=.15;volume=this.volume,this.beatCutOff||(this.beatCutOff=volume),volume>this.beatCutOff&&volume>s?(console.log("[audioanalyser] Beat detected."),this.el.emit("audioanalyser-beat"),this.beatCutOff=1.5*volume,this.beatTime=0):this.beatTime<=i?this.beatTime++:(this.beatCutOff*=n,this.beatCutOff=Math.max(this.beatCutOff,s))}}}})}]);