Mercurial > hg > webaudioevaluationtool
changeset 410:6be81817d142 Dev_main
Specification document handles optional loudness control.
author | Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk> |
---|---|
date | Wed, 16 Dec 2015 14:00:11 +0000 |
parents | 8f88db0c38b5 |
children | 12abf9c61949 |
files | core.js example_eval/project.xml loudness.js |
diffstat | 3 files changed, 33 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/core.js Wed Dec 16 12:35:52 2015 +0000 +++ b/core.js Wed Dec 16 14:00:11 2015 +0000 @@ -897,6 +897,13 @@ this.audioObjects[audioObjectId].specification = element; this.audioObjects[audioObjectId].url = URL; this.audioObjects[audioObjectId].buffer = buffer; + var targetLUFS = this.audioObjects[audioObjectId].specification.parent.loudness; + if (typeof targetLUFS === "number") + { + buffer.buffer.gain = decibelToLinear(targetLUFS - buffer.buffer.lufs); + } else { + buffer.buffer.gain = 1.0; + } if (buffer.buffer != null) { this.audioObjects[audioObjectId].state = 1; @@ -1451,6 +1458,7 @@ this.testPages = null; this.audioHolders = []; this.metrics = []; + this.loudness = null; this.decode = function(projectXML) { // projectXML - DOM Parsed document @@ -1472,6 +1480,14 @@ this.testPages = Number(this.testPages); if (this.testPages == 0) {this.testPages = null;} } + if (setupNode.getAttribute('loudness') != null) + { + var XMLloudness = setupNode.getAttribute('loudness'); + if (isNaN(Number(XMLloudness)) == false) + { + this.loudness = Number(XMLloudness); + } + } var metricCollection = setupNode.getElementsByTagName('Metric'); var setupPreTestNode = setupNode.getElementsByTagName('PreTest'); @@ -1587,6 +1603,7 @@ setupNode.setAttribute('randomiseOrder',this.randomiseOrder); setupNode.setAttribute('collectMetrics',this.collectMetrics); setupNode.setAttribute('testPages',this.testPages); + if(this.loudness != null) {AHNode.setAttribute("loudness",this.loudness);} var setupPreTest = root.createElement("PreTest"); for (var i=0; i<this.preTest.options.length; i++) @@ -1793,6 +1810,7 @@ this.loop = undefined; this.elementComments = undefined; this.outsideReference = null; + this.loudness = null; this.preTest = new parent.prepostNode("pretest"); this.postTest = new parent.prepostNode("pretest"); this.interfaces = []; @@ -1813,7 +1831,18 @@ else {this.loop == false;} if (xml.getAttribute('elementComments') == "true") {this.elementComments = true;} else {this.elementComments = false;} - + if (typeof parent.loudness === "number") + { + this.loudness = parent.loudness; + } + if (xml.getAttribute('loudness') != null) + { + var XMLloudness = xml.getAttribute('loudness'); + if (isNaN(Number(XMLloudness)) == false) + { + this.loudness = Number(XMLloudness); + } + } var setupPreTestNode = xml.getElementsByTagName('PreTest'); if (setupPreTestNode.length != 0) { @@ -1880,6 +1909,7 @@ AHNode.setAttribute("repeatCount",this.repeatCount); AHNode.setAttribute("loop",this.loop); AHNode.setAttribute("elementComments",this.elementComments); + if(this.loudness != null) {AHNode.setAttribute("loudness",this.loudness);} for (var i=0; i<this.interfaces.length; i++) {
--- a/example_eval/project.xml Wed Dec 16 12:35:52 2015 +0000 +++ b/example_eval/project.xml Wed Dec 16 14:00:11 2015 +0000 @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <BrowserEvalProjectDocument> - <setup interface="APE" projectReturn="save.php" randomiseOrder='true' collectMetrics='true' testPages="2"> + <setup interface="APE" projectReturn="save.php" randomiseOrder='true' collectMetrics='true' testPages="2" loudness="-23"> <PreTest> <question id="sessionId" mandatory="true">Please enter your name.</question> <statement>This is an example of an 'APE'-style test, with two pages, using the test stimuli in 'example_eval/'.</statement> @@ -33,7 +33,7 @@ <option name="page-count"/> </interface> </setup> - <audioHolder id='test-0' hostURL="example_eval/" randomiseOrder='true' repeatCount='0' loop='true' elementComments='true'> + <audioHolder id='test-0' hostURL="example_eval/" randomiseOrder='true' repeatCount='0' loop='true' elementComments='true' loudness="-12"> <interface name="preference"> <title>Preference</title> <scale position="0">Min</scale>
--- a/loudness.js Wed Dec 16 12:35:52 2015 +0000 +++ b/loudness.js Wed Dec 16 14:00:11 2015 +0000 @@ -94,8 +94,6 @@ } var overallRelLoudness = calculateOverallLoudnessFromChannelBlocks(relgateEnergy); buffer.lufs = overallRelLoudness; - var diff = -23 -overallRelLoudness; - buffer.gain = decibelToLinear(diff); } }).catch(function(err) { console.log(err);