Mercurial > hg > webaudioevaluationtool
diff loudness.js @ 793:261d92ea87e1
Automatic Loudness normalisation to -23 LUFS
author | Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk> |
---|---|
date | Wed, 16 Dec 2015 12:15:18 +0000 |
parents | 7b522c145516 |
children | 8f88db0c38b5 |
line wrap: on
line diff
--- a/loudness.js Tue Dec 15 16:02:17 2015 +0000 +++ b/loudness.js Wed Dec 16 12:15:18 2015 +0000 @@ -6,15 +6,17 @@ * multiple objects */ -function getLoudness(buffer, result, timescale, offlineContext) +var interval_cal_loudness_event = null; + +function calculateLoudness(buffer, timescale, target, offlineContext) { - // This function returns the EBU R 128 specification loudness model + // This function returns the EBU R 128 specification loudness model and sets the linear gain required to match -23 LUFS // buffer -> Web Audio API Buffer object // timescale -> M or Momentary (returns Array), S or Short (returns Array), // I or Integrated (default, returns number) + // target -> default is -23 LUFS but can be any LUFS measurement. - // Create the required filters - if (buffer == undefined || result == undefined) + if (buffer == undefined) { return 0; } @@ -22,10 +24,15 @@ { timescale = "I"; } + if (target == undefined) + { + target = -23; + } if (offlineContext == undefined) { offlineContext = new OfflineAudioContext(buffer.numberOfChannels, buffer.length, buffer.sampleRate); } + // Create the required filters var KFilter = offlineContext.createBiquadFilter(); KFilter.type = "highshelf"; KFilter.gain.value = 4; @@ -45,7 +52,6 @@ processSource.start(); offlineContext.startRendering().then(function(renderedBuffer) { // Have the renderedBuffer information, now continue processing - console.log(renderedBuffer); switch(timescale) { case "I": @@ -87,11 +93,13 @@ } } var overallRelLoudness = calculateOverallLoudnessFromChannelBlocks(relgateEnergy); - result[0] = overallRelLoudness; + buffer.lufs = overallRelLoudness; + var diff = -23 -overallRelLoudness; + buffer.gain = decibelToLinear(diff); } }).catch(function(err) { console.log(err); - result[0] = 1; + buffer.lufs = 1; }); }