view js/min/loudness.min.js @ 3141:335bc77627e0 tip

fixing discrete interface to allow labels to display
author Dave Moffat <me@davemoffat.com>
date Mon, 26 Jul 2021 12:15:24 +0100
parents 90c7b42264d4
children
line wrap: on
line source
function calculateLoudness(e,a,r,n){if("iPad"!=navigator.platform&&"iPhone"!=navigator.platform||e.ready(),void 0===e)return 0;void 0===a&&(a="I"),void 0===r&&(r=-23),void 0===n&&(n=new OfflineAudioContext(audioContext.destination.channelCount,Math.max(.4,e.buffer.duration)*audioContext.sampleRate,audioContext.sampleRate));var t=n.createBiquadFilter();t.type="highshelf",t.gain.value=4,t.frequency.value=1500;var o=n.createBiquadFilter();o.type="highpass",o.Q.value=.5,o.frequency.value=38;var l=n.createBufferSource();l.buffer=e.buffer,l.connect(t),t.connect(o),o.connect(n.destination),n.oncomplete=function(r){switch("object"==typeof r.renderedBuffer&&(r=r.renderedBuffer),a){case"I":var n=calculateMeanSquared(r,.4,.75),t=calculateLoudnessFromBlocks(n),o=loudnessOfBlocks(loudnessGate(t,n,loudnessOfBlocks(loudnessGate(t,n,-70))-10));e.buffer.lufs=o}e.ready()},l.start(0),n.startRendering()}function calculateMeanSquared(e,a,r){var n=Math.floor(e.sampleRate*a),t=Math.floor(n*(1-r)),o=Math.floor((e.length-n)/t);o=Math.max(o,1);for(var l=Array(e.numberOfChannels),u=0;u<e.numberOfChannels;u++){l[u]=new Float32Array(o);for(var f=e.getChannelData(u),i=0;i<o;i++){l[u][i]=0;for(var s=0;s<n;s++){var c=i*t+s;if(c>=e.length)break;var d=f[c];l[u][i]+=d*d}l[u][i]/=n}}return l}function calculateLoudnessFromBlocks(e){for(var a=e[0].length,r=e.length,n=Array(a),t=0;t<a;t++){for(var o=0,l=0;l<r;l++){var u=1;u>=3&&(u=1.41),o+=e[l][t]*u}n[t]=10*Math.log10(o)-.691}return n}function loudnessGate(e,a,r){var n,t,o=a[0].length,l=a.length,u=Array(l);for(t=0;t<l;t++)u[t]=[];for(n=0;n<o;n++)if(e[n]>r)for(t=0;t<l;t++)u[t].push(a[t][n]);return u}function loudnessOfBlocks(e){for(var a=e[0].length,r=e.length,n=0,t=0;t<a;t++){for(var o=0,l=0;l<r;l++){var u=1;u>=3&&(u=1.41),o+=e[l][t]*u}n+=o/=a}return n=10*Math.log10(n)-.691}var interval_cal_loudness_event=null;if(void 0===OfflineAudioContext)var OfflineAudioContext=webkitOfflineAudioContext;