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 }