# HG changeset patch # User Nicholas Jillings # Date 1453806115 0 # Node ID 3bcee92d95ab114ee89d00affb2b54af9a9acc7d # Parent 92f26057b934096fee4ba6bed8a6311b7c2f246f Fixed loudness. Now passes all EBU 3341 tests for Integrated loudness. Fixed WAVE decoder error for non-mono sources. diff -r 92f26057b934 -r 3bcee92d95ab WAVE.js --- a/WAVE.js Mon Jan 25 17:29:34 2016 +0000 +++ b/WAVE.js Tue Jan 26 11:01:55 2016 +0000 @@ -108,7 +108,7 @@ } } else if (this.type == 1) { - data_view = new Float32Array(this.num_samples); + data_view = new Float32Array(this.num_samples*this.num_channels); integerConvert(new Uint8Array(IOArrayBuffer.slice(sampleDataOffset,sampleDataOffset+this.data_size)),data_view,this.bits_per_sample/8); } deInterlace(data_view,this.decoded_data); diff -r 92f26057b934 -r 3bcee92d95ab loudness.js --- a/loudness.js Mon Jan 25 17:29:34 2016 +0000 +++ b/loudness.js Tue Jan 26 11:01:55 2016 +0000 @@ -62,121 +62,107 @@ switch(timescale) { case "I": - var blockEnergy = calculateProcessedLoudness(renderedBuffer, 400, 0.75); - // Apply the absolute gate - var loudness = calculateLoudnessFromChannelBlocks(blockEnergy); - var absgatedEnergy = new Array(blockEnergy.length); - for (var c=0; c= -70) - { - for (var c=0; c= relGateLevel) - { - for (var c=0; c= 4) {G = 1.41;} - sigma += blockEnergy[channel][i]*G; - } - loudness[i] = -0.691 + 10*Math.log10(sigma); - } - return loudness; + var num_frames = blocks[0].length; + var num_channels = blocks.length; + var MSL = Array(num_frames); + for (var n=0; n= 3){G = 1.41;} + sum += blocks[c][n]*G; + } + MSL[n] = -0.691 + 10*Math.log10(sum); + } + return MSL; } -function calculateOverallLoudnessFromChannelBlocks(blockEnergy) + +function loudnessGate(blocks,source,threshold) { - // Loudness - var summation = 0; - for (var channel = 0; channel < blockEnergy.length; channel++) - { - var G = 1.0; - if (channel >= 4) {G = 1.41;} - var sigma = 0; - for (var i=0; i threshold) + { + for (var c=0; c= 3){G = 1.41;} + sum += blocks[c][n]*G; + } + sum /= num_frames; + loudness += sum; + } + loudness = -0.691 + 10 * Math.log10(loudness); + return loudness; +} \ No newline at end of file