Mercurial > hg > webaudioevaluationtool
comparison core.js @ 795:a75a4e0af44f
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 | 261d92ea87e1 |
children | f69ec262337a |
comparison
equal
deleted
inserted
replaced
794:b56d693cdfb7 | 795:a75a4e0af44f |
---|---|
895 this.buffers.push(buffer); | 895 this.buffers.push(buffer); |
896 } | 896 } |
897 this.audioObjects[audioObjectId].specification = element; | 897 this.audioObjects[audioObjectId].specification = element; |
898 this.audioObjects[audioObjectId].url = URL; | 898 this.audioObjects[audioObjectId].url = URL; |
899 this.audioObjects[audioObjectId].buffer = buffer; | 899 this.audioObjects[audioObjectId].buffer = buffer; |
900 var targetLUFS = this.audioObjects[audioObjectId].specification.parent.loudness; | |
901 if (typeof targetLUFS === "number") | |
902 { | |
903 buffer.buffer.gain = decibelToLinear(targetLUFS - buffer.buffer.lufs); | |
904 } else { | |
905 buffer.buffer.gain = 1.0; | |
906 } | |
900 if (buffer.buffer != null) | 907 if (buffer.buffer != null) |
901 { | 908 { |
902 this.audioObjects[audioObjectId].state = 1; | 909 this.audioObjects[audioObjectId].state = 1; |
903 } | 910 } |
904 buffer.users.push(this.audioObjects[audioObjectId]); | 911 buffer.users.push(this.audioObjects[audioObjectId]); |
1449 this.randomiseOrder = null; | 1456 this.randomiseOrder = null; |
1450 this.collectMetrics = null; | 1457 this.collectMetrics = null; |
1451 this.testPages = null; | 1458 this.testPages = null; |
1452 this.audioHolders = []; | 1459 this.audioHolders = []; |
1453 this.metrics = []; | 1460 this.metrics = []; |
1461 this.loudness = null; | |
1454 | 1462 |
1455 this.decode = function(projectXML) { | 1463 this.decode = function(projectXML) { |
1456 // projectXML - DOM Parsed document | 1464 // projectXML - DOM Parsed document |
1457 this.projectXML = projectXML.childNodes[0]; | 1465 this.projectXML = projectXML.childNodes[0]; |
1458 var setupNode = projectXML.getElementsByTagName('setup')[0]; | 1466 var setupNode = projectXML.getElementsByTagName('setup')[0]; |
1469 { | 1477 { |
1470 this.testPages = null; | 1478 this.testPages = null; |
1471 } else { | 1479 } else { |
1472 this.testPages = Number(this.testPages); | 1480 this.testPages = Number(this.testPages); |
1473 if (this.testPages == 0) {this.testPages = null;} | 1481 if (this.testPages == 0) {this.testPages = null;} |
1482 } | |
1483 if (setupNode.getAttribute('loudness') != null) | |
1484 { | |
1485 var XMLloudness = setupNode.getAttribute('loudness'); | |
1486 if (isNaN(Number(XMLloudness)) == false) | |
1487 { | |
1488 this.loudness = Number(XMLloudness); | |
1489 } | |
1474 } | 1490 } |
1475 var metricCollection = setupNode.getElementsByTagName('Metric'); | 1491 var metricCollection = setupNode.getElementsByTagName('Metric'); |
1476 | 1492 |
1477 var setupPreTestNode = setupNode.getElementsByTagName('PreTest'); | 1493 var setupPreTestNode = setupNode.getElementsByTagName('PreTest'); |
1478 if (setupPreTestNode.length != 0) | 1494 if (setupPreTestNode.length != 0) |
1585 setupNode.setAttribute('interface',this.interfaceType); | 1601 setupNode.setAttribute('interface',this.interfaceType); |
1586 setupNode.setAttribute('projectReturn',this.projectReturn); | 1602 setupNode.setAttribute('projectReturn',this.projectReturn); |
1587 setupNode.setAttribute('randomiseOrder',this.randomiseOrder); | 1603 setupNode.setAttribute('randomiseOrder',this.randomiseOrder); |
1588 setupNode.setAttribute('collectMetrics',this.collectMetrics); | 1604 setupNode.setAttribute('collectMetrics',this.collectMetrics); |
1589 setupNode.setAttribute('testPages',this.testPages); | 1605 setupNode.setAttribute('testPages',this.testPages); |
1606 if(this.loudness != null) {AHNode.setAttribute("loudness",this.loudness);} | |
1590 | 1607 |
1591 var setupPreTest = root.createElement("PreTest"); | 1608 var setupPreTest = root.createElement("PreTest"); |
1592 for (var i=0; i<this.preTest.options.length; i++) | 1609 for (var i=0; i<this.preTest.options.length; i++) |
1593 { | 1610 { |
1594 setupPreTest.appendChild(this.preTest.options[i].exportXML(root)); | 1611 setupPreTest.appendChild(this.preTest.options[i].exportXML(root)); |
1791 this.sampleRate = undefined; | 1808 this.sampleRate = undefined; |
1792 this.randomiseOrder = undefined; | 1809 this.randomiseOrder = undefined; |
1793 this.loop = undefined; | 1810 this.loop = undefined; |
1794 this.elementComments = undefined; | 1811 this.elementComments = undefined; |
1795 this.outsideReference = null; | 1812 this.outsideReference = null; |
1813 this.loudness = null; | |
1796 this.preTest = new parent.prepostNode("pretest"); | 1814 this.preTest = new parent.prepostNode("pretest"); |
1797 this.postTest = new parent.prepostNode("pretest"); | 1815 this.postTest = new parent.prepostNode("pretest"); |
1798 this.interfaces = []; | 1816 this.interfaces = []; |
1799 this.commentBoxPrefix = "Comment on track"; | 1817 this.commentBoxPrefix = "Comment on track"; |
1800 this.audioElements = []; | 1818 this.audioElements = []; |
1811 this.repeatCount = xml.getAttribute('repeatCount'); | 1829 this.repeatCount = xml.getAttribute('repeatCount'); |
1812 if (xml.getAttribute('loop') == 'true') {this.loop = true;} | 1830 if (xml.getAttribute('loop') == 'true') {this.loop = true;} |
1813 else {this.loop == false;} | 1831 else {this.loop == false;} |
1814 if (xml.getAttribute('elementComments') == "true") {this.elementComments = true;} | 1832 if (xml.getAttribute('elementComments') == "true") {this.elementComments = true;} |
1815 else {this.elementComments = false;} | 1833 else {this.elementComments = false;} |
1816 | 1834 if (typeof parent.loudness === "number") |
1835 { | |
1836 this.loudness = parent.loudness; | |
1837 } | |
1838 if (xml.getAttribute('loudness') != null) | |
1839 { | |
1840 var XMLloudness = xml.getAttribute('loudness'); | |
1841 if (isNaN(Number(XMLloudness)) == false) | |
1842 { | |
1843 this.loudness = Number(XMLloudness); | |
1844 } | |
1845 } | |
1817 var setupPreTestNode = xml.getElementsByTagName('PreTest'); | 1846 var setupPreTestNode = xml.getElementsByTagName('PreTest'); |
1818 if (setupPreTestNode.length != 0) | 1847 if (setupPreTestNode.length != 0) |
1819 { | 1848 { |
1820 setupPreTestNode = setupPreTestNode[0]; | 1849 setupPreTestNode = setupPreTestNode[0]; |
1821 this.preTest.construct(setupPreTestNode); | 1850 this.preTest.construct(setupPreTestNode); |
1878 AHNode.setAttribute("sampleRate",this.sampleRate); | 1907 AHNode.setAttribute("sampleRate",this.sampleRate); |
1879 AHNode.setAttribute("randomiseOrder",this.randomiseOrder); | 1908 AHNode.setAttribute("randomiseOrder",this.randomiseOrder); |
1880 AHNode.setAttribute("repeatCount",this.repeatCount); | 1909 AHNode.setAttribute("repeatCount",this.repeatCount); |
1881 AHNode.setAttribute("loop",this.loop); | 1910 AHNode.setAttribute("loop",this.loop); |
1882 AHNode.setAttribute("elementComments",this.elementComments); | 1911 AHNode.setAttribute("elementComments",this.elementComments); |
1912 if(this.loudness != null) {AHNode.setAttribute("loudness",this.loudness);} | |
1883 | 1913 |
1884 for (var i=0; i<this.interfaces.length; i++) | 1914 for (var i=0; i<this.interfaces.length; i++) |
1885 { | 1915 { |
1886 AHNode.appendChild(this.interfaces[i].encode(root)); | 1916 AHNode.appendChild(this.interfaces[i].encode(root)); |
1887 } | 1917 } |