diff --git a/.gitignore b/.gitignore
index 9daa824..cae559a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
.DS_Store
node_modules
+
+/.idea
\ No newline at end of file
diff --git a/dist/index.js b/dist/index.js
index 6eaf4c7..28ae978 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -15816,13 +15816,17 @@ var MicRecorder = function () {
// 128 or 160 kbit/s – mid-range bitrate quality
bitRate: 128,
+ deviceId: null,
+ // Encode to mp3 after finish recording
+ // Encoding during recording may result in distorted audio
+ // This could be crucial on mobile devices
+ encodeAfterRecord: true,
// There is a known issue with some macOS machines, where the recording
// will sometimes have a loud 'pop' or 'pop-click' sound. This flag
// prevents getting audio from the microphone a few milliseconds after
- // the begining of the recording. It also helps to remove the mouse
+ // the beginning of the recording. It also helps to remove the mouse
// "click" sound from the output mp3 file.
- startRecordingAt: 300,
- deviceId: null
+ startRecordingAt: 300
};
this.activeStream = null;
@@ -15830,6 +15834,7 @@ var MicRecorder = function () {
this.microphone = null;
this.processor = null;
this.startTime = 0;
+ this.rawChunksBuffer = null;
Object.assign(this.config, config);
}
@@ -15864,26 +15869,118 @@ var MicRecorder = function () {
return;
}
- // Send microphone data to LAME for MP3 encoding while recording.
- _this.lameEncoder.encode(event.inputBuffer.getChannelData(0));
+ var rawChunk = event.inputBuffer.getChannelData(0);
+
+ if (_this.config.encodeAfterRecord) {
+ // Save copy of raw chunk for future encoding
+ _this.rawChunksBuffer.push(Object.assign([], rawChunk));
+ } else {
+ // Send microphone data to LAME for MP3 encoding while recording.
+ _this.lameEncoder.encode(rawChunk);
+ }
};
- // Begin retrieving microphone data.
- this.microphone.connect(this.processor);
- this.processor.connect(this.context.destination);
+ this.connectMicrophone();
}
}, {
- key: 'stop',
+ key: 'initialize',
+
+
+ /**
+ * Requests access to the microphone and starts recording
+ * @return Promise
+ */
+ value: function initialize() {
+ var _this2 = this;
+
+ var _config = this.config,
+ deviceId = _config.deviceId,
+ encodeAfterRecord = _config.encodeAfterRecord;
+
+ var AudioContext = window.AudioContext || window.webkitAudioContext;
+ this.context = new AudioContext();
+ this.config.sampleRate = this.context.sampleRate;
+ this.rawChunksBuffer = encodeAfterRecord ? [] : null;
+ this.lameEncoder = new Encoder(this.config);
+ this.i = 0;
+
+ var audio = deviceId ? { deviceId: { exact: deviceId } } : true;
+
+ return new Promise(function (resolve, reject) {
+ navigator.mediaDevices.getUserMedia({ audio: audio }).then(function (stream) {
+ _this2.addMicrophoneListener(stream);
+ resolve(stream);
+ }).catch(function (err) {
+ reject(err);
+ });
+ });
+ }
+ }, {
+ key: 'start',
+
+
+ /**
+ * Initializes or resumes recording
+ * @return Promise
+ */
+ value: function start() {
+ if (!this.processor || !this.microphone) {
+ return this.initialize();
+ } else {
+ this.connectMicrophone();
+ return Promise.resolve();
+ }
+ }
+
+ /**
+ * Pause recording
+ * @return Promise
+ */
+
+ }, {
+ key: 'pause',
+ value: function pause() {
+ this.disconnectMicrophone();
+ return Promise.resolve();
+ }
+ }, {
+ key: 'connectMicrophone',
+
+
+ /**
+ * Start retrieving microphone data
+ */
+ value: function connectMicrophone() {
+ if (this.processor && this.microphone) {
+ this.microphone.connect(this.processor);
+ this.processor.connect(this.context.destination);
+ }
+ }
+ /**
+ * Stop retrieving microphone data
+ */
+
+ }, {
+ key: 'disconnectMicrophone',
+ value: function disconnectMicrophone() {
+ if (this.processor && this.microphone) {
+ this.microphone.disconnect();
+ this.processor.disconnect();
+ }
+ }
/**
* Disconnect microphone, processor and remove activeStream
+ * @return MicRecorder
*/
+
+ }, {
+ key: 'stop',
value: function stop() {
if (this.processor && this.microphone) {
// Clean up the Web Audio API resources.
- this.microphone.disconnect();
- this.processor.disconnect();
+ this.disconnectMicrophone();
// If all references using this.context are destroyed, context is closed
// automatically. DOMException is fired when trying to close again
@@ -15897,59 +15994,73 @@ var MicRecorder = function () {
this.activeStream.getAudioTracks().forEach(function (track) {
return track.stop();
});
+ this.processor = null;
+ this.microphone = null;
}
return this;
}
}, {
- key: 'start',
+ key: 'encodeRawChunks',
/**
- * Requests access to the microphone and start recording
+ * Encodes raw audio chunks into mp3
* @return Promise
*/
- value: function start() {
- var _this2 = this;
-
- var AudioContext = window.AudioContext || window.webkitAudioContext;
- this.context = new AudioContext();
- this.config.sampleRate = this.context.sampleRate;
- this.lameEncoder = new Encoder(this.config);
-
- var audio = this.config.deviceId ? { deviceId: { exact: this.config.deviceId } } : true;
+ value: function encodeRawChunks() {
+ var _this3 = this;
- return new Promise(function (resolve, reject) {
- navigator.mediaDevices.getUserMedia({ audio: audio }).then(function (stream) {
- _this2.addMicrophoneListener(stream);
- resolve(stream);
- }).catch(function (err) {
- reject(err);
+ return this.rawChunksBuffer.reduce(function (previousOperation, rawChunk) {
+ return previousOperation.then(function () {
+ return new Promise(function (resolve) {
+ //this improve browser responsiveness during encoding process
+ setTimeout(function () {
+ _this3.lameEncoder.encode(rawChunk);
+ resolve();
+ });
+ });
});
- });
+ }, Promise.resolve());
}
- }, {
- key: 'getMp3',
-
/**
- * Return Mp3 Buffer and Blob with type mp3
- * @return {Promise}
+ * Finishes encoding process and returns prepared mp3 file as a result
+ * @return Promise
*/
- value: function getMp3() {
- var _this3 = this;
+
+ }, {
+ key: 'finishEncoding',
+ value: function finishEncoding() {
+ var _this4 = this;
var finalBuffer = this.lameEncoder.finish();
+ this.rawChunksBuffer = null;
return new Promise(function (resolve, reject) {
if (finalBuffer.length === 0) {
reject(new Error('No buffer to send'));
} else {
resolve([finalBuffer, new Blob(finalBuffer, { type: 'audio/mp3' })]);
- _this3.lameEncoder.clearBuffer();
+ _this4.lameEncoder.clearBuffer();
}
});
}
+
+ /**
+ * Return Mp3 Buffer and Blob with type mp3
+ * @return Promise
+ */
+
+ }, {
+ key: 'getMp3',
+ value: function getMp3() {
+ var _this5 = this;
+
+ return (this.config.encodeAfterRecord ? this.encodeRawChunks() : Promise.resolve()).then(function () {
+ return _this5.finishEncoding();
+ });
+ }
}]);
return MicRecorder;
}();
diff --git a/dist/index.js.map b/dist/index.js.map
index 1f5ac56..2304551 100644
--- a/dist/index.js.map
+++ b/dist/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sources":["../node_modules/lamejs/src/js/common.js","../node_modules/lamejs/src/js/NewMDCT.js","../node_modules/lamejs/src/js/III_psy_xmin.js","../node_modules/lamejs/src/js/III_psy_ratio.js","../node_modules/lamejs/src/js/Encoder.js","../node_modules/lamejs/src/js/FFT.js","../node_modules/lamejs/src/js/PsyModel.js","../node_modules/lamejs/src/js/MPEGMode.js","../node_modules/lamejs/src/js/LameGlobalFlags.js","../node_modules/lamejs/src/js/L3Side.js","../node_modules/lamejs/src/js/GrInfo.js","../node_modules/lamejs/src/js/IIISideInfo.js","../node_modules/lamejs/src/js/ScaleFac.js","../node_modules/lamejs/src/js/NsPsy.js","../node_modules/lamejs/src/js/VBRSeekInfo.js","../node_modules/lamejs/src/js/LameInternalFlags.js","../node_modules/lamejs/src/js/ATH.js","../node_modules/lamejs/src/js/GainAnalysis.js","../node_modules/lamejs/src/js/ReplayGain.js","../node_modules/lamejs/src/js/MeanBits.js","../node_modules/lamejs/src/js/CBRNewIterationLoop.js","../node_modules/lamejs/src/js/Tables.js","../node_modules/lamejs/src/js/QuantizePVT.js","../node_modules/lamejs/src/js/Takehiro.js","../node_modules/lamejs/src/js/BitStream.js","../node_modules/lamejs/src/js/Lame.js","../node_modules/lamejs/src/js/Presets.js","../node_modules/lamejs/src/js/VBRQuantize.js","../node_modules/lamejs/src/js/CalcNoiseResult.js","../node_modules/lamejs/src/js/CalcNoiseData.js","../node_modules/lamejs/src/js/Quantize.js","../node_modules/lamejs/src/js/Reservoir.js","../node_modules/lamejs/src/js/Version.js","../node_modules/lamejs/src/js/VBRTag.js","../node_modules/lamejs/src/js/index.js","../src/encoder.js","../src/mic-recorder.js"],"sourcesContent":["function new_byte(count) {\n return new Int8Array(count);\n}\n\nfunction new_short(count) {\n return new Int16Array(count);\n}\n\nfunction new_int(count) {\n return new Int32Array(count);\n}\n\nfunction new_float(count) {\n return new Float32Array(count);\n}\n\nfunction new_double(count) {\n return new Float64Array(count);\n}\n\nfunction new_float_n(args) {\n if (args.length == 1) {\n return new_float(args[0]);\n }\n var sz = args[0];\n args = args.slice(1);\n var A = [];\n for (var i = 0; i < sz; i++) {\n A.push(new_float_n(args));\n }\n return A;\n}\nfunction new_int_n(args) {\n if (args.length == 1) {\n return new_int(args[0]);\n }\n var sz = args[0];\n args = args.slice(1);\n var A = [];\n for (var i = 0; i < sz; i++) {\n A.push(new_int_n(args));\n }\n return A;\n}\n\nfunction new_short_n(args) {\n if (args.length == 1) {\n return new_short(args[0]);\n }\n var sz = args[0];\n args = args.slice(1);\n var A = [];\n for (var i = 0; i < sz; i++) {\n A.push(new_short_n(args));\n }\n return A;\n}\n\nfunction new_array_n(args) {\n if (args.length == 1) {\n return new Array(args[0]);\n }\n var sz = args[0];\n args = args.slice(1);\n var A = [];\n for (var i = 0; i < sz; i++) {\n A.push(new_array_n(args));\n }\n return A;\n}\n\n\nvar Arrays = {};\n\nArrays.fill = function (a, fromIndex, toIndex, val) {\n if (arguments.length == 2) {\n for (var i = 0; i < a.length; i++) {\n a[i] = arguments[1];\n }\n } else {\n for (var i = fromIndex; i < toIndex; i++) {\n a[i] = val;\n }\n }\n};\n\nvar System = {};\n\nSystem.arraycopy = function (src, srcPos, dest, destPos, length) {\n var srcEnd = srcPos + length;\n while (srcPos < srcEnd)\n dest[destPos++] = src[srcPos++];\n};\n\n\nvar Util = {};\nUtil.SQRT2 = 1.41421356237309504880;\nUtil.FAST_LOG10 = function (x) {\n return Math.log10(x);\n};\n\nUtil.FAST_LOG10_X = function (x, y) {\n return Math.log10(x) * y;\n};\n\nfunction ShortBlock(ordinal) {\n this.ordinal = ordinal;\n}\n/**\n * LAME may use them, even different block types for L/R.\n */\nShortBlock.short_block_allowed = new ShortBlock(0);\n/**\n * LAME may use them, but always same block types in L/R.\n */\nShortBlock.short_block_coupled = new ShortBlock(1);\n/**\n * LAME will not use short blocks, long blocks only.\n */\nShortBlock.short_block_dispensed = new ShortBlock(2);\n/**\n * LAME will not use long blocks, short blocks only.\n */\nShortBlock.short_block_forced = new ShortBlock(3);\n\nvar Float = {};\nFloat.MAX_VALUE = 3.4028235e+38;\n\nfunction VbrMode(ordinal) {\n this.ordinal = ordinal;\n}\nVbrMode.vbr_off = new VbrMode(0);\nVbrMode.vbr_mt = new VbrMode(1);\nVbrMode.vbr_rh = new VbrMode(2);\nVbrMode.vbr_abr = new VbrMode(3);\nVbrMode.vbr_mtrh = new VbrMode(4);\nVbrMode.vbr_default = VbrMode.vbr_mtrh;\n\nvar assert = function (x) {\n //console.assert(x);\n};\n\nmodule.exports = {\n \"System\": System,\n \"VbrMode\": VbrMode,\n \"Float\": Float,\n \"ShortBlock\": ShortBlock,\n \"Util\": Util,\n \"Arrays\": Arrays,\n \"new_array_n\": new_array_n,\n \"new_byte\": new_byte,\n \"new_double\": new_double,\n \"new_float\": new_float,\n \"new_float_n\": new_float_n,\n \"new_int\": new_int,\n \"new_int_n\": new_int_n,\n \"new_short\": new_short,\n \"new_short_n\": new_short_n,\n \"assert\": assert\n};\n","/*\n * MP3 window subband -> subband filtering -> mdct routine\n *\n * Copyright (c) 1999-2000 Takehiro Tominaga\n *\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Library General Public License for more details.\n *\n * You should have received a copy of the GNU Library General Public\n * License along with this library; if not, write to the\n * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n * Boston, MA 02111-1307, USA.\n */\n/*\n * Special Thanks to Patrick De Smet for your advices.\n */\n\n/* $Id: NewMDCT.java,v 1.11 2011/05/24 20:48:06 kenchis Exp $ */\n\n//package mp3;\n\n//import java.util.Arrays;\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\n\n\nfunction NewMDCT() {\n\n\tvar enwindow = [\n\t\t\t-4.77e-07 * 0.740951125354959 / 2.384e-06,\n\t\t\t1.03951e-04 * 0.740951125354959 / 2.384e-06,\n\t\t\t9.53674e-04 * 0.740951125354959 / 2.384e-06,\n\t\t\t2.841473e-03 * 0.740951125354959 / 2.384e-06,\n\t\t\t3.5758972e-02 * 0.740951125354959 / 2.384e-06,\n\t\t\t3.401756e-03 * 0.740951125354959 / 2.384e-06,\n\t\t\t9.83715e-04 * 0.740951125354959 / 2.384e-06,\n\t\t\t9.9182e-05 * 0.740951125354959 / 2.384e-06, /* 15 */\n\t\t\t1.2398e-05 * 0.740951125354959 / 2.384e-06,\n\t\t\t1.91212e-04 * 0.740951125354959 / 2.384e-06,\n\t\t\t2.283096e-03 * 0.740951125354959 / 2.384e-06,\n\t\t\t1.6994476e-02 * 0.740951125354959 / 2.384e-06,\n\t\t\t-1.8756866e-02 * 0.740951125354959 / 2.384e-06,\n\t\t\t-2.630711e-03 * 0.740951125354959 / 2.384e-06,\n\t\t\t-2.47478e-04 * 0.740951125354959 / 2.384e-06,\n\t\t\t-1.4782e-05 * 0.740951125354959 / 2.384e-06,\n\t\t\t9.063471690191471e-01, 1.960342806591213e-01,\n\n\t\t\t-4.77e-07 * 0.773010453362737 / 2.384e-06,\n\t\t\t1.05858e-04 * 0.773010453362737 / 2.384e-06,\n\t\t\t9.30786e-04 * 0.773010453362737 / 2.384e-06,\n\t\t\t2.521515e-03 * 0.773010453362737 / 2.384e-06,\n\t\t\t3.5694122e-02 * 0.773010453362737 / 2.384e-06,\n\t\t\t3.643036e-03 * 0.773010453362737 / 2.384e-06,\n\t\t\t9.91821e-04 * 0.773010453362737 / 2.384e-06,\n\t\t\t9.6321e-05 * 0.773010453362737 / 2.384e-06, /* 14 */\n\t\t\t1.1444e-05 * 0.773010453362737 / 2.384e-06,\n\t\t\t1.65462e-04 * 0.773010453362737 / 2.384e-06,\n\t\t\t2.110004e-03 * 0.773010453362737 / 2.384e-06,\n\t\t\t1.6112804e-02 * 0.773010453362737 / 2.384e-06,\n\t\t\t-1.9634247e-02 * 0.773010453362737 / 2.384e-06,\n\t\t\t-2.803326e-03 * 0.773010453362737 / 2.384e-06,\n\t\t\t-2.77042e-04 * 0.773010453362737 / 2.384e-06,\n\t\t\t-1.6689e-05 * 0.773010453362737 / 2.384e-06,\n\t\t\t8.206787908286602e-01, 3.901806440322567e-01,\n\n\t\t\t-4.77e-07 * 0.803207531480645 / 2.384e-06,\n\t\t\t1.07288e-04 * 0.803207531480645 / 2.384e-06,\n\t\t\t9.02653e-04 * 0.803207531480645 / 2.384e-06,\n\t\t\t2.174854e-03 * 0.803207531480645 / 2.384e-06,\n\t\t\t3.5586357e-02 * 0.803207531480645 / 2.384e-06,\n\t\t\t3.858566e-03 * 0.803207531480645 / 2.384e-06,\n\t\t\t9.95159e-04 * 0.803207531480645 / 2.384e-06,\n\t\t\t9.3460e-05 * 0.803207531480645 / 2.384e-06, /* 13 */\n\t\t\t1.0014e-05 * 0.803207531480645 / 2.384e-06,\n\t\t\t1.40190e-04 * 0.803207531480645 / 2.384e-06,\n\t\t\t1.937389e-03 * 0.803207531480645 / 2.384e-06,\n\t\t\t1.5233517e-02 * 0.803207531480645 / 2.384e-06,\n\t\t\t-2.0506859e-02 * 0.803207531480645 / 2.384e-06,\n\t\t\t-2.974033e-03 * 0.803207531480645 / 2.384e-06,\n\t\t\t-3.07560e-04 * 0.803207531480645 / 2.384e-06,\n\t\t\t-1.8120e-05 * 0.803207531480645 / 2.384e-06,\n\t\t\t7.416505462720353e-01, 5.805693545089249e-01,\n\n\t\t\t-4.77e-07 * 0.831469612302545 / 2.384e-06,\n\t\t\t1.08242e-04 * 0.831469612302545 / 2.384e-06,\n\t\t\t8.68797e-04 * 0.831469612302545 / 2.384e-06,\n\t\t\t1.800537e-03 * 0.831469612302545 / 2.384e-06,\n\t\t\t3.5435200e-02 * 0.831469612302545 / 2.384e-06,\n\t\t\t4.049301e-03 * 0.831469612302545 / 2.384e-06,\n\t\t\t9.94205e-04 * 0.831469612302545 / 2.384e-06,\n\t\t\t9.0599e-05 * 0.831469612302545 / 2.384e-06, /* 12 */\n\t\t\t9.060e-06 * 0.831469612302545 / 2.384e-06,\n\t\t\t1.16348e-04 * 0.831469612302545 / 2.384e-06,\n\t\t\t1.766682e-03 * 0.831469612302545 / 2.384e-06,\n\t\t\t1.4358521e-02 * 0.831469612302545 / 2.384e-06,\n\t\t\t-2.1372318e-02 * 0.831469612302545 / 2.384e-06,\n\t\t\t-3.14188e-03 * 0.831469612302545 / 2.384e-06,\n\t\t\t-3.39031e-04 * 0.831469612302545 / 2.384e-06,\n\t\t\t-1.9550e-05 * 0.831469612302545 / 2.384e-06,\n\t\t\t6.681786379192989e-01, 7.653668647301797e-01,\n\n\t\t\t-4.77e-07 * 0.857728610000272 / 2.384e-06,\n\t\t\t1.08719e-04 * 0.857728610000272 / 2.384e-06,\n\t\t\t8.29220e-04 * 0.857728610000272 / 2.384e-06,\n\t\t\t1.399517e-03 * 0.857728610000272 / 2.384e-06,\n\t\t\t3.5242081e-02 * 0.857728610000272 / 2.384e-06,\n\t\t\t4.215240e-03 * 0.857728610000272 / 2.384e-06,\n\t\t\t9.89437e-04 * 0.857728610000272 / 2.384e-06,\n\t\t\t8.7261e-05 * 0.857728610000272 / 2.384e-06, /* 11 */\n\t\t\t8.106e-06 * 0.857728610000272 / 2.384e-06,\n\t\t\t9.3937e-05 * 0.857728610000272 / 2.384e-06,\n\t\t\t1.597881e-03 * 0.857728610000272 / 2.384e-06,\n\t\t\t1.3489246e-02 * 0.857728610000272 / 2.384e-06,\n\t\t\t-2.2228718e-02 * 0.857728610000272 / 2.384e-06,\n\t\t\t-3.306866e-03 * 0.857728610000272 / 2.384e-06,\n\t\t\t-3.71456e-04 * 0.857728610000272 / 2.384e-06,\n\t\t\t-2.1458e-05 * 0.857728610000272 / 2.384e-06,\n\t\t\t5.993769336819237e-01, 9.427934736519954e-01,\n\n\t\t\t-4.77e-07 * 0.881921264348355 / 2.384e-06,\n\t\t\t1.08719e-04 * 0.881921264348355 / 2.384e-06,\n\t\t\t7.8392e-04 * 0.881921264348355 / 2.384e-06,\n\t\t\t9.71317e-04 * 0.881921264348355 / 2.384e-06,\n\t\t\t3.5007000e-02 * 0.881921264348355 / 2.384e-06,\n\t\t\t4.357815e-03 * 0.881921264348355 / 2.384e-06,\n\t\t\t9.80854e-04 * 0.881921264348355 / 2.384e-06,\n\t\t\t8.3923e-05 * 0.881921264348355 / 2.384e-06, /* 10 */\n\t\t\t7.629e-06 * 0.881921264348355 / 2.384e-06,\n\t\t\t7.2956e-05 * 0.881921264348355 / 2.384e-06,\n\t\t\t1.432419e-03 * 0.881921264348355 / 2.384e-06,\n\t\t\t1.2627602e-02 * 0.881921264348355 / 2.384e-06,\n\t\t\t-2.3074150e-02 * 0.881921264348355 / 2.384e-06,\n\t\t\t-3.467083e-03 * 0.881921264348355 / 2.384e-06,\n\t\t\t-4.04358e-04 * 0.881921264348355 / 2.384e-06,\n\t\t\t-2.3365e-05 * 0.881921264348355 / 2.384e-06,\n\t\t\t5.345111359507916e-01, 1.111140466039205e+00,\n\n\t\t\t-9.54e-07 * 0.903989293123443 / 2.384e-06,\n\t\t\t1.08242e-04 * 0.903989293123443 / 2.384e-06,\n\t\t\t7.31945e-04 * 0.903989293123443 / 2.384e-06,\n\t\t\t5.15938e-04 * 0.903989293123443 / 2.384e-06,\n\t\t\t3.4730434e-02 * 0.903989293123443 / 2.384e-06,\n\t\t\t4.477024e-03 * 0.903989293123443 / 2.384e-06,\n\t\t\t9.68933e-04 * 0.903989293123443 / 2.384e-06,\n\t\t\t8.0585e-05 * 0.903989293123443 / 2.384e-06, /* 9 */\n\t\t\t6.676e-06 * 0.903989293123443 / 2.384e-06,\n\t\t\t5.2929e-05 * 0.903989293123443 / 2.384e-06,\n\t\t\t1.269817e-03 * 0.903989293123443 / 2.384e-06,\n\t\t\t1.1775017e-02 * 0.903989293123443 / 2.384e-06,\n\t\t\t-2.3907185e-02 * 0.903989293123443 / 2.384e-06,\n\t\t\t-3.622532e-03 * 0.903989293123443 / 2.384e-06,\n\t\t\t-4.38213e-04 * 0.903989293123443 / 2.384e-06,\n\t\t\t-2.5272e-05 * 0.903989293123443 / 2.384e-06,\n\t\t\t4.729647758913199e-01, 1.268786568327291e+00,\n\n\t\t\t-9.54e-07 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t1.06812e-04 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t6.74248e-04 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t3.3379e-05 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t3.4412861e-02 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t4.573822e-03 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t9.54151e-04 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t7.6771e-05 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t6.199e-06 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t3.4332e-05 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t1.111031e-03 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t1.0933399e-02 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t-2.4725437e-02 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t-3.771782e-03 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t-4.72546e-04 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t-2.7657e-05 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t4.1421356237309504879e-01, /* tan(PI/8) */\n\t\t\t1.414213562373095e+00,\n\n\t\t\t-9.54e-07 * 0.941544065183021 / 2.384e-06,\n\t\t\t1.05381e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t6.10352e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t-4.75883e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t3.4055710e-02 * 0.941544065183021 / 2.384e-06,\n\t\t\t4.649162e-03 * 0.941544065183021 / 2.384e-06,\n\t\t\t9.35555e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t7.3433e-05 * 0.941544065183021 / 2.384e-06, /* 7 */\n\t\t\t5.245e-06 * 0.941544065183021 / 2.384e-06,\n\t\t\t1.7166e-05 * 0.941544065183021 / 2.384e-06,\n\t\t\t9.56535e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t1.0103703e-02 * 0.941544065183021 / 2.384e-06,\n\t\t\t-2.5527000e-02 * 0.941544065183021 / 2.384e-06,\n\t\t\t-3.914356e-03 * 0.941544065183021 / 2.384e-06,\n\t\t\t-5.07355e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t-3.0041e-05 * 0.941544065183021 / 2.384e-06,\n\t\t\t3.578057213145241e-01, 1.546020906725474e+00,\n\n\t\t\t-9.54e-07 * 0.956940335732209 / 2.384e-06,\n\t\t\t1.02520e-04 * 0.956940335732209 / 2.384e-06,\n\t\t\t5.39303e-04 * 0.956940335732209 / 2.384e-06,\n\t\t\t-1.011848e-03 * 0.956940335732209 / 2.384e-06,\n\t\t\t3.3659935e-02 * 0.956940335732209 / 2.384e-06,\n\t\t\t4.703045e-03 * 0.956940335732209 / 2.384e-06,\n\t\t\t9.15051e-04 * 0.956940335732209 / 2.384e-06,\n\t\t\t7.0095e-05 * 0.956940335732209 / 2.384e-06, /* 6 */\n\t\t\t4.768e-06 * 0.956940335732209 / 2.384e-06,\n\t\t\t9.54e-07 * 0.956940335732209 / 2.384e-06,\n\t\t\t8.06808e-04 * 0.956940335732209 / 2.384e-06,\n\t\t\t9.287834e-03 * 0.956940335732209 / 2.384e-06,\n\t\t\t-2.6310921e-02 * 0.956940335732209 / 2.384e-06,\n\t\t\t-4.048824e-03 * 0.956940335732209 / 2.384e-06,\n\t\t\t-5.42164e-04 * 0.956940335732209 / 2.384e-06,\n\t\t\t-3.2425e-05 * 0.956940335732209 / 2.384e-06,\n\t\t\t3.033466836073424e-01, 1.662939224605090e+00,\n\n\t\t\t-1.431e-06 * 0.970031253194544 / 2.384e-06,\n\t\t\t9.9182e-05 * 0.970031253194544 / 2.384e-06,\n\t\t\t4.62532e-04 * 0.970031253194544 / 2.384e-06,\n\t\t\t-1.573563e-03 * 0.970031253194544 / 2.384e-06,\n\t\t\t3.3225536e-02 * 0.970031253194544 / 2.384e-06,\n\t\t\t4.737377e-03 * 0.970031253194544 / 2.384e-06,\n\t\t\t8.91685e-04 * 0.970031253194544 / 2.384e-06,\n\t\t\t6.6280e-05 * 0.970031253194544 / 2.384e-06, /* 5 */\n\t\t\t4.292e-06 * 0.970031253194544 / 2.384e-06,\n\t\t\t-1.3828e-05 * 0.970031253194544 / 2.384e-06,\n\t\t\t6.61850e-04 * 0.970031253194544 / 2.384e-06,\n\t\t\t8.487225e-03 * 0.970031253194544 / 2.384e-06,\n\t\t\t-2.7073860e-02 * 0.970031253194544 / 2.384e-06,\n\t\t\t-4.174709e-03 * 0.970031253194544 / 2.384e-06,\n\t\t\t-5.76973e-04 * 0.970031253194544 / 2.384e-06,\n\t\t\t-3.4809e-05 * 0.970031253194544 / 2.384e-06,\n\t\t\t2.504869601913055e-01, 1.763842528696710e+00,\n\n\t\t\t-1.431e-06 * 0.98078528040323 / 2.384e-06,\n\t\t\t9.5367e-05 * 0.98078528040323 / 2.384e-06,\n\t\t\t3.78609e-04 * 0.98078528040323 / 2.384e-06,\n\t\t\t-2.161503e-03 * 0.98078528040323 / 2.384e-06,\n\t\t\t3.2754898e-02 * 0.98078528040323 / 2.384e-06,\n\t\t\t4.752159e-03 * 0.98078528040323 / 2.384e-06,\n\t\t\t8.66413e-04 * 0.98078528040323 / 2.384e-06,\n\t\t\t6.2943e-05 * 0.98078528040323 / 2.384e-06, /* 4 */\n\t\t\t3.815e-06 * 0.98078528040323 / 2.384e-06,\n\t\t\t-2.718e-05 * 0.98078528040323 / 2.384e-06,\n\t\t\t5.22137e-04 * 0.98078528040323 / 2.384e-06,\n\t\t\t7.703304e-03 * 0.98078528040323 / 2.384e-06,\n\t\t\t-2.7815342e-02 * 0.98078528040323 / 2.384e-06,\n\t\t\t-4.290581e-03 * 0.98078528040323 / 2.384e-06,\n\t\t\t-6.11782e-04 * 0.98078528040323 / 2.384e-06,\n\t\t\t-3.7670e-05 * 0.98078528040323 / 2.384e-06,\n\t\t\t1.989123673796580e-01, 1.847759065022573e+00,\n\n\t\t\t-1.907e-06 * 0.989176509964781 / 2.384e-06,\n\t\t\t9.0122e-05 * 0.989176509964781 / 2.384e-06,\n\t\t\t2.88486e-04 * 0.989176509964781 / 2.384e-06,\n\t\t\t-2.774239e-03 * 0.989176509964781 / 2.384e-06,\n\t\t\t3.2248020e-02 * 0.989176509964781 / 2.384e-06,\n\t\t\t4.748821e-03 * 0.989176509964781 / 2.384e-06,\n\t\t\t8.38757e-04 * 0.989176509964781 / 2.384e-06,\n\t\t\t5.9605e-05 * 0.989176509964781 / 2.384e-06, /* 3 */\n\t\t\t3.338e-06 * 0.989176509964781 / 2.384e-06,\n\t\t\t-3.9577e-05 * 0.989176509964781 / 2.384e-06,\n\t\t\t3.88145e-04 * 0.989176509964781 / 2.384e-06,\n\t\t\t6.937027e-03 * 0.989176509964781 / 2.384e-06,\n\t\t\t-2.8532982e-02 * 0.989176509964781 / 2.384e-06,\n\t\t\t-4.395962e-03 * 0.989176509964781 / 2.384e-06,\n\t\t\t-6.46591e-04 * 0.989176509964781 / 2.384e-06,\n\t\t\t-4.0531e-05 * 0.989176509964781 / 2.384e-06,\n\t\t\t1.483359875383474e-01, 1.913880671464418e+00,\n\n\t\t\t-1.907e-06 * 0.995184726672197 / 2.384e-06,\n\t\t\t8.4400e-05 * 0.995184726672197 / 2.384e-06,\n\t\t\t1.91689e-04 * 0.995184726672197 / 2.384e-06,\n\t\t\t-3.411293e-03 * 0.995184726672197 / 2.384e-06,\n\t\t\t3.1706810e-02 * 0.995184726672197 / 2.384e-06,\n\t\t\t4.728317e-03 * 0.995184726672197 / 2.384e-06,\n\t\t\t8.09669e-04 * 0.995184726672197 / 2.384e-06,\n\t\t\t5.579e-05 * 0.995184726672197 / 2.384e-06,\n\t\t\t3.338e-06 * 0.995184726672197 / 2.384e-06,\n\t\t\t-5.0545e-05 * 0.995184726672197 / 2.384e-06,\n\t\t\t2.59876e-04 * 0.995184726672197 / 2.384e-06,\n\t\t\t6.189346e-03 * 0.995184726672197 / 2.384e-06,\n\t\t\t-2.9224873e-02 * 0.995184726672197 / 2.384e-06,\n\t\t\t-4.489899e-03 * 0.995184726672197 / 2.384e-06,\n\t\t\t-6.80923e-04 * 0.995184726672197 / 2.384e-06,\n\t\t\t-4.3392e-05 * 0.995184726672197 / 2.384e-06,\n\t\t\t9.849140335716425e-02, 1.961570560806461e+00,\n\n\t\t\t-2.384e-06 * 0.998795456205172 / 2.384e-06,\n\t\t\t7.7724e-05 * 0.998795456205172 / 2.384e-06,\n\t\t\t8.8215e-05 * 0.998795456205172 / 2.384e-06,\n\t\t\t-4.072189e-03 * 0.998795456205172 / 2.384e-06,\n\t\t\t3.1132698e-02 * 0.998795456205172 / 2.384e-06,\n\t\t\t4.691124e-03 * 0.998795456205172 / 2.384e-06,\n\t\t\t7.79152e-04 * 0.998795456205172 / 2.384e-06,\n\t\t\t5.2929e-05 * 0.998795456205172 / 2.384e-06,\n\t\t\t2.861e-06 * 0.998795456205172 / 2.384e-06,\n\t\t\t-6.0558e-05 * 0.998795456205172 / 2.384e-06,\n\t\t\t1.37329e-04 * 0.998795456205172 / 2.384e-06,\n\t\t\t5.462170e-03 * 0.998795456205172 / 2.384e-06,\n\t\t\t-2.9890060e-02 * 0.998795456205172 / 2.384e-06,\n\t\t\t-4.570484e-03 * 0.998795456205172 / 2.384e-06,\n\t\t\t-7.14302e-04 * 0.998795456205172 / 2.384e-06,\n\t\t\t-4.6253e-05 * 0.998795456205172 / 2.384e-06,\n\t\t\t4.912684976946725e-02, 1.990369453344394e+00,\n\n\t\t\t3.5780907e-02 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t1.7876148e-02 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t3.134727e-03 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t2.457142e-03 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t9.71317e-04 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t2.18868e-04 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t1.01566e-04 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t1.3828e-05 * Util.SQRT2 * 0.5 / 2.384e-06,\n\n\t\t\t3.0526638e-02 / 2.384e-06, 4.638195e-03 / 2.384e-06,\n\t\t\t7.47204e-04 / 2.384e-06, 4.9591e-05 / 2.384e-06,\n\t\t\t4.756451e-03 / 2.384e-06, 2.1458e-05 / 2.384e-06,\n\t\t\t-6.9618e-05 / 2.384e-06, /* 2.384e-06/2.384e-06 */\n\t];\n\n\tvar NS = 12;\n\tvar NL = 36;\n\n\tvar win = [\n\t [\n\t 2.382191739347913e-13,\n\t 6.423305872147834e-13,\n\t 9.400849094049688e-13,\n\t 1.122435026096556e-12,\n\t 1.183840321267481e-12,\n\t 1.122435026096556e-12,\n\t 9.400849094049690e-13,\n\t 6.423305872147839e-13,\n\t 2.382191739347918e-13,\n\n\t 5.456116108943412e-12,\n\t 4.878985199565852e-12,\n\t 4.240448995017367e-12,\n\t 3.559909094758252e-12,\n\t 2.858043359288075e-12,\n\t 2.156177623817898e-12,\n\t 1.475637723558783e-12,\n\t 8.371015190102974e-13,\n\t 2.599706096327376e-13,\n\n\t -5.456116108943412e-12,\n\t -4.878985199565852e-12,\n\t -4.240448995017367e-12,\n\t -3.559909094758252e-12,\n\t -2.858043359288076e-12,\n\t -2.156177623817898e-12,\n\t -1.475637723558783e-12,\n\t -8.371015190102975e-13,\n\t -2.599706096327376e-13,\n\n\t -2.382191739347923e-13,\n\t -6.423305872147843e-13,\n\t -9.400849094049696e-13,\n\t -1.122435026096556e-12,\n\t -1.183840321267481e-12,\n\t -1.122435026096556e-12,\n\t -9.400849094049694e-13,\n\t -6.423305872147840e-13,\n\t -2.382191739347918e-13,\n\t ],\n\t [\n\t 2.382191739347913e-13,\n\t 6.423305872147834e-13,\n\t 9.400849094049688e-13,\n\t 1.122435026096556e-12,\n\t 1.183840321267481e-12,\n\t 1.122435026096556e-12,\n\t 9.400849094049688e-13,\n\t 6.423305872147841e-13,\n\t 2.382191739347918e-13,\n\n\t 5.456116108943413e-12,\n\t 4.878985199565852e-12,\n\t 4.240448995017367e-12,\n\t 3.559909094758253e-12,\n\t 2.858043359288075e-12,\n\t 2.156177623817898e-12,\n\t 1.475637723558782e-12,\n\t 8.371015190102975e-13,\n\t 2.599706096327376e-13,\n\n\t -5.461314069809755e-12,\n\t -4.921085770524055e-12,\n\t -4.343405037091838e-12,\n\t -3.732668368707687e-12,\n\t -3.093523840190885e-12,\n\t -2.430835727329465e-12,\n\t -1.734679010007751e-12,\n\t -9.748253656609281e-13,\n\t -2.797435120168326e-13,\n\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t -2.283748241799531e-13,\n\t -4.037858874020686e-13,\n\t -2.146547464825323e-13,\n\t ],\n\t [\n\t 1.316524975873958e-01, /* win[SHORT_TYPE] */\n\t 4.142135623730950e-01,\n\t 7.673269879789602e-01,\n\n\t 1.091308501069271e+00, /* tantab_l */\n\t 1.303225372841206e+00,\n\t 1.569685577117490e+00,\n\t 1.920982126971166e+00,\n\t 2.414213562373094e+00,\n\t 3.171594802363212e+00,\n\t 4.510708503662055e+00,\n\t 7.595754112725146e+00,\n\t 2.290376554843115e+01,\n\n\t 0.98480775301220802032, /* cx */\n\t 0.64278760968653936292,\n\t 0.34202014332566882393,\n\t 0.93969262078590842791,\n\t -0.17364817766693030343,\n\t -0.76604444311897790243,\n\t 0.86602540378443870761,\n\t 0.500000000000000e+00,\n\n\t -5.144957554275265e-01, /* ca */\n\t -4.717319685649723e-01,\n\t -3.133774542039019e-01,\n\t -1.819131996109812e-01,\n\t -9.457419252642064e-02,\n\t -4.096558288530405e-02,\n\t -1.419856857247115e-02,\n\t -3.699974673760037e-03,\n\n\t 8.574929257125442e-01, /* cs */\n\t 8.817419973177052e-01,\n\t 9.496286491027329e-01,\n\t 9.833145924917901e-01,\n\t 9.955178160675857e-01,\n\t 9.991605581781475e-01,\n\t 9.998991952444470e-01,\n\t 9.999931550702802e-01,\n\t ],\n\t [\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 2.283748241799531e-13,\n\t 4.037858874020686e-13,\n\t 2.146547464825323e-13,\n\n\t 5.461314069809755e-12,\n\t 4.921085770524055e-12,\n\t 4.343405037091838e-12,\n\t 3.732668368707687e-12,\n\t 3.093523840190885e-12,\n\t 2.430835727329466e-12,\n\t 1.734679010007751e-12,\n\t 9.748253656609281e-13,\n\t 2.797435120168326e-13,\n\n\t -5.456116108943413e-12,\n\t -4.878985199565852e-12,\n\t -4.240448995017367e-12,\n\t -3.559909094758253e-12,\n\t -2.858043359288075e-12,\n\t -2.156177623817898e-12,\n\t -1.475637723558782e-12,\n\t -8.371015190102975e-13,\n\t -2.599706096327376e-13,\n\n\t -2.382191739347913e-13,\n\t -6.423305872147834e-13,\n\t -9.400849094049688e-13,\n\t -1.122435026096556e-12,\n\t -1.183840321267481e-12,\n\t -1.122435026096556e-12,\n\t -9.400849094049688e-13,\n\t -6.423305872147841e-13,\n\t -2.382191739347918e-13,\n\t ]\n\t];\n\n\tvar tantab_l = win[Encoder.SHORT_TYPE];\n\tvar cx = win[Encoder.SHORT_TYPE];\n\tvar ca = win[Encoder.SHORT_TYPE];\n\tvar cs = win[Encoder.SHORT_TYPE];\n\n\t/**\n\t * new IDCT routine written by Takehiro TOMINAGA\n\t *\n\t * PURPOSE: Overlapping window on PCM samples
\n\t *\n\t * SEMANTICS:
\n\t * 32 16-bit pcm samples are scaled to fractional 2's complement and\n\t * concatenated to the end of the window buffer #x#. The updated window\n\t * buffer #x# is then windowed by the analysis window #c# to produce the\n\t * windowed sample #z#\n\t */\n\tvar order = [\n\t 0, 1, 16, 17, 8, 9, 24, 25, 4, 5, 20, 21, 12, 13, 28, 29,\n\t 2, 3, 18, 19, 10, 11, 26, 27, 6, 7, 22, 23, 14, 15, 30, 31\n\t];\n\n\t/**\n\t * returns sum_j=0^31 a[j]*cos(PI*j*(k+1/2)/32), 0<=k<32\n\t */\n\tfunction window_subband(x1, x1Pos, a) {\n\t\tvar wp = 10;\n\n\t\tvar x2 = x1Pos + 238 - 14 - 286;\n\n\t\tfor (var i = -15; i < 0; i++) {\n\t\t\tvar w, s, t;\n\n\t\t\tw = enwindow[wp + -10];\n\t\t\ts = x1[x2 + -224] * w;\n\t\t\tt = x1[x1Pos + 224] * w;\n\t\t\tw = enwindow[wp + -9];\n\t\t\ts += x1[x2 + -160] * w;\n\t\t\tt += x1[x1Pos + 160] * w;\n\t\t\tw = enwindow[wp + -8];\n\t\t\ts += x1[x2 + -96] * w;\n\t\t\tt += x1[x1Pos + 96] * w;\n\t\t\tw = enwindow[wp + -7];\n\t\t\ts += x1[x2 + -32] * w;\n\t\t\tt += x1[x1Pos + 32] * w;\n\t\t\tw = enwindow[wp + -6];\n\t\t\ts += x1[x2 + 32] * w;\n\t\t\tt += x1[x1Pos + -32] * w;\n\t\t\tw = enwindow[wp + -5];\n\t\t\ts += x1[x2 + 96] * w;\n\t\t\tt += x1[x1Pos + -96] * w;\n\t\t\tw = enwindow[wp + -4];\n\t\t\ts += x1[x2 + 160] * w;\n\t\t\tt += x1[x1Pos + -160] * w;\n\t\t\tw = enwindow[wp + -3];\n\t\t\ts += x1[x2 + 224] * w;\n\t\t\tt += x1[x1Pos + -224] * w;\n\n\t\t\tw = enwindow[wp + -2];\n\t\t\ts += x1[x1Pos + -256] * w;\n\t\t\tt -= x1[x2 + 256] * w;\n\t\t\tw = enwindow[wp + -1];\n\t\t\ts += x1[x1Pos + -192] * w;\n\t\t\tt -= x1[x2 + 192] * w;\n\t\t\tw = enwindow[wp + 0];\n\t\t\ts += x1[x1Pos + -128] * w;\n\t\t\tt -= x1[x2 + 128] * w;\n\t\t\tw = enwindow[wp + 1];\n\t\t\ts += x1[x1Pos + -64] * w;\n\t\t\tt -= x1[x2 + 64] * w;\n\t\t\tw = enwindow[wp + 2];\n\t\t\ts += x1[x1Pos + 0] * w;\n\t\t\tt -= x1[x2 + 0] * w;\n\t\t\tw = enwindow[wp + 3];\n\t\t\ts += x1[x1Pos + 64] * w;\n\t\t\tt -= x1[x2 + -64] * w;\n\t\t\tw = enwindow[wp + 4];\n\t\t\ts += x1[x1Pos + 128] * w;\n\t\t\tt -= x1[x2 + -128] * w;\n\t\t\tw = enwindow[wp + 5];\n\t\t\ts += x1[x1Pos + 192] * w;\n\t\t\tt -= x1[x2 + -192] * w;\n\n\t\t\t/*\n\t\t\t * this multiplyer could be removed, but it needs more 256 FLOAT\n\t\t\t * data. thinking about the data cache performance, I think we\n\t\t\t * should not use such a huge table. tt 2000/Oct/25\n\t\t\t */\n\t\t\ts *= enwindow[wp + 6];\n\t\t\tw = t - s;\n\t\t\ta[30 + i * 2] = t + s;\n\t\t\ta[31 + i * 2] = enwindow[wp + 7] * w;\n\t\t\twp += 18;\n\t\t\tx1Pos--;\n\t\t\tx2++;\n\t\t}\n\t\t{\n\t\t\tvar s, t, u, v;\n\t\t\tt = x1[x1Pos + -16] * enwindow[wp + -10];\n\t\t\ts = x1[x1Pos + -32] * enwindow[wp + -2];\n\t\t\tt += (x1[x1Pos + -48] - x1[x1Pos + 16]) * enwindow[wp + -9];\n\t\t\ts += x1[x1Pos + -96] * enwindow[wp + -1];\n\t\t\tt += (x1[x1Pos + -80] + x1[x1Pos + 48]) * enwindow[wp + -8];\n\t\t\ts += x1[x1Pos + -160] * enwindow[wp + 0];\n\t\t\tt += (x1[x1Pos + -112] - x1[x1Pos + 80]) * enwindow[wp + -7];\n\t\t\ts += x1[x1Pos + -224] * enwindow[wp + 1];\n\t\t\tt += (x1[x1Pos + -144] + x1[x1Pos + 112]) * enwindow[wp + -6];\n\t\t\ts -= x1[x1Pos + 32] * enwindow[wp + 2];\n\t\t\tt += (x1[x1Pos + -176] - x1[x1Pos + 144]) * enwindow[wp + -5];\n\t\t\ts -= x1[x1Pos + 96] * enwindow[wp + 3];\n\t\t\tt += (x1[x1Pos + -208] + x1[x1Pos + 176]) * enwindow[wp + -4];\n\t\t\ts -= x1[x1Pos + 160] * enwindow[wp + 4];\n\t\t\tt += (x1[x1Pos + -240] - x1[x1Pos + 208]) * enwindow[wp + -3];\n\t\t\ts -= x1[x1Pos + 224];\n\n\t\t\tu = s - t;\n\t\t\tv = s + t;\n\n\t\t\tt = a[14];\n\t\t\ts = a[15] - t;\n\n\t\t\ta[31] = v + t; /* A0 */\n\t\t\ta[30] = u + s; /* A1 */\n\t\t\ta[15] = u - s; /* A2 */\n\t\t\ta[14] = v - t; /* A3 */\n\t\t}\n\t\t{\n\t\t\tvar xr;\n\t\t\txr = a[28] - a[0];\n\t\t\ta[0] += a[28];\n\t\t\ta[28] = xr * enwindow[wp + -2 * 18 + 7];\n\t\t\txr = a[29] - a[1];\n\t\t\ta[1] += a[29];\n\t\t\ta[29] = xr * enwindow[wp + -2 * 18 + 7];\n\n\t\t\txr = a[26] - a[2];\n\t\t\ta[2] += a[26];\n\t\t\ta[26] = xr * enwindow[wp + -4 * 18 + 7];\n\t\t\txr = a[27] - a[3];\n\t\t\ta[3] += a[27];\n\t\t\ta[27] = xr * enwindow[wp + -4 * 18 + 7];\n\n\t\t\txr = a[24] - a[4];\n\t\t\ta[4] += a[24];\n\t\t\ta[24] = xr * enwindow[wp + -6 * 18 + 7];\n\t\t\txr = a[25] - a[5];\n\t\t\ta[5] += a[25];\n\t\t\ta[25] = xr * enwindow[wp + -6 * 18 + 7];\n\n\t\t\txr = a[22] - a[6];\n\t\t\ta[6] += a[22];\n\t\t\ta[22] = xr * Util.SQRT2;\n\t\t\txr = a[23] - a[7];\n\t\t\ta[7] += a[23];\n\t\t\ta[23] = xr * Util.SQRT2 - a[7];\n\t\t\ta[7] -= a[6];\n\t\t\ta[22] -= a[7];\n\t\t\ta[23] -= a[22];\n\n\t\t\txr = a[6];\n\t\t\ta[6] = a[31] - xr;\n\t\t\ta[31] = a[31] + xr;\n\t\t\txr = a[7];\n\t\t\ta[7] = a[30] - xr;\n\t\t\ta[30] = a[30] + xr;\n\t\t\txr = a[22];\n\t\t\ta[22] = a[15] - xr;\n\t\t\ta[15] = a[15] + xr;\n\t\t\txr = a[23];\n\t\t\ta[23] = a[14] - xr;\n\t\t\ta[14] = a[14] + xr;\n\n\t\t\txr = a[20] - a[8];\n\t\t\ta[8] += a[20];\n\t\t\ta[20] = xr * enwindow[wp + -10 * 18 + 7];\n\t\t\txr = a[21] - a[9];\n\t\t\ta[9] += a[21];\n\t\t\ta[21] = xr * enwindow[wp + -10 * 18 + 7];\n\n\t\t\txr = a[18] - a[10];\n\t\t\ta[10] += a[18];\n\t\t\ta[18] = xr * enwindow[wp + -12 * 18 + 7];\n\t\t\txr = a[19] - a[11];\n\t\t\ta[11] += a[19];\n\t\t\ta[19] = xr * enwindow[wp + -12 * 18 + 7];\n\n\t\t\txr = a[16] - a[12];\n\t\t\ta[12] += a[16];\n\t\t\ta[16] = xr * enwindow[wp + -14 * 18 + 7];\n\t\t\txr = a[17] - a[13];\n\t\t\ta[13] += a[17];\n\t\t\ta[17] = xr * enwindow[wp + -14 * 18 + 7];\n\n\t\t\txr = -a[20] + a[24];\n\t\t\ta[20] += a[24];\n\t\t\ta[24] = xr * enwindow[wp + -12 * 18 + 7];\n\t\t\txr = -a[21] + a[25];\n\t\t\ta[21] += a[25];\n\t\t\ta[25] = xr * enwindow[wp + -12 * 18 + 7];\n\n\t\t\txr = a[4] - a[8];\n\t\t\ta[4] += a[8];\n\t\t\ta[8] = xr * enwindow[wp + -12 * 18 + 7];\n\t\t\txr = a[5] - a[9];\n\t\t\ta[5] += a[9];\n\t\t\ta[9] = xr * enwindow[wp + -12 * 18 + 7];\n\n\t\t\txr = a[0] - a[12];\n\t\t\ta[0] += a[12];\n\t\t\ta[12] = xr * enwindow[wp + -4 * 18 + 7];\n\t\t\txr = a[1] - a[13];\n\t\t\ta[1] += a[13];\n\t\t\ta[13] = xr * enwindow[wp + -4 * 18 + 7];\n\t\t\txr = a[16] - a[28];\n\t\t\ta[16] += a[28];\n\t\t\ta[28] = xr * enwindow[wp + -4 * 18 + 7];\n\t\t\txr = -a[17] + a[29];\n\t\t\ta[17] += a[29];\n\t\t\ta[29] = xr * enwindow[wp + -4 * 18 + 7];\n\n\t\t\txr = Util.SQRT2 * (a[2] - a[10]);\n\t\t\ta[2] += a[10];\n\t\t\ta[10] = xr;\n\t\t\txr = Util.SQRT2 * (a[3] - a[11]);\n\t\t\ta[3] += a[11];\n\t\t\ta[11] = xr;\n\t\t\txr = Util.SQRT2 * (-a[18] + a[26]);\n\t\t\ta[18] += a[26];\n\t\t\ta[26] = xr - a[18];\n\t\t\txr = Util.SQRT2 * (-a[19] + a[27]);\n\t\t\ta[19] += a[27];\n\t\t\ta[27] = xr - a[19];\n\n\t\t\txr = a[2];\n\t\t\ta[19] -= a[3];\n\t\t\ta[3] -= xr;\n\t\t\ta[2] = a[31] - xr;\n\t\t\ta[31] += xr;\n\t\t\txr = a[3];\n\t\t\ta[11] -= a[19];\n\t\t\ta[18] -= xr;\n\t\t\ta[3] = a[30] - xr;\n\t\t\ta[30] += xr;\n\t\t\txr = a[18];\n\t\t\ta[27] -= a[11];\n\t\t\ta[19] -= xr;\n\t\t\ta[18] = a[15] - xr;\n\t\t\ta[15] += xr;\n\n\t\t\txr = a[19];\n\t\t\ta[10] -= xr;\n\t\t\ta[19] = a[14] - xr;\n\t\t\ta[14] += xr;\n\t\t\txr = a[10];\n\t\t\ta[11] -= xr;\n\t\t\ta[10] = a[23] - xr;\n\t\t\ta[23] += xr;\n\t\t\txr = a[11];\n\t\t\ta[26] -= xr;\n\t\t\ta[11] = a[22] - xr;\n\t\t\ta[22] += xr;\n\t\t\txr = a[26];\n\t\t\ta[27] -= xr;\n\t\t\ta[26] = a[7] - xr;\n\t\t\ta[7] += xr;\n\n\t\t\txr = a[27];\n\t\t\ta[27] = a[6] - xr;\n\t\t\ta[6] += xr;\n\n\t\t\txr = Util.SQRT2 * (a[0] - a[4]);\n\t\t\ta[0] += a[4];\n\t\t\ta[4] = xr;\n\t\t\txr = Util.SQRT2 * (a[1] - a[5]);\n\t\t\ta[1] += a[5];\n\t\t\ta[5] = xr;\n\t\t\txr = Util.SQRT2 * (a[16] - a[20]);\n\t\t\ta[16] += a[20];\n\t\t\ta[20] = xr;\n\t\t\txr = Util.SQRT2 * (a[17] - a[21]);\n\t\t\ta[17] += a[21];\n\t\t\ta[21] = xr;\n\n\t\t\txr = -Util.SQRT2 * (a[8] - a[12]);\n\t\t\ta[8] += a[12];\n\t\t\ta[12] = xr - a[8];\n\t\t\txr = -Util.SQRT2 * (a[9] - a[13]);\n\t\t\ta[9] += a[13];\n\t\t\ta[13] = xr - a[9];\n\t\t\txr = -Util.SQRT2 * (a[25] - a[29]);\n\t\t\ta[25] += a[29];\n\t\t\ta[29] = xr - a[25];\n\t\t\txr = -Util.SQRT2 * (a[24] + a[28]);\n\t\t\ta[24] -= a[28];\n\t\t\ta[28] = xr - a[24];\n\n\t\t\txr = a[24] - a[16];\n\t\t\ta[24] = xr;\n\t\t\txr = a[20] - xr;\n\t\t\ta[20] = xr;\n\t\t\txr = a[28] - xr;\n\t\t\ta[28] = xr;\n\n\t\t\txr = a[25] - a[17];\n\t\t\ta[25] = xr;\n\t\t\txr = a[21] - xr;\n\t\t\ta[21] = xr;\n\t\t\txr = a[29] - xr;\n\t\t\ta[29] = xr;\n\n\t\t\txr = a[17] - a[1];\n\t\t\ta[17] = xr;\n\t\t\txr = a[9] - xr;\n\t\t\ta[9] = xr;\n\t\t\txr = a[25] - xr;\n\t\t\ta[25] = xr;\n\t\t\txr = a[5] - xr;\n\t\t\ta[5] = xr;\n\t\t\txr = a[21] - xr;\n\t\t\ta[21] = xr;\n\t\t\txr = a[13] - xr;\n\t\t\ta[13] = xr;\n\t\t\txr = a[29] - xr;\n\t\t\ta[29] = xr;\n\n\t\t\txr = a[1] - a[0];\n\t\t\ta[1] = xr;\n\t\t\txr = a[16] - xr;\n\t\t\ta[16] = xr;\n\t\t\txr = a[17] - xr;\n\t\t\ta[17] = xr;\n\t\t\txr = a[8] - xr;\n\t\t\ta[8] = xr;\n\t\t\txr = a[9] - xr;\n\t\t\ta[9] = xr;\n\t\t\txr = a[24] - xr;\n\t\t\ta[24] = xr;\n\t\t\txr = a[25] - xr;\n\t\t\ta[25] = xr;\n\t\t\txr = a[4] - xr;\n\t\t\ta[4] = xr;\n\t\t\txr = a[5] - xr;\n\t\t\ta[5] = xr;\n\t\t\txr = a[20] - xr;\n\t\t\ta[20] = xr;\n\t\t\txr = a[21] - xr;\n\t\t\ta[21] = xr;\n\t\t\txr = a[12] - xr;\n\t\t\ta[12] = xr;\n\t\t\txr = a[13] - xr;\n\t\t\ta[13] = xr;\n\t\t\txr = a[28] - xr;\n\t\t\ta[28] = xr;\n\t\t\txr = a[29] - xr;\n\t\t\ta[29] = xr;\n\n\t\t\txr = a[0];\n\t\t\ta[0] += a[31];\n\t\t\ta[31] -= xr;\n\t\t\txr = a[1];\n\t\t\ta[1] += a[30];\n\t\t\ta[30] -= xr;\n\t\t\txr = a[16];\n\t\t\ta[16] += a[15];\n\t\t\ta[15] -= xr;\n\t\t\txr = a[17];\n\t\t\ta[17] += a[14];\n\t\t\ta[14] -= xr;\n\t\t\txr = a[8];\n\t\t\ta[8] += a[23];\n\t\t\ta[23] -= xr;\n\t\t\txr = a[9];\n\t\t\ta[9] += a[22];\n\t\t\ta[22] -= xr;\n\t\t\txr = a[24];\n\t\t\ta[24] += a[7];\n\t\t\ta[7] -= xr;\n\t\t\txr = a[25];\n\t\t\ta[25] += a[6];\n\t\t\ta[6] -= xr;\n\t\t\txr = a[4];\n\t\t\ta[4] += a[27];\n\t\t\ta[27] -= xr;\n\t\t\txr = a[5];\n\t\t\ta[5] += a[26];\n\t\t\ta[26] -= xr;\n\t\t\txr = a[20];\n\t\t\ta[20] += a[11];\n\t\t\ta[11] -= xr;\n\t\t\txr = a[21];\n\t\t\ta[21] += a[10];\n\t\t\ta[10] -= xr;\n\t\t\txr = a[12];\n\t\t\ta[12] += a[19];\n\t\t\ta[19] -= xr;\n\t\t\txr = a[13];\n\t\t\ta[13] += a[18];\n\t\t\ta[18] -= xr;\n\t\t\txr = a[28];\n\t\t\ta[28] += a[3];\n\t\t\ta[3] -= xr;\n\t\t\txr = a[29];\n\t\t\ta[29] += a[2];\n\t\t\ta[2] -= xr;\n\t\t}\n\t}\n\n\t/**\n\t * Function: Calculation of the MDCT In the case of long blocks (type 0,1,3)\n\t * there are 36 coefficents in the time domain and 18 in the frequency\n\t * domain.
\n\t * In the case of short blocks (type 2) there are 3 transformations with\n\t * short length. This leads to 12 coefficents in the time and 6 in the\n\t * frequency domain. In this case the results are stored side by side in the\n\t * vector out[].\n\t *\n\t * New layer3\n\t */\n\tfunction mdct_short(inout, inoutPos) {\n\t\tfor (var l = 0; l < 3; l++) {\n\t\t\tvar tc0, tc1, tc2, ts0, ts1, ts2;\n\n\t\t\tts0 = inout[inoutPos + 2 * 3] * win[Encoder.SHORT_TYPE][0]\n\t\t\t\t\t- inout[inoutPos + 5 * 3];\n\t\t\ttc0 = inout[inoutPos + 0 * 3] * win[Encoder.SHORT_TYPE][2]\n\t\t\t\t\t- inout[inoutPos + 3 * 3];\n\t\t\ttc1 = ts0 + tc0;\n\t\t\ttc2 = ts0 - tc0;\n\n\t\t\tts0 = inout[inoutPos + 5 * 3] * win[Encoder.SHORT_TYPE][0]\n\t\t\t\t\t+ inout[inoutPos + 2 * 3];\n\t\t\ttc0 = inout[inoutPos + 3 * 3] * win[Encoder.SHORT_TYPE][2]\n\t\t\t\t\t+ inout[inoutPos + 0 * 3];\n\t\t\tts1 = ts0 + tc0;\n\t\t\tts2 = -ts0 + tc0;\n\n\t\t\ttc0 = (inout[inoutPos + 1 * 3] * win[Encoder.SHORT_TYPE][1] - inout[inoutPos + 4 * 3]) * 2.069978111953089e-11;\n\t\t\t/*\n\t\t\t * tritab_s [ 1 ]\n\t\t\t */\n\t\t\tts0 = (inout[inoutPos + 4 * 3] * win[Encoder.SHORT_TYPE][1] + inout[inoutPos + 1 * 3]) * 2.069978111953089e-11;\n\t\t\t/*\n\t\t\t * tritab_s [ 1 ]\n\t\t\t */\n\t\t\tinout[inoutPos + 3 * 0] = tc1 * 1.907525191737280e-11 + tc0;\n\t\t\t/*\n\t\t\t * tritab_s[ 2 ]\n\t\t\t */\n\t\t\tinout[inoutPos + 3 * 5] = -ts1 * 1.907525191737280e-11 + ts0;\n\t\t\t/*\n\t\t\t * tritab_s[0 ]\n\t\t\t */\n\t\t\ttc2 = tc2 * 0.86602540378443870761 * 1.907525191737281e-11;\n\t\t\t/*\n\t\t\t * tritab_s[ 2]\n\t\t\t */\n\t\t\tts1 = ts1 * 0.5 * 1.907525191737281e-11 + ts0;\n\t\t\tinout[inoutPos + 3 * 1] = tc2 - ts1;\n\t\t\tinout[inoutPos + 3 * 2] = tc2 + ts1;\n\n\t\t\ttc1 = tc1 * 0.5 * 1.907525191737281e-11 - tc0;\n\t\t\tts2 = ts2 * 0.86602540378443870761 * 1.907525191737281e-11;\n\t\t\t/*\n\t\t\t * tritab_s[ 0]\n\t\t\t */\n\t\t\tinout[inoutPos + 3 * 3] = tc1 + ts2;\n\t\t\tinout[inoutPos + 3 * 4] = tc1 - ts2;\n\n\t\t\tinoutPos++;\n\t\t}\n\t}\n\n\tfunction mdct_long(out, outPos, _in) {\n\t\tvar ct, st;\n\t\t{\n\t\t\tvar tc1, tc2, tc3, tc4, ts5, ts6, ts7, ts8;\n\t\t\t/* 1,2, 5,6, 9,10, 13,14, 17 */\n\t\t\ttc1 = _in[17] - _in[9];\n\t\t\ttc3 = _in[15] - _in[11];\n\t\t\ttc4 = _in[14] - _in[12];\n\t\t\tts5 = _in[0] + _in[8];\n\t\t\tts6 = _in[1] + _in[7];\n\t\t\tts7 = _in[2] + _in[6];\n\t\t\tts8 = _in[3] + _in[5];\n\n\t\t\tout[outPos + 17] = (ts5 + ts7 - ts8) - (ts6 - _in[4]);\n\t\t\tst = (ts5 + ts7 - ts8) * cx[12 + 7] + (ts6 - _in[4]);\n\t\t\tct = (tc1 - tc3 - tc4) * cx[12 + 6];\n\t\t\tout[outPos + 5] = ct + st;\n\t\t\tout[outPos + 6] = ct - st;\n\n\t\t\ttc2 = (_in[16] - _in[10]) * cx[12 + 6];\n\t\t\tts6 = ts6 * cx[12 + 7] + _in[4];\n\t\t\tct = tc1 * cx[12 + 0] + tc2 + tc3 * cx[12 + 1] + tc4 * cx[12 + 2];\n\t\t\tst = -ts5 * cx[12 + 4] + ts6 - ts7 * cx[12 + 5] + ts8 * cx[12 + 3];\n\t\t\tout[outPos + 1] = ct + st;\n\t\t\tout[outPos + 2] = ct - st;\n\n\t\t\tct = tc1 * cx[12 + 1] - tc2 - tc3 * cx[12 + 2] + tc4 * cx[12 + 0];\n\t\t\tst = -ts5 * cx[12 + 5] + ts6 - ts7 * cx[12 + 3] + ts8 * cx[12 + 4];\n\t\t\tout[outPos + 9] = ct + st;\n\t\t\tout[outPos + 10] = ct - st;\n\n\t\t\tct = tc1 * cx[12 + 2] - tc2 + tc3 * cx[12 + 0] - tc4 * cx[12 + 1];\n\t\t\tst = ts5 * cx[12 + 3] - ts6 + ts7 * cx[12 + 4] - ts8 * cx[12 + 5];\n\t\t\tout[outPos + 13] = ct + st;\n\t\t\tout[outPos + 14] = ct - st;\n\t\t}\n\t\t{\n\t\t\tvar ts1, ts2, ts3, ts4, tc5, tc6, tc7, tc8;\n\n\t\t\tts1 = _in[8] - _in[0];\n\t\t\tts3 = _in[6] - _in[2];\n\t\t\tts4 = _in[5] - _in[3];\n\t\t\ttc5 = _in[17] + _in[9];\n\t\t\ttc6 = _in[16] + _in[10];\n\t\t\ttc7 = _in[15] + _in[11];\n\t\t\ttc8 = _in[14] + _in[12];\n\n\t\t\tout[outPos + 0] = (tc5 + tc7 + tc8) + (tc6 + _in[13]);\n\t\t\tct = (tc5 + tc7 + tc8) * cx[12 + 7] - (tc6 + _in[13]);\n\t\t\tst = (ts1 - ts3 + ts4) * cx[12 + 6];\n\t\t\tout[outPos + 11] = ct + st;\n\t\t\tout[outPos + 12] = ct - st;\n\n\t\t\tts2 = (_in[7] - _in[1]) * cx[12 + 6];\n\t\t\ttc6 = _in[13] - tc6 * cx[12 + 7];\n\t\t\tct = tc5 * cx[12 + 3] - tc6 + tc7 * cx[12 + 4] + tc8 * cx[12 + 5];\n\t\t\tst = ts1 * cx[12 + 2] + ts2 + ts3 * cx[12 + 0] + ts4 * cx[12 + 1];\n\t\t\tout[outPos + 3] = ct + st;\n\t\t\tout[outPos + 4] = ct - st;\n\n\t\t\tct = -tc5 * cx[12 + 5] + tc6 - tc7 * cx[12 + 3] - tc8 * cx[12 + 4];\n\t\t\tst = ts1 * cx[12 + 1] + ts2 - ts3 * cx[12 + 2] - ts4 * cx[12 + 0];\n\t\t\tout[outPos + 7] = ct + st;\n\t\t\tout[outPos + 8] = ct - st;\n\n\t\t\tct = -tc5 * cx[12 + 4] + tc6 - tc7 * cx[12 + 5] - tc8 * cx[12 + 3];\n\t\t\tst = ts1 * cx[12 + 0] - ts2 + ts3 * cx[12 + 1] - ts4 * cx[12 + 2];\n\t\t\tout[outPos + 15] = ct + st;\n\t\t\tout[outPos + 16] = ct - st;\n\t\t}\n\t}\n\n\tthis.mdct_sub48 = function(gfc, w0, w1) {\n\t\tvar wk = w0;\n\t\tvar wkPos = 286;\n\t\t/* thinking cache performance, ch->gr loop is better than gr->ch loop */\n\t\tfor (var ch = 0; ch < gfc.channels_out; ch++) {\n\t\t\tfor (var gr = 0; gr < gfc.mode_gr; gr++) {\n\t\t\t\tvar band;\n\t\t\t\tvar gi = (gfc.l3_side.tt[gr][ch]);\n\t\t\t\tvar mdct_enc = gi.xr;\n\t\t\t\tvar mdct_encPos = 0;\n\t\t\t\tvar samp = gfc.sb_sample[ch][1 - gr];\n\t\t\t\tvar sampPos = 0;\n\n\t\t\t\tfor (var k = 0; k < 18 / 2; k++) {\n\t\t\t\t\twindow_subband(wk, wkPos, samp[sampPos]);\n\t\t\t\t\twindow_subband(wk, wkPos + 32, samp[sampPos + 1]);\n\t\t\t\t\tsampPos += 2;\n\t\t\t\t\twkPos += 64;\n\t\t\t\t\t/*\n\t\t\t\t\t * Compensate for inversion in the analysis filter\n\t\t\t\t\t */\n\t\t\t\t\tfor (band = 1; band < 32; band += 2) {\n\t\t\t\t\t\tsamp[sampPos - 1][band] *= -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * Perform imdct of 18 previous subband samples + 18 current\n\t\t\t\t * subband samples\n\t\t\t\t */\n\t\t\t\tfor (band = 0; band < 32; band++, mdct_encPos += 18) {\n\t\t\t\t\tvar type = gi.block_type;\n\t\t\t\t\tvar band0 = gfc.sb_sample[ch][gr];\n\t\t\t\t\tvar band1 = gfc.sb_sample[ch][1 - gr];\n\t\t\t\t\tif (gi.mixed_block_flag != 0 && band < 2)\n\t\t\t\t\t\ttype = 0;\n\t\t\t\t\tif (gfc.amp_filter[band] < 1e-12) {\n\t\t\t\t\t\tArrays.fill(mdct_enc, mdct_encPos + 0,\n\t\t\t\t\t\t\t\tmdct_encPos + 18, 0);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (gfc.amp_filter[band] < 1.0) {\n\t\t\t\t\t\t\tfor (var k = 0; k < 18; k++)\n\t\t\t\t\t\t\t\tband1[k][order[band]] *= gfc.amp_filter[band];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (type == Encoder.SHORT_TYPE) {\n\t\t\t\t\t\t\tfor (var k = -NS / 4; k < 0; k++) {\n\t\t\t\t\t\t\t\tvar w = win[Encoder.SHORT_TYPE][k + 3];\n\t\t\t\t\t\t\t\tmdct_enc[mdct_encPos + k * 3 + 9] = band0[9 + k][order[band]]\n\t\t\t\t\t\t\t\t\t\t* w - band0[8 - k][order[band]];\n\t\t\t\t\t\t\t\tmdct_enc[mdct_encPos + k * 3 + 18] = band0[14 - k][order[band]]\n\t\t\t\t\t\t\t\t\t\t* w + band0[15 + k][order[band]];\n\t\t\t\t\t\t\t\tmdct_enc[mdct_encPos + k * 3 + 10] = band0[15 + k][order[band]]\n\t\t\t\t\t\t\t\t\t\t* w - band0[14 - k][order[band]];\n\t\t\t\t\t\t\t\tmdct_enc[mdct_encPos + k * 3 + 19] = band1[2 - k][order[band]]\n\t\t\t\t\t\t\t\t\t\t* w + band1[3 + k][order[band]];\n\t\t\t\t\t\t\t\tmdct_enc[mdct_encPos + k * 3 + 11] = band1[3 + k][order[band]]\n\t\t\t\t\t\t\t\t\t\t* w - band1[2 - k][order[band]];\n\t\t\t\t\t\t\t\tmdct_enc[mdct_encPos + k * 3 + 20] = band1[8 - k][order[band]]\n\t\t\t\t\t\t\t\t\t\t* w + band1[9 + k][order[band]];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmdct_short(mdct_enc, mdct_encPos);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar work = new_float(18);\n\t\t\t\t\t\t\tfor (var k = -NL / 4; k < 0; k++) {\n\t\t\t\t\t\t\t\tvar a, b;\n\t\t\t\t\t\t\t\ta = win[type][k + 27]\n\t\t\t\t\t\t\t\t\t\t* band1[k + 9][order[band]]\n\t\t\t\t\t\t\t\t\t\t+ win[type][k + 36]\n\t\t\t\t\t\t\t\t\t\t* band1[8 - k][order[band]];\n\t\t\t\t\t\t\t\tb = win[type][k + 9]\n\t\t\t\t\t\t\t\t\t\t* band0[k + 9][order[band]]\n\t\t\t\t\t\t\t\t\t\t- win[type][k + 18]\n\t\t\t\t\t\t\t\t\t\t* band0[8 - k][order[band]];\n\t\t\t\t\t\t\t\twork[k + 9] = a - b * tantab_l[3 + k + 9];\n\t\t\t\t\t\t\t\twork[k + 18] = a * tantab_l[3 + k + 9] + b;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmdct_long(mdct_enc, mdct_encPos, work);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t/*\n\t\t\t\t\t * Perform aliasing reduction butterfly\n\t\t\t\t\t */\n\t\t\t\t\tif (type != Encoder.SHORT_TYPE && band != 0) {\n\t\t\t\t\t\tfor (var k = 7; k >= 0; --k) {\n\t\t\t\t\t\t\tvar bu, bd;\n\t\t\t\t\t\t\tbu = mdct_enc[mdct_encPos + k] * ca[20 + k]\n\t\t\t\t\t\t\t\t\t+ mdct_enc[mdct_encPos + -1 - k]\n\t\t\t\t\t\t\t\t\t* cs[28 + k];\n\t\t\t\t\t\t\tbd = mdct_enc[mdct_encPos + k] * cs[28 + k]\n\t\t\t\t\t\t\t\t\t- mdct_enc[mdct_encPos + -1 - k]\n\t\t\t\t\t\t\t\t\t* ca[20 + k];\n\n\t\t\t\t\t\t\tmdct_enc[mdct_encPos + -1 - k] = bu;\n\t\t\t\t\t\t\tmdct_enc[mdct_encPos + k] = bd;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twk = w1;\n\t\t\twkPos = 286;\n\t\t\tif (gfc.mode_gr == 1) {\n\t\t\t\tfor (var i = 0; i < 18; i++) {\n\t\t\t\t\tSystem.arraycopy(gfc.sb_sample[ch][1][i], 0,\n\t\t\t\t\t\t\tgfc.sb_sample[ch][0][i], 0, 32);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = NewMDCT;\n","var Encoder = require('./Encoder.js');\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nfunction III_psy_xmin() {\n this.l = new_float(Encoder.SBMAX_l);\n this.s = new_float_n([Encoder.SBMAX_s, 3]);\n\n var self = this;\n this.assign = function (iii_psy_xmin) {\n System.arraycopy(iii_psy_xmin.l, 0, self.l, 0, Encoder.SBMAX_l);\n for (var i = 0; i < Encoder.SBMAX_s; i++) {\n for (var j = 0; j < 3; j++) {\n self.s[i][j] = iii_psy_xmin.s[i][j];\n }\n }\n }\n}\n\nmodule.exports = III_psy_xmin;\n","//package mp3;\n\nvar III_psy_xmin = require('./III_psy_xmin.js');\n\nfunction III_psy_ratio() {\n\tthis.thm = new III_psy_xmin();\n\tthis.en = new III_psy_xmin();\n}\n\nmodule.exports = III_psy_ratio;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\n/**\n * ENCDELAY The encoder delay.\n *\n * Minimum allowed is MDCTDELAY (see below)\n *\n * The first 96 samples will be attenuated, so using a value less than 96\n * will result in corrupt data for the first 96-ENCDELAY samples.\n *\n * suggested: 576 set to 1160 to sync with FhG.\n */\nEncoder.ENCDELAY = 576;\n/**\n * make sure there is at least one complete frame after the last frame\n * containing real data\n *\n * Using a value of 288 would be sufficient for a a very sophisticated\n * decoder that can decode granule-by-granule instead of frame by frame. But\n * lets not assume this, and assume the decoder will not decode frame N\n * unless it also has data for frame N+1\n */\nEncoder.POSTDELAY = 1152;\n\n/**\n * delay of the MDCT used in mdct.c original ISO routines had a delay of\n * 528! Takehiro's routines:\n */\nEncoder.MDCTDELAY = 48;\nEncoder.FFTOFFSET = (224 + Encoder.MDCTDELAY);\n\n/**\n * Most decoders, including the one we use, have a delay of 528 samples.\n */\nEncoder.DECDELAY = 528;\n\n/**\n * number of subbands\n */\nEncoder.SBLIMIT = 32;\n\n/**\n * parition bands bands\n */\nEncoder.CBANDS = 64;\n\n/**\n * number of critical bands/scale factor bands where masking is computed\n */\nEncoder.SBPSY_l = 21;\nEncoder.SBPSY_s = 12;\n\n/**\n * total number of scalefactor bands encoded\n */\nEncoder.SBMAX_l = 22;\nEncoder.SBMAX_s = 13;\nEncoder.PSFB21 = 6;\nEncoder.PSFB12 = 6;\n\n/**\n * FFT sizes\n */\nEncoder.BLKSIZE = 1024;\nEncoder.HBLKSIZE = (Encoder.BLKSIZE / 2 + 1);\nEncoder.BLKSIZE_s = 256;\nEncoder.HBLKSIZE_s = (Encoder.BLKSIZE_s / 2 + 1);\n\nEncoder.NORM_TYPE = 0;\nEncoder.START_TYPE = 1;\nEncoder.SHORT_TYPE = 2;\nEncoder.STOP_TYPE = 3;\n\n/**\n *
\n * Mode Extention:\n * When we are in stereo mode, there are 4 possible methods to store these\n * two channels. The stereo modes -m? are using a subset of them.\n *\n * -ms: MPG_MD_LR_LR\n * -mj: MPG_MD_LR_LR and MPG_MD_MS_LR\n * -mf: MPG_MD_MS_LR\n * -mi: all\n *\n */\nEncoder.MPG_MD_LR_LR = 0;\nEncoder.MPG_MD_LR_I = 1;\nEncoder.MPG_MD_MS_LR = 2;\nEncoder.MPG_MD_MS_I = 3;\n\nEncoder.fircoef = [-0.0207887 * 5, -0.0378413 * 5,\n -0.0432472 * 5, -0.031183 * 5, 7.79609e-18 * 5, 0.0467745 * 5,\n 0.10091 * 5, 0.151365 * 5, 0.187098 * 5];\n\nfunction Encoder() {\n var NewMDCT = require('./NewMDCT.js');\n var III_psy_ratio = require('./III_psy_ratio.js');\n\n var FFTOFFSET = Encoder.FFTOFFSET;\n var MPG_MD_MS_LR = Encoder.MPG_MD_MS_LR;\n //BitStream bs;\n //PsyModel psy;\n //VBRTag vbr;\n //QuantizePVT qupvt;\n var bs = null;\n this.psy = null;\n var psy = null;\n var vbr = null;\n var qupvt = null;\n\n //public final void setModules(BitStream bs, PsyModel psy, QuantizePVT qupvt,\n // VBRTag vbr) {\n this.setModules = function (_bs, _psy, _qupvt, _vbr) {\n bs = _bs;\n this.psy = _psy;\n psy = _psy;\n vbr = _vbr;\n qupvt = _qupvt;\n };\n\n var newMDCT = new NewMDCT();\n\n /***********************************************************************\n *\n * encoder and decoder delays\n *\n ***********************************************************************/\n\n /**\n *
\n * layer III enc->dec delay: 1056 (1057?) (observed)\n * layer II enc->dec delay: 480 (481?) (observed)\n *\n * polyphase 256-16 (dec or enc) = 240\n * mdct 256+32 (9*32) (dec or enc) = 288\n * total: 512+16\n *\n * My guess is that delay of polyphase filterbank is actualy 240.5\n * (there are technical reasons for this, see postings in mp3encoder).\n * So total Encode+Decode delay = ENCDELAY + 528 + 1\n *\n */\n\n\n /**\n * auto-adjust of ATH, useful for low volume Gabriel Bouvigne 3 feb 2001\n *\n * modifies some values in gfp.internal_flags.ATH (gfc.ATH)\n */\n//private void adjust_ATH(final LameInternalFlags gfc) {\n function adjust_ATH(gfc) {\n var gr2_max, max_pow;\n\n if (gfc.ATH.useAdjust == 0) {\n gfc.ATH.adjust = 1.0;\n /* no adjustment */\n return;\n }\n\n /* jd - 2001 mar 12, 27, jun 30 */\n /* loudness based on equal loudness curve; */\n /* use granule with maximum combined loudness */\n max_pow = gfc.loudness_sq[0][0];\n gr2_max = gfc.loudness_sq[1][0];\n if (gfc.channels_out == 2) {\n max_pow += gfc.loudness_sq[0][1];\n gr2_max += gfc.loudness_sq[1][1];\n } else {\n max_pow += max_pow;\n gr2_max += gr2_max;\n }\n if (gfc.mode_gr == 2) {\n max_pow = Math.max(max_pow, gr2_max);\n }\n max_pow *= 0.5;\n /* max_pow approaches 1.0 for full band noise */\n\n /* jd - 2001 mar 31, jun 30 */\n /* user tuning of ATH adjustment region */\n max_pow *= gfc.ATH.aaSensitivityP;\n\n /*\n * adjust ATH depending on range of maximum value\n */\n\n /* jd - 2001 feb27, mar12,20, jun30, jul22 */\n /* continuous curves based on approximation */\n /* to GB's original values. */\n /* For an increase in approximate loudness, */\n /* set ATH adjust to adjust_limit immediately */\n /* after a delay of one frame. */\n /* For a loudness decrease, reduce ATH adjust */\n /* towards adjust_limit gradually. */\n /* max_pow is a loudness squared or a power. */\n if (max_pow > 0.03125) { /* ((1 - 0.000625)/ 31.98) from curve below */\n if (gfc.ATH.adjust >= 1.0) {\n gfc.ATH.adjust = 1.0;\n } else {\n /* preceding frame has lower ATH adjust; */\n /* ascend only to the preceding adjust_limit */\n /* in case there is leading low volume */\n if (gfc.ATH.adjust < gfc.ATH.adjustLimit) {\n gfc.ATH.adjust = gfc.ATH.adjustLimit;\n }\n }\n gfc.ATH.adjustLimit = 1.0;\n } else { /* adjustment curve */\n /* about 32 dB maximum adjust (0.000625) */\n var adj_lim_new = 31.98 * max_pow + 0.000625;\n if (gfc.ATH.adjust >= adj_lim_new) { /* descend gradually */\n gfc.ATH.adjust *= adj_lim_new * 0.075 + 0.925;\n if (gfc.ATH.adjust < adj_lim_new) { /* stop descent */\n gfc.ATH.adjust = adj_lim_new;\n }\n } else { /* ascend */\n if (gfc.ATH.adjustLimit >= adj_lim_new) {\n gfc.ATH.adjust = adj_lim_new;\n } else {\n /* preceding frame has lower ATH adjust; */\n /* ascend only to the preceding adjust_limit */\n if (gfc.ATH.adjust < gfc.ATH.adjustLimit) {\n gfc.ATH.adjust = gfc.ATH.adjustLimit;\n }\n }\n }\n gfc.ATH.adjustLimit = adj_lim_new;\n }\n }\n\n /**\n *
\n * some simple statistics\n *\n * bitrate index 0: free bitrate . not allowed in VBR mode\n * : bitrates, kbps depending on MPEG version\n * bitrate index 15: forbidden\n *\n * mode_ext:\n * 0: LR\n * 1: LR-i\n * 2: MS\n * 3: MS-i\n *\n */\n function updateStats(gfc) {\n var gr, ch;\n assert(0 <= gfc.bitrate_index && gfc.bitrate_index < 16);\n assert(0 <= gfc.mode_ext && gfc.mode_ext < 4);\n\n /* count bitrate indices */\n gfc.bitrate_stereoMode_Hist[gfc.bitrate_index][4]++;\n gfc.bitrate_stereoMode_Hist[15][4]++;\n\n /* count 'em for every mode extension in case of 2 channel encoding */\n if (gfc.channels_out == 2) {\n gfc.bitrate_stereoMode_Hist[gfc.bitrate_index][gfc.mode_ext]++;\n gfc.bitrate_stereoMode_Hist[15][gfc.mode_ext]++;\n }\n for (gr = 0; gr < gfc.mode_gr; ++gr) {\n for (ch = 0; ch < gfc.channels_out; ++ch) {\n var bt = gfc.l3_side.tt[gr][ch].block_type | 0;\n if (gfc.l3_side.tt[gr][ch].mixed_block_flag != 0)\n bt = 4;\n gfc.bitrate_blockType_Hist[gfc.bitrate_index][bt]++;\n gfc.bitrate_blockType_Hist[gfc.bitrate_index][5]++;\n gfc.bitrate_blockType_Hist[15][bt]++;\n gfc.bitrate_blockType_Hist[15][5]++;\n }\n }\n }\n\n function lame_encode_frame_init(gfp, inbuf) {\n var gfc = gfp.internal_flags;\n\n var ch, gr;\n\n if (gfc.lame_encode_frame_init == 0) {\n /* prime the MDCT/polyphase filterbank with a short block */\n var i, j;\n var primebuff0 = new_float(286 + 1152 + 576);\n var primebuff1 = new_float(286 + 1152 + 576);\n gfc.lame_encode_frame_init = 1;\n for (i = 0, j = 0; i < 286 + 576 * (1 + gfc.mode_gr); ++i) {\n if (i < 576 * gfc.mode_gr) {\n primebuff0[i] = 0;\n if (gfc.channels_out == 2)\n primebuff1[i] = 0;\n } else {\n primebuff0[i] = inbuf[0][j];\n if (gfc.channels_out == 2)\n primebuff1[i] = inbuf[1][j];\n ++j;\n }\n }\n /* polyphase filtering / mdct */\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n gfc.l3_side.tt[gr][ch].block_type = Encoder.SHORT_TYPE;\n }\n }\n newMDCT.mdct_sub48(gfc, primebuff0, primebuff1);\n\n /* check FFT will not use a negative starting offset */\n assert(576 >= Encoder.FFTOFFSET);\n /* check if we have enough data for FFT */\n assert(gfc.mf_size >= (Encoder.BLKSIZE + gfp.framesize - Encoder.FFTOFFSET));\n /* check if we have enough data for polyphase filterbank */\n assert(gfc.mf_size >= (512 + gfp.framesize - 32));\n }\n\n }\n\n /**\n *
\n * encodeframe() Layer 3\n *\n * encode a single frame\n *\n *\n * lame_encode_frame()\n *\n *\n * gr 0 gr 1\n * inbuf: |--------------|--------------|--------------|\n *\n *\n * Polyphase (18 windows, each shifted 32)\n * gr 0:\n * window1 <----512---.\n * window18 <----512---.\n *\n * gr 1:\n * window1 <----512---.\n * window18 <----512---.\n *\n *\n *\n * MDCT output: |--------------|--------------|--------------|\n *\n * FFT's <---------1024---------.\n * <---------1024-------.\n *\n *\n *\n * inbuf = buffer of PCM data size=MP3 framesize\n * encoder acts on inbuf[ch][0], but output is delayed by MDCTDELAY\n * so the MDCT coefficints are from inbuf[ch][-MDCTDELAY]\n *\n * psy-model FFT has a 1 granule delay, so we feed it data for the\n * next granule.\n * FFT is centered over granule: 224+576+224\n * So FFT starts at: 576-224-MDCTDELAY\n *\n * MPEG2: FFT ends at: BLKSIZE+576-224-MDCTDELAY (1328)\n * MPEG1: FFT ends at: BLKSIZE+2*576-224-MDCTDELAY (1904)\n *\n * MPEG2: polyphase first window: [0..511]\n * 18th window: [544..1055] (1056)\n * MPEG1: 36th window: [1120..1631] (1632)\n * data needed: 512+framesize-32\n *\n * A close look newmdct.c shows that the polyphase filterbank\n * only uses data from [0..510] for each window. Perhaps because the window\n * used by the filterbank is zero for the last point, so Takehiro's\n * code doesn't bother to compute with it.\n *\n * FFT starts at 576-224-MDCTDELAY (304) = 576-FFTOFFSET\n *\n *\n */\n\n\n this.lame_encode_mp3_frame = function (gfp, inbuf_l, inbuf_r, mp3buf, mp3bufPos, mp3buf_size) {\n var mp3count;\n var masking_LR = new_array_n([2, 2]);\n /*\n * LR masking &\n * energy\n */\n masking_LR[0][0] = new III_psy_ratio();\n masking_LR[0][1] = new III_psy_ratio();\n masking_LR[1][0] = new III_psy_ratio();\n masking_LR[1][1] = new III_psy_ratio();\n var masking_MS = new_array_n([2, 2]);\n /* MS masking & energy */\n masking_MS[0][0] = new III_psy_ratio();\n masking_MS[0][1] = new III_psy_ratio();\n masking_MS[1][0] = new III_psy_ratio();\n masking_MS[1][1] = new III_psy_ratio();\n //III_psy_ratio masking[][];\n var masking;\n /* pointer to selected maskings */\n var inbuf = [null, null];\n var gfc = gfp.internal_flags;\n\n var tot_ener = new_float_n([2, 4]);\n var ms_ener_ratio = [.5, .5];\n var pe = [[0., 0.], [0., 0.]];\n var pe_MS = [[0., 0.], [0., 0.]];\n\n//float[][] pe_use;\n var pe_use;\n\n var ch, gr;\n\n inbuf[0] = inbuf_l;\n inbuf[1] = inbuf_r;\n\n if (gfc.lame_encode_frame_init == 0) {\n /* first run? */\n lame_encode_frame_init(gfp, inbuf);\n\n }\n\n /********************** padding *****************************/\n /**\n *
\n * padding method as described in\n * \"MPEG-Layer3 / Bitstream Syntax and Decoding\"\n * by Martin Sieler, Ralph Sperschneider\n *\n * note: there is no padding for the very first frame\n *\n * Robert Hegemann 2000-06-22\n *\n */\n gfc.padding = 0;\n if ((gfc.slot_lag -= gfc.frac_SpF) < 0) {\n gfc.slot_lag += gfp.out_samplerate;\n gfc.padding = 1;\n }\n\n /****************************************\n * Stage 1: psychoacoustic model *\n ****************************************/\n\n if (gfc.psymodel != 0) {\n /*\n * psychoacoustic model psy model has a 1 granule (576) delay that\n * we must compensate for (mt 6/99).\n */\n var ret;\n var bufp = [null, null];\n /* address of beginning of left & right granule */\n var bufpPos = 0;\n /* address of beginning of left & right granule */\n var blocktype = new_int(2);\n\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n\n for (ch = 0; ch < gfc.channels_out; ch++) {\n bufp[ch] = inbuf[ch];\n bufpPos = 576 + gr * 576 - Encoder.FFTOFFSET;\n }\n if (gfp.VBR == VbrMode.vbr_mtrh || gfp.VBR == VbrMode.vbr_mt) {\n ret = psy.L3psycho_anal_vbr(gfp, bufp, bufpPos, gr,\n masking_LR, masking_MS, pe[gr], pe_MS[gr],\n tot_ener[gr], blocktype);\n } else {\n ret = psy.L3psycho_anal_ns(gfp, bufp, bufpPos, gr,\n masking_LR, masking_MS, pe[gr], pe_MS[gr],\n tot_ener[gr], blocktype);\n }\n if (ret != 0)\n return -4;\n\n if (gfp.mode == MPEGMode.JOINT_STEREO) {\n ms_ener_ratio[gr] = tot_ener[gr][2] + tot_ener[gr][3];\n if (ms_ener_ratio[gr] > 0)\n ms_ener_ratio[gr] = tot_ener[gr][3] / ms_ener_ratio[gr];\n }\n\n /* block type flags */\n for (ch = 0; ch < gfc.channels_out; ch++) {\n var cod_info = gfc.l3_side.tt[gr][ch];\n cod_info.block_type = blocktype[ch];\n cod_info.mixed_block_flag = 0;\n }\n }\n } else {\n /* no psy model */\n for (gr = 0; gr < gfc.mode_gr; gr++)\n for (ch = 0; ch < gfc.channels_out; ch++) {\n gfc.l3_side.tt[gr][ch].block_type = Encoder.NORM_TYPE;\n gfc.l3_side.tt[gr][ch].mixed_block_flag = 0;\n pe_MS[gr][ch] = pe[gr][ch] = 700;\n }\n }\n\n /* auto-adjust of ATH, useful for low volume */\n adjust_ATH(gfc);\n\n /****************************************\n * Stage 2: MDCT *\n ****************************************/\n\n /* polyphase filtering / mdct */\n newMDCT.mdct_sub48(gfc, inbuf[0], inbuf[1]);\n\n /****************************************\n * Stage 3: MS/LR decision *\n ****************************************/\n\n /* Here will be selected MS or LR coding of the 2 stereo channels */\n gfc.mode_ext = Encoder.MPG_MD_LR_LR;\n\n if (gfp.force_ms) {\n gfc.mode_ext = Encoder.MPG_MD_MS_LR;\n } else if (gfp.mode == MPEGMode.JOINT_STEREO) {\n /*\n * ms_ratio = is scaled, for historical reasons, to look like a\n * ratio of side_channel / total. 0 = signal is 100% mono .5 = L & R\n * uncorrelated\n */\n\n /**\n *
\n * [0] and [1] are the results for the two granules in MPEG-1,\n * in MPEG-2 it's only a faked averaging of the same value\n * _prev is the value of the last granule of the previous frame\n * _next is the value of the first granule of the next frame\n *\n */\n\n var sum_pe_MS = 0.;\n var sum_pe_LR = 0.;\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n sum_pe_MS += pe_MS[gr][ch];\n sum_pe_LR += pe[gr][ch];\n }\n }\n\n /* based on PE: M/S coding would not use much more bits than L/R */\n if (sum_pe_MS <= 1.00 * sum_pe_LR) {\n\n var gi0 = gfc.l3_side.tt[0];\n var gi1 = gfc.l3_side.tt[gfc.mode_gr - 1];\n\n if (gi0[0].block_type == gi0[1].block_type\n && gi1[0].block_type == gi1[1].block_type) {\n\n gfc.mode_ext = Encoder.MPG_MD_MS_LR;\n }\n }\n }\n\n /* bit and noise allocation */\n if (gfc.mode_ext == MPG_MD_MS_LR) {\n masking = masking_MS;\n /* use MS masking */\n pe_use = pe_MS;\n } else {\n masking = masking_LR;\n /* use LR masking */\n pe_use = pe;\n }\n\n /* copy data for MP3 frame analyzer */\n if (gfp.analysis && gfc.pinfo != null) {\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n gfc.pinfo.ms_ratio[gr] = gfc.ms_ratio[gr];\n gfc.pinfo.ms_ener_ratio[gr] = ms_ener_ratio[gr];\n gfc.pinfo.blocktype[gr][ch] = gfc.l3_side.tt[gr][ch].block_type;\n gfc.pinfo.pe[gr][ch] = pe_use[gr][ch];\n System.arraycopy(gfc.l3_side.tt[gr][ch].xr, 0,\n gfc.pinfo.xr[gr][ch], 0, 576);\n /*\n * in psymodel, LR and MS data was stored in pinfo. switch\n * to MS data:\n */\n if (gfc.mode_ext == MPG_MD_MS_LR) {\n gfc.pinfo.ers[gr][ch] = gfc.pinfo.ers[gr][ch + 2];\n System.arraycopy(gfc.pinfo.energy[gr][ch + 2], 0,\n gfc.pinfo.energy[gr][ch], 0,\n gfc.pinfo.energy[gr][ch].length);\n }\n }\n }\n }\n\n /****************************************\n * Stage 4: quantization loop *\n ****************************************/\n\n if (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_abr) {\n\n var i;\n var f;\n\n for (i = 0; i < 18; i++)\n gfc.nsPsy.pefirbuf[i] = gfc.nsPsy.pefirbuf[i + 1];\n\n f = 0.0;\n for (gr = 0; gr < gfc.mode_gr; gr++)\n for (ch = 0; ch < gfc.channels_out; ch++)\n f += pe_use[gr][ch];\n gfc.nsPsy.pefirbuf[18] = f;\n\n f = gfc.nsPsy.pefirbuf[9];\n for (i = 0; i < 9; i++)\n f += (gfc.nsPsy.pefirbuf[i] + gfc.nsPsy.pefirbuf[18 - i])\n * Encoder.fircoef[i];\n\n f = (670 * 5 * gfc.mode_gr * gfc.channels_out) / f;\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n pe_use[gr][ch] *= f;\n }\n }\n }\n gfc.iteration_loop.iteration_loop(gfp, pe_use, ms_ener_ratio, masking);\n\n /****************************************\n * Stage 5: bitstream formatting *\n ****************************************/\n\n /* write the frame to the bitstream */\n bs.format_bitstream(gfp);\n\n /* copy mp3 bit buffer into array */\n mp3count = bs.copy_buffer(gfc, mp3buf, mp3bufPos, mp3buf_size, 1);\n\n if (gfp.bWriteVbrTag)\n vbr.addVbrFrame(gfp);\n\n if (gfp.analysis && gfc.pinfo != null) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n var j;\n for (j = 0; j < FFTOFFSET; j++)\n gfc.pinfo.pcmdata[ch][j] = gfc.pinfo.pcmdata[ch][j\n + gfp.framesize];\n for (j = FFTOFFSET; j < 1600; j++) {\n gfc.pinfo.pcmdata[ch][j] = inbuf[ch][j - FFTOFFSET];\n }\n }\n qupvt.set_frame_pinfo(gfp, masking);\n }\n\n updateStats(gfc);\n\n return mp3count;\n }\n}\n\n\nmodule.exports = Encoder;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\n\nfunction FFT() {\n\n var window = new_float(Encoder.BLKSIZE);\n var window_s = new_float(Encoder.BLKSIZE_s / 2);\n\n var costab = [\n 9.238795325112867e-01, 3.826834323650898e-01,\n 9.951847266721969e-01, 9.801714032956060e-02,\n 9.996988186962042e-01, 2.454122852291229e-02,\n 9.999811752826011e-01, 6.135884649154475e-03\n ];\n\n function fht(fz, fzPos, n) {\n var tri = 0;\n var k4;\n var fi;\n var gi;\n\n n <<= 1;\n /* to get BLKSIZE, because of 3DNow! ASM routine */\n var fn = fzPos + n;\n k4 = 4;\n do {\n var s1, c1;\n var i, k1, k2, k3, kx;\n kx = k4 >> 1;\n k1 = k4;\n k2 = k4 << 1;\n k3 = k2 + k1;\n k4 = k2 << 1;\n fi = fzPos;\n gi = fi + kx;\n do {\n var f0, f1, f2, f3;\n f1 = fz[fi + 0] - fz[fi + k1];\n f0 = fz[fi + 0] + fz[fi + k1];\n f3 = fz[fi + k2] - fz[fi + k3];\n f2 = fz[fi + k2] + fz[fi + k3];\n fz[fi + k2] = f0 - f2;\n fz[fi + 0] = f0 + f2;\n fz[fi + k3] = f1 - f3;\n fz[fi + k1] = f1 + f3;\n f1 = fz[gi + 0] - fz[gi + k1];\n f0 = fz[gi + 0] + fz[gi + k1];\n f3 = (Util.SQRT2 * fz[gi + k3]);\n f2 = (Util.SQRT2 * fz[gi + k2]);\n fz[gi + k2] = f0 - f2;\n fz[gi + 0] = f0 + f2;\n fz[gi + k3] = f1 - f3;\n fz[gi + k1] = f1 + f3;\n gi += k4;\n fi += k4;\n } while (fi < fn);\n c1 = costab[tri + 0];\n s1 = costab[tri + 1];\n for (i = 1; i < kx; i++) {\n var c2, s2;\n c2 = 1 - (2 * s1) * s1;\n s2 = (2 * s1) * c1;\n fi = fzPos + i;\n gi = fzPos + k1 - i;\n do {\n var a, b, g0, f0, f1, g1, f2, g2, f3, g3;\n b = s2 * fz[fi + k1] - c2 * fz[gi + k1];\n a = c2 * fz[fi + k1] + s2 * fz[gi + k1];\n f1 = fz[fi + 0] - a;\n f0 = fz[fi + 0] + a;\n g1 = fz[gi + 0] - b;\n g0 = fz[gi + 0] + b;\n b = s2 * fz[fi + k3] - c2 * fz[gi + k3];\n a = c2 * fz[fi + k3] + s2 * fz[gi + k3];\n f3 = fz[fi + k2] - a;\n f2 = fz[fi + k2] + a;\n g3 = fz[gi + k2] - b;\n g2 = fz[gi + k2] + b;\n b = s1 * f2 - c1 * g3;\n a = c1 * f2 + s1 * g3;\n fz[fi + k2] = f0 - a;\n fz[fi + 0] = f0 + a;\n fz[gi + k3] = g1 - b;\n fz[gi + k1] = g1 + b;\n b = c1 * g2 - s1 * f3;\n a = s1 * g2 + c1 * f3;\n fz[gi + k2] = g0 - a;\n fz[gi + 0] = g0 + a;\n fz[fi + k3] = f1 - b;\n fz[fi + k1] = f1 + b;\n gi += k4;\n fi += k4;\n } while (fi < fn);\n c2 = c1;\n c1 = c2 * costab[tri + 0] - s1 * costab[tri + 1];\n s1 = c2 * costab[tri + 1] + s1 * costab[tri + 0];\n }\n tri += 2;\n } while (k4 < n);\n }\n\n var rv_tbl = [0x00, 0x80, 0x40,\n 0xc0, 0x20, 0xa0, 0x60, 0xe0, 0x10,\n 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70,\n 0xf0, 0x08, 0x88, 0x48, 0xc8, 0x28,\n 0xa8, 0x68, 0xe8, 0x18, 0x98, 0x58,\n 0xd8, 0x38, 0xb8, 0x78, 0xf8, 0x04,\n 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64,\n 0xe4, 0x14, 0x94, 0x54, 0xd4, 0x34,\n 0xb4, 0x74, 0xf4, 0x0c, 0x8c, 0x4c,\n 0xcc, 0x2c, 0xac, 0x6c, 0xec, 0x1c,\n 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c,\n 0xfc, 0x02, 0x82, 0x42, 0xc2, 0x22,\n 0xa2, 0x62, 0xe2, 0x12, 0x92, 0x52,\n 0xd2, 0x32, 0xb2, 0x72, 0xf2, 0x0a,\n 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a,\n 0xea, 0x1a, 0x9a, 0x5a, 0xda, 0x3a,\n 0xba, 0x7a, 0xfa, 0x06, 0x86, 0x46,\n 0xc6, 0x26, 0xa6, 0x66, 0xe6, 0x16,\n 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76,\n 0xf6, 0x0e, 0x8e, 0x4e, 0xce, 0x2e,\n 0xae, 0x6e, 0xee, 0x1e, 0x9e, 0x5e,\n 0xde, 0x3e, 0xbe, 0x7e, 0xfe];\n\n this.fft_short = function (gfc, x_real, chn, buffer, bufPos) {\n for (var b = 0; b < 3; b++) {\n var x = Encoder.BLKSIZE_s / 2;\n var k = 0xffff & ((576 / 3) * (b + 1));\n var j = Encoder.BLKSIZE_s / 8 - 1;\n do {\n var f0, f1, f2, f3, w;\n var i = rv_tbl[j << 2] & 0xff;\n\n f0 = window_s[i] * buffer[chn][bufPos + i + k];\n w = window_s[0x7f - i] * buffer[chn][bufPos + i + k + 0x80];\n f1 = f0 - w;\n f0 = f0 + w;\n f2 = window_s[i + 0x40] * buffer[chn][bufPos + i + k + 0x40];\n w = window_s[0x3f - i] * buffer[chn][bufPos + i + k + 0xc0];\n f3 = f2 - w;\n f2 = f2 + w;\n\n x -= 4;\n x_real[b][x + 0] = f0 + f2;\n x_real[b][x + 2] = f0 - f2;\n x_real[b][x + 1] = f1 + f3;\n x_real[b][x + 3] = f1 - f3;\n\n f0 = window_s[i + 0x01] * buffer[chn][bufPos + i + k + 0x01];\n w = window_s[0x7e - i] * buffer[chn][bufPos + i + k + 0x81];\n f1 = f0 - w;\n f0 = f0 + w;\n f2 = window_s[i + 0x41] * buffer[chn][bufPos + i + k + 0x41];\n w = window_s[0x3e - i] * buffer[chn][bufPos + i + k + 0xc1];\n f3 = f2 - w;\n f2 = f2 + w;\n\n x_real[b][x + Encoder.BLKSIZE_s / 2 + 0] = f0 + f2;\n x_real[b][x + Encoder.BLKSIZE_s / 2 + 2] = f0 - f2;\n x_real[b][x + Encoder.BLKSIZE_s / 2 + 1] = f1 + f3;\n x_real[b][x + Encoder.BLKSIZE_s / 2 + 3] = f1 - f3;\n } while (--j >= 0);\n\n fht(x_real[b], x, Encoder.BLKSIZE_s / 2);\n /* BLKSIZE_s/2 because of 3DNow! ASM routine */\n /* BLKSIZE/2 because of 3DNow! ASM routine */\n }\n }\n\n this.fft_long = function (gfc, y, chn, buffer, bufPos) {\n var jj = Encoder.BLKSIZE / 8 - 1;\n var x = Encoder.BLKSIZE / 2;\n\n do {\n var f0, f1, f2, f3, w;\n var i = rv_tbl[jj] & 0xff;\n f0 = window[i] * buffer[chn][bufPos + i];\n w = window[i + 0x200] * buffer[chn][bufPos + i + 0x200];\n f1 = f0 - w;\n f0 = f0 + w;\n f2 = window[i + 0x100] * buffer[chn][bufPos + i + 0x100];\n w = window[i + 0x300] * buffer[chn][bufPos + i + 0x300];\n f3 = f2 - w;\n f2 = f2 + w;\n\n x -= 4;\n y[x + 0] = f0 + f2;\n y[x + 2] = f0 - f2;\n y[x + 1] = f1 + f3;\n y[x + 3] = f1 - f3;\n\n f0 = window[i + 0x001] * buffer[chn][bufPos + i + 0x001];\n w = window[i + 0x201] * buffer[chn][bufPos + i + 0x201];\n f1 = f0 - w;\n f0 = f0 + w;\n f2 = window[i + 0x101] * buffer[chn][bufPos + i + 0x101];\n w = window[i + 0x301] * buffer[chn][bufPos + i + 0x301];\n f3 = f2 - w;\n f2 = f2 + w;\n\n y[x + Encoder.BLKSIZE / 2 + 0] = f0 + f2;\n y[x + Encoder.BLKSIZE / 2 + 2] = f0 - f2;\n y[x + Encoder.BLKSIZE / 2 + 1] = f1 + f3;\n y[x + Encoder.BLKSIZE / 2 + 3] = f1 - f3;\n } while (--jj >= 0);\n\n fht(y, x, Encoder.BLKSIZE / 2);\n /* BLKSIZE/2 because of 3DNow! ASM routine */\n }\n\n this.init_fft = function (gfc) {\n /* The type of window used here will make no real difference, but */\n /*\n * in the interest of merging nspsytune stuff - switch to blackman\n * window\n */\n for (var i = 0; i < Encoder.BLKSIZE; i++)\n /* blackman window */\n window[i] = (0.42 - 0.5 * Math.cos(2 * Math.PI * (i + .5)\n / Encoder.BLKSIZE) + 0.08 * Math.cos(4 * Math.PI * (i + .5)\n / Encoder.BLKSIZE));\n\n for (var i = 0; i < Encoder.BLKSIZE_s / 2; i++)\n window_s[i] = (0.5 * (1.0 - Math.cos(2.0 * Math.PI\n * (i + 0.5) / Encoder.BLKSIZE_s)));\n\n }\n\n}\n\nmodule.exports = FFT;\n","/*\n * psymodel.c\n *\n * Copyright (c) 1999-2000 Mark Taylor\n * Copyright (c) 2001-2002 Naoki Shibata\n * Copyright (c) 2000-2003 Takehiro Tominaga\n * Copyright (c) 2000-2008 Robert Hegemann\n * Copyright (c) 2000-2005 Gabriel Bouvigne\n * Copyright (c) 2000-2005 Alexander Leidinger\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Library General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the\n * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n * Boston, MA 02111-1307, USA.\n */\n\n/* $Id: PsyModel.java,v 1.27 2011/05/24 20:48:06 kenchis Exp $ */\n\n\n/*\n PSYCHO ACOUSTICS\n\n\n This routine computes the psycho acoustics, delayed by one granule.\n\n Input: buffer of PCM data (1024 samples).\n\n This window should be centered over the 576 sample granule window.\n The routine will compute the psycho acoustics for\n this granule, but return the psycho acoustics computed\n for the *previous* granule. This is because the block\n type of the previous granule can only be determined\n after we have computed the psycho acoustics for the following\n granule.\n\n Output: maskings and energies for each scalefactor band.\n block type, PE, and some correlation measures.\n The PE is used by CBR modes to determine if extra bits\n from the bit reservoir should be used. The correlation\n measures are used to determine mid/side or regular stereo.\n */\n/*\n Notation:\n\n barks: a non-linear frequency scale. Mapping from frequency to\n barks is given by freq2bark()\n\n scalefactor bands: The spectrum (frequencies) are broken into\n SBMAX \"scalefactor bands\". Thes bands\n are determined by the MPEG ISO spec. In\n the noise shaping/quantization code, we allocate\n bits among the partition bands to achieve the\n best possible quality\n\n partition bands: The spectrum is also broken into about\n 64 \"partition bands\". Each partition\n band is about .34 barks wide. There are about 2-5\n partition bands for each scalefactor band.\n\n LAME computes all psycho acoustic information for each partition\n band. Then at the end of the computations, this information\n is mapped to scalefactor bands. The energy in each scalefactor\n band is taken as the sum of the energy in all partition bands\n which overlap the scalefactor band. The maskings can be computed\n in the same way (and thus represent the average masking in that band)\n or by taking the minmum value multiplied by the number of\n partition bands used (which represents a minimum masking in that band).\n */\n/*\n The general outline is as follows:\n\n 1. compute the energy in each partition band\n 2. compute the tonality in each partition band\n 3. compute the strength of each partion band \"masker\"\n 4. compute the masking (via the spreading function applied to each masker)\n 5. Modifications for mid/side masking.\n\n Each partition band is considiered a \"masker\". The strength\n of the i'th masker in band j is given by:\n\n s3(bark(i)-bark(j))*strength(i)\n\n The strength of the masker is a function of the energy and tonality.\n The more tonal, the less masking. LAME uses a simple linear formula\n (controlled by NMT and TMN) which says the strength is given by the\n energy divided by a linear function of the tonality.\n */\n/*\n s3() is the \"spreading function\". It is given by a formula\n determined via listening tests.\n\n The total masking in the j'th partition band is the sum over\n all maskings i. It is thus given by the convolution of\n the strength with s3(), the \"spreading function.\"\n\n masking(j) = sum_over_i s3(i-j)*strength(i) = s3 o strength\n\n where \"o\" = convolution operator. s3 is given by a formula determined\n via listening tests. It is normalized so that s3 o 1 = 1.\n\n Note: instead of a simple convolution, LAME also has the\n option of using \"additive masking\"\n\n The most critical part is step 2, computing the tonality of each\n partition band. LAME has two tonality estimators. The first\n is based on the ISO spec, and measures how predictiable the\n signal is over time. The more predictable, the more tonal.\n The second measure is based on looking at the spectrum of\n a single granule. The more peaky the spectrum, the more\n tonal. By most indications, the latter approach is better.\n\n Finally, in step 5, the maskings for the mid and side\n channel are possibly increased. Under certain circumstances,\n noise in the mid & side channels is assumed to also\n be masked by strong maskers in the L or R channels.\n\n\n Other data computed by the psy-model:\n\n ms_ratio side-channel / mid-channel masking ratio (for previous granule)\n ms_ratio_next side-channel / mid-channel masking ratio for this granule\n\n percep_entropy[2] L and R values (prev granule) of PE - A measure of how\n much pre-echo is in the previous granule\n percep_entropy_MS[2] mid and side channel values (prev granule) of percep_entropy\n energy[4] L,R,M,S energy in each channel, prev granule\n blocktype_d[2] block type to use for previous granule\n */\n//package mp3;\n\n//import java.util.Arrays;\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar FFT = require(\"./FFT.js\");\nvar Encoder = require(\"./Encoder.js\");\n\nfunction PsyModel() {\n\n var fft = new FFT();\n\n var LOG10 = 2.30258509299404568402;\n\n var rpelev = 2;\n var rpelev2 = 16;\n var rpelev_s = 2;\n var rpelev2_s = 16;\n\n /* size of each partition band, in barks: */\n var DELBARK = .34;\n\n /* tuned for output level (sensitive to energy scale) */\n var VO_SCALE = (1. / (14752 * 14752) / (Encoder.BLKSIZE / 2));\n\n var temporalmask_sustain_sec = 0.01;\n\n var NS_PREECHO_ATT0 = 0.8;\n var NS_PREECHO_ATT1 = 0.6;\n var NS_PREECHO_ATT2 = 0.3;\n\n var NS_MSFIX = 3.5;\n\n var NSATTACKTHRE = 4.4;\n var NSATTACKTHRE_S = 25;\n\n var NSFIRLEN = 21;\n\n /* size of each partition band, in barks: */\n var LN_TO_LOG10 = 0.2302585093;\n\n function NON_LINEAR_SCALE_ENERGY(x) {\n return x;\n }\n\n /**\n *
\n * L3psycho_anal. Compute psycho acoustics.\n *\n * Data returned to the calling program must be delayed by one\n * granule.\n *\n * This is done in two places.\n * If we do not need to know the blocktype, the copying\n * can be done here at the top of the program: we copy the data for\n * the last granule (computed during the last call) before it is\n * overwritten with the new data. It looks like this:\n *\n * 0. static psymodel_data\n * 1. calling_program_data = psymodel_data\n * 2. compute psymodel_data\n *\n * For data which needs to know the blocktype, the copying must be\n * done at the end of this loop, and the old values must be saved:\n *\n * 0. static psymodel_data_old\n * 1. compute psymodel_data\n * 2. compute possible block type of this granule\n * 3. compute final block type of previous granule based on #2.\n * 4. calling_program_data = psymodel_data_old\n * 5. psymodel_data_old = psymodel_data\n * psycho_loudness_approx\n * jd - 2001 mar 12\n * in: energy - BLKSIZE/2 elements of frequency magnitudes ^ 2\n * gfp - uses out_samplerate, ATHtype (also needed for ATHformula)\n * returns: loudness^2 approximation, a positive value roughly tuned for a value\n * of 1.0 for signals near clipping.\n * notes: When calibrated, feeding this function binary white noise at sample\n * values +32767 or -32768 should return values that approach 3.\n * ATHformula is used to approximate an equal loudness curve.\n * future: Data indicates that the shape of the equal loudness curve varies\n * with intensity. This function might be improved by using an equal\n * loudness curve shaped for typical playback levels (instead of the\n * ATH, that is shaped for the threshold). A flexible realization might\n * simply bend the existing ATH curve to achieve the desired shape.\n * However, the potential gain may not be enough to justify an effort.\n *\n */\n function psycho_loudness_approx(energy, gfc) {\n var loudness_power = 0.0;\n /* apply weights to power in freq. bands */\n for (var i = 0; i < Encoder.BLKSIZE / 2; ++i)\n loudness_power += energy[i] * gfc.ATH.eql_w[i];\n loudness_power *= VO_SCALE;\n\n return loudness_power;\n }\n\n function compute_ffts(gfp, fftenergy, fftenergy_s, wsamp_l, wsamp_lPos, wsamp_s, wsamp_sPos, gr_out, chn, buffer, bufPos) {\n var gfc = gfp.internal_flags;\n if (chn < 2) {\n fft.fft_long(gfc, wsamp_l[wsamp_lPos], chn, buffer, bufPos);\n fft.fft_short(gfc, wsamp_s[wsamp_sPos], chn, buffer, bufPos);\n }\n /* FFT data for mid and side channel is derived from L & R */\n else if (chn == 2) {\n for (var j = Encoder.BLKSIZE - 1; j >= 0; --j) {\n var l = wsamp_l[wsamp_lPos + 0][j];\n var r = wsamp_l[wsamp_lPos + 1][j];\n wsamp_l[wsamp_lPos + 0][j] = (l + r) * Util.SQRT2 * 0.5;\n wsamp_l[wsamp_lPos + 1][j] = (l - r) * Util.SQRT2 * 0.5;\n }\n for (var b = 2; b >= 0; --b) {\n for (var j = Encoder.BLKSIZE_s - 1; j >= 0; --j) {\n var l = wsamp_s[wsamp_sPos + 0][b][j];\n var r = wsamp_s[wsamp_sPos + 1][b][j];\n wsamp_s[wsamp_sPos + 0][b][j] = (l + r) * Util.SQRT2 * 0.5;\n wsamp_s[wsamp_sPos + 1][b][j] = (l - r) * Util.SQRT2 * 0.5;\n }\n }\n }\n\n /*********************************************************************\n * compute energies\n *********************************************************************/\n fftenergy[0] = NON_LINEAR_SCALE_ENERGY(wsamp_l[wsamp_lPos + 0][0]);\n fftenergy[0] *= fftenergy[0];\n\n for (var j = Encoder.BLKSIZE / 2 - 1; j >= 0; --j) {\n var re = (wsamp_l[wsamp_lPos + 0])[Encoder.BLKSIZE / 2 - j];\n var im = (wsamp_l[wsamp_lPos + 0])[Encoder.BLKSIZE / 2 + j];\n fftenergy[Encoder.BLKSIZE / 2 - j] = NON_LINEAR_SCALE_ENERGY((re\n * re + im * im) * 0.5);\n }\n for (var b = 2; b >= 0; --b) {\n fftenergy_s[b][0] = (wsamp_s[wsamp_sPos + 0])[b][0];\n fftenergy_s[b][0] *= fftenergy_s[b][0];\n for (var j = Encoder.BLKSIZE_s / 2 - 1; j >= 0; --j) {\n var re = (wsamp_s[wsamp_sPos + 0])[b][Encoder.BLKSIZE_s\n / 2 - j];\n var im = (wsamp_s[wsamp_sPos + 0])[b][Encoder.BLKSIZE_s\n / 2 + j];\n fftenergy_s[b][Encoder.BLKSIZE_s / 2 - j] = NON_LINEAR_SCALE_ENERGY((re\n * re + im * im) * 0.5);\n }\n }\n /* total energy */\n {\n var totalenergy = 0.0;\n for (var j = 11; j < Encoder.HBLKSIZE; j++)\n totalenergy += fftenergy[j];\n\n gfc.tot_ener[chn] = totalenergy;\n }\n\n if (gfp.analysis) {\n for (var j = 0; j < Encoder.HBLKSIZE; j++) {\n gfc.pinfo.energy[gr_out][chn][j] = gfc.pinfo.energy_save[chn][j];\n gfc.pinfo.energy_save[chn][j] = fftenergy[j];\n }\n gfc.pinfo.pe[gr_out][chn] = gfc.pe[chn];\n }\n\n /*********************************************************************\n * compute loudness approximation (used for ATH auto-level adjustment)\n *********************************************************************/\n if (gfp.athaa_loudapprox == 2 && chn < 2) {\n // no loudness for mid/side ch\n gfc.loudness_sq[gr_out][chn] = gfc.loudness_sq_save[chn];\n gfc.loudness_sq_save[chn] = psycho_loudness_approx(fftenergy, gfc);\n }\n }\n\n /* mask_add optimization */\n /* init the limit values used to avoid computing log in mask_add when it is not necessary */\n\n /**\n *
\n * For example, with i = 10*log10(m2/m1)/10*16 (= log10(m2/m1)*16)\n *\n * abs(i)>8 is equivalent (as i is an integer) to\n * abs(i)>=9\n * i>=9 || i<=-9\n * equivalent to (as i is the biggest integer smaller than log10(m2/m1)*16\n * or the smallest integer bigger than log10(m2/m1)*16 depending on the sign of log10(m2/m1)*16)\n * log10(m2/m1)>=9/16 || log10(m2/m1)<=-9/16\n * exp10 is strictly increasing thus this is equivalent to\n * m2/m1 >= 10^(9/16) || m2/m1<=10^(-9/16) which are comparisons to constants\n *\n */\n\n /**\n * as in if(i>8)\n */\n var I1LIMIT = 8;\n /**\n * as in if(i>24) . changed 23\n */\n var I2LIMIT = 23;\n /**\n * as in if(m<15)\n */\n var MLIMIT = 15;\n\n var ma_max_i1;\n var ma_max_i2;\n var ma_max_m;\n\n /**\n * This is the masking table:
\n * m<15 equ log10((m1+m2)/gfc.ATH.cb[k])<1.5\n * equ (m1+m2)/gfc.ATH.cb[k]<10^1.5\n * equ (m1+m2)<10^1.5 * gfc.ATH.cb[k]\n *\n */\n var i = 0 | Util.FAST_LOG10_X(ratio, 16.0);\n if (shortblock != 0) {\n m2 = gfc.ATH.cb_s[kk] * gfc.ATH.adjust;\n } else {\n m2 = gfc.ATH.cb_l[kk] * gfc.ATH.adjust;\n }\n assert(m2 >= 0);\n if (m1 < ma_max_m * m2) {\n /* 3% of the total */\n /* Originally if (m > 0) { */\n if (m1 > m2) {\n var f, r;\n\n f = 1.0;\n if (i <= 13)\n f = table3[i];\n\n r = Util.FAST_LOG10_X(m1 / m2, 10.0 / 15.0);\n return m1 * ((table1[i] - f) * r + f);\n }\n\n if (i > 13)\n return m1;\n\n return m1 * table3[i];\n }\n\n /* 10% of total */\n return m1 * table1[i];\n }\n\n var table2_ = [1.33352 * 1.33352,\n 1.35879 * 1.35879, 1.38454 * 1.38454, 1.39497 * 1.39497,\n 1.40548 * 1.40548, 1.3537 * 1.3537, 1.30382 * 1.30382,\n 1.22321 * 1.22321, 1.14758 * 1.14758, 1];\n\n /**\n * addition of simultaneous masking Naoki Shibata 2000/7\n */\n function vbrpsy_mask_add(m1, m2, b) {\n var ratio;\n\n if (m1 < 0) {\n m1 = 0;\n }\n if (m2 < 0) {\n m2 = 0;\n }\n if (m1 <= 0) {\n return m2;\n }\n if (m2 <= 0) {\n return m1;\n }\n if (m2 > m1) {\n ratio = m2 / m1;\n } else {\n ratio = m1 / m2;\n }\n if (-2 <= b && b <= 2) {\n /* approximately, 1 bark = 3 partitions */\n /* originally 'if(i > 8)' */\n if (ratio >= ma_max_i1) {\n return m1 + m2;\n } else {\n var i = 0 | (Util.FAST_LOG10_X(ratio, 16.0));\n return (m1 + m2) * table2_[i];\n }\n }\n if (ratio < ma_max_i2) {\n return m1 + m2;\n }\n if (m1 < m2) {\n m1 = m2;\n }\n return m1;\n }\n\n /**\n * compute interchannel masking effects\n */\n function calc_interchannel_masking(gfp, ratio) {\n var gfc = gfp.internal_flags;\n if (gfc.channels_out > 1) {\n for (var sb = 0; sb < Encoder.SBMAX_l; sb++) {\n var l = gfc.thm[0].l[sb];\n var r = gfc.thm[1].l[sb];\n gfc.thm[0].l[sb] += r * ratio;\n gfc.thm[1].l[sb] += l * ratio;\n }\n for (var sb = 0; sb < Encoder.SBMAX_s; sb++) {\n for (var sblock = 0; sblock < 3; sblock++) {\n var l = gfc.thm[0].s[sb][sblock];\n var r = gfc.thm[1].s[sb][sblock];\n gfc.thm[0].s[sb][sblock] += r * ratio;\n gfc.thm[1].s[sb][sblock] += l * ratio;\n }\n }\n }\n }\n\n /**\n * compute M/S thresholds from Johnston & Ferreira 1992 ICASSP paper\n */\n function msfix1(gfc) {\n for (var sb = 0; sb < Encoder.SBMAX_l; sb++) {\n /* use this fix if L & R masking differs by 2db or less */\n /* if db = 10*log10(x2/x1) < 2 */\n /* if (x2 < 1.58*x1) { */\n if (gfc.thm[0].l[sb] > 1.58 * gfc.thm[1].l[sb]\n || gfc.thm[1].l[sb] > 1.58 * gfc.thm[0].l[sb])\n continue;\n var mld = gfc.mld_l[sb] * gfc.en[3].l[sb];\n var rmid = Math.max(gfc.thm[2].l[sb],\n Math.min(gfc.thm[3].l[sb], mld));\n\n mld = gfc.mld_l[sb] * gfc.en[2].l[sb];\n var rside = Math.max(gfc.thm[3].l[sb],\n Math.min(gfc.thm[2].l[sb], mld));\n gfc.thm[2].l[sb] = rmid;\n gfc.thm[3].l[sb] = rside;\n }\n\n for (var sb = 0; sb < Encoder.SBMAX_s; sb++) {\n for (var sblock = 0; sblock < 3; sblock++) {\n if (gfc.thm[0].s[sb][sblock] > 1.58 * gfc.thm[1].s[sb][sblock]\n || gfc.thm[1].s[sb][sblock] > 1.58 * gfc.thm[0].s[sb][sblock])\n continue;\n var mld = gfc.mld_s[sb] * gfc.en[3].s[sb][sblock];\n var rmid = Math.max(gfc.thm[2].s[sb][sblock],\n Math.min(gfc.thm[3].s[sb][sblock], mld));\n\n mld = gfc.mld_s[sb] * gfc.en[2].s[sb][sblock];\n var rside = Math.max(gfc.thm[3].s[sb][sblock],\n Math.min(gfc.thm[2].s[sb][sblock], mld));\n\n gfc.thm[2].s[sb][sblock] = rmid;\n gfc.thm[3].s[sb][sblock] = rside;\n }\n }\n }\n\n /**\n * Adjust M/S maskings if user set \"msfix\"\n *\n * Naoki Shibata 2000\n */\n function ns_msfix(gfc, msfix, athadjust) {\n var msfix2 = msfix;\n var athlower = Math.pow(10, athadjust);\n\n msfix *= 2.0;\n msfix2 *= 2.0;\n for (var sb = 0; sb < Encoder.SBMAX_l; sb++) {\n var thmLR, thmM, thmS, ath;\n ath = (gfc.ATH.cb_l[gfc.bm_l[sb]]) * athlower;\n thmLR = Math.min(Math.max(gfc.thm[0].l[sb], ath),\n Math.max(gfc.thm[1].l[sb], ath));\n thmM = Math.max(gfc.thm[2].l[sb], ath);\n thmS = Math.max(gfc.thm[3].l[sb], ath);\n if (thmLR * msfix < thmM + thmS) {\n var f = thmLR * msfix2 / (thmM + thmS);\n thmM *= f;\n thmS *= f;\n assert(thmM + thmS > 0);\n }\n gfc.thm[2].l[sb] = Math.min(thmM, gfc.thm[2].l[sb]);\n gfc.thm[3].l[sb] = Math.min(thmS, gfc.thm[3].l[sb]);\n }\n\n athlower *= ( Encoder.BLKSIZE_s / Encoder.BLKSIZE);\n for (var sb = 0; sb < Encoder.SBMAX_s; sb++) {\n for (var sblock = 0; sblock < 3; sblock++) {\n var thmLR, thmM, thmS, ath;\n ath = (gfc.ATH.cb_s[gfc.bm_s[sb]]) * athlower;\n thmLR = Math.min(Math.max(gfc.thm[0].s[sb][sblock], ath),\n Math.max(gfc.thm[1].s[sb][sblock], ath));\n thmM = Math.max(gfc.thm[2].s[sb][sblock], ath);\n thmS = Math.max(gfc.thm[3].s[sb][sblock], ath);\n\n if (thmLR * msfix < thmM + thmS) {\n var f = thmLR * msfix / (thmM + thmS);\n thmM *= f;\n thmS *= f;\n assert(thmM + thmS > 0);\n }\n gfc.thm[2].s[sb][sblock] = Math.min(gfc.thm[2].s[sb][sblock],\n thmM);\n gfc.thm[3].s[sb][sblock] = Math.min(gfc.thm[3].s[sb][sblock],\n thmS);\n }\n }\n }\n\n /**\n * short block threshold calculation (part 2)\n *\n * partition band bo_s[sfb] is at the transition from scalefactor band sfb\n * to the next one sfb+1; enn and thmm have to be split between them\n */\n function convert_partition2scalefac_s(gfc, eb, thr, chn, sblock) {\n var sb, b;\n var enn = 0.0;\n var thmm = 0.0;\n for (sb = b = 0; sb < Encoder.SBMAX_s; ++b, ++sb) {\n var bo_s_sb = gfc.bo_s[sb];\n var npart_s = gfc.npart_s;\n var b_lim = bo_s_sb < npart_s ? bo_s_sb : npart_s;\n while (b < b_lim) {\n assert(eb[b] >= 0);\n // iff failed, it may indicate some index error elsewhere\n assert(thr[b] >= 0);\n enn += eb[b];\n thmm += thr[b];\n b++;\n }\n gfc.en[chn].s[sb][sblock] = enn;\n gfc.thm[chn].s[sb][sblock] = thmm;\n\n if (b >= npart_s) {\n ++sb;\n break;\n }\n assert(eb[b] >= 0);\n // iff failed, it may indicate some index error elsewhere\n assert(thr[b] >= 0);\n {\n /* at transition sfb . sfb+1 */\n var w_curr = gfc.PSY.bo_s_weight[sb];\n var w_next = 1.0 - w_curr;\n enn = w_curr * eb[b];\n thmm = w_curr * thr[b];\n gfc.en[chn].s[sb][sblock] += enn;\n gfc.thm[chn].s[sb][sblock] += thmm;\n enn = w_next * eb[b];\n thmm = w_next * thr[b];\n }\n }\n /* zero initialize the rest */\n for (; sb < Encoder.SBMAX_s; ++sb) {\n gfc.en[chn].s[sb][sblock] = 0;\n gfc.thm[chn].s[sb][sblock] = 0;\n }\n }\n\n /**\n * longblock threshold calculation (part 2)\n */\n function convert_partition2scalefac_l(gfc, eb, thr, chn) {\n var sb, b;\n var enn = 0.0;\n var thmm = 0.0;\n for (sb = b = 0; sb < Encoder.SBMAX_l; ++b, ++sb) {\n var bo_l_sb = gfc.bo_l[sb];\n var npart_l = gfc.npart_l;\n var b_lim = bo_l_sb < npart_l ? bo_l_sb : npart_l;\n while (b < b_lim) {\n assert(eb[b] >= 0);\n // iff failed, it may indicate some index error elsewhere\n assert(thr[b] >= 0);\n enn += eb[b];\n thmm += thr[b];\n b++;\n }\n gfc.en[chn].l[sb] = enn;\n gfc.thm[chn].l[sb] = thmm;\n\n if (b >= npart_l) {\n ++sb;\n break;\n }\n assert(eb[b] >= 0);\n assert(thr[b] >= 0);\n {\n /* at transition sfb . sfb+1 */\n var w_curr = gfc.PSY.bo_l_weight[sb];\n var w_next = 1.0 - w_curr;\n enn = w_curr * eb[b];\n thmm = w_curr * thr[b];\n gfc.en[chn].l[sb] += enn;\n gfc.thm[chn].l[sb] += thmm;\n enn = w_next * eb[b];\n thmm = w_next * thr[b];\n }\n }\n /* zero initialize the rest */\n for (; sb < Encoder.SBMAX_l; ++sb) {\n gfc.en[chn].l[sb] = 0;\n gfc.thm[chn].l[sb] = 0;\n }\n }\n\n function compute_masking_s(gfp, fftenergy_s, eb, thr, chn, sblock) {\n var gfc = gfp.internal_flags;\n var j, b;\n\n for (b = j = 0; b < gfc.npart_s; ++b) {\n var ebb = 0, m = 0;\n var n = gfc.numlines_s[b];\n for (var i = 0; i < n; ++i, ++j) {\n var el = fftenergy_s[sblock][j];\n ebb += el;\n if (m < el)\n m = el;\n }\n eb[b] = ebb;\n }\n assert(b == gfc.npart_s);\n assert(j == 129);\n for (j = b = 0; b < gfc.npart_s; b++) {\n var kk = gfc.s3ind_s[b][0];\n var ecb = gfc.s3_ss[j++] * eb[kk];\n ++kk;\n while (kk <= gfc.s3ind_s[b][1]) {\n ecb += gfc.s3_ss[j] * eb[kk];\n ++j;\n ++kk;\n }\n\n { /* limit calculated threshold by previous granule */\n var x = rpelev_s * gfc.nb_s1[chn][b];\n thr[b] = Math.min(ecb, x);\n }\n if (gfc.blocktype_old[chn & 1] == Encoder.SHORT_TYPE) {\n /* limit calculated threshold by even older granule */\n var x = rpelev2_s * gfc.nb_s2[chn][b];\n var y = thr[b];\n thr[b] = Math.min(x, y);\n }\n\n gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b];\n gfc.nb_s1[chn][b] = ecb;\n assert(thr[b] >= 0);\n }\n for (; b <= Encoder.CBANDS; ++b) {\n eb[b] = 0;\n thr[b] = 0;\n }\n }\n\n function block_type_set(gfp, uselongblock, blocktype_d, blocktype) {\n var gfc = gfp.internal_flags;\n\n if (gfp.short_blocks == ShortBlock.short_block_coupled\n /* force both channels to use the same block type */\n /* this is necessary if the frame is to be encoded in ms_stereo. */\n /* But even without ms_stereo, FhG does this */\n && !(uselongblock[0] != 0 && uselongblock[1] != 0))\n uselongblock[0] = uselongblock[1] = 0;\n\n /*\n * update the blocktype of the previous granule, since it depends on\n * what happend in this granule\n */\n for (var chn = 0; chn < gfc.channels_out; chn++) {\n blocktype[chn] = Encoder.NORM_TYPE;\n /* disable short blocks */\n if (gfp.short_blocks == ShortBlock.short_block_dispensed)\n uselongblock[chn] = 1;\n if (gfp.short_blocks == ShortBlock.short_block_forced)\n uselongblock[chn] = 0;\n\n if (uselongblock[chn] != 0) {\n /* no attack : use long blocks */\n assert(gfc.blocktype_old[chn] != Encoder.START_TYPE);\n if (gfc.blocktype_old[chn] == Encoder.SHORT_TYPE)\n blocktype[chn] = Encoder.STOP_TYPE;\n } else {\n /* attack : use short blocks */\n blocktype[chn] = Encoder.SHORT_TYPE;\n if (gfc.blocktype_old[chn] == Encoder.NORM_TYPE) {\n gfc.blocktype_old[chn] = Encoder.START_TYPE;\n }\n if (gfc.blocktype_old[chn] == Encoder.STOP_TYPE)\n gfc.blocktype_old[chn] = Encoder.SHORT_TYPE;\n }\n\n blocktype_d[chn] = gfc.blocktype_old[chn];\n // value returned to calling program\n gfc.blocktype_old[chn] = blocktype[chn];\n // save for next call to l3psy_anal\n }\n }\n\n function NS_INTERP(x, y, r) {\n /* was pow((x),(r))*pow((y),1-(r)) */\n if (r >= 1.0) {\n /* 99.7% of the time */\n return x;\n }\n if (r <= 0.0)\n return y;\n if (y > 0.0) {\n /* rest of the time */\n return (Math.pow(x / y, r) * y);\n }\n /* never happens */\n return 0.0;\n }\n\n /**\n * these values are tuned only for 44.1kHz...\n */\n var regcoef_s = [11.8, 13.6, 17.2, 32, 46.5,\n 51.3, 57.5, 67.1, 71.5, 84.6, 97.6, 130,\n /* 255.8 */\n ];\n\n function pecalc_s(mr, masking_lower) {\n var pe_s = 1236.28 / 4;\n for (var sb = 0; sb < Encoder.SBMAX_s - 1; sb++) {\n for (var sblock = 0; sblock < 3; sblock++) {\n var thm = mr.thm.s[sb][sblock];\n assert(sb < regcoef_s.length);\n if (thm > 0.0) {\n var x = thm * masking_lower;\n var en = mr.en.s[sb][sblock];\n if (en > x) {\n if (en > x * 1e10) {\n pe_s += regcoef_s[sb] * (10.0 * LOG10);\n } else {\n assert(x > 0);\n pe_s += regcoef_s[sb] * Util.FAST_LOG10(en / x);\n }\n }\n }\n }\n }\n\n return pe_s;\n }\n\n /**\n * these values are tuned only for 44.1kHz...\n */\n var regcoef_l = [6.8, 5.8, 5.8, 6.4, 6.5, 9.9,\n 12.1, 14.4, 15, 18.9, 21.6, 26.9, 34.2, 40.2, 46.8, 56.5,\n 60.7, 73.9, 85.7, 93.4, 126.1,\n /* 241.3 */\n ];\n\n function pecalc_l(mr, masking_lower) {\n var pe_l = 1124.23 / 4;\n for (var sb = 0; sb < Encoder.SBMAX_l - 1; sb++) {\n var thm = mr.thm.l[sb];\n assert(sb < regcoef_l.length);\n if (thm > 0.0) {\n var x = thm * masking_lower;\n var en = mr.en.l[sb];\n if (en > x) {\n if (en > x * 1e10) {\n pe_l += regcoef_l[sb] * (10.0 * LOG10);\n } else {\n assert(x > 0);\n pe_l += regcoef_l[sb] * Util.FAST_LOG10(en / x);\n }\n }\n }\n }\n return pe_l;\n }\n\n function calc_energy(gfc, fftenergy, eb, max, avg) {\n var b, j;\n\n for (b = j = 0; b < gfc.npart_l; ++b) {\n var ebb = 0, m = 0;\n var i;\n for (i = 0; i < gfc.numlines_l[b]; ++i, ++j) {\n var el = fftenergy[j];\n assert(el >= 0);\n ebb += el;\n if (m < el)\n m = el;\n }\n eb[b] = ebb;\n max[b] = m;\n avg[b] = ebb * gfc.rnumlines_l[b];\n assert(gfc.rnumlines_l[b] >= 0);\n assert(ebb >= 0);\n assert(eb[b] >= 0);\n assert(max[b] >= 0);\n assert(avg[b] >= 0);\n }\n }\n\n function calc_mask_index_l(gfc, max, avg, mask_idx) {\n var last_tab_entry = tab.length - 1;\n var b = 0;\n var a = avg[b] + avg[b + 1];\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b];\n if (m < max[b + 1])\n m = max[b + 1];\n assert((gfc.numlines_l[b] + gfc.numlines_l[b + 1] - 1) > 0);\n a = 20.0 * (m * 2.0 - a)\n / (a * (gfc.numlines_l[b] + gfc.numlines_l[b + 1] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n\n for (b = 1; b < gfc.npart_l - 1; b++) {\n a = avg[b - 1] + avg[b] + avg[b + 1];\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b - 1];\n if (m < max[b])\n m = max[b];\n if (m < max[b + 1])\n m = max[b + 1];\n assert((gfc.numlines_l[b - 1] + gfc.numlines_l[b] + gfc.numlines_l[b + 1] - 1) > 0);\n a = 20.0\n * (m * 3.0 - a)\n / (a * (gfc.numlines_l[b - 1] + gfc.numlines_l[b]\n + gfc.numlines_l[b + 1] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n }\n assert(b > 0);\n assert(b == gfc.npart_l - 1);\n\n a = avg[b - 1] + avg[b];\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b - 1];\n if (m < max[b])\n m = max[b];\n assert((gfc.numlines_l[b - 1] + gfc.numlines_l[b] - 1) > 0);\n a = 20.0 * (m * 2.0 - a)\n / (a * (gfc.numlines_l[b - 1] + gfc.numlines_l[b] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n assert(b == (gfc.npart_l - 1));\n }\n\n var fircoef = [\n -8.65163e-18 * 2, -0.00851586 * 2, -6.74764e-18 * 2, 0.0209036 * 2,\n -3.36639e-17 * 2, -0.0438162 * 2, -1.54175e-17 * 2, 0.0931738 * 2,\n -5.52212e-17 * 2, -0.313819 * 2\n ];\n\n this.L3psycho_anal_ns = function (gfp, buffer, bufPos, gr_out, masking_ratio, masking_MS_ratio, percep_entropy, percep_MS_entropy, energy, blocktype_d) {\n /*\n * to get a good cache performance, one has to think about the sequence,\n * in which the variables are used.\n */\n var gfc = gfp.internal_flags;\n\n /* fft and energy calculation */\n var wsamp_L = new_float_n([2, Encoder.BLKSIZE]);\n var wsamp_S = new_float_n([2, 3, Encoder.BLKSIZE_s]);\n\n /* convolution */\n var eb_l = new_float(Encoder.CBANDS + 1);\n var eb_s = new_float(Encoder.CBANDS + 1);\n var thr = new_float(Encoder.CBANDS + 2);\n\n /* block type */\n var blocktype = new_int(2), uselongblock = new_int(2);\n\n /* usual variables like loop indices, etc.. */\n var numchn, chn;\n var b, i, j, k;\n var sb, sblock;\n\n /* variables used for --nspsytune */\n var ns_hpfsmpl = new_float_n([2, 576]);\n var pcfact;\n var mask_idx_l = new_int(Encoder.CBANDS + 2), mask_idx_s = new_int(Encoder.CBANDS + 2);\n\n Arrays.fill(mask_idx_s, 0);\n\n numchn = gfc.channels_out;\n /* chn=2 and 3 = Mid and Side channels */\n if (gfp.mode == MPEGMode.JOINT_STEREO)\n numchn = 4;\n\n if (gfp.VBR == VbrMode.vbr_off)\n pcfact = gfc.ResvMax == 0 ? 0 : ( gfc.ResvSize)\n / gfc.ResvMax * 0.5;\n else if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh\n || gfp.VBR == VbrMode.vbr_mt) {\n pcfact = 0.6;\n } else\n pcfact = 1.0;\n\n /**********************************************************************\n * Apply HPF of fs/4 to the input signal. This is used for attack\n * detection / handling.\n **********************************************************************/\n /* Don't copy the input buffer into a temporary buffer */\n /* unroll the loop 2 times */\n for (chn = 0; chn < gfc.channels_out; chn++) {\n /* apply high pass filter of fs/4 */\n var firbuf = buffer[chn];\n var firbufPos = bufPos + 576 - 350 - NSFIRLEN + 192;\n assert(fircoef.length == ((NSFIRLEN - 1) / 2));\n for (i = 0; i < 576; i++) {\n var sum1, sum2;\n sum1 = firbuf[firbufPos + i + 10];\n sum2 = 0.0;\n for (j = 0; j < ((NSFIRLEN - 1) / 2) - 1; j += 2) {\n sum1 += fircoef[j]\n * (firbuf[firbufPos + i + j] + firbuf[firbufPos + i\n + NSFIRLEN - j]);\n sum2 += fircoef[j + 1]\n * (firbuf[firbufPos + i + j + 1] + firbuf[firbufPos\n + i + NSFIRLEN - j - 1]);\n }\n ns_hpfsmpl[chn][i] = sum1 + sum2;\n }\n masking_ratio[gr_out][chn].en.assign(gfc.en[chn]);\n masking_ratio[gr_out][chn].thm.assign(gfc.thm[chn]);\n if (numchn > 2) {\n /* MS maskings */\n /* percep_MS_entropy [chn-2] = gfc . pe [chn]; */\n masking_MS_ratio[gr_out][chn].en.assign(gfc.en[chn + 2]);\n masking_MS_ratio[gr_out][chn].thm.assign(gfc.thm[chn + 2]);\n }\n }\n\n for (chn = 0; chn < numchn; chn++) {\n var wsamp_l;\n var wsamp_s;\n var en_subshort = new_float(12);\n var en_short = [0, 0, 0, 0];\n var attack_intensity = new_float(12);\n var ns_uselongblock = 1;\n var attackThreshold;\n var max = new_float(Encoder.CBANDS), avg = new_float(Encoder.CBANDS);\n var ns_attacks = [0, 0, 0, 0];\n var fftenergy = new_float(Encoder.HBLKSIZE);\n var fftenergy_s = new_float_n([3, Encoder.HBLKSIZE_s]);\n\n /*\n * rh 20040301: the following loops do access one off the limits so\n * I increase the array dimensions by one and initialize the\n * accessed values to zero\n */\n assert(gfc.npart_s <= Encoder.CBANDS);\n assert(gfc.npart_l <= Encoder.CBANDS);\n\n /***************************************************************\n * determine the block type (window type)\n ***************************************************************/\n /* calculate energies of each sub-shortblocks */\n for (i = 0; i < 3; i++) {\n en_subshort[i] = gfc.nsPsy.last_en_subshort[chn][i + 6];\n assert(gfc.nsPsy.last_en_subshort[chn][i + 4] > 0);\n attack_intensity[i] = en_subshort[i]\n / gfc.nsPsy.last_en_subshort[chn][i + 4];\n en_short[0] += en_subshort[i];\n }\n\n if (chn == 2) {\n for (i = 0; i < 576; i++) {\n var l, r;\n l = ns_hpfsmpl[0][i];\n r = ns_hpfsmpl[1][i];\n ns_hpfsmpl[0][i] = l + r;\n ns_hpfsmpl[1][i] = l - r;\n }\n }\n {\n var pf = ns_hpfsmpl[chn & 1];\n var pfPos = 0;\n for (i = 0; i < 9; i++) {\n var pfe = pfPos + 576 / 9;\n var p = 1.;\n for (; pfPos < pfe; pfPos++)\n if (p < Math.abs(pf[pfPos]))\n p = Math.abs(pf[pfPos]);\n\n gfc.nsPsy.last_en_subshort[chn][i] = en_subshort[i + 3] = p;\n en_short[1 + i / 3] += p;\n if (p > en_subshort[i + 3 - 2]) {\n assert(en_subshort[i + 3 - 2] > 0);\n p = p / en_subshort[i + 3 - 2];\n } else if (en_subshort[i + 3 - 2] > p * 10.0) {\n assert(p > 0);\n p = en_subshort[i + 3 - 2] / (p * 10.0);\n } else\n p = 0.0;\n attack_intensity[i + 3] = p;\n }\n }\n\n if (gfp.analysis) {\n var x = attack_intensity[0];\n for (i = 1; i < 12; i++)\n if (x < attack_intensity[i])\n x = attack_intensity[i];\n gfc.pinfo.ers[gr_out][chn] = gfc.pinfo.ers_save[chn];\n gfc.pinfo.ers_save[chn] = x;\n }\n\n /* compare energies between sub-shortblocks */\n attackThreshold = (chn == 3) ? gfc.nsPsy.attackthre_s\n : gfc.nsPsy.attackthre;\n for (i = 0; i < 12; i++)\n if (0 == ns_attacks[i / 3]\n && attack_intensity[i] > attackThreshold)\n ns_attacks[i / 3] = (i % 3) + 1;\n\n /*\n * should have energy change between short blocks, in order to avoid\n * periodic signals\n */\n for (i = 1; i < 4; i++) {\n var ratio;\n if (en_short[i - 1] > en_short[i]) {\n assert(en_short[i] > 0);\n ratio = en_short[i - 1] / en_short[i];\n } else {\n assert(en_short[i - 1] > 0);\n ratio = en_short[i] / en_short[i - 1];\n }\n if (ratio < 1.7) {\n ns_attacks[i] = 0;\n if (i == 1)\n ns_attacks[0] = 0;\n }\n }\n\n if (ns_attacks[0] != 0 && gfc.nsPsy.lastAttacks[chn] != 0)\n ns_attacks[0] = 0;\n\n if (gfc.nsPsy.lastAttacks[chn] == 3\n || (ns_attacks[0] + ns_attacks[1] + ns_attacks[2] + ns_attacks[3]) != 0) {\n ns_uselongblock = 0;\n\n if (ns_attacks[1] != 0 && ns_attacks[0] != 0)\n ns_attacks[1] = 0;\n if (ns_attacks[2] != 0 && ns_attacks[1] != 0)\n ns_attacks[2] = 0;\n if (ns_attacks[3] != 0 && ns_attacks[2] != 0)\n ns_attacks[3] = 0;\n }\n\n if (chn < 2) {\n uselongblock[chn] = ns_uselongblock;\n } else {\n if (ns_uselongblock == 0) {\n uselongblock[0] = uselongblock[1] = 0;\n }\n }\n\n /*\n * there is a one granule delay. Copy maskings computed last call\n * into masking_ratio to return to calling program.\n */\n energy[chn] = gfc.tot_ener[chn];\n\n /*********************************************************************\n * compute FFTs\n *********************************************************************/\n wsamp_s = wsamp_S;\n wsamp_l = wsamp_L;\n compute_ffts(gfp, fftenergy, fftenergy_s, wsamp_l, (chn & 1),\n wsamp_s, (chn & 1), gr_out, chn, buffer, bufPos);\n\n /*********************************************************************\n * Calculate the energy and the tonality of each partition.\n *********************************************************************/\n calc_energy(gfc, fftenergy, eb_l, max, avg);\n calc_mask_index_l(gfc, max, avg, mask_idx_l);\n /* compute masking thresholds for short blocks */\n for (sblock = 0; sblock < 3; sblock++) {\n var enn, thmm;\n compute_masking_s(gfp, fftenergy_s, eb_s, thr, chn, sblock);\n convert_partition2scalefac_s(gfc, eb_s, thr, chn, sblock);\n /**** short block pre-echo control ****/\n for (sb = 0; sb < Encoder.SBMAX_s; sb++) {\n thmm = gfc.thm[chn].s[sb][sblock];\n\n thmm *= NS_PREECHO_ATT0;\n if (ns_attacks[sblock] >= 2 || ns_attacks[sblock + 1] == 1) {\n var idx = (sblock != 0) ? sblock - 1 : 2;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT1 * pcfact);\n thmm = Math.min(thmm, p);\n }\n\n if (ns_attacks[sblock] == 1) {\n var idx = (sblock != 0) ? sblock - 1 : 2;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT2 * pcfact);\n thmm = Math.min(thmm, p);\n } else if ((sblock != 0 && ns_attacks[sblock - 1] == 3)\n || (sblock == 0 && gfc.nsPsy.lastAttacks[chn] == 3)) {\n var idx = (sblock != 2) ? sblock + 1 : 0;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT2 * pcfact);\n thmm = Math.min(thmm, p);\n }\n\n /* pulse like signal detection for fatboy.wav and so on */\n enn = en_subshort[sblock * 3 + 3]\n + en_subshort[sblock * 3 + 4]\n + en_subshort[sblock * 3 + 5];\n if (en_subshort[sblock * 3 + 5] * 6 < enn) {\n thmm *= 0.5;\n if (en_subshort[sblock * 3 + 4] * 6 < enn)\n thmm *= 0.5;\n }\n\n gfc.thm[chn].s[sb][sblock] = thmm;\n }\n }\n gfc.nsPsy.lastAttacks[chn] = ns_attacks[2];\n\n /*********************************************************************\n * convolve the partitioned energy and unpredictability with the\n * spreading function, s3_l[b][k]\n ********************************************************************/\n k = 0;\n {\n for (b = 0; b < gfc.npart_l; b++) {\n /*\n * convolve the partitioned energy with the spreading\n * function\n */\n var kk = gfc.s3ind[b][0];\n var eb2 = eb_l[kk] * tab[mask_idx_l[kk]];\n var ecb = gfc.s3_ll[k++] * eb2;\n while (++kk <= gfc.s3ind[b][1]) {\n eb2 = eb_l[kk] * tab[mask_idx_l[kk]];\n ecb = mask_add(ecb, gfc.s3_ll[k++] * eb2, kk, kk - b,\n gfc, 0);\n }\n ecb *= 0.158489319246111;\n /* pow(10,-0.8) */\n\n /**** long block pre-echo control ****/\n /**\n *
\n * dont use long block pre-echo control if previous granule was\n * a short block. This is to avoid the situation:\n * frame0: quiet (very low masking)\n * frame1: surge (triggers short blocks)\n * frame2: regular frame. looks like pre-echo when compared to\n * frame0, but all pre-echo was in frame1.\n *\n */\n /*\n * chn=0,1 L and R channels\n *\n * chn=2,3 S and M channels.\n */\n\n if (gfc.blocktype_old[chn & 1] == Encoder.SHORT_TYPE)\n thr[b] = ecb;\n else\n thr[b] = NS_INTERP(\n Math.min(ecb, Math.min(rpelev\n * gfc.nb_1[chn][b], rpelev2\n * gfc.nb_2[chn][b])), ecb, pcfact);\n\n gfc.nb_2[chn][b] = gfc.nb_1[chn][b];\n gfc.nb_1[chn][b] = ecb;\n }\n }\n for (; b <= Encoder.CBANDS; ++b) {\n eb_l[b] = 0;\n thr[b] = 0;\n }\n /* compute masking thresholds for long blocks */\n convert_partition2scalefac_l(gfc, eb_l, thr, chn);\n }\n /* end loop over chn */\n\n if (gfp.mode == MPEGMode.STEREO || gfp.mode == MPEGMode.JOINT_STEREO) {\n if (gfp.interChRatio > 0.0) {\n calc_interchannel_masking(gfp, gfp.interChRatio);\n }\n }\n\n if (gfp.mode == MPEGMode.JOINT_STEREO) {\n var msfix;\n msfix1(gfc);\n msfix = gfp.msfix;\n if (Math.abs(msfix) > 0.0)\n ns_msfix(gfc, msfix, gfp.ATHlower * gfc.ATH.adjust);\n }\n\n /***************************************************************\n * determine final block type\n ***************************************************************/\n block_type_set(gfp, uselongblock, blocktype_d, blocktype);\n\n /*********************************************************************\n * compute the value of PE to return ... no delay and advance\n *********************************************************************/\n for (chn = 0; chn < numchn; chn++) {\n var ppe;\n var ppePos = 0;\n var type;\n var mr;\n\n if (chn > 1) {\n ppe = percep_MS_entropy;\n ppePos = -2;\n type = Encoder.NORM_TYPE;\n if (blocktype_d[0] == Encoder.SHORT_TYPE\n || blocktype_d[1] == Encoder.SHORT_TYPE)\n type = Encoder.SHORT_TYPE;\n mr = masking_MS_ratio[gr_out][chn - 2];\n } else {\n ppe = percep_entropy;\n ppePos = 0;\n type = blocktype_d[chn];\n mr = masking_ratio[gr_out][chn];\n }\n\n if (type == Encoder.SHORT_TYPE)\n ppe[ppePos + chn] = pecalc_s(mr, gfc.masking_lower);\n else\n ppe[ppePos + chn] = pecalc_l(mr, gfc.masking_lower);\n\n if (gfp.analysis)\n gfc.pinfo.pe[gr_out][chn] = ppe[ppePos + chn];\n\n }\n return 0;\n }\n\n function vbrpsy_compute_fft_l(gfp, buffer, bufPos, chn, gr_out, fftenergy, wsamp_l, wsamp_lPos) {\n var gfc = gfp.internal_flags;\n if (chn < 2) {\n fft.fft_long(gfc, wsamp_l[wsamp_lPos], chn, buffer, bufPos);\n } else if (chn == 2) {\n /* FFT data for mid and side channel is derived from L & R */\n for (var j = Encoder.BLKSIZE - 1; j >= 0; --j) {\n var l = wsamp_l[wsamp_lPos + 0][j];\n var r = wsamp_l[wsamp_lPos + 1][j];\n wsamp_l[wsamp_lPos + 0][j] = (l + r) * Util.SQRT2 * 0.5;\n wsamp_l[wsamp_lPos + 1][j] = (l - r) * Util.SQRT2 * 0.5;\n }\n }\n\n /*********************************************************************\n * compute energies\n *********************************************************************/\n fftenergy[0] = NON_LINEAR_SCALE_ENERGY(wsamp_l[wsamp_lPos + 0][0]);\n fftenergy[0] *= fftenergy[0];\n\n for (var j = Encoder.BLKSIZE / 2 - 1; j >= 0; --j) {\n var re = wsamp_l[wsamp_lPos + 0][Encoder.BLKSIZE / 2 - j];\n var im = wsamp_l[wsamp_lPos + 0][Encoder.BLKSIZE / 2 + j];\n fftenergy[Encoder.BLKSIZE / 2 - j] = NON_LINEAR_SCALE_ENERGY((re\n * re + im * im) * 0.5);\n }\n /* total energy */\n {\n var totalenergy = 0.0;\n for (var j = 11; j < Encoder.HBLKSIZE; j++)\n totalenergy += fftenergy[j];\n\n gfc.tot_ener[chn] = totalenergy;\n }\n\n if (gfp.analysis) {\n for (var j = 0; j < Encoder.HBLKSIZE; j++) {\n gfc.pinfo.energy[gr_out][chn][j] = gfc.pinfo.energy_save[chn][j];\n gfc.pinfo.energy_save[chn][j] = fftenergy[j];\n }\n gfc.pinfo.pe[gr_out][chn] = gfc.pe[chn];\n }\n }\n\n function vbrpsy_compute_fft_s(gfp, buffer, bufPos, chn, sblock, fftenergy_s, wsamp_s, wsamp_sPos) {\n var gfc = gfp.internal_flags;\n\n if (sblock == 0 && chn < 2) {\n fft.fft_short(gfc, wsamp_s[wsamp_sPos], chn, buffer, bufPos);\n }\n if (chn == 2) {\n /* FFT data for mid and side channel is derived from L & R */\n for (var j = Encoder.BLKSIZE_s - 1; j >= 0; --j) {\n var l = wsamp_s[wsamp_sPos + 0][sblock][j];\n var r = wsamp_s[wsamp_sPos + 1][sblock][j];\n wsamp_s[wsamp_sPos + 0][sblock][j] = (l + r) * Util.SQRT2 * 0.5;\n wsamp_s[wsamp_sPos + 1][sblock][j] = (l - r) * Util.SQRT2 * 0.5;\n }\n }\n\n /*********************************************************************\n * compute energies\n *********************************************************************/\n fftenergy_s[sblock][0] = wsamp_s[wsamp_sPos + 0][sblock][0];\n fftenergy_s[sblock][0] *= fftenergy_s[sblock][0];\n for (var j = Encoder.BLKSIZE_s / 2 - 1; j >= 0; --j) {\n var re = wsamp_s[wsamp_sPos + 0][sblock][Encoder.BLKSIZE_s / 2 - j];\n var im = wsamp_s[wsamp_sPos + 0][sblock][Encoder.BLKSIZE_s / 2 + j];\n fftenergy_s[sblock][Encoder.BLKSIZE_s / 2 - j] = NON_LINEAR_SCALE_ENERGY((re\n * re + im * im) * 0.5);\n }\n }\n\n /**\n * compute loudness approximation (used for ATH auto-level adjustment)\n */\n function vbrpsy_compute_loudness_approximation_l(gfp, gr_out, chn, fftenergy) {\n var gfc = gfp.internal_flags;\n if (gfp.athaa_loudapprox == 2 && chn < 2) {\n // no loudness for mid/side ch\n gfc.loudness_sq[gr_out][chn] = gfc.loudness_sq_save[chn];\n gfc.loudness_sq_save[chn] = psycho_loudness_approx(fftenergy, gfc);\n }\n }\n\n var fircoef_ = [-8.65163e-18 * 2,\n -0.00851586 * 2, -6.74764e-18 * 2, 0.0209036 * 2,\n -3.36639e-17 * 2, -0.0438162 * 2, -1.54175e-17 * 2,\n 0.0931738 * 2, -5.52212e-17 * 2, -0.313819 * 2];\n\n /**\n * Apply HPF of fs/4 to the input signal. This is used for attack detection\n * / handling.\n */\n function vbrpsy_attack_detection(gfp, buffer, bufPos, gr_out, masking_ratio, masking_MS_ratio, energy, sub_short_factor, ns_attacks, uselongblock) {\n var ns_hpfsmpl = new_float_n([2, 576]);\n var gfc = gfp.internal_flags;\n var n_chn_out = gfc.channels_out;\n /* chn=2 and 3 = Mid and Side channels */\n var n_chn_psy = (gfp.mode == MPEGMode.JOINT_STEREO) ? 4 : n_chn_out;\n /* Don't copy the input buffer into a temporary buffer */\n /* unroll the loop 2 times */\n for (var chn = 0; chn < n_chn_out; chn++) {\n /* apply high pass filter of fs/4 */\n firbuf = buffer[chn];\n var firbufPos = bufPos + 576 - 350 - NSFIRLEN + 192;\n assert(fircoef_.length == ((NSFIRLEN - 1) / 2));\n for (var i = 0; i < 576; i++) {\n var sum1, sum2;\n sum1 = firbuf[firbufPos + i + 10];\n sum2 = 0.0;\n for (var j = 0; j < ((NSFIRLEN - 1) / 2) - 1; j += 2) {\n sum1 += fircoef_[j]\n * (firbuf[firbufPos + i + j] + firbuf[firbufPos + i\n + NSFIRLEN - j]);\n sum2 += fircoef_[j + 1]\n * (firbuf[firbufPos + i + j + 1] + firbuf[firbufPos\n + i + NSFIRLEN - j - 1]);\n }\n ns_hpfsmpl[chn][i] = sum1 + sum2;\n }\n masking_ratio[gr_out][chn].en.assign(gfc.en[chn]);\n masking_ratio[gr_out][chn].thm.assign(gfc.thm[chn]);\n if (n_chn_psy > 2) {\n /* MS maskings */\n /* percep_MS_entropy [chn-2] = gfc . pe [chn]; */\n masking_MS_ratio[gr_out][chn].en.assign(gfc.en[chn + 2]);\n masking_MS_ratio[gr_out][chn].thm.assign(gfc.thm[chn + 2]);\n }\n }\n for (var chn = 0; chn < n_chn_psy; chn++) {\n var attack_intensity = new_float(12);\n var en_subshort = new_float(12);\n var en_short = [0, 0, 0, 0];\n var pf = ns_hpfsmpl[chn & 1];\n var pfPos = 0;\n var attackThreshold = (chn == 3) ? gfc.nsPsy.attackthre_s\n : gfc.nsPsy.attackthre;\n var ns_uselongblock = 1;\n\n if (chn == 2) {\n for (var i = 0, j = 576; j > 0; ++i, --j) {\n var l = ns_hpfsmpl[0][i];\n var r = ns_hpfsmpl[1][i];\n ns_hpfsmpl[0][i] = l + r;\n ns_hpfsmpl[1][i] = l - r;\n }\n }\n /***************************************************************\n * determine the block type (window type)\n ***************************************************************/\n /* calculate energies of each sub-shortblocks */\n for (var i = 0; i < 3; i++) {\n en_subshort[i] = gfc.nsPsy.last_en_subshort[chn][i + 6];\n assert(gfc.nsPsy.last_en_subshort[chn][i + 4] > 0);\n attack_intensity[i] = en_subshort[i]\n / gfc.nsPsy.last_en_subshort[chn][i + 4];\n en_short[0] += en_subshort[i];\n }\n\n for (var i = 0; i < 9; i++) {\n var pfe = pfPos + 576 / 9;\n var p = 1.;\n for (; pfPos < pfe; pfPos++)\n if (p < Math.abs(pf[pfPos]))\n p = Math.abs(pf[pfPos]);\n\n gfc.nsPsy.last_en_subshort[chn][i] = en_subshort[i + 3] = p;\n en_short[1 + i / 3] += p;\n if (p > en_subshort[i + 3 - 2]) {\n assert(en_subshort[i + 3 - 2] > 0);\n p = p / en_subshort[i + 3 - 2];\n } else if (en_subshort[i + 3 - 2] > p * 10.0) {\n assert(p > 0);\n p = en_subshort[i + 3 - 2] / (p * 10.0);\n } else {\n p = 0.0;\n }\n attack_intensity[i + 3] = p;\n }\n /* pulse like signal detection for fatboy.wav and so on */\n for (var i = 0; i < 3; ++i) {\n var enn = en_subshort[i * 3 + 3]\n + en_subshort[i * 3 + 4] + en_subshort[i * 3 + 5];\n var factor = 1.;\n if (en_subshort[i * 3 + 5] * 6 < enn) {\n factor *= 0.5;\n if (en_subshort[i * 3 + 4] * 6 < enn) {\n factor *= 0.5;\n }\n }\n sub_short_factor[chn][i] = factor;\n }\n\n if (gfp.analysis) {\n var x = attack_intensity[0];\n for (var i = 1; i < 12; i++) {\n if (x < attack_intensity[i]) {\n x = attack_intensity[i];\n }\n }\n gfc.pinfo.ers[gr_out][chn] = gfc.pinfo.ers_save[chn];\n gfc.pinfo.ers_save[chn] = x;\n }\n\n /* compare energies between sub-shortblocks */\n for (var i = 0; i < 12; i++) {\n if (0 == ns_attacks[chn][i / 3]\n && attack_intensity[i] > attackThreshold) {\n ns_attacks[chn][i / 3] = (i % 3) + 1;\n }\n }\n\n /*\n * should have energy change between short blocks, in order to avoid\n * periodic signals\n */\n /* Good samples to show the effect are Trumpet test songs */\n /*\n * GB: tuned (1) to avoid too many short blocks for test sample\n * TRUMPET\n */\n /*\n * RH: tuned (2) to let enough short blocks through for test sample\n * FSOL and SNAPS\n */\n for (var i = 1; i < 4; i++) {\n var u = en_short[i - 1];\n var v = en_short[i];\n var m = Math.max(u, v);\n if (m < 40000) { /* (2) */\n if (u < 1.7 * v && v < 1.7 * u) { /* (1) */\n if (i == 1 && ns_attacks[chn][0] <= ns_attacks[chn][i]) {\n ns_attacks[chn][0] = 0;\n }\n ns_attacks[chn][i] = 0;\n }\n }\n }\n\n if (ns_attacks[chn][0] <= gfc.nsPsy.lastAttacks[chn]) {\n ns_attacks[chn][0] = 0;\n }\n\n if (gfc.nsPsy.lastAttacks[chn] == 3\n || (ns_attacks[chn][0] + ns_attacks[chn][1]\n + ns_attacks[chn][2] + ns_attacks[chn][3]) != 0) {\n ns_uselongblock = 0;\n\n if (ns_attacks[chn][1] != 0 && ns_attacks[chn][0] != 0) {\n ns_attacks[chn][1] = 0;\n }\n if (ns_attacks[chn][2] != 0 && ns_attacks[chn][1] != 0) {\n ns_attacks[chn][2] = 0;\n }\n if (ns_attacks[chn][3] != 0 && ns_attacks[chn][2] != 0) {\n ns_attacks[chn][3] = 0;\n }\n }\n if (chn < 2) {\n uselongblock[chn] = ns_uselongblock;\n } else {\n if (ns_uselongblock == 0) {\n uselongblock[0] = uselongblock[1] = 0;\n }\n }\n\n /*\n * there is a one granule delay. Copy maskings computed last call\n * into masking_ratio to return to calling program.\n */\n energy[chn] = gfc.tot_ener[chn];\n }\n }\n\n function vbrpsy_skip_masking_s(gfc, chn, sblock) {\n if (sblock == 0) {\n for (var b = 0; b < gfc.npart_s; b++) {\n gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b];\n gfc.nb_s1[chn][b] = 0;\n }\n }\n }\n\n function vbrpsy_skip_masking_l(gfc, chn) {\n for (var b = 0; b < gfc.npart_l; b++) {\n gfc.nb_2[chn][b] = gfc.nb_1[chn][b];\n gfc.nb_1[chn][b] = 0;\n }\n }\n\n function psyvbr_calc_mask_index_s(gfc, max, avg, mask_idx) {\n var last_tab_entry = tab.length - 1;\n var b = 0;\n var a = avg[b] + avg[b + 1];\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b];\n if (m < max[b + 1])\n m = max[b + 1];\n assert((gfc.numlines_s[b] + gfc.numlines_s[b + 1] - 1) > 0);\n a = 20.0 * (m * 2.0 - a)\n / (a * (gfc.numlines_s[b] + gfc.numlines_s[b + 1] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n\n for (b = 1; b < gfc.npart_s - 1; b++) {\n a = avg[b - 1] + avg[b] + avg[b + 1];\n assert(b + 1 < gfc.npart_s);\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b - 1];\n if (m < max[b])\n m = max[b];\n if (m < max[b + 1])\n m = max[b + 1];\n assert((gfc.numlines_s[b - 1] + gfc.numlines_s[b] + gfc.numlines_s[b + 1] - 1) > 0);\n a = 20.0\n * (m * 3.0 - a)\n / (a * (gfc.numlines_s[b - 1] + gfc.numlines_s[b]\n + gfc.numlines_s[b + 1] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n }\n assert(b > 0);\n assert(b == gfc.npart_s - 1);\n\n a = avg[b - 1] + avg[b];\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b - 1];\n if (m < max[b])\n m = max[b];\n assert((gfc.numlines_s[b - 1] + gfc.numlines_s[b] - 1) > 0);\n a = 20.0 * (m * 2.0 - a)\n / (a * (gfc.numlines_s[b - 1] + gfc.numlines_s[b] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n assert(b == (gfc.npart_s - 1));\n }\n\n function vbrpsy_compute_masking_s(gfp, fftenergy_s, eb, thr, chn, sblock) {\n var gfc = gfp.internal_flags;\n var max = new float[Encoder.CBANDS], avg = new_float(Encoder.CBANDS);\n var i, j, b;\n var mask_idx_s = new int[Encoder.CBANDS];\n\n for (b = j = 0; b < gfc.npart_s; ++b) {\n var ebb = 0, m = 0;\n var n = gfc.numlines_s[b];\n for (i = 0; i < n; ++i, ++j) {\n var el = fftenergy_s[sblock][j];\n ebb += el;\n if (m < el)\n m = el;\n }\n eb[b] = ebb;\n assert(ebb >= 0);\n max[b] = m;\n assert(n > 0);\n avg[b] = ebb / n;\n assert(avg[b] >= 0);\n }\n assert(b == gfc.npart_s);\n assert(j == 129);\n for (; b < Encoder.CBANDS; ++b) {\n max[b] = 0;\n avg[b] = 0;\n }\n psyvbr_calc_mask_index_s(gfc, max, avg, mask_idx_s);\n for (j = b = 0; b < gfc.npart_s; b++) {\n var kk = gfc.s3ind_s[b][0];\n var last = gfc.s3ind_s[b][1];\n var dd, dd_n;\n var x, ecb, avg_mask;\n dd = mask_idx_s[kk];\n dd_n = 1;\n ecb = gfc.s3_ss[j] * eb[kk] * tab[mask_idx_s[kk]];\n ++j;\n ++kk;\n while (kk <= last) {\n dd += mask_idx_s[kk];\n dd_n += 1;\n x = gfc.s3_ss[j] * eb[kk] * tab[mask_idx_s[kk]];\n ecb = vbrpsy_mask_add(ecb, x, kk - b);\n ++j;\n ++kk;\n }\n dd = (1 + 2 * dd) / (2 * dd_n);\n avg_mask = tab[dd] * 0.5;\n ecb *= avg_mask;\n thr[b] = ecb;\n gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b];\n gfc.nb_s1[chn][b] = ecb;\n {\n /*\n * if THR exceeds EB, the quantization routines will take the\n * difference from other bands. in case of strong tonal samples\n * (tonaltest.wav) this leads to heavy distortions. that's why\n * we limit THR here.\n */\n x = max[b];\n x *= gfc.minval_s[b];\n x *= avg_mask;\n if (thr[b] > x) {\n thr[b] = x;\n }\n }\n if (gfc.masking_lower > 1) {\n thr[b] *= gfc.masking_lower;\n }\n if (thr[b] > eb[b]) {\n thr[b] = eb[b];\n }\n if (gfc.masking_lower < 1) {\n thr[b] *= gfc.masking_lower;\n }\n\n assert(thr[b] >= 0);\n }\n for (; b < Encoder.CBANDS; ++b) {\n eb[b] = 0;\n thr[b] = 0;\n }\n }\n\n function vbrpsy_compute_masking_l(gfc, fftenergy, eb_l, thr, chn) {\n var max = new_float(Encoder.CBANDS), avg = new_float(Encoder.CBANDS);\n var mask_idx_l = new_int(Encoder.CBANDS + 2);\n var b;\n\n /*********************************************************************\n * Calculate the energy and the tonality of each partition.\n *********************************************************************/\n calc_energy(gfc, fftenergy, eb_l, max, avg);\n calc_mask_index_l(gfc, max, avg, mask_idx_l);\n\n /*********************************************************************\n * convolve the partitioned energy and unpredictability with the\n * spreading function, s3_l[b][k]\n ********************************************************************/\n var k = 0;\n for (b = 0; b < gfc.npart_l; b++) {\n var x, ecb, avg_mask, t;\n /* convolve the partitioned energy with the spreading function */\n var kk = gfc.s3ind[b][0];\n var last = gfc.s3ind[b][1];\n var dd = 0, dd_n = 0;\n dd = mask_idx_l[kk];\n dd_n += 1;\n ecb = gfc.s3_ll[k] * eb_l[kk] * tab[mask_idx_l[kk]];\n ++k;\n ++kk;\n while (kk <= last) {\n dd += mask_idx_l[kk];\n dd_n += 1;\n x = gfc.s3_ll[k] * eb_l[kk] * tab[mask_idx_l[kk]];\n t = vbrpsy_mask_add(ecb, x, kk - b);\n ecb = t;\n ++k;\n ++kk;\n }\n dd = (1 + 2 * dd) / (2 * dd_n);\n avg_mask = tab[dd] * 0.5;\n ecb *= avg_mask;\n\n /**** long block pre-echo control ****/\n /**\n *
\n * dont use long block pre-echo control if previous granule was\n * a short block. This is to avoid the situation:\n * frame0: quiet (very low masking)\n * frame1: surge (triggers short blocks)\n * frame2: regular frame. looks like pre-echo when compared to\n * frame0, but all pre-echo was in frame1.\n *\n */\n /*\n * chn=0,1 L and R channels chn=2,3 S and M channels.\n */\n if (gfc.blocktype_old[chn & 0x01] == Encoder.SHORT_TYPE) {\n var ecb_limit = rpelev * gfc.nb_1[chn][b];\n if (ecb_limit > 0) {\n thr[b] = Math.min(ecb, ecb_limit);\n } else {\n /**\n *
\n * Robert 071209:\n * Because we don't calculate long block psy when we know a granule\n * should be of short blocks, we don't have any clue how the granule\n * before would have looked like as a long block. So we have to guess\n * a little bit for this END_TYPE block.\n * Most of the time we get away with this sloppyness. (fingers crossed :)\n * The speed increase is worth it.\n *\n */\n thr[b] = Math.min(ecb, eb_l[b] * NS_PREECHO_ATT2);\n }\n } else {\n var ecb_limit_2 = rpelev2 * gfc.nb_2[chn][b];\n var ecb_limit_1 = rpelev * gfc.nb_1[chn][b];\n var ecb_limit;\n if (ecb_limit_2 <= 0) {\n ecb_limit_2 = ecb;\n }\n if (ecb_limit_1 <= 0) {\n ecb_limit_1 = ecb;\n }\n if (gfc.blocktype_old[chn & 0x01] == Encoder.NORM_TYPE) {\n ecb_limit = Math.min(ecb_limit_1, ecb_limit_2);\n } else {\n ecb_limit = ecb_limit_1;\n }\n thr[b] = Math.min(ecb, ecb_limit);\n }\n gfc.nb_2[chn][b] = gfc.nb_1[chn][b];\n gfc.nb_1[chn][b] = ecb;\n {\n /*\n * if THR exceeds EB, the quantization routines will take the\n * difference from other bands. in case of strong tonal samples\n * (tonaltest.wav) this leads to heavy distortions. that's why\n * we limit THR here.\n */\n x = max[b];\n x *= gfc.minval_l[b];\n x *= avg_mask;\n if (thr[b] > x) {\n thr[b] = x;\n }\n }\n if (gfc.masking_lower > 1) {\n thr[b] *= gfc.masking_lower;\n }\n if (thr[b] > eb_l[b]) {\n thr[b] = eb_l[b];\n }\n if (gfc.masking_lower < 1) {\n thr[b] *= gfc.masking_lower;\n }\n assert(thr[b] >= 0);\n }\n for (; b < Encoder.CBANDS; ++b) {\n eb_l[b] = 0;\n thr[b] = 0;\n }\n }\n\n function vbrpsy_compute_block_type(gfp, uselongblock) {\n var gfc = gfp.internal_flags;\n\n if (gfp.short_blocks == ShortBlock.short_block_coupled\n /* force both channels to use the same block type */\n /* this is necessary if the frame is to be encoded in ms_stereo. */\n /* But even without ms_stereo, FhG does this */\n && !(uselongblock[0] != 0 && uselongblock[1] != 0))\n uselongblock[0] = uselongblock[1] = 0;\n\n for (var chn = 0; chn < gfc.channels_out; chn++) {\n /* disable short blocks */\n if (gfp.short_blocks == ShortBlock.short_block_dispensed) {\n uselongblock[chn] = 1;\n }\n if (gfp.short_blocks == ShortBlock.short_block_forced) {\n uselongblock[chn] = 0;\n }\n }\n }\n\n function vbrpsy_apply_block_type(gfp, uselongblock, blocktype_d) {\n var gfc = gfp.internal_flags;\n\n /*\n * update the blocktype of the previous granule, since it depends on\n * what happend in this granule\n */\n for (var chn = 0; chn < gfc.channels_out; chn++) {\n var blocktype = Encoder.NORM_TYPE;\n /* disable short blocks */\n\n if (uselongblock[chn] != 0) {\n /* no attack : use long blocks */\n assert(gfc.blocktype_old[chn] != Encoder.START_TYPE);\n if (gfc.blocktype_old[chn] == Encoder.SHORT_TYPE)\n blocktype = Encoder.STOP_TYPE;\n } else {\n /* attack : use short blocks */\n blocktype = Encoder.SHORT_TYPE;\n if (gfc.blocktype_old[chn] == Encoder.NORM_TYPE) {\n gfc.blocktype_old[chn] = Encoder.START_TYPE;\n }\n if (gfc.blocktype_old[chn] == Encoder.STOP_TYPE)\n gfc.blocktype_old[chn] = Encoder.SHORT_TYPE;\n }\n\n blocktype_d[chn] = gfc.blocktype_old[chn];\n // value returned to calling program\n gfc.blocktype_old[chn] = blocktype;\n // save for next call to l3psy_anal\n }\n }\n\n /**\n * compute M/S thresholds from Johnston & Ferreira 1992 ICASSP paper\n */\n function vbrpsy_compute_MS_thresholds(eb, thr, cb_mld, ath_cb, athadjust, msfix, n) {\n var msfix2 = msfix * 2;\n var athlower = msfix > 0 ? Math.pow(10, athadjust) : 1;\n var rside, rmid;\n for (var b = 0; b < n; ++b) {\n var ebM = eb[2][b];\n var ebS = eb[3][b];\n var thmL = thr[0][b];\n var thmR = thr[1][b];\n var thmM = thr[2][b];\n var thmS = thr[3][b];\n\n /* use this fix if L & R masking differs by 2db or less */\n if (thmL <= 1.58 * thmR && thmR <= 1.58 * thmL) {\n var mld_m = cb_mld[b] * ebS;\n var mld_s = cb_mld[b] * ebM;\n rmid = Math.max(thmM, Math.min(thmS, mld_m));\n rside = Math.max(thmS, Math.min(thmM, mld_s));\n } else {\n rmid = thmM;\n rside = thmS;\n }\n if (msfix > 0) {\n /***************************************************************/\n /* Adjust M/S maskings if user set \"msfix\" */\n /***************************************************************/\n /* Naoki Shibata 2000 */\n var thmLR, thmMS;\n var ath = ath_cb[b] * athlower;\n thmLR = Math.min(Math.max(thmL, ath), Math.max(thmR, ath));\n thmM = Math.max(rmid, ath);\n thmS = Math.max(rside, ath);\n thmMS = thmM + thmS;\n if (thmMS > 0 && (thmLR * msfix2) < thmMS) {\n var f = thmLR * msfix2 / thmMS;\n thmM *= f;\n thmS *= f;\n assert(thmMS > 0);\n }\n rmid = Math.min(thmM, rmid);\n rside = Math.min(thmS, rside);\n }\n if (rmid > ebM) {\n rmid = ebM;\n }\n if (rside > ebS) {\n rside = ebS;\n }\n thr[2][b] = rmid;\n thr[3][b] = rside;\n }\n }\n\n this.L3psycho_anal_vbr = function (gfp, buffer, bufPos, gr_out, masking_ratio, masking_MS_ratio, percep_entropy, percep_MS_entropy, energy, blocktype_d) {\n var gfc = gfp.internal_flags;\n\n /* fft and energy calculation */\n var wsamp_l;\n var wsamp_s;\n var fftenergy = new_float(Encoder.HBLKSIZE);\n var fftenergy_s = new_float_n([3, Encoder.HBLKSIZE_s]);\n var wsamp_L = new_float_n([2, Encoder.BLKSIZE]);\n var wsamp_S = new_float_n([2, 3, Encoder.BLKSIZE_s]);\n var eb = new_float_n([4, Encoder.CBANDS]), thr = new_float_n([4, Encoder.CBANDS]);\n var sub_short_factor = new_float_n([4, 3]);\n var pcfact = 0.6;\n\n /* block type */\n var ns_attacks = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0],\n [0, 0, 0, 0]];\n var uselongblock = new_int(2);\n\n /* usual variables like loop indices, etc.. */\n\n /* chn=2 and 3 = Mid and Side channels */\n var n_chn_psy = (gfp.mode == MPEGMode.JOINT_STEREO) ? 4\n : gfc.channels_out;\n\n vbrpsy_attack_detection(gfp, buffer, bufPos, gr_out, masking_ratio,\n masking_MS_ratio, energy, sub_short_factor, ns_attacks,\n uselongblock);\n\n vbrpsy_compute_block_type(gfp, uselongblock);\n\n /* LONG BLOCK CASE */\n {\n for (var chn = 0; chn < n_chn_psy; chn++) {\n var ch01 = chn & 0x01;\n wsamp_l = wsamp_L;\n vbrpsy_compute_fft_l(gfp, buffer, bufPos, chn, gr_out,\n fftenergy, wsamp_l, ch01);\n\n vbrpsy_compute_loudness_approximation_l(gfp, gr_out, chn,\n fftenergy);\n\n if (uselongblock[ch01] != 0) {\n vbrpsy_compute_masking_l(gfc, fftenergy, eb[chn], thr[chn],\n chn);\n } else {\n vbrpsy_skip_masking_l(gfc, chn);\n }\n }\n if ((uselongblock[0] + uselongblock[1]) == 2) {\n /* M/S channel */\n if (gfp.mode == MPEGMode.JOINT_STEREO) {\n vbrpsy_compute_MS_thresholds(eb, thr, gfc.mld_cb_l,\n gfc.ATH.cb_l, gfp.ATHlower * gfc.ATH.adjust,\n gfp.msfix, gfc.npart_l);\n }\n }\n /* TODO: apply adaptive ATH masking here ?? */\n for (var chn = 0; chn < n_chn_psy; chn++) {\n var ch01 = chn & 0x01;\n if (uselongblock[ch01] != 0) {\n convert_partition2scalefac_l(gfc, eb[chn], thr[chn], chn);\n }\n }\n }\n\n /* SHORT BLOCKS CASE */\n {\n for (var sblock = 0; sblock < 3; sblock++) {\n for (var chn = 0; chn < n_chn_psy; ++chn) {\n var ch01 = chn & 0x01;\n\n if (uselongblock[ch01] != 0) {\n vbrpsy_skip_masking_s(gfc, chn, sblock);\n } else {\n /* compute masking thresholds for short blocks */\n wsamp_s = wsamp_S;\n vbrpsy_compute_fft_s(gfp, buffer, bufPos, chn, sblock,\n fftenergy_s, wsamp_s, ch01);\n vbrpsy_compute_masking_s(gfp, fftenergy_s, eb[chn],\n thr[chn], chn, sblock);\n }\n }\n if ((uselongblock[0] + uselongblock[1]) == 0) {\n /* M/S channel */\n if (gfp.mode == MPEGMode.JOINT_STEREO) {\n vbrpsy_compute_MS_thresholds(eb, thr, gfc.mld_cb_s,\n gfc.ATH.cb_s, gfp.ATHlower * gfc.ATH.adjust,\n gfp.msfix, gfc.npart_s);\n }\n /* L/R channel */\n }\n /* TODO: apply adaptive ATH masking here ?? */\n for (var chn = 0; chn < n_chn_psy; ++chn) {\n var ch01 = chn & 0x01;\n if (0 == uselongblock[ch01]) {\n convert_partition2scalefac_s(gfc, eb[chn], thr[chn],\n chn, sblock);\n }\n }\n }\n\n /**** short block pre-echo control ****/\n for (var chn = 0; chn < n_chn_psy; chn++) {\n var ch01 = chn & 0x01;\n\n if (uselongblock[ch01] != 0) {\n continue;\n }\n for (var sb = 0; sb < Encoder.SBMAX_s; sb++) {\n var new_thmm = new_float(3);\n for (var sblock = 0; sblock < 3; sblock++) {\n var thmm = gfc.thm[chn].s[sb][sblock];\n thmm *= NS_PREECHO_ATT0;\n\n if (ns_attacks[chn][sblock] >= 2\n || ns_attacks[chn][sblock + 1] == 1) {\n var idx = (sblock != 0) ? sblock - 1 : 2;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT1 * pcfact);\n thmm = Math.min(thmm, p);\n } else if (ns_attacks[chn][sblock] == 1) {\n var idx = (sblock != 0) ? sblock - 1 : 2;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT2 * pcfact);\n thmm = Math.min(thmm, p);\n } else if ((sblock != 0 && ns_attacks[chn][sblock - 1] == 3)\n || (sblock == 0 && gfc.nsPsy.lastAttacks[chn] == 3)) {\n var idx = (sblock != 2) ? sblock + 1 : 0;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT2 * pcfact);\n thmm = Math.min(thmm, p);\n }\n\n /* pulse like signal detection for fatboy.wav and so on */\n thmm *= sub_short_factor[chn][sblock];\n\n new_thmm[sblock] = thmm;\n }\n for (var sblock = 0; sblock < 3; sblock++) {\n gfc.thm[chn].s[sb][sblock] = new_thmm[sblock];\n }\n }\n }\n }\n for (var chn = 0; chn < n_chn_psy; chn++) {\n gfc.nsPsy.lastAttacks[chn] = ns_attacks[chn][2];\n }\n\n /***************************************************************\n * determine final block type\n ***************************************************************/\n vbrpsy_apply_block_type(gfp, uselongblock, blocktype_d);\n\n /*********************************************************************\n * compute the value of PE to return ... no delay and advance\n *********************************************************************/\n for (var chn = 0; chn < n_chn_psy; chn++) {\n var ppe;\n var ppePos;\n var type;\n var mr;\n\n if (chn > 1) {\n ppe = percep_MS_entropy;\n ppePos = -2;\n type = Encoder.NORM_TYPE;\n if (blocktype_d[0] == Encoder.SHORT_TYPE\n || blocktype_d[1] == Encoder.SHORT_TYPE)\n type = Encoder.SHORT_TYPE;\n mr = masking_MS_ratio[gr_out][chn - 2];\n } else {\n ppe = percep_entropy;\n ppePos = 0;\n type = blocktype_d[chn];\n mr = masking_ratio[gr_out][chn];\n }\n\n if (type == Encoder.SHORT_TYPE) {\n ppe[ppePos + chn] = pecalc_s(mr, gfc.masking_lower);\n } else {\n ppe[ppePos + chn] = pecalc_l(mr, gfc.masking_lower);\n }\n\n if (gfp.analysis) {\n gfc.pinfo.pe[gr_out][chn] = ppe[ppePos + chn];\n }\n }\n return 0;\n }\n\n function s3_func_x(bark, hf_slope) {\n var tempx = bark, tempy;\n\n if (tempx >= 0) {\n tempy = -tempx * 27;\n } else {\n tempy = tempx * hf_slope;\n }\n if (tempy <= -72.0) {\n return 0;\n }\n return Math.exp(tempy * LN_TO_LOG10);\n }\n\n function norm_s3_func_x(hf_slope) {\n var lim_a = 0, lim_b = 0;\n {\n var x = 0, l, h;\n for (x = 0; s3_func_x(x, hf_slope) > 1e-20; x -= 1)\n ;\n l = x;\n h = 0;\n while (Math.abs(h - l) > 1e-12) {\n x = (h + l) / 2;\n if (s3_func_x(x, hf_slope) > 0) {\n h = x;\n } else {\n l = x;\n }\n }\n lim_a = l;\n }\n {\n var x = 0, l, h;\n for (x = 0; s3_func_x(x, hf_slope) > 1e-20; x += 1)\n ;\n l = 0;\n h = x;\n while (Math.abs(h - l) > 1e-12) {\n x = (h + l) / 2;\n if (s3_func_x(x, hf_slope) > 0) {\n l = x;\n } else {\n h = x;\n }\n }\n lim_b = h;\n }\n {\n var sum = 0;\n var m = 1000;\n var i;\n for (i = 0; i <= m; ++i) {\n var x = lim_a + i * (lim_b - lim_a) / m;\n var y = s3_func_x(x, hf_slope);\n sum += y;\n }\n {\n var norm = (m + 1) / (sum * (lim_b - lim_a));\n /* printf( \"norm = %lf\\n\",norm); */\n return norm;\n }\n }\n }\n\n /**\n * The spreading function. Values returned in units of energy\n */\n function s3_func(bark) {\n var tempx, x, tempy, temp;\n tempx = bark;\n if (tempx >= 0)\n tempx *= 3;\n else\n tempx *= 1.5;\n\n if (tempx >= 0.5 && tempx <= 2.5) {\n temp = tempx - 0.5;\n x = 8.0 * (temp * temp - 2.0 * temp);\n } else\n x = 0.0;\n tempx += 0.474;\n tempy = 15.811389 + 7.5 * tempx - 17.5\n * Math.sqrt(1.0 + tempx * tempx);\n\n if (tempy <= -60.0)\n return 0.0;\n\n tempx = Math.exp((x + tempy) * LN_TO_LOG10);\n\n /**\n *
\n * Normalization. The spreading function should be normalized so that:\n * +inf\n * /\n * | s3 [ bark ] d(bark) = 1\n * /\n * -inf\n *\n */\n tempx /= .6609193;\n return tempx;\n }\n\n /**\n * see for example \"Zwicker: Psychoakustik, 1982; ISBN 3-540-11401-7\n */\n function freq2bark(freq) {\n /* input: freq in hz output: barks */\n if (freq < 0)\n freq = 0;\n freq = freq * 0.001;\n return 13.0 * Math.atan(.76 * freq) + 3.5\n * Math.atan(freq * freq / (7.5 * 7.5));\n }\n\n function init_numline(numlines, bo, bm, bval, bval_width, mld, bo_w, sfreq, blksize, scalepos, deltafreq, sbmax) {\n var b_frq = new_float(Encoder.CBANDS + 1);\n var sample_freq_frac = sfreq / (sbmax > 15 ? 2 * 576 : 2 * 192);\n var partition = new_int(Encoder.HBLKSIZE);\n var i;\n sfreq /= blksize;\n var j = 0;\n var ni = 0;\n /* compute numlines, the number of spectral lines in each partition band */\n /* each partition band should be about DELBARK wide. */\n for (i = 0; i < Encoder.CBANDS; i++) {\n var bark1;\n var j2;\n bark1 = freq2bark(sfreq * j);\n\n b_frq[i] = sfreq * j;\n\n for (j2 = j; freq2bark(sfreq * j2) - bark1 < DELBARK\n && j2 <= blksize / 2; j2++)\n ;\n\n numlines[i] = j2 - j;\n ni = i + 1;\n\n while (j < j2) {\n assert(j < Encoder.HBLKSIZE);\n partition[j++] = i;\n }\n if (j > blksize / 2) {\n j = blksize / 2;\n ++i;\n break;\n }\n }\n assert(i < Encoder.CBANDS);\n b_frq[i] = sfreq * j;\n\n for (var sfb = 0; sfb < sbmax; sfb++) {\n var i1, i2, start, end;\n var arg;\n start = scalepos[sfb];\n end = scalepos[sfb + 1];\n\n i1 = 0 | Math.floor(.5 + deltafreq * (start - .5));\n if (i1 < 0)\n i1 = 0;\n i2 = 0 | Math.floor(.5 + deltafreq * (end - .5));\n\n if (i2 > blksize / 2)\n i2 = blksize / 2;\n\n bm[sfb] = (partition[i1] + partition[i2]) / 2;\n bo[sfb] = partition[i2];\n var f_tmp = sample_freq_frac * end;\n /*\n * calculate how much of this band belongs to current scalefactor\n * band\n */\n bo_w[sfb] = (f_tmp - b_frq[bo[sfb]])\n / (b_frq[bo[sfb] + 1] - b_frq[bo[sfb]]);\n if (bo_w[sfb] < 0) {\n bo_w[sfb] = 0;\n } else {\n if (bo_w[sfb] > 1) {\n bo_w[sfb] = 1;\n }\n }\n /* setup stereo demasking thresholds */\n /* formula reverse enginerred from plot in paper */\n arg = freq2bark(sfreq * scalepos[sfb] * deltafreq);\n arg = ( Math.min(arg, 15.5) / 15.5);\n\n mld[sfb] = Math.pow(10.0,\n 1.25 * (1 - Math.cos(Math.PI * arg)) - 2.5);\n }\n\n /* compute bark values of each critical band */\n j = 0;\n for (var k = 0; k < ni; k++) {\n var w = numlines[k];\n var bark1, bark2;\n\n bark1 = freq2bark(sfreq * (j));\n bark2 = freq2bark(sfreq * (j + w - 1));\n bval[k] = .5 * (bark1 + bark2);\n\n bark1 = freq2bark(sfreq * (j - .5));\n bark2 = freq2bark(sfreq * (j + w - .5));\n bval_width[k] = bark2 - bark1;\n j += w;\n }\n\n return ni;\n }\n\n function init_s3_values(s3ind, npart, bval, bval_width, norm, use_old_s3) {\n var s3 = new_float_n([Encoder.CBANDS, Encoder.CBANDS]);\n /*\n * The s3 array is not linear in the bark scale.\n *\n * bval[x] should be used to get the bark value.\n */\n var j;\n var numberOfNoneZero = 0;\n\n /**\n *
\n * s[i][j], the value of the spreading function,\n * centered at band j (masker), for band i (maskee)\n *\n * i.e.: sum over j to spread into signal barkval=i\n * NOTE: i and j are used opposite as in the ISO docs\n *\n */\n if (use_old_s3) {\n for (var i = 0; i < npart; i++) {\n for (j = 0; j < npart; j++) {\n var v = s3_func(bval[i] - bval[j]) * bval_width[j];\n s3[i][j] = v * norm[i];\n }\n }\n } else {\n for (j = 0; j < npart; j++) {\n var hf_slope = 15 + Math.min(21 / bval[j], 12);\n var s3_x_norm = norm_s3_func_x(hf_slope);\n for (var i = 0; i < npart; i++) {\n var v = s3_x_norm\n * s3_func_x(bval[i] - bval[j], hf_slope)\n * bval_width[j];\n s3[i][j] = v * norm[i];\n }\n }\n }\n for (var i = 0; i < npart; i++) {\n for (j = 0; j < npart; j++) {\n if (s3[i][j] > 0.0)\n break;\n }\n s3ind[i][0] = j;\n\n for (j = npart - 1; j > 0; j--) {\n if (s3[i][j] > 0.0)\n break;\n }\n s3ind[i][1] = j;\n numberOfNoneZero += (s3ind[i][1] - s3ind[i][0] + 1);\n }\n\n var p = new_float(numberOfNoneZero);\n var k = 0;\n for (var i = 0; i < npart; i++)\n for (j = s3ind[i][0]; j <= s3ind[i][1]; j++)\n p[k++] = s3[i][j];\n\n return p;\n }\n\n function stereo_demask(f) {\n /* setup stereo demasking thresholds */\n /* formula reverse enginerred from plot in paper */\n var arg = freq2bark(f);\n arg = (Math.min(arg, 15.5) / 15.5);\n\n return Math.pow(10.0,\n 1.25 * (1 - Math.cos(Math.PI * arg)) - 2.5);\n }\n\n /**\n * NOTE: the bitrate reduction from the inter-channel masking effect is low\n * compared to the chance of getting annyoing artefacts. L3psycho_anal_vbr\n * does not use this feature. (Robert 071216)\n */\n this.psymodel_init = function (gfp) {\n var gfc = gfp.internal_flags;\n var i;\n var useOldS3 = true;\n var bvl_a = 13, bvl_b = 24;\n var snr_l_a = 0, snr_l_b = 0;\n var snr_s_a = -8.25, snr_s_b = -4.5;\n var bval = new_float(Encoder.CBANDS);\n var bval_width = new_float(Encoder.CBANDS);\n var norm = new_float(Encoder.CBANDS);\n var sfreq = gfp.out_samplerate;\n\n switch (gfp.experimentalZ) {\n default:\n case 0:\n useOldS3 = true;\n break;\n case 1:\n useOldS3 = (gfp.VBR == VbrMode.vbr_mtrh || gfp.VBR == VbrMode.vbr_mt) ? false\n : true;\n break;\n case 2:\n useOldS3 = false;\n break;\n case 3:\n bvl_a = 8;\n snr_l_a = -1.75;\n snr_l_b = -0.0125;\n snr_s_a = -8.25;\n snr_s_b = -2.25;\n break;\n }\n gfc.ms_ener_ratio_old = .25;\n gfc.blocktype_old[0] = gfc.blocktype_old[1] = Encoder.NORM_TYPE;\n // the vbr header is long blocks\n\n for (i = 0; i < 4; ++i) {\n for (var j = 0; j < Encoder.CBANDS; ++j) {\n gfc.nb_1[i][j] = 1e20;\n gfc.nb_2[i][j] = 1e20;\n gfc.nb_s1[i][j] = gfc.nb_s2[i][j] = 1.0;\n }\n for (var sb = 0; sb < Encoder.SBMAX_l; sb++) {\n gfc.en[i].l[sb] = 1e20;\n gfc.thm[i].l[sb] = 1e20;\n }\n for (var j = 0; j < 3; ++j) {\n for (var sb = 0; sb < Encoder.SBMAX_s; sb++) {\n gfc.en[i].s[sb][j] = 1e20;\n gfc.thm[i].s[sb][j] = 1e20;\n }\n gfc.nsPsy.lastAttacks[i] = 0;\n }\n for (var j = 0; j < 9; j++)\n gfc.nsPsy.last_en_subshort[i][j] = 10.;\n }\n\n /* init. for loudness approx. -jd 2001 mar 27 */\n gfc.loudness_sq_save[0] = gfc.loudness_sq_save[1] = 0.0;\n\n /*************************************************************************\n * now compute the psychoacoustic model specific constants\n ************************************************************************/\n /* compute numlines, bo, bm, bval, bval_width, mld */\n\n gfc.npart_l = init_numline(gfc.numlines_l, gfc.bo_l, gfc.bm_l, bval,\n bval_width, gfc.mld_l, gfc.PSY.bo_l_weight, sfreq,\n Encoder.BLKSIZE, gfc.scalefac_band.l, Encoder.BLKSIZE\n / (2.0 * 576), Encoder.SBMAX_l);\n assert(gfc.npart_l < Encoder.CBANDS);\n /* compute the spreading function */\n for (i = 0; i < gfc.npart_l; i++) {\n var snr = snr_l_a;\n if (bval[i] >= bvl_a) {\n snr = snr_l_b * (bval[i] - bvl_a) / (bvl_b - bvl_a) + snr_l_a\n * (bvl_b - bval[i]) / (bvl_b - bvl_a);\n }\n norm[i] = Math.pow(10.0, snr / 10.0);\n if (gfc.numlines_l[i] > 0) {\n gfc.rnumlines_l[i] = 1.0 / gfc.numlines_l[i];\n } else {\n gfc.rnumlines_l[i] = 0;\n }\n }\n gfc.s3_ll = init_s3_values(gfc.s3ind, gfc.npart_l, bval, bval_width,\n norm, useOldS3);\n\n /* compute long block specific values, ATH and MINVAL */\n var j = 0;\n for (i = 0; i < gfc.npart_l; i++) {\n var x;\n\n /* ATH */\n x = Float.MAX_VALUE;\n for (var k = 0; k < gfc.numlines_l[i]; k++, j++) {\n var freq = sfreq * j / (1000.0 * Encoder.BLKSIZE);\n var level;\n /*\n * ATH below 100 Hz constant, not further climbing\n */\n level = this.ATHformula(freq * 1000, gfp) - 20;\n // scale to FFT units; returned value is in dB\n level = Math.pow(10., 0.1 * level);\n // convert from dB . energy\n level *= gfc.numlines_l[i];\n if (x > level)\n x = level;\n }\n gfc.ATH.cb_l[i] = x;\n\n /*\n * MINVAL. For low freq, the strength of the masking is limited by\n * minval this is an ISO MPEG1 thing, dont know if it is really\n * needed\n */\n /*\n * FIXME: it does work to reduce low-freq problems in S53-Wind-Sax\n * and lead-voice samples, but introduces some 3 kbps bit bloat too.\n * TODO: Further refinement of the shape of this hack.\n */\n x = -20 + bval[i] * 20 / 10;\n if (x > 6) {\n x = 100;\n }\n if (x < -15) {\n x = -15;\n }\n x -= 8.;\n gfc.minval_l[i] = (Math.pow(10.0, x / 10.) * gfc.numlines_l[i]);\n }\n\n /************************************************************************\n * do the same things for short blocks\n ************************************************************************/\n gfc.npart_s = init_numline(gfc.numlines_s, gfc.bo_s, gfc.bm_s, bval,\n bval_width, gfc.mld_s, gfc.PSY.bo_s_weight, sfreq,\n Encoder.BLKSIZE_s, gfc.scalefac_band.s, Encoder.BLKSIZE_s\n / (2.0 * 192), Encoder.SBMAX_s);\n assert(gfc.npart_s < Encoder.CBANDS);\n\n /* SNR formula. short block is normalized by SNR. is it still right ? */\n j = 0;\n for (i = 0; i < gfc.npart_s; i++) {\n var x;\n var snr = snr_s_a;\n if (bval[i] >= bvl_a) {\n snr = snr_s_b * (bval[i] - bvl_a) / (bvl_b - bvl_a) + snr_s_a\n * (bvl_b - bval[i]) / (bvl_b - bvl_a);\n }\n norm[i] = Math.pow(10.0, snr / 10.0);\n\n /* ATH */\n x = Float.MAX_VALUE;\n for (var k = 0; k < gfc.numlines_s[i]; k++, j++) {\n var freq = sfreq * j / (1000.0 * Encoder.BLKSIZE_s);\n var level;\n /* freq = Min(.1,freq); */\n /*\n * ATH below 100 Hz constant, not\n * further climbing\n */\n level = this.ATHformula(freq * 1000, gfp) - 20;\n // scale to FFT units; returned value is in dB\n level = Math.pow(10., 0.1 * level);\n // convert from dB . energy\n level *= gfc.numlines_s[i];\n if (x > level)\n x = level;\n }\n gfc.ATH.cb_s[i] = x;\n\n /*\n * MINVAL. For low freq, the strength of the masking is limited by\n * minval this is an ISO MPEG1 thing, dont know if it is really\n * needed\n */\n x = (-7.0 + bval[i] * 7.0 / 12.0);\n if (bval[i] > 12) {\n x *= 1 + Math.log(1 + x) * 3.1;\n }\n if (bval[i] < 12) {\n x *= 1 + Math.log(1 - x) * 2.3;\n }\n if (x < -15) {\n x = -15;\n }\n x -= 8;\n gfc.minval_s[i] = Math.pow(10.0, x / 10)\n * gfc.numlines_s[i];\n }\n\n gfc.s3_ss = init_s3_values(gfc.s3ind_s, gfc.npart_s, bval, bval_width,\n norm, useOldS3);\n\n init_mask_add_max_values();\n fft.init_fft(gfc);\n\n /* setup temporal masking */\n gfc.decay = Math.exp(-1.0 * LOG10\n / (temporalmask_sustain_sec * sfreq / 192.0));\n\n {\n var msfix;\n msfix = NS_MSFIX;\n if ((gfp.exp_nspsytune & 2) != 0)\n msfix = 1.0;\n if (Math.abs(gfp.msfix) > 0.0)\n msfix = gfp.msfix;\n gfp.msfix = msfix;\n\n /*\n * spread only from npart_l bands. Normally, we use the spreading\n * function to convolve from npart_l down to npart_l bands\n */\n for (var b = 0; b < gfc.npart_l; b++)\n if (gfc.s3ind[b][1] > gfc.npart_l - 1)\n gfc.s3ind[b][1] = gfc.npart_l - 1;\n }\n\n /*\n * prepare for ATH auto adjustment: we want to decrease the ATH by 12 dB\n * per second\n */\n var frame_duration = (576. * gfc.mode_gr / sfreq);\n gfc.ATH.decay = Math.pow(10., -12. / 10. * frame_duration);\n gfc.ATH.adjust = 0.01;\n /* minimum, for leading low loudness */\n gfc.ATH.adjustLimit = 1.0;\n /* on lead, allow adjust up to maximum */\n\n assert(gfc.bo_l[Encoder.SBMAX_l - 1] <= gfc.npart_l);\n assert(gfc.bo_s[Encoder.SBMAX_s - 1] <= gfc.npart_s);\n\n if (gfp.ATHtype != -1) {\n /* compute equal loudness weights (eql_w) */\n var freq;\n var freq_inc = gfp.out_samplerate\n / (Encoder.BLKSIZE);\n var eql_balance = 0.0;\n freq = 0.0;\n for (i = 0; i < Encoder.BLKSIZE / 2; ++i) {\n /* convert ATH dB to relative power (not dB) */\n /* to determine eql_w */\n freq += freq_inc;\n gfc.ATH.eql_w[i] = 1. / Math.pow(10, this.ATHformula(freq, gfp) / 10);\n eql_balance += gfc.ATH.eql_w[i];\n }\n eql_balance = 1.0 / eql_balance;\n for (i = Encoder.BLKSIZE / 2; --i >= 0;) { /* scale weights */\n gfc.ATH.eql_w[i] *= eql_balance;\n }\n }\n {\n for (var b = j = 0; b < gfc.npart_s; ++b) {\n for (i = 0; i < gfc.numlines_s[b]; ++i) {\n ++j;\n }\n }\n assert(j == 129);\n for (var b = j = 0; b < gfc.npart_l; ++b) {\n for (i = 0; i < gfc.numlines_l[b]; ++i) {\n ++j;\n }\n }\n assert(j == 513);\n }\n j = 0;\n for (i = 0; i < gfc.npart_l; i++) {\n var freq = sfreq * (j + gfc.numlines_l[i] / 2) / (1.0 * Encoder.BLKSIZE);\n gfc.mld_cb_l[i] = stereo_demask(freq);\n j += gfc.numlines_l[i];\n }\n for (; i < Encoder.CBANDS; ++i) {\n gfc.mld_cb_l[i] = 1;\n }\n j = 0;\n for (i = 0; i < gfc.npart_s; i++) {\n var freq = sfreq * (j + gfc.numlines_s[i] / 2) / (1.0 * Encoder.BLKSIZE_s);\n gfc.mld_cb_s[i] = stereo_demask(freq);\n j += gfc.numlines_s[i];\n }\n for (; i < Encoder.CBANDS; ++i) {\n gfc.mld_cb_s[i] = 1;\n }\n return 0;\n }\n\n /**\n * Those ATH formulas are returning their minimum value for input = -1\n */\n function ATHformula_GB(f, value) {\n /**\n *
\n * from Painter & Spanias\n * modified by Gabriel Bouvigne to better fit the reality\n * ath = 3.640 * pow(f,-0.8)\n * - 6.800 * exp(-0.6*pow(f-3.4,2.0))\n * + 6.000 * exp(-0.15*pow(f-8.7,2.0))\n * + 0.6* 0.001 * pow(f,4.0);\n *\n *\n * In the past LAME was using the Painter &Spanias formula.\n * But we had some recurrent problems with HF content.\n * We measured real ATH values, and found the older formula\n * to be inaccurate in the higher part. So we made this new\n * formula and this solved most of HF problematic test cases.\n * The tradeoff is that in VBR mode it increases a lot the\n * bitrate.\n *\n */\n\n /*\n * This curve can be adjusted according to the VBR scale: it adjusts\n * from something close to Painter & Spanias on V9 up to Bouvigne's\n * formula for V0. This way the VBR bitrate is more balanced according\n * to the -V value.\n */\n\n // the following Hack allows to ask for the lowest value\n if (f < -.3)\n f = 3410;\n\n // convert to khz\n f /= 1000;\n f = Math.max(0.1, f);\n var ath = 3.640 * Math.pow(f, -0.8) - 6.800\n * Math.exp(-0.6 * Math.pow(f - 3.4, 2.0)) + 6.000\n * Math.exp(-0.15 * Math.pow(f - 8.7, 2.0))\n + (0.6 + 0.04 * value) * 0.001 * Math.pow(f, 4.0);\n return ath;\n }\n\n this.ATHformula = function (f, gfp) {\n var ath;\n switch (gfp.ATHtype) {\n case 0:\n ath = ATHformula_GB(f, 9);\n break;\n case 1:\n // over sensitive, should probably be removed\n ath = ATHformula_GB(f, -1);\n break;\n case 2:\n ath = ATHformula_GB(f, 0);\n break;\n case 3:\n // modification of GB formula by Roel\n ath = ATHformula_GB(f, 1) + 6;\n break;\n case 4:\n ath = ATHformula_GB(f, gfp.ATHcurve);\n break;\n default:\n ath = ATHformula_GB(f, 0);\n break;\n }\n return ath;\n }\n\n}\n\nmodule.exports = PsyModel;\n","//package mp3;\n\n/* MPEG modes */\nfunction MPEGMode(ordinal) {\n var _ordinal = ordinal;\n this.ordinal = function () {\n return _ordinal;\n }\n}\n\nMPEGMode.STEREO = new MPEGMode(0);\nMPEGMode.JOINT_STEREO = new MPEGMode(1);\nMPEGMode.DUAL_CHANNEL = new MPEGMode(2);\nMPEGMode.MONO = new MPEGMode(3);\nMPEGMode.NOT_SET = new MPEGMode(4);\n\nmodule.exports = MPEGMode;\n","var MPEGMode = require('./MPEGMode.js');\n\nfunction LameGlobalFlags() {\n\n this.class_id = 0;\n\n /* input description */\n\n /**\n * number of samples. default=-1\n */\n this.num_samples = 0;\n /**\n * input number of channels. default=2\n */\n this.num_channels = 0;\n /**\n * input_samp_rate in Hz. default=44.1 kHz\n */\n this.in_samplerate = 0;\n /**\n * output_samp_rate. default: LAME picks best value at least not used for\n * MP3 decoding: Remember 44.1 kHz MP3s and AC97\n */\n this.out_samplerate = 0;\n /**\n * scale input by this amount before encoding at least not used for MP3\n * decoding\n */\n this.scale = 0.;\n /**\n * scale input of channel 0 (left) by this amount before encoding\n */\n this.scale_left = 0.;\n /**\n * scale input of channel 1 (right) by this amount before encoding\n */\n this.scale_right = 0.;\n\n /* general control params */\n /**\n * collect data for a MP3 frame analyzer?\n */\n this.analysis = false;\n /**\n * add Xing VBR tag?\n */\n this.bWriteVbrTag = false;\n\n /**\n * use lame/mpglib to convert mp3 to wav\n */\n this.decode_only = false;\n /**\n * quality setting 0=best, 9=worst default=5\n */\n this.quality = 0;\n /**\n * see enum default = LAME picks best value\n */\n this.mode = MPEGMode.STEREO;\n /**\n * force M/S mode. requires mode=1\n */\n this.force_ms = false;\n /**\n * use free format? default=0\n */\n this.free_format = false;\n /**\n * find the RG value? default=0\n */\n this.findReplayGain = false;\n /**\n * decode on the fly? default=0\n */\n this.decode_on_the_fly = false;\n /**\n * 1 (default) writes ID3 tags, 0 not\n */\n this.write_id3tag_automatic = false;\n\n /*\n * set either brate>0 or compression_ratio>0, LAME will compute the value of\n * the variable not set. Default is compression_ratio = 11.025\n */\n /**\n * bitrate\n */\n this.brate = 0;\n /**\n * sizeof(wav file)/sizeof(mp3 file)\n */\n this.compression_ratio = 0.;\n\n /* frame params */\n /**\n * mark as copyright. default=0\n */\n this.copyright = 0;\n /**\n * mark as original. default=1\n */\n this.original = 0;\n /**\n * the MP3 'private extension' bit. Meaningless\n */\n this.extension = 0;\n /**\n * Input PCM is emphased PCM (for instance from one of the rarely emphased\n * CDs), it is STRONGLY not recommended to use this, because psycho does not\n * take it into account, and last but not least many decoders don't care\n * about these bits\n */\n this.emphasis = 0;\n /**\n * use 2 bytes per frame for a CRC checksum. default=0\n */\n this.error_protection = 0;\n /**\n * enforce ISO spec as much as possible\n */\n this.strict_ISO = false;\n\n /**\n * use bit reservoir?\n */\n this.disable_reservoir = false;\n\n /* quantization/noise shaping */\n this.quant_comp = 0;\n this.quant_comp_short = 0;\n this.experimentalY = false;\n this.experimentalZ = 0;\n this.exp_nspsytune = 0;\n\n this.preset = 0;\n\n /* VBR control */\n this.VBR = null;\n /**\n * Range [0,...,1[\n */\n this.VBR_q_frac = 0.;\n /**\n * Range [0,...,9]\n */\n this.VBR_q = 0;\n this.VBR_mean_bitrate_kbps = 0;\n this.VBR_min_bitrate_kbps = 0;\n this.VBR_max_bitrate_kbps = 0;\n /**\n * strictly enforce VBR_min_bitrate normaly, it will be violated for analog\n * silence\n */\n this.VBR_hard_min = 0;\n\n /* resampling and filtering */\n\n /**\n * freq in Hz. 0=lame choses. -1=no filter\n */\n this.lowpassfreq = 0;\n /**\n * freq in Hz. 0=lame choses. -1=no filter\n */\n this.highpassfreq = 0;\n /**\n * freq width of filter, in Hz (default=15%)\n */\n this.lowpasswidth = 0;\n /**\n * freq width of filter, in Hz (default=15%)\n */\n this.highpasswidth = 0;\n\n /*\n * psycho acoustics and other arguments which you should not change unless\n * you know what you are doing\n */\n\n this.maskingadjust = 0.;\n this.maskingadjust_short = 0.;\n /**\n * only use ATH\n */\n this.ATHonly = false;\n /**\n * only use ATH for short blocks\n */\n this.ATHshort = false;\n /**\n * disable ATH\n */\n this.noATH = false;\n /**\n * select ATH formula\n */\n this.ATHtype = 0;\n /**\n * change ATH formula 4 shape\n */\n this.ATHcurve = 0.;\n /**\n * lower ATH by this many db\n */\n this.ATHlower = 0.;\n /**\n * select ATH auto-adjust scheme\n */\n this.athaa_type = 0;\n /**\n * select ATH auto-adjust loudness calc\n */\n this.athaa_loudapprox = 0;\n /**\n * dB, tune active region of auto-level\n */\n this.athaa_sensitivity = 0.;\n this.short_blocks = null;\n /**\n * use temporal masking effect\n */\n this.useTemporal = false;\n this.interChRatio = 0.;\n /**\n * Naoki's adjustment of Mid/Side maskings\n */\n this.msfix = 0.;\n\n /**\n * 0 off, 1 on\n */\n this.tune = false;\n /**\n * used to pass values for debugging and stuff\n */\n this.tune_value_a = 0.;\n\n /************************************************************************/\n /* internal variables, do not set... */\n /* provided because they may be of use to calling application */\n /************************************************************************/\n\n /**\n * 0=MPEG-2/2.5 1=MPEG-1\n */\n this.version = 0;\n this.encoder_delay = 0;\n /**\n * number of samples of padding appended to input\n */\n this.encoder_padding = 0;\n this.framesize = 0;\n /**\n * number of frames encoded\n */\n this.frameNum = 0;\n /**\n * is this struct owned by calling program or lame?\n */\n this.lame_allocated_gfp = 0;\n /**************************************************************************/\n /* more internal variables are stored in this structure: */\n /**************************************************************************/\n this.internal_flags = null;\n}\n\nmodule.exports = LameGlobalFlags;\n","var Encoder = require('./Encoder.js');\n\nvar L3Side = {};\n\n\n\t/**\n\t * max scalefactor band, max(SBMAX_l, SBMAX_s*3, (SBMAX_s-3)*3+8)\n\t */\nL3Side.SFBMAX = (Encoder.SBMAX_s * 3);\n\nmodule.exports = L3Side;\n","//package mp3;\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar L3Side = require('./L3Side.js');\n\nfunction GrInfo() {\n //float xr[] = new float[576];\n this.xr = new_float(576);\n //int l3_enc[] = new int[576];\n this.l3_enc = new_int(576);\n //int scalefac[] = new int[L3Side.SFBMAX];\n this.scalefac = new_int(L3Side.SFBMAX);\n this.xrpow_max = 0.;\n\n this.part2_3_length = 0;\n this.big_values = 0;\n this.count1 = 0;\n this.global_gain = 0;\n this.scalefac_compress = 0;\n this.block_type = 0;\n this.mixed_block_flag = 0;\n this.table_select = new_int(3);\n this.subblock_gain = new_int(3 + 1);\n this.region0_count = 0;\n this.region1_count = 0;\n this.preflag = 0;\n this.scalefac_scale = 0;\n this.count1table_select = 0;\n\n this.part2_length = 0;\n this.sfb_lmax = 0;\n this.sfb_smin = 0;\n this.psy_lmax = 0;\n this.sfbmax = 0;\n this.psymax = 0;\n this.sfbdivide = 0;\n this.width = new_int(L3Side.SFBMAX);\n this.window = new_int(L3Side.SFBMAX);\n this.count1bits = 0;\n /**\n * added for LSF\n */\n this.sfb_partition_table = null;\n this.slen = new_int(4);\n\n this.max_nonzero_coeff = 0;\n\n var self = this;\n function clone_int(array) {\n return new Int32Array(array);\n }\n function clone_float(array) {\n return new Float32Array(array);\n }\n this.assign = function (other) {\n self.xr = clone_float(other.xr); //.slice(0); //clone();\n self.l3_enc = clone_int(other.l3_enc); //.slice(0); //clone();\n self.scalefac = clone_int(other.scalefac);//.slice(0); //clone();\n self.xrpow_max = other.xrpow_max;\n\n self.part2_3_length = other.part2_3_length;\n self.big_values = other.big_values;\n self.count1 = other.count1;\n self.global_gain = other.global_gain;\n self.scalefac_compress = other.scalefac_compress;\n self.block_type = other.block_type;\n self.mixed_block_flag = other.mixed_block_flag;\n self.table_select = clone_int(other.table_select);//.slice(0); //clone();\n self.subblock_gain = clone_int(other.subblock_gain); //.slice(0); //.clone();\n self.region0_count = other.region0_count;\n self.region1_count = other.region1_count;\n self.preflag = other.preflag;\n self.scalefac_scale = other.scalefac_scale;\n self.count1table_select = other.count1table_select;\n\n self.part2_length = other.part2_length;\n self.sfb_lmax = other.sfb_lmax;\n self.sfb_smin = other.sfb_smin;\n self.psy_lmax = other.psy_lmax;\n self.sfbmax = other.sfbmax;\n self.psymax = other.psymax;\n self.sfbdivide = other.sfbdivide;\n self.width = clone_int(other.width); //.slice(0); //.clone();\n self.window = clone_int(other.window); //.slice(0); //.clone();\n self.count1bits = other.count1bits;\n\n self.sfb_partition_table = other.sfb_partition_table.slice(0); //.clone();\n self.slen = clone_int(other.slen); //.slice(0); //.clone();\n self.max_nonzero_coeff = other.max_nonzero_coeff;\n }\n}\n\nmodule.exports = GrInfo;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar GrInfo = require('./GrInfo.js');\n\nfunction IIISideInfo() {\n this.tt = [[null, null], [null, null]];\n this.main_data_begin = 0;\n this.private_bits = 0;\n this.resvDrain_pre = 0;\n this.resvDrain_post = 0;\n this.scfsi = [new_int(4), new_int(4)];\n\n for (var gr = 0; gr < 2; gr++) {\n for (var ch = 0; ch < 2; ch++) {\n this.tt[gr][ch] = new GrInfo();\n }\n }\n}\n\nmodule.exports = IIISideInfo;\n","//package mp3;\n\n/**\n * Layer III side information.\n *\n * @author Ken\n *\n */\n\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\n\nfunction ScaleFac(arrL, arrS, arr21, arr12) {\n\n this.l = new_int(1 + Encoder.SBMAX_l);\n this.s = new_int(1 + Encoder.SBMAX_s);\n this.psfb21 = new_int(1 + Encoder.PSFB21);\n this.psfb12 = new_int(1 + Encoder.PSFB12);\n var l = this.l;\n var s = this.s;\n\n if (arguments.length == 4) {\n //public ScaleFac(final int[] arrL, final int[] arrS, final int[] arr21,\n // final int[] arr12) {\n this.arrL = arguments[0];\n this.arrS = arguments[1];\n this.arr21 = arguments[2];\n this.arr12 = arguments[3];\n\n System.arraycopy(this.arrL, 0, l, 0, Math.min(this.arrL.length, this.l.length));\n System.arraycopy(this.arrS, 0, s, 0, Math.min(this.arrS.length, this.s.length));\n System.arraycopy(this.arr21, 0, this.psfb21, 0, Math.min(this.arr21.length, this.psfb21.length));\n System.arraycopy(this.arr12, 0, this.psfb12, 0, Math.min(this.arr12.length, this.psfb12.length));\n }\n}\n\nmodule.exports = ScaleFac;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\n\n//package mp3;\n\n/**\n * Variables used for --nspsytune\n *\n * @author Ken\n *\n */\nfunction NsPsy() {\n this.last_en_subshort = new_float_n([4, 9]);\n this.lastAttacks = new_int(4);\n this.pefirbuf = new_float(19);\n this.longfact = new_float(Encoder.SBMAX_l);\n this.shortfact = new_float(Encoder.SBMAX_s);\n\n /**\n * short block tuning\n */\n this.attackthre = 0.;\n this.attackthre_s = 0.;\n}\n\nmodule.exports = NsPsy;\n","//package mp3;\n\nfunction VBRSeekInfo() {\n /**\n * What we have seen so far.\n */\n this.sum = 0;\n /**\n * How many frames we have seen in this chunk.\n */\n this.seen = 0;\n /**\n * How many frames we want to collect into one chunk.\n */\n this.want = 0;\n /**\n * Actual position in our bag.\n */\n this.pos = 0;\n /**\n * Size of our bag.\n */\n this.size = 0;\n /**\n * Pointer to our bag.\n */\n this.bag = null;\n this.nVbrNumFrames = 0;\n this.nBytesWritten = 0;\n /* VBR tag data */\n this.TotalFrameSize = 0;\n}\n\nmodule.exports = VBRSeekInfo;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar IIISideInfo = require('./IIISideInfo.js');\nvar ScaleFac = require('./ScaleFac.js');\nvar NsPsy = require('./NsPsy.js');\nvar VBRSeekInfo = require('./VBRSeekInfo.js');\nvar III_psy_xmin = require('./III_psy_xmin.js');\nvar Encoder = require('./Encoder.js');\nvar L3Side = require('./L3Side.js');\n\n\nLameInternalFlags.MFSIZE = (3 * 1152 + Encoder.ENCDELAY - Encoder.MDCTDELAY);\nLameInternalFlags.MAX_HEADER_BUF = 256;\nLameInternalFlags.MAX_BITS_PER_CHANNEL = 4095;\nLameInternalFlags.MAX_BITS_PER_GRANULE = 7680;\nLameInternalFlags.BPC = 320;\n\nfunction LameInternalFlags() {\n var MAX_HEADER_LEN = 40;\n\n\n /********************************************************************\n * internal variables NOT set by calling program, and should not be *\n * modified by the calling program *\n ********************************************************************/\n\n /**\n * Some remarks to the Class_ID field: The Class ID is an Identifier for a\n * pointer to this struct. It is very unlikely that a pointer to\n * lame_global_flags has the same 32 bits in it's structure (large and other\n * special properties, for instance prime).\n *\n * To test that the structure is right and initialized, use: if ( gfc .\n * Class_ID == LAME_ID ) ... Other remark: If you set a flag to 0 for uninit\n * data and 1 for init data, the right test should be \"if (flag == 1)\" and\n * NOT \"if (flag)\". Unintended modification of this element will be\n * otherwise misinterpreted as an init.\n */\n this.Class_ID = 0;\n\n this.lame_encode_frame_init = 0;\n this.iteration_init_init = 0;\n this.fill_buffer_resample_init = 0;\n\n //public float mfbuf[][] = new float[2][MFSIZE];\n this.mfbuf = new_float_n([2, LameInternalFlags.MFSIZE]);\n\n /**\n * granules per frame\n */\n this.mode_gr = 0;\n /**\n * number of channels in the input data stream (PCM or decoded PCM)\n */\n this.channels_in = 0;\n /**\n * number of channels in the output data stream (not used for decoding)\n */\n this.channels_out = 0;\n /**\n * input_samp_rate/output_samp_rate\n */\n //public double resample_ratio;\n this.resample_ratio = 0.;\n\n this.mf_samples_to_encode = 0;\n this.mf_size = 0;\n /**\n * min bitrate index\n */\n this.VBR_min_bitrate = 0;\n /**\n * max bitrate index\n */\n this.VBR_max_bitrate = 0;\n this.bitrate_index = 0;\n this.samplerate_index = 0;\n this.mode_ext = 0;\n\n /* lowpass and highpass filter control */\n /**\n * normalized frequency bounds of passband\n */\n this.lowpass1 = 0.;\n this.lowpass2 = 0.;\n /**\n * normalized frequency bounds of passband\n */\n this.highpass1 = 0.;\n this.highpass2 = 0.;\n\n /**\n * 0 = none 1 = ISO AAC model 2 = allow scalefac_select=1\n */\n this.noise_shaping = 0;\n\n /**\n * 0 = ISO model: amplify all distorted bands
\n * mpeg1: buffer=511 bytes smallest frame: 96-38(sideinfo)=58\n * max number of frames in reservoir: 8\n * mpeg2: buffer=255 bytes. smallest frame: 24-23bytes=1\n * with VBR, if you are encoding all silence, it is possible to\n * have 8kbs/24khz frames with 1byte of data each, which means we need\n * to buffer up to 255 headers!\n *\n */\n /**\n * also, max_header_buf has to be a power of two\n */\n /**\n * max size of header is 38\n */\n\n function Header() {\n this.write_timing = 0;\n this.ptr = 0;\n //public byte buf[] = new byte[MAX_HEADER_LEN];\n this.buf = new_byte(MAX_HEADER_LEN);\n }\n\n this.header = new Array(LameInternalFlags.MAX_HEADER_BUF);\n\n this.h_ptr = 0;\n this.w_ptr = 0;\n this.ancillary_flag = 0;\n\n /* variables for Reservoir */\n /**\n * in bits\n */\n this.ResvSize = 0;\n /**\n * in bits\n */\n this.ResvMax = 0;\n\n //public ScaleFac scalefac_band = new ScaleFac();\n this.scalefac_band = new ScaleFac();\n\n /* daa from PsyModel */\n /* The static variables \"r\", \"phi_sav\", \"new\", \"old\" and \"oldest\" have */\n /* to be remembered for the unpredictability measure. For \"r\" and */\n /* \"phi_sav\", the first index from the left is the channel select and */\n /* the second index is the \"age\" of the data. */\n this.minval_l = new_float(Encoder.CBANDS);\n this.minval_s = new_float(Encoder.CBANDS);\n this.nb_1 = new_float_n([4, Encoder.CBANDS]);\n this.nb_2 = new_float_n([4, Encoder.CBANDS]);\n this.nb_s1 = new_float_n([4, Encoder.CBANDS]);\n this.nb_s2 = new_float_n([4, Encoder.CBANDS]);\n this.s3_ss = null;\n this.s3_ll = null;\n this.decay = 0.;\n\n //public III_psy_xmin[] thm = new III_psy_xmin[4];\n //public III_psy_xmin[] en = new III_psy_xmin[4];\n this.thm = new Array(4);\n this.en = new Array(4);\n\n /**\n * fft and energy calculation\n */\n this.tot_ener = new_float(4);\n\n /* loudness calculation (for adaptive threshold of hearing) */\n /**\n * loudness^2 approx. per granule and channel\n */\n this.loudness_sq = new_float_n([2, 2]);\n /**\n * account for granule delay of L3psycho_anal\n */\n this.loudness_sq_save = new_float(2);\n\n /**\n * Scale Factor Bands\n */\n this.mld_l = new_float(Encoder.SBMAX_l);\n this.mld_s = new_float(Encoder.SBMAX_s);\n this.bm_l = new_int(Encoder.SBMAX_l);\n this.bo_l = new_int(Encoder.SBMAX_l);\n this.bm_s = new_int(Encoder.SBMAX_s);\n this.bo_s = new_int(Encoder.SBMAX_s);\n this.npart_l = 0;\n this.npart_s = 0;\n\n this.s3ind = new_int_n([Encoder.CBANDS, 2]);\n this.s3ind_s = new_int_n([Encoder.CBANDS, 2]);\n\n this.numlines_s = new_int(Encoder.CBANDS);\n this.numlines_l = new_int(Encoder.CBANDS);\n this.rnumlines_l = new_float(Encoder.CBANDS);\n this.mld_cb_l = new_float(Encoder.CBANDS);\n this.mld_cb_s = new_float(Encoder.CBANDS);\n this.numlines_s_num1 = 0;\n this.numlines_l_num1 = 0;\n\n /* ratios */\n this.pe = new_float(4);\n this.ms_ratio_s_old = 0.;\n this.ms_ratio_l_old = 0.;\n this.ms_ener_ratio_old = 0.;\n\n /**\n * block type\n */\n this.blocktype_old = new_int(2);\n\n /**\n * variables used for --nspsytune\n */\n this.nsPsy = new NsPsy();\n\n /**\n * used for Xing VBR header\n */\n this.VBR_seek_table = new VBRSeekInfo();\n\n /**\n * all ATH related stuff\n */\n //public ATH ATH;\n this.ATH = null;\n\n this.PSY = null;\n\n this.nogap_total = 0;\n this.nogap_current = 0;\n\n /* ReplayGain */\n this.decode_on_the_fly = true;\n this.findReplayGain = true;\n this.findPeakSample = true;\n this.PeakSample = 0.;\n this.RadioGain = 0;\n this.AudiophileGain = 0;\n //public ReplayGain rgdata;\n this.rgdata = null;\n\n /**\n * gain change required for preventing clipping\n */\n this.noclipGainChange = 0;\n /**\n * user-specified scale factor required for preventing clipping\n */\n this.noclipScale = 0.;\n\n /* simple statistics */\n this.bitrate_stereoMode_Hist = new_int_n([16, 4 + 1]);\n /**\n * norm/start/short/stop/mixed(short)/sum\n */\n this.bitrate_blockType_Hist = new_int_n([16, 4 + 1 + 1]);\n\n //public PlottingData pinfo;\n //public MPGLib.mpstr_tag hip;\n this.pinfo = null;\n this.hip = null;\n\n this.in_buffer_nsamples = 0;\n //public float[] in_buffer_0;\n //public float[] in_buffer_1;\n this.in_buffer_0 = null;\n this.in_buffer_1 = null;\n\n //public IIterationLoop iteration_loop;\n this.iteration_loop = null;\n\n for (var i = 0; i < this.en.length; i++) {\n this.en[i] = new III_psy_xmin();\n }\n for (var i = 0; i < this.thm.length; i++) {\n this.thm[i] = new III_psy_xmin();\n }\n for (var i = 0; i < this.header.length; i++) {\n this.header[i] = new Header();\n }\n\n}\n\nmodule.exports = LameInternalFlags;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\n\n/**\n * ATH related stuff, if something new ATH related has to be added, please plug\n * it here into the ATH.\n */\nfunction ATH() {\n /**\n * Method for the auto adjustment.\n */\n this.useAdjust = 0;\n /**\n * factor for tuning the (sample power) point below which adaptive threshold\n * of hearing adjustment occurs\n */\n this.aaSensitivityP = 0.;\n /**\n * Lowering based on peak volume, 1 = no lowering.\n */\n this.adjust = 0.;\n /**\n * Limit for dynamic ATH adjust.\n */\n this.adjustLimit = 0.;\n /**\n * Determined to lower x dB each second.\n */\n this.decay = 0.;\n /**\n * Lowest ATH value.\n */\n this.floor = 0.;\n /**\n * ATH for sfbs in long blocks.\n */\n this.l = new_float(Encoder.SBMAX_l);\n /**\n * ATH for sfbs in short blocks.\n */\n this.s = new_float(Encoder.SBMAX_s);\n /**\n * ATH for partitioned sfb21 in long blocks.\n */\n this.psfb21 = new_float(Encoder.PSFB21);\n /**\n * ATH for partitioned sfb12 in short blocks.\n */\n this.psfb12 = new_float(Encoder.PSFB12);\n /**\n * ATH for long block convolution bands.\n */\n this.cb_l = new_float(Encoder.CBANDS);\n /**\n * ATH for short block convolution bands.\n */\n this.cb_s = new_float(Encoder.CBANDS);\n /**\n * Equal loudness weights (based on ATH).\n */\n this.eql_w = new_float(Encoder.BLKSIZE / 2);\n}\n\nmodule.exports = ATH;\n","/*\n * ReplayGainAnalysis - analyzes input samples and give the recommended dB change\n * Copyright (C) 2001 David Robinson and Glen Sawyer\n * Improvements and optimizations added by Frank Klemm, and by Marcel Muller \n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n *\n * concept and filter values by David Robinson (David@Robinson.org)\n * -- blame him if you think the idea is flawed\n * original coding by Glen Sawyer (mp3gain@hotmail.com)\n * -- blame him if you think this runs too slowly, or the coding is otherwise flawed\n *\n * lots of code improvements by Frank Klemm ( http://www.uni-jena.de/~pfk/mpp/ )\n * -- credit him for all the _good_ programming ;)\n *\n *\n * For an explanation of the concepts and the basic algorithms involved, go to:\n * http://www.replaygain.org/\n */\n\n/*\n * Here's the deal. Call\n *\n * InitGainAnalysis ( long samplefreq );\n *\n * to initialize everything. Call\n *\n * AnalyzeSamples ( var Float_t* left_samples,\n * var Float_t* right_samples,\n * size_t num_samples,\n * int num_channels );\n *\n * as many times as you want, with as many or as few samples as you want.\n * If mono, pass the sample buffer in through left_samples, leave\n * right_samples NULL, and make sure num_channels = 1.\n *\n * GetTitleGain()\n *\n * will return the recommended dB level change for all samples analyzed\n * SINCE THE LAST TIME you called GetTitleGain() OR InitGainAnalysis().\n *\n * GetAlbumGain()\n *\n * will return the recommended dB level change for all samples analyzed\n * since InitGainAnalysis() was called and finalized with GetTitleGain().\n *\n * Pseudo-code to process an album:\n *\n * Float_t l_samples [4096];\n * Float_t r_samples [4096];\n * size_t num_samples;\n * unsigned int num_songs;\n * unsigned int i;\n *\n * InitGainAnalysis ( 44100 );\n * for ( i = 1; i <= num_songs; i++ ) {\n * while ( ( num_samples = getSongSamples ( song[i], left_samples, right_samples ) ) > 0 )\n * AnalyzeSamples ( left_samples, right_samples, num_samples, 2 );\n * fprintf (\"Recommended dB change for song %2d: %+6.2 dB\\n\", i, GetTitleGain() );\n * }\n * fprintf (\"Recommended dB change for whole album: %+6.2 dB\\n\", GetAlbumGain() );\n */\n\n/*\n * So here's the main source of potential code confusion:\n *\n * The filters applied to the incoming samples are IIR filters,\n * meaning they rely on up to
\n * for (i = 0; i < 16*16; i++) [\n * largetbl[i] = ((ht[16].hlen[i]) << 16) + ht[24].hlen[i];\n * ]\n *
\n *\n */\nTables.largetbl = [\n 0x010004, 0x050005, 0x070007, 0x090008, 0x0a0009, 0x0a000a, 0x0b000a, 0x0b000b,\n 0x0c000b, 0x0c000c, 0x0c000c, 0x0d000c, 0x0d000c, 0x0d000c, 0x0e000d, 0x0a000a,\n 0x040005, 0x060006, 0x080007, 0x090008, 0x0a0009, 0x0b000a, 0x0b000a, 0x0b000b,\n 0x0c000b, 0x0c000b, 0x0c000c, 0x0d000c, 0x0e000c, 0x0d000c, 0x0e000c, 0x0a000a,\n 0x070007, 0x080007, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000b,\n 0x0d000b, 0x0c000b, 0x0d000b, 0x0d000c, 0x0d000c, 0x0e000c, 0x0e000d, 0x0b0009,\n 0x090008, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0c000b,\n 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0c0009,\n 0x0a0009, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000a, 0x0d000b,\n 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000d, 0x0b0009,\n 0x0a000a, 0x0a0009, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0e000b,\n 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0c0009,\n 0x0b000a, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0d000b, 0x0d000b,\n 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000d, 0x0c0009,\n 0x0b000b, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b,\n 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x11000d, 0x11000d, 0x0c000a,\n 0x0b000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b,\n 0x0f000b, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000d, 0x10000d, 0x0c000a,\n 0x0c000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b, 0x0f000c,\n 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0f000d, 0x10000d, 0x0f000d, 0x0d000a,\n 0x0c000c, 0x0d000b, 0x0c000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c,\n 0x0f000c, 0x10000c, 0x10000c, 0x10000d, 0x11000d, 0x11000d, 0x10000d, 0x0c000a,\n 0x0d000c, 0x0d000c, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x10000c,\n 0x10000c, 0x10000c, 0x10000c, 0x10000d, 0x10000d, 0x0f000d, 0x10000d, 0x0d000a,\n 0x0d000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c,\n 0x0f000c, 0x11000c, 0x10000d, 0x10000d, 0x10000d, 0x10000d, 0x12000d, 0x0d000a,\n 0x0f000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000c,\n 0x10000d, 0x12000d, 0x11000d, 0x11000d, 0x11000d, 0x13000d, 0x11000d, 0x0d000a,\n 0x0e000d, 0x0f000c, 0x0d000c, 0x0e000c, 0x10000c, 0x10000c, 0x0f000c, 0x10000d,\n 0x10000d, 0x11000d, 0x12000d, 0x11000d, 0x13000d, 0x11000d, 0x10000d, 0x0d000a,\n 0x0a0009, 0x0a0009, 0x0a0009, 0x0b0009, 0x0b0009, 0x0c0009, 0x0c0009, 0x0c0009,\n 0x0d0009, 0x0d0009, 0x0d0009, 0x0d000a, 0x0d000a, 0x0d000a, 0x0d000a, 0x0a0006\n];\n/**\n * \n * for (i = 0; i < 3*3; i++) [\n * table23[i] = ((ht[2].hlen[i]) << 16) + ht[3].hlen[i];\n * ]\n *
\n *\n */\nTables.table23 = [\n 0x010002, 0x040003, 0x070007,\n 0x040004, 0x050004, 0x070007,\n 0x060006, 0x070007, 0x080008\n];\n\n/**\n * \n * for (i = 0; i < 4*4; i++) [\n * table56[i] = ((ht[5].hlen[i]) << 16) + ht[6].hlen[i];\n * ]\n *
\n *\n */\nTables.table56 = [\n 0x010003, 0x040004, 0x070006, 0x080008, 0x040004, 0x050004, 0x080006, 0x090007,\n 0x070005, 0x080006, 0x090007, 0x0a0008, 0x080007, 0x080007, 0x090008, 0x0a0009\n];\n\nTables.bitrate_table = [\n [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, -1], /* MPEG 2 */\n [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1], /* MPEG 1 */\n [0, 8, 16, 24, 32, 40, 48, 56, 64, -1, -1, -1, -1, -1, -1, -1], /* MPEG 2.5 */\n];\n\n/**\n * MPEG 2, MPEG 1, MPEG 2.5.\n */\nTables.samplerate_table = [\n [22050, 24000, 16000, -1],\n [44100, 48000, 32000, -1],\n [11025, 12000, 8000, -1],\n];\n\n/**\n * This is the scfsi_band table from 2.4.2.7 of the IS.\n */\nTables.scfsi_band = [0, 6, 11, 16, 21];\n\nmodule.exports = Tables;\n","/*\n * quantize_pvt source file\n *\n * Copyright (c) 1999-2002 Takehiro Tominaga\n * Copyright (c) 2000-2002 Robert Hegemann\n * Copyright (c) 2001 Naoki Shibata\n * Copyright (c) 2002-2005 Gabriel Bouvigne\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Library General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the\n * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n * Boston, MA 02111-1307, USA.\n */\n\n/* $Id: QuantizePVT.java,v 1.24 2011/05/24 20:48:06 kenchis Exp $ */\nvar ScaleFac = require('./ScaleFac.js');\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\nvar MeanBits = require('./MeanBits.js');\nvar LameInternalFlags = require('./LameInternalFlags.js');\n\nQuantizePVT.Q_MAX = (256 + 1);\nQuantizePVT.Q_MAX2 = 116;\nQuantizePVT.LARGE_BITS = 100000;\nQuantizePVT.IXMAX_VAL = 8206;\n\nfunction QuantizePVT() {\n\n var tak = null;\n var rv = null;\n var psy = null;\n\n this.setModules = function (_tk, _rv, _psy) {\n tak = _tk;\n rv = _rv;\n psy = _psy;\n };\n\n function POW20(x) {\n assert(0 <= (x + QuantizePVT.Q_MAX2) && x < QuantizePVT.Q_MAX);\n return pow20[x + QuantizePVT.Q_MAX2];\n }\n\n this.IPOW20 = function (x) {\n assert(0 <= x && x < QuantizePVT.Q_MAX);\n return ipow20[x];\n }\n\n /**\n * smallest such that 1.0+DBL_EPSILON != 1.0\n */\n var DBL_EPSILON = 2.2204460492503131e-016;\n\n /**\n * ix always <= 8191+15. see count_bits()\n */\n var IXMAX_VAL = QuantizePVT.IXMAX_VAL;\n\n var PRECALC_SIZE = (IXMAX_VAL + 2);\n\n var Q_MAX = QuantizePVT.Q_MAX;\n\n\n /**\n * \n * minimum possible number of\n * -cod_info.global_gain + ((scalefac[] + (cod_info.preflag ? pretab[sfb] : 0))\n * << (cod_info.scalefac_scale + 1)) + cod_info.subblock_gain[cod_info.window[sfb]] * 8;\n *\n * for long block, 0+((15+3)<<2) = 18*4 = 72\n * for short block, 0+(15<<2)+7*8 = 15*4+56 = 116\n *
\n */\n var Q_MAX2 = QuantizePVT.Q_MAX2;\n\n var LARGE_BITS = QuantizePVT.LARGE_BITS;\n\n\n /**\n * Assuming dynamic range=96dB, this value should be 92\n */\n var NSATHSCALE = 100;\n\n /**\n * The following table is used to implement the scalefactor partitioning for\n * MPEG2 as described in section 2.4.3.2 of the IS. The indexing corresponds\n * to the way the tables are presented in the IS:\n *\n * [table_number][row_in_table][column of nr_of_sfb]\n */\n this.nr_of_sfb_block = [\n [[6, 5, 5, 5], [9, 9, 9, 9], [6, 9, 9, 9]],\n [[6, 5, 7, 3], [9, 9, 12, 6], [6, 9, 12, 6]],\n [[11, 10, 0, 0], [18, 18, 0, 0], [15, 18, 0, 0]],\n [[7, 7, 7, 0], [12, 12, 12, 0], [6, 15, 12, 0]],\n [[6, 6, 6, 3], [12, 9, 9, 6], [6, 12, 9, 6]],\n [[8, 8, 5, 0], [15, 12, 9, 0], [6, 18, 9, 0]]];\n\n /**\n * Table B.6: layer3 preemphasis\n */\n var pretab = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,\n 2, 2, 3, 3, 3, 2, 0];\n this.pretab = pretab;\n\n /**\n * Here are MPEG1 Table B.8 and MPEG2 Table B.1 -- Layer III scalefactor\n * bands. \n * compute the ATH for each scalefactor band cd range: 0..96db\n *\n * Input: 3.3kHz signal 32767 amplitude (3.3kHz is where ATH is smallest =\n * -5db) longblocks: sfb=12 en0/bw=-11db max_en0 = 1.3db shortblocks: sfb=5\n * -9db 0db\n *\n * Input: 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 (repeated) longblocks: amp=1\n * sfb=12 en0/bw=-103 db max_en0 = -92db amp=32767 sfb=12 -12 db -1.4db\n *\n * Input: 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 (repeated) shortblocks: amp=1\n * sfb=5 en0/bw= -99 -86 amp=32767 sfb=5 -9 db 4db\n *\n *\n * MAX energy of largest wave at 3.3kHz = 1db AVE energy of largest wave at\n * 3.3kHz = -11db Let's take AVE: -11db = maximum signal in sfb=12. Dynamic\n * range of CD: 96db. Therefor energy of smallest audible wave in sfb=12 =\n * -11 - 96 = -107db = ATH at 3.3kHz.\n *\n * ATH formula for this wave: -5db. To adjust to LAME scaling, we need ATH =\n * ATH_formula - 103 (db) ATH = ATH * 2.5e-10 (ener)\n *\n */\n function ATHmdct(gfp, f) {\n var ath = psy.ATHformula(f, gfp);\n\n ath -= NSATHSCALE;\n\n /* modify the MDCT scaling for the ATH and convert to energy */\n ath = Math.pow(10.0, ath / 10.0 + gfp.ATHlower);\n return ath;\n }\n\n function compute_ath(gfp) {\n var ATH_l = gfp.internal_flags.ATH.l;\n var ATH_psfb21 = gfp.internal_flags.ATH.psfb21;\n var ATH_s = gfp.internal_flags.ATH.s;\n var ATH_psfb12 = gfp.internal_flags.ATH.psfb12;\n var gfc = gfp.internal_flags;\n var samp_freq = gfp.out_samplerate;\n\n for (var sfb = 0; sfb < Encoder.SBMAX_l; sfb++) {\n var start = gfc.scalefac_band.l[sfb];\n var end = gfc.scalefac_band.l[sfb + 1];\n ATH_l[sfb] = Float.MAX_VALUE;\n for (var i = start; i < end; i++) {\n var freq = i * samp_freq / (2 * 576);\n var ATH_f = ATHmdct(gfp, freq);\n /* freq in kHz */\n ATH_l[sfb] = Math.min(ATH_l[sfb], ATH_f);\n }\n }\n\n for (var sfb = 0; sfb < Encoder.PSFB21; sfb++) {\n var start = gfc.scalefac_band.psfb21[sfb];\n var end = gfc.scalefac_band.psfb21[sfb + 1];\n ATH_psfb21[sfb] = Float.MAX_VALUE;\n for (var i = start; i < end; i++) {\n var freq = i * samp_freq / (2 * 576);\n var ATH_f = ATHmdct(gfp, freq);\n /* freq in kHz */\n ATH_psfb21[sfb] = Math.min(ATH_psfb21[sfb], ATH_f);\n }\n }\n\n for (var sfb = 0; sfb < Encoder.SBMAX_s; sfb++) {\n var start = gfc.scalefac_band.s[sfb];\n var end = gfc.scalefac_band.s[sfb + 1];\n ATH_s[sfb] = Float.MAX_VALUE;\n for (var i = start; i < end; i++) {\n var freq = i * samp_freq / (2 * 192);\n var ATH_f = ATHmdct(gfp, freq);\n /* freq in kHz */\n ATH_s[sfb] = Math.min(ATH_s[sfb], ATH_f);\n }\n ATH_s[sfb] *= (gfc.scalefac_band.s[sfb + 1] - gfc.scalefac_band.s[sfb]);\n }\n\n for (var sfb = 0; sfb < Encoder.PSFB12; sfb++) {\n var start = gfc.scalefac_band.psfb12[sfb];\n var end = gfc.scalefac_band.psfb12[sfb + 1];\n ATH_psfb12[sfb] = Float.MAX_VALUE;\n for (var i = start; i < end; i++) {\n var freq = i * samp_freq / (2 * 192);\n var ATH_f = ATHmdct(gfp, freq);\n /* freq in kHz */\n ATH_psfb12[sfb] = Math.min(ATH_psfb12[sfb], ATH_f);\n }\n /* not sure about the following */\n ATH_psfb12[sfb] *= (gfc.scalefac_band.s[13] - gfc.scalefac_band.s[12]);\n }\n\n /*\n * no-ATH mode: reduce ATH to -200 dB\n */\n if (gfp.noATH) {\n for (var sfb = 0; sfb < Encoder.SBMAX_l; sfb++) {\n ATH_l[sfb] = 1E-20;\n }\n for (var sfb = 0; sfb < Encoder.PSFB21; sfb++) {\n ATH_psfb21[sfb] = 1E-20;\n }\n for (var sfb = 0; sfb < Encoder.SBMAX_s; sfb++) {\n ATH_s[sfb] = 1E-20;\n }\n for (var sfb = 0; sfb < Encoder.PSFB12; sfb++) {\n ATH_psfb12[sfb] = 1E-20;\n }\n }\n\n /*\n * work in progress, don't rely on it too much\n */\n gfc.ATH.floor = 10. * Math.log10(ATHmdct(gfp, -1.));\n }\n\n /**\n * initialization for iteration_loop\n */\n this.iteration_init = function (gfp) {\n var gfc = gfp.internal_flags;\n var l3_side = gfc.l3_side;\n var i;\n\n if (gfc.iteration_init_init == 0) {\n gfc.iteration_init_init = 1;\n\n l3_side.main_data_begin = 0;\n compute_ath(gfp);\n\n pow43[0] = 0.0;\n for (i = 1; i < PRECALC_SIZE; i++)\n pow43[i] = Math.pow(i, 4.0 / 3.0);\n\n for (i = 0; i < PRECALC_SIZE - 1; i++)\n adj43[i] = ((i + 1) - Math.pow(\n 0.5 * (pow43[i] + pow43[i + 1]), 0.75));\n adj43[i] = 0.5;\n\n for (i = 0; i < Q_MAX; i++)\n ipow20[i] = Math.pow(2.0, (i - 210) * -0.1875);\n for (i = 0; i <= Q_MAX + Q_MAX2; i++)\n pow20[i] = Math.pow(2.0, (i - 210 - Q_MAX2) * 0.25);\n\n tak.huffman_init(gfc);\n\n {\n var bass, alto, treble, sfb21;\n\n i = (gfp.exp_nspsytune >> 2) & 63;\n if (i >= 32)\n i -= 64;\n bass = Math.pow(10, i / 4.0 / 10.0);\n\n i = (gfp.exp_nspsytune >> 8) & 63;\n if (i >= 32)\n i -= 64;\n alto = Math.pow(10, i / 4.0 / 10.0);\n\n i = (gfp.exp_nspsytune >> 14) & 63;\n if (i >= 32)\n i -= 64;\n treble = Math.pow(10, i / 4.0 / 10.0);\n\n /*\n * to be compatible with Naoki's original code, the next 6 bits\n * define only the amount of changing treble for sfb21\n */\n i = (gfp.exp_nspsytune >> 20) & 63;\n if (i >= 32)\n i -= 64;\n sfb21 = treble * Math.pow(10, i / 4.0 / 10.0);\n for (i = 0; i < Encoder.SBMAX_l; i++) {\n var f;\n if (i <= 6)\n f = bass;\n else if (i <= 13)\n f = alto;\n else if (i <= 20)\n f = treble;\n else\n f = sfb21;\n\n gfc.nsPsy.longfact[i] = f;\n }\n for (i = 0; i < Encoder.SBMAX_s; i++) {\n var f;\n if (i <= 5)\n f = bass;\n else if (i <= 10)\n f = alto;\n else if (i <= 11)\n f = treble;\n else\n f = sfb21;\n\n gfc.nsPsy.shortfact[i] = f;\n }\n }\n }\n }\n\n /**\n * allocate bits among 2 channels based on PE
\n * -oo dB => -1.00\n * - 6 dB => -0.97\n * - 3 dB => -0.80\n * - 2 dB => -0.64\n * - 1 dB => -0.38\n * 0 dB => 0.00\n * + 1 dB => +0.49\n * + 2 dB => +1.06\n * + 3 dB => +1.68\n * + 6 dB => +3.69\n * +10 dB => +6.45\n *\n */\n this.calc_noise = function (cod_info, l3_xmin, distort, res, prev_noise) {\n var distortPos = 0;\n var l3_xminPos = 0;\n var sfb, l, over = 0;\n var over_noise_db = 0;\n /* 0 dB relative to masking */\n var tot_noise_db = 0;\n /* -200 dB relative to masking */\n var max_noise = -20.0;\n var j = 0;\n var scalefac = cod_info.scalefac;\n var scalefacPos = 0;\n\n res.over_SSD = 0;\n\n for (sfb = 0; sfb < cod_info.psymax; sfb++) {\n var s = cod_info.global_gain\n - (((scalefac[scalefacPos++]) + (cod_info.preflag != 0 ? pretab[sfb]\n : 0)) << (cod_info.scalefac_scale + 1))\n - cod_info.subblock_gain[cod_info.window[sfb]] * 8;\n var noise = 0.0;\n\n if (prev_noise != null && (prev_noise.step[sfb] == s)) {\n\n /* use previously computed values */\n noise = prev_noise.noise[sfb];\n j += cod_info.width[sfb];\n distort[distortPos++] = noise / l3_xmin[l3_xminPos++];\n\n noise = prev_noise.noise_log[sfb];\n\n } else {\n var step = POW20(s);\n l = cod_info.width[sfb] >> 1;\n\n if ((j + cod_info.width[sfb]) > cod_info.max_nonzero_coeff) {\n var usefullsize;\n usefullsize = cod_info.max_nonzero_coeff - j + 1;\n\n if (usefullsize > 0)\n l = usefullsize >> 1;\n else\n l = 0;\n }\n\n var sl = new StartLine(j);\n noise = this.calc_noise_core(cod_info, sl, l, step);\n j = sl.s;\n\n if (prev_noise != null) {\n /* save noise values */\n prev_noise.step[sfb] = s;\n prev_noise.noise[sfb] = noise;\n }\n\n noise = distort[distortPos++] = noise / l3_xmin[l3_xminPos++];\n\n /* multiplying here is adding in dB, but can overflow */\n noise = Util.FAST_LOG10(Math.max(noise, 1E-20));\n\n if (prev_noise != null) {\n /* save noise values */\n prev_noise.noise_log[sfb] = noise;\n }\n }\n\n if (prev_noise != null) {\n /* save noise values */\n prev_noise.global_gain = cod_info.global_gain;\n }\n\n tot_noise_db += noise;\n\n if (noise > 0.0) {\n var tmp;\n\n tmp = Math.max(0 | (noise * 10 + .5), 1);\n res.over_SSD += tmp * tmp;\n\n over++;\n /* multiplying here is adding in dB -but can overflow */\n /* over_noise *= noise; */\n over_noise_db += noise;\n }\n max_noise = Math.max(max_noise, noise);\n\n }\n\n res.over_count = over;\n res.tot_noise = tot_noise_db;\n res.over_noise = over_noise_db;\n res.max_noise = max_noise;\n\n return over;\n }\n\n /**\n * updates plotting data\n *\n * Mark Taylor 2000-??-??\n *\n * Robert Hegemann: moved noise/distortion calc into it\n */\n this.set_pinfo = function (gfp, cod_info, ratio, gr, ch) {\n var gfc = gfp.internal_flags;\n var sfb, sfb2;\n var l;\n var en0, en1;\n var ifqstep = (cod_info.scalefac_scale == 0) ? .5 : 1.0;\n var scalefac = cod_info.scalefac;\n\n var l3_xmin = new_float(L3Side.SFBMAX);\n var xfsf = new_float(L3Side.SFBMAX);\n var noise = new CalcNoiseResult();\n\n calc_xmin(gfp, ratio, cod_info, l3_xmin);\n calc_noise(cod_info, l3_xmin, xfsf, noise, null);\n\n var j = 0;\n sfb2 = cod_info.sfb_lmax;\n if (cod_info.block_type != Encoder.SHORT_TYPE\n && 0 == cod_info.mixed_block_flag)\n sfb2 = 22;\n for (sfb = 0; sfb < sfb2; sfb++) {\n var start = gfc.scalefac_band.l[sfb];\n var end = gfc.scalefac_band.l[sfb + 1];\n var bw = end - start;\n for (en0 = 0.0; j < end; j++)\n en0 += cod_info.xr[j] * cod_info.xr[j];\n en0 /= bw;\n /* convert to MDCT units */\n /* scaling so it shows up on FFT plot */\n en1 = 1e15;\n gfc.pinfo.en[gr][ch][sfb] = en1 * en0;\n gfc.pinfo.xfsf[gr][ch][sfb] = en1 * l3_xmin[sfb] * xfsf[sfb] / bw;\n\n if (ratio.en.l[sfb] > 0 && !gfp.ATHonly)\n en0 = en0 / ratio.en.l[sfb];\n else\n en0 = 0.0;\n\n gfc.pinfo.thr[gr][ch][sfb] = en1\n * Math.max(en0 * ratio.thm.l[sfb], gfc.ATH.l[sfb]);\n\n /* there is no scalefactor bands >= SBPSY_l */\n gfc.pinfo.LAMEsfb[gr][ch][sfb] = 0;\n if (cod_info.preflag != 0 && sfb >= 11)\n gfc.pinfo.LAMEsfb[gr][ch][sfb] = -ifqstep * pretab[sfb];\n\n if (sfb < Encoder.SBPSY_l) {\n /* scfsi should be decoded by caller side */\n assert(scalefac[sfb] >= 0);\n gfc.pinfo.LAMEsfb[gr][ch][sfb] -= ifqstep * scalefac[sfb];\n }\n }\n /* for sfb */\n\n if (cod_info.block_type == Encoder.SHORT_TYPE) {\n sfb2 = sfb;\n for (sfb = cod_info.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) {\n var start = gfc.scalefac_band.s[sfb];\n var end = gfc.scalefac_band.s[sfb + 1];\n var bw = end - start;\n for (var i = 0; i < 3; i++) {\n for (en0 = 0.0, l = start; l < end; l++) {\n en0 += cod_info.xr[j] * cod_info.xr[j];\n j++;\n }\n en0 = Math.max(en0 / bw, 1e-20);\n /* convert to MDCT units */\n /* scaling so it shows up on FFT plot */\n en1 = 1e15;\n\n gfc.pinfo.en_s[gr][ch][3 * sfb + i] = en1 * en0;\n gfc.pinfo.xfsf_s[gr][ch][3 * sfb + i] = en1 * l3_xmin[sfb2]\n * xfsf[sfb2] / bw;\n if (ratio.en.s[sfb][i] > 0)\n en0 = en0 / ratio.en.s[sfb][i];\n else\n en0 = 0.0;\n if (gfp.ATHonly || gfp.ATHshort)\n en0 = 0;\n\n gfc.pinfo.thr_s[gr][ch][3 * sfb + i] = en1\n * Math.max(en0 * ratio.thm.s[sfb][i],\n gfc.ATH.s[sfb]);\n\n /* there is no scalefactor bands >= SBPSY_s */\n gfc.pinfo.LAMEsfb_s[gr][ch][3 * sfb + i] = -2.0\n * cod_info.subblock_gain[i];\n if (sfb < Encoder.SBPSY_s) {\n gfc.pinfo.LAMEsfb_s[gr][ch][3 * sfb + i] -= ifqstep\n * scalefac[sfb2];\n }\n sfb2++;\n }\n }\n }\n /* block type short */\n gfc.pinfo.LAMEqss[gr][ch] = cod_info.global_gain;\n gfc.pinfo.LAMEmainbits[gr][ch] = cod_info.part2_3_length\n + cod_info.part2_length;\n gfc.pinfo.LAMEsfbits[gr][ch] = cod_info.part2_length;\n\n gfc.pinfo.over[gr][ch] = noise.over_count;\n gfc.pinfo.max_noise[gr][ch] = noise.max_noise * 10.0;\n gfc.pinfo.over_noise[gr][ch] = noise.over_noise * 10.0;\n gfc.pinfo.tot_noise[gr][ch] = noise.tot_noise * 10.0;\n gfc.pinfo.over_SSD[gr][ch] = noise.over_SSD;\n }\n\n /**\n * updates plotting data for a whole frame\n *\n * Robert Hegemann 2000-10-21\n */\n function set_frame_pinfo(gfp, ratio) {\n var gfc = gfp.internal_flags;\n\n gfc.masking_lower = 1.0;\n\n /*\n * for every granule and channel patch l3_enc and set info\n */\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n for (var ch = 0; ch < gfc.channels_out; ch++) {\n var cod_info = gfc.l3_side.tt[gr][ch];\n var scalefac_sav = new_int(L3Side.SFBMAX);\n System.arraycopy(cod_info.scalefac, 0, scalefac_sav, 0,\n scalefac_sav.length);\n\n /*\n * reconstruct the scalefactors in case SCFSI was used\n */\n if (gr == 1) {\n var sfb;\n for (sfb = 0; sfb < cod_info.sfb_lmax; sfb++) {\n if (cod_info.scalefac[sfb] < 0) /* scfsi */\n cod_info.scalefac[sfb] = gfc.l3_side.tt[0][ch].scalefac[sfb];\n }\n }\n\n set_pinfo(gfp, cod_info, ratio[gr][ch], gr, ch);\n System.arraycopy(scalefac_sav, 0, cod_info.scalefac, 0,\n scalefac_sav.length);\n }\n /* for ch */\n }\n /* for gr */\n }\n\n}\n\nmodule.exports = QuantizePVT;\n","/*\n *\tMP3 huffman table selecting and bit counting\n *\n *\tCopyright (c) 1999-2005 Takehiro TOMINAGA\n *\tCopyright (c) 2002-2005 Gabriel Bouvigne\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\t See the GNU\n * Library General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the\n * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n * Boston, MA 02111-1307, USA.\n */\n\n/* $Id: Takehiro.java,v 1.26 2011/05/24 20:48:06 kenchis Exp $ */\n\n//package mp3;\n\n//import java.util.Arrays;\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\nvar Tables = require('./Tables.js');\nvar GrInfo = require('./GrInfo.js');\nvar QuantizePVT = require('./QuantizePVT.js');\n\n\nfunction Takehiro() {\n\n var qupvt = null;\n this.qupvt = null;\n\n this.setModules = function (_qupvt) {\n this.qupvt = _qupvt;\n qupvt = _qupvt;\n }\n\n function Bits(b) {\n this.bits = 0 | b;\n }\n\n var subdv_table = [[0, 0], /* 0 bands */\n [0, 0], /* 1 bands */\n [0, 0], /* 2 bands */\n [0, 0], /* 3 bands */\n [0, 0], /* 4 bands */\n [0, 1], /* 5 bands */\n [1, 1], /* 6 bands */\n [1, 1], /* 7 bands */\n [1, 2], /* 8 bands */\n [2, 2], /* 9 bands */\n [2, 3], /* 10 bands */\n [2, 3], /* 11 bands */\n [3, 4], /* 12 bands */\n [3, 4], /* 13 bands */\n [3, 4], /* 14 bands */\n [4, 5], /* 15 bands */\n [4, 5], /* 16 bands */\n [4, 6], /* 17 bands */\n [5, 6], /* 18 bands */\n [5, 6], /* 19 bands */\n [5, 7], /* 20 bands */\n [6, 7], /* 21 bands */\n [6, 7], /* 22 bands */\n ];\n\n /**\n * nonlinear quantization of xr More accurate formula than the ISO formula.\n * Takes into account the fact that we are quantizing xr . ix, but we want\n * ix^4/3 to be as close as possible to x^4/3. (taking the nearest int would\n * mean ix is as close as possible to xr, which is different.)\n *\n * From Segher Boessenkool
\n * copy data out of the internal MP3 bit buffer into a user supplied\n * unsigned char buffer.\n *\n * mp3data=0 indicates data in buffer is an id3tags and VBR tags\n * mp3data=1 data is real mp3 frame data.\n *\n */\n this.copy_buffer = function (gfc, buffer, bufferPos, size, mp3data) {\n var minimum = bufByteIdx + 1;\n if (minimum <= 0)\n return 0;\n if (size != 0 && minimum > size) {\n /* buffer is too small */\n return -1;\n }\n System.arraycopy(buf, 0, buffer, bufferPos, minimum);\n bufByteIdx = -1;\n bufBitIdx = 0;\n\n if (mp3data != 0) {\n var crc = new_int(1);\n crc[0] = gfc.nMusicCRC;\n vbr.updateMusicCRC(crc, buffer, bufferPos, minimum);\n gfc.nMusicCRC = crc[0];\n\n /**\n * sum number of bytes belonging to the mp3 stream this info will be\n * written into the Xing/LAME header for seeking\n */\n if (minimum > 0) {\n gfc.VBR_seek_table.nBytesWritten += minimum;\n }\n\n if (gfc.decode_on_the_fly) { /* decode the frame */\n var pcm_buf = new_float_n([2, 1152]);\n var mp3_in = minimum;\n var samples_out = -1;\n var i;\n\n /* re-synthesis to pcm. Repeat until we get a samples_out=0 */\n while (samples_out != 0) {\n\n samples_out = mpg.hip_decode1_unclipped(gfc.hip, buffer,\n bufferPos, mp3_in, pcm_buf[0], pcm_buf[1]);\n /*\n * samples_out = 0: need more data to decode samples_out =\n * -1: error. Lets assume 0 pcm output samples_out = number\n * of samples output\n */\n\n /*\n * set the lenght of the mp3 input buffer to zero, so that\n * in the next iteration of the loop we will be querying\n * mpglib about buffered data\n */\n mp3_in = 0;\n\n if (samples_out == -1) {\n /*\n * error decoding. Not fatal, but might screw up the\n * ReplayGain tag. What should we do? Ignore for now\n */\n samples_out = 0;\n }\n if (samples_out > 0) {\n /* process the PCM data */\n\n /*\n * this should not be possible, and indicates we have\n * overflown the pcm_buf buffer\n */\n assert(samples_out <= 1152);\n\n if (gfc.findPeakSample) {\n for (i = 0; i < samples_out; i++) {\n if (pcm_buf[0][i] > gfc.PeakSample)\n gfc.PeakSample = pcm_buf[0][i];\n else if (-pcm_buf[0][i] > gfc.PeakSample)\n gfc.PeakSample = -pcm_buf[0][i];\n }\n if (gfc.channels_out > 1)\n for (i = 0; i < samples_out; i++) {\n if (pcm_buf[1][i] > gfc.PeakSample)\n gfc.PeakSample = pcm_buf[1][i];\n else if (-pcm_buf[1][i] > gfc.PeakSample)\n gfc.PeakSample = -pcm_buf[1][i];\n }\n }\n\n if (gfc.findReplayGain)\n if (ga.AnalyzeSamples(gfc.rgdata, pcm_buf[0], 0,\n pcm_buf[1], 0, samples_out,\n gfc.channels_out) == GainAnalysis.GAIN_ANALYSIS_ERROR)\n return -6;\n\n }\n /* if (samples_out>0) */\n }\n /* while (samples_out!=0) */\n }\n /* if (gfc.decode_on_the_fly) */\n\n }\n /* if (mp3data) */\n return minimum;\n };\n\n this.init_bit_stream_w = function (gfc) {\n buf = new_byte(Lame.LAME_MAXMP3BUFFER);\n\n gfc.h_ptr = gfc.w_ptr = 0;\n gfc.header[gfc.h_ptr].write_timing = 0;\n bufByteIdx = -1;\n bufBitIdx = 0;\n totbit = 0;\n };\n\n // From machine.h\n\n\n}\n\nmodule.exports = BitStream;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar new_short_n = common.new_short_n;\nvar assert = common.assert;\n\nvar PsyModel = require('./PsyModel.js');\nvar LameGlobalFlags = require('./LameGlobalFlags.js');\nvar LameInternalFlags = require('./LameInternalFlags.js');\nvar ATH = require('./ATH.js');\nvar ReplayGain = require('./ReplayGain.js');\nvar CBRNewIterationLoop = require('./CBRNewIterationLoop.js');\nvar BitStream = require('./BitStream.js');\nvar Tables = require('./Tables.js');\nvar Encoder = require('./Encoder.js');\n\nfunction Lame() {\n var self = this;\n var LAME_MAXALBUMART = (128 * 1024);\n\n Lame.V9 = 410;\n Lame.V8 = 420;\n Lame.V7 = 430;\n Lame.V6 = 440;\n Lame.V5 = 450;\n Lame.V4 = 460;\n Lame.V3 = 470;\n Lame.V2 = 480;\n Lame.V1 = 490;\n Lame.V0 = 500;\n\n /* still there for compatibility */\n\n Lame.R3MIX = 1000;\n Lame.STANDARD = 1001;\n Lame.EXTREME = 1002;\n Lame.INSANE = 1003;\n Lame.STANDARD_FAST = 1004;\n Lame.EXTREME_FAST = 1005;\n Lame.MEDIUM = 1006;\n Lame.MEDIUM_FAST = 1007;\n\n /**\n * maximum size of mp3buffer needed if you encode at most 1152 samples for\n * each call to lame_encode_buffer. see lame_encode_buffer() below\n * (LAME_MAXMP3BUFFER is now obsolete)\n */\n var LAME_MAXMP3BUFFER = (16384 + LAME_MAXALBUMART);\n Lame.LAME_MAXMP3BUFFER = LAME_MAXMP3BUFFER;\n\n var ga;\n var bs;\n var p;\n var qupvt;\n var qu;\n var psy = new PsyModel();\n var vbr;\n var ver;\n var id3;\n var mpglib;\n this.enc = new Encoder();\n\n this.setModules = function (_ga, _bs, _p, _qupvt, _qu, _vbr, _ver, _id3, _mpglib) {\n ga = _ga;\n bs = _bs;\n p = _p;\n qupvt = _qupvt;\n qu = _qu;\n vbr = _vbr;\n ver = _ver;\n id3 = _id3;\n mpglib = _mpglib;\n this.enc.setModules(bs, psy, qupvt, vbr);\n }\n\n /**\n * PSY Model related stuff\n */\n function PSY() {\n /**\n * The dbQ stuff.\n */\n this.mask_adjust = 0.;\n /**\n * The dbQ stuff.\n */\n this.mask_adjust_short = 0.;\n /* at transition from one scalefactor band to next */\n /**\n * Band weight long scalefactor bands.\n */\n this.bo_l_weight = new_float(Encoder.SBMAX_l);\n /**\n * Band weight short scalefactor bands.\n */\n this.bo_s_weight = new_float(Encoder.SBMAX_s);\n }\n\n function LowPassHighPass() {\n this.lowerlimit = 0.;\n }\n\n function BandPass(bitrate, lPass) {\n this.lowpass = lPass;\n }\n\n var LAME_ID = 0xFFF88E3B;\n\n function lame_init_old(gfp) {\n var gfc;\n\n gfp.class_id = LAME_ID;\n\n gfc = gfp.internal_flags = new LameInternalFlags();\n\n /* Global flags. set defaults here for non-zero values */\n /* see lame.h for description */\n /*\n * set integer values to -1 to mean that LAME will compute the best\n * value, UNLESS the calling program as set it (and the value is no\n * longer -1)\n */\n\n gfp.mode = MPEGMode.NOT_SET;\n gfp.original = 1;\n gfp.in_samplerate = 44100;\n gfp.num_channels = 2;\n gfp.num_samples = -1;\n\n gfp.bWriteVbrTag = true;\n gfp.quality = -1;\n gfp.short_blocks = null;\n gfc.subblock_gain = -1;\n\n gfp.lowpassfreq = 0;\n gfp.highpassfreq = 0;\n gfp.lowpasswidth = -1;\n gfp.highpasswidth = -1;\n\n gfp.VBR = VbrMode.vbr_off;\n gfp.VBR_q = 4;\n gfp.ATHcurve = -1;\n gfp.VBR_mean_bitrate_kbps = 128;\n gfp.VBR_min_bitrate_kbps = 0;\n gfp.VBR_max_bitrate_kbps = 0;\n gfp.VBR_hard_min = 0;\n gfc.VBR_min_bitrate = 1;\n /* not 0 ????? */\n gfc.VBR_max_bitrate = 13;\n /* not 14 ????? */\n\n gfp.quant_comp = -1;\n gfp.quant_comp_short = -1;\n\n gfp.msfix = -1;\n\n gfc.resample_ratio = 1;\n\n gfc.OldValue[0] = 180;\n gfc.OldValue[1] = 180;\n gfc.CurrentStep[0] = 4;\n gfc.CurrentStep[1] = 4;\n gfc.masking_lower = 1;\n gfc.nsPsy.attackthre = -1;\n gfc.nsPsy.attackthre_s = -1;\n\n gfp.scale = -1;\n\n gfp.athaa_type = -1;\n gfp.ATHtype = -1;\n /* default = -1 = set in lame_init_params */\n gfp.athaa_loudapprox = -1;\n /* 1 = flat loudness approx. (total energy) */\n /* 2 = equal loudness curve */\n gfp.athaa_sensitivity = 0.0;\n /* no offset */\n gfp.useTemporal = null;\n gfp.interChRatio = -1;\n\n /*\n * The reason for int mf_samples_to_encode = ENCDELAY + POSTDELAY;\n * ENCDELAY = internal encoder delay. And then we have to add\n * POSTDELAY=288 because of the 50% MDCT overlap. A 576 MDCT granule\n * decodes to 1152 samples. To synthesize the 576 samples centered under\n * this granule we need the previous granule for the first 288 samples\n * (no problem), and the next granule for the next 288 samples (not\n * possible if this is last granule). So we need to pad with 288 samples\n * to make sure we can encode the 576 samples we are interested in.\n */\n gfc.mf_samples_to_encode = Encoder.ENCDELAY + Encoder.POSTDELAY;\n gfp.encoder_padding = 0;\n gfc.mf_size = Encoder.ENCDELAY - Encoder.MDCTDELAY;\n /*\n * we pad input with this many 0's\n */\n\n gfp.findReplayGain = false;\n gfp.decode_on_the_fly = false;\n\n gfc.decode_on_the_fly = false;\n gfc.findReplayGain = false;\n gfc.findPeakSample = false;\n\n gfc.RadioGain = 0;\n gfc.AudiophileGain = 0;\n gfc.noclipGainChange = 0;\n gfc.noclipScale = -1.0;\n\n gfp.preset = 0;\n\n gfp.write_id3tag_automatic = true;\n return 0;\n }\n\n this.lame_init = function () {\n var gfp = new LameGlobalFlags();\n\n var ret = lame_init_old(gfp);\n if (ret != 0) {\n return null;\n }\n\n gfp.lame_allocated_gfp = 1;\n return gfp;\n }\n\n function filter_coef(x) {\n if (x > 1.0)\n return 0.0;\n if (x <= 0.0)\n return 1.0;\n\n return Math.cos(Math.PI / 2 * x);\n }\n\n this.nearestBitrateFullIndex = function (bitrate) {\n /* borrowed from DM abr presets */\n\n var full_bitrate_table = [8, 16, 24, 32, 40, 48, 56, 64, 80,\n 96, 112, 128, 160, 192, 224, 256, 320];\n\n var lower_range = 0, lower_range_kbps = 0, upper_range = 0, upper_range_kbps = 0;\n\n /* We assume specified bitrate will be 320kbps */\n upper_range_kbps = full_bitrate_table[16];\n upper_range = 16;\n lower_range_kbps = full_bitrate_table[16];\n lower_range = 16;\n\n /*\n * Determine which significant bitrates the value specified falls\n * between, if loop ends without breaking then we were correct above\n * that the value was 320\n */\n for (var b = 0; b < 16; b++) {\n if ((Math.max(bitrate, full_bitrate_table[b + 1])) != bitrate) {\n upper_range_kbps = full_bitrate_table[b + 1];\n upper_range = b + 1;\n lower_range_kbps = full_bitrate_table[b];\n lower_range = (b);\n break;\n /* We found upper range */\n }\n }\n\n /* Determine which range the value specified is closer to */\n if ((upper_range_kbps - bitrate) > (bitrate - lower_range_kbps)) {\n return lower_range;\n }\n return upper_range;\n }\n\n function optimum_samplefreq(lowpassfreq, input_samplefreq) {\n /*\n * Rules:\n *\n * - if possible, sfb21 should NOT be used\n */\n var suggested_samplefreq = 44100;\n\n if (input_samplefreq >= 48000)\n suggested_samplefreq = 48000;\n else if (input_samplefreq >= 44100)\n suggested_samplefreq = 44100;\n else if (input_samplefreq >= 32000)\n suggested_samplefreq = 32000;\n else if (input_samplefreq >= 24000)\n suggested_samplefreq = 24000;\n else if (input_samplefreq >= 22050)\n suggested_samplefreq = 22050;\n else if (input_samplefreq >= 16000)\n suggested_samplefreq = 16000;\n else if (input_samplefreq >= 12000)\n suggested_samplefreq = 12000;\n else if (input_samplefreq >= 11025)\n suggested_samplefreq = 11025;\n else if (input_samplefreq >= 8000)\n suggested_samplefreq = 8000;\n\n if (lowpassfreq == -1)\n return suggested_samplefreq;\n\n if (lowpassfreq <= 15960)\n suggested_samplefreq = 44100;\n if (lowpassfreq <= 15250)\n suggested_samplefreq = 32000;\n if (lowpassfreq <= 11220)\n suggested_samplefreq = 24000;\n if (lowpassfreq <= 9970)\n suggested_samplefreq = 22050;\n if (lowpassfreq <= 7230)\n suggested_samplefreq = 16000;\n if (lowpassfreq <= 5420)\n suggested_samplefreq = 12000;\n if (lowpassfreq <= 4510)\n suggested_samplefreq = 11025;\n if (lowpassfreq <= 3970)\n suggested_samplefreq = 8000;\n\n if (input_samplefreq < suggested_samplefreq) {\n /*\n * choose a valid MPEG sample frequency above the input sample\n * frequency to avoid SFB21/12 bitrate bloat rh 061115\n */\n if (input_samplefreq > 44100) {\n return 48000;\n }\n if (input_samplefreq > 32000) {\n return 44100;\n }\n if (input_samplefreq > 24000) {\n return 32000;\n }\n if (input_samplefreq > 22050) {\n return 24000;\n }\n if (input_samplefreq > 16000) {\n return 22050;\n }\n if (input_samplefreq > 12000) {\n return 16000;\n }\n if (input_samplefreq > 11025) {\n return 12000;\n }\n if (input_samplefreq > 8000) {\n return 11025;\n }\n return 8000;\n }\n return suggested_samplefreq;\n }\n\n /**\n * convert samp freq in Hz to index\n */\n function SmpFrqIndex(sample_freq, gpf) {\n switch (sample_freq) {\n case 44100:\n gpf.version = 1;\n return 0;\n case 48000:\n gpf.version = 1;\n return 1;\n case 32000:\n gpf.version = 1;\n return 2;\n case 22050:\n gpf.version = 0;\n return 0;\n case 24000:\n gpf.version = 0;\n return 1;\n case 16000:\n gpf.version = 0;\n return 2;\n case 11025:\n gpf.version = 0;\n return 0;\n case 12000:\n gpf.version = 0;\n return 1;\n case 8000:\n gpf.version = 0;\n return 2;\n default:\n gpf.version = 0;\n return -1;\n }\n }\n\n /**\n * @param bRate\n * legal rates from 8 to 320\n */\n function FindNearestBitrate(bRate, version, samplerate) {\n /* MPEG-1 or MPEG-2 LSF */\n if (samplerate < 16000)\n version = 2;\n\n var bitrate = Tables.bitrate_table[version][1];\n\n for (var i = 2; i <= 14; i++) {\n if (Tables.bitrate_table[version][i] > 0) {\n if (Math.abs(Tables.bitrate_table[version][i] - bRate) < Math\n .abs(bitrate - bRate))\n bitrate = Tables.bitrate_table[version][i];\n }\n }\n return bitrate;\n }\n\n /**\n * @param bRate\n * legal rates from 32 to 448 kbps\n * @param version\n * MPEG-1 or MPEG-2/2.5 LSF\n */\n function BitrateIndex(bRate, version, samplerate) {\n /* convert bitrate in kbps to index */\n if (samplerate < 16000)\n version = 2;\n for (var i = 0; i <= 14; i++) {\n if (Tables.bitrate_table[version][i] > 0) {\n if (Tables.bitrate_table[version][i] == bRate) {\n return i;\n }\n }\n }\n return -1;\n }\n\n function optimum_bandwidth(lh, bitrate) {\n /**\n *
\n * Input:\n * bitrate total bitrate in kbps\n *\n * Output:\n * lowerlimit: best lowpass frequency limit for input filter in Hz\n * upperlimit: best highpass frequency limit for input filter in Hz\n *\n */\n var freq_map = [new BandPass(8, 2000),\n new BandPass(16, 3700), new BandPass(24, 3900),\n new BandPass(32, 5500), new BandPass(40, 7000),\n new BandPass(48, 7500), new BandPass(56, 10000),\n new BandPass(64, 11000), new BandPass(80, 13500),\n new BandPass(96, 15100), new BandPass(112, 15600),\n new BandPass(128, 17000), new BandPass(160, 17500),\n new BandPass(192, 18600), new BandPass(224, 19400),\n new BandPass(256, 19700), new BandPass(320, 20500)];\n\n var table_index = self.nearestBitrateFullIndex(bitrate);\n lh.lowerlimit = freq_map[table_index].lowpass;\n }\n\n function lame_init_params_ppflt(gfp) {\n var gfc = gfp.internal_flags;\n /***************************************************************/\n /* compute info needed for polyphase filter (filter type==0, default) */\n /***************************************************************/\n\n var lowpass_band = 32;\n var highpass_band = -1;\n\n if (gfc.lowpass1 > 0) {\n var minband = 999;\n for (var band = 0; band <= 31; band++) {\n var freq = (band / 31.0);\n /* this band and above will be zeroed: */\n if (freq >= gfc.lowpass2) {\n lowpass_band = Math.min(lowpass_band, band);\n }\n if (gfc.lowpass1 < freq && freq < gfc.lowpass2) {\n minband = Math.min(minband, band);\n }\n }\n\n /*\n * compute the *actual* transition band implemented by the polyphase\n * filter\n */\n if (minband == 999) {\n gfc.lowpass1 = (lowpass_band - .75) / 31.0;\n } else {\n gfc.lowpass1 = (minband - .75) / 31.0;\n }\n gfc.lowpass2 = lowpass_band / 31.0;\n }\n\n /*\n * make sure highpass filter is within 90% of what the effective\n * highpass frequency will be\n */\n if (gfc.highpass2 > 0) {\n if (gfc.highpass2 < .9 * (.75 / 31.0)) {\n gfc.highpass1 = 0;\n gfc.highpass2 = 0;\n System.err.println(\"Warning: highpass filter disabled. \"\n + \"highpass frequency too small\\n\");\n }\n }\n\n if (gfc.highpass2 > 0) {\n var maxband = -1;\n for (var band = 0; band <= 31; band++) {\n var freq = band / 31.0;\n /* this band and below will be zereod */\n if (freq <= gfc.highpass1) {\n highpass_band = Math.max(highpass_band, band);\n }\n if (gfc.highpass1 < freq && freq < gfc.highpass2) {\n maxband = Math.max(maxband, band);\n }\n }\n /*\n * compute the *actual* transition band implemented by the polyphase\n * filter\n */\n gfc.highpass1 = highpass_band / 31.0;\n if (maxband == -1) {\n gfc.highpass2 = (highpass_band + .75) / 31.0;\n } else {\n gfc.highpass2 = (maxband + .75) / 31.0;\n }\n }\n\n for (var band = 0; band < 32; band++) {\n var fc1, fc2;\n var freq = band / 31.0;\n if (gfc.highpass2 > gfc.highpass1) {\n fc1 = filter_coef((gfc.highpass2 - freq)\n / (gfc.highpass2 - gfc.highpass1 + 1e-20));\n } else {\n fc1 = 1.0;\n }\n if (gfc.lowpass2 > gfc.lowpass1) {\n fc2 = filter_coef((freq - gfc.lowpass1)\n / (gfc.lowpass2 - gfc.lowpass1 + 1e-20));\n } else {\n fc2 = 1.0;\n }\n gfc.amp_filter[band] = (fc1 * fc2);\n }\n }\n\n function lame_init_qval(gfp) {\n var gfc = gfp.internal_flags;\n\n switch (gfp.quality) {\n default:\n case 9: /* no psymodel, no noise shaping */\n gfc.psymodel = 0;\n gfc.noise_shaping = 0;\n gfc.noise_shaping_amp = 0;\n gfc.noise_shaping_stop = 0;\n gfc.use_best_huffman = 0;\n gfc.full_outer_loop = 0;\n break;\n\n case 8:\n gfp.quality = 7;\n //$FALL-THROUGH$\n case 7:\n /*\n * use psymodel (for short block and m/s switching), but no noise\n * shapping\n */\n gfc.psymodel = 1;\n gfc.noise_shaping = 0;\n gfc.noise_shaping_amp = 0;\n gfc.noise_shaping_stop = 0;\n gfc.use_best_huffman = 0;\n gfc.full_outer_loop = 0;\n break;\n\n case 6:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n gfc.noise_shaping_amp = 0;\n gfc.noise_shaping_stop = 0;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 0;\n gfc.full_outer_loop = 0;\n break;\n\n case 5:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n gfc.noise_shaping_amp = 0;\n gfc.noise_shaping_stop = 0;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 0;\n gfc.full_outer_loop = 0;\n break;\n\n case 4:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n gfc.noise_shaping_amp = 0;\n gfc.noise_shaping_stop = 0;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 1;\n gfc.full_outer_loop = 0;\n break;\n\n case 3:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n gfc.noise_shaping_amp = 1;\n gfc.noise_shaping_stop = 1;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 1;\n gfc.full_outer_loop = 0;\n break;\n\n case 2:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n if (gfc.substep_shaping == 0)\n gfc.substep_shaping = 2;\n gfc.noise_shaping_amp = 1;\n gfc.noise_shaping_stop = 1;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 1;\n /* inner loop */\n gfc.full_outer_loop = 0;\n break;\n\n case 1:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n if (gfc.substep_shaping == 0)\n gfc.substep_shaping = 2;\n gfc.noise_shaping_amp = 2;\n gfc.noise_shaping_stop = 1;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 1;\n gfc.full_outer_loop = 0;\n break;\n\n case 0:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n if (gfc.substep_shaping == 0)\n gfc.substep_shaping = 2;\n gfc.noise_shaping_amp = 2;\n gfc.noise_shaping_stop = 1;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 1;\n /*\n * type 2 disabled because of it slowness, in favor of full outer\n * loop search\n */\n gfc.full_outer_loop = 0;\n /*\n * full outer loop search disabled because of audible distortions it\n * may generate rh 060629\n */\n break;\n }\n\n }\n\n function lame_init_bitstream(gfp) {\n var gfc = gfp.internal_flags;\n gfp.frameNum = 0;\n\n if (gfp.write_id3tag_automatic) {\n id3.id3tag_write_v2(gfp);\n }\n /* initialize histogram data optionally used by frontend */\n\n gfc.bitrate_stereoMode_Hist = new_int_n([16, 4 + 1]);\n gfc.bitrate_blockType_Hist = new_int_n([16, 4 + 1 + 1]);\n\n gfc.PeakSample = 0.0;\n\n /* Write initial VBR Header to bitstream and init VBR data */\n if (gfp.bWriteVbrTag)\n vbr.InitVbrTag(gfp);\n }\n\n /********************************************************************\n * initialize internal params based on data in gf (globalflags struct filled\n * in by calling program)\n *\n * OUTLINE:\n *\n * We first have some complex code to determine bitrate, output samplerate\n * and mode. It is complicated by the fact that we allow the user to set\n * some or all of these parameters, and need to determine best possible\n * values for the rest of them:\n *\n * 1. set some CPU related flags 2. check if we are mono.mono, stereo.mono\n * or stereo.stereo 3. compute bitrate and output samplerate: user may have\n * set compression ratio user may have set a bitrate user may have set a\n * output samplerate 4. set some options which depend on output samplerate\n * 5. compute the actual compression ratio 6. set mode based on compression\n * ratio\n *\n * The remaining code is much simpler - it just sets options based on the\n * mode & compression ratio:\n *\n * set allow_diff_short based on mode select lowpass filter based on\n * compression ratio & mode set the bitrate index, and min/max bitrates for\n * VBR modes disable VBR tag if it is not appropriate initialize the\n * bitstream initialize scalefac_band data set sideinfo_len (based on\n * channels, CRC, out_samplerate) write an id3v2 tag into the bitstream\n * write VBR tag into the bitstream set mpeg1/2 flag estimate the number of\n * frames (based on a lot of data)\n *\n * now we set more flags: nspsytune: see code VBR modes see code CBR/ABR see\n * code\n *\n * Finally, we set the algorithm flags based on the gfp.quality value\n * lame_init_qval(gfp);\n *\n ********************************************************************/\n this.lame_init_params = function (gfp) {\n var gfc = gfp.internal_flags;\n\n gfc.Class_ID = 0;\n if (gfc.ATH == null)\n gfc.ATH = new ATH();\n if (gfc.PSY == null)\n gfc.PSY = new PSY();\n if (gfc.rgdata == null)\n gfc.rgdata = new ReplayGain();\n\n gfc.channels_in = gfp.num_channels;\n if (gfc.channels_in == 1)\n gfp.mode = MPEGMode.MONO;\n gfc.channels_out = (gfp.mode == MPEGMode.MONO) ? 1 : 2;\n gfc.mode_ext = Encoder.MPG_MD_MS_LR;\n if (gfp.mode == MPEGMode.MONO)\n gfp.force_ms = false;\n /*\n * don't allow forced mid/side stereo for mono output\n */\n\n if (gfp.VBR == VbrMode.vbr_off && gfp.VBR_mean_bitrate_kbps != 128\n && gfp.brate == 0)\n gfp.brate = gfp.VBR_mean_bitrate_kbps;\n\n if (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_mtrh\n || gfp.VBR == VbrMode.vbr_mt) {\n /* these modes can handle free format condition */\n } else {\n gfp.free_format = false;\n /* mode can't be mixed with free format */\n }\n\n if (gfp.VBR == VbrMode.vbr_off && gfp.brate == 0) {\n /* no bitrate or compression ratio specified, use 11.025 */\n if (BitStream.EQ(gfp.compression_ratio, 0))\n gfp.compression_ratio = 11.025;\n /*\n * rate to compress a CD down to exactly 128000 bps\n */\n }\n\n /* find bitrate if user specify a compression ratio */\n if (gfp.VBR == VbrMode.vbr_off && gfp.compression_ratio > 0) {\n\n if (gfp.out_samplerate == 0)\n gfp.out_samplerate = map2MP3Frequency((int)(0.97 * gfp.in_samplerate));\n /*\n * round up with a margin of 3 %\n */\n\n /*\n * choose a bitrate for the output samplerate which achieves\n * specified compression ratio\n */\n gfp.brate = 0 | (gfp.out_samplerate * 16 * gfc.channels_out / (1.e3 * gfp.compression_ratio));\n\n /* we need the version for the bitrate table look up */\n gfc.samplerate_index = SmpFrqIndex(gfp.out_samplerate, gfp);\n\n if (!gfp.free_format) /*\n * for non Free Format find the nearest allowed\n * bitrate\n */\n gfp.brate = FindNearestBitrate(gfp.brate, gfp.version,\n gfp.out_samplerate);\n }\n\n if (gfp.out_samplerate != 0) {\n if (gfp.out_samplerate < 16000) {\n gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps,\n 8);\n gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps,\n 64);\n } else if (gfp.out_samplerate < 32000) {\n gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps,\n 8);\n gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps,\n 160);\n } else {\n gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps,\n 32);\n gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps,\n 320);\n }\n }\n\n /****************************************************************/\n /* if a filter has not been enabled, see if we should add one: */\n /****************************************************************/\n if (gfp.lowpassfreq == 0) {\n var lowpass = 16000.;\n\n switch (gfp.VBR) {\n case VbrMode.vbr_off:\n {\n var lh = new LowPassHighPass();\n optimum_bandwidth(lh, gfp.brate);\n lowpass = lh.lowerlimit;\n break;\n }\n case VbrMode.vbr_abr:\n {\n var lh = new LowPassHighPass();\n optimum_bandwidth(lh, gfp.VBR_mean_bitrate_kbps);\n lowpass = lh.lowerlimit;\n break;\n }\n case VbrMode.vbr_rh:\n {\n var x = [19500, 19000, 18600, 18000, 17500, 16000,\n 15600, 14900, 12500, 10000, 3950];\n if (0 <= gfp.VBR_q && gfp.VBR_q <= 9) {\n var a = x[gfp.VBR_q], b = x[gfp.VBR_q + 1], m = gfp.VBR_q_frac;\n lowpass = linear_int(a, b, m);\n } else {\n lowpass = 19500;\n }\n break;\n }\n default:\n {\n var x = [19500, 19000, 18500, 18000, 17500, 16500,\n 15500, 14500, 12500, 9500, 3950];\n if (0 <= gfp.VBR_q && gfp.VBR_q <= 9) {\n var a = x[gfp.VBR_q], b = x[gfp.VBR_q + 1], m = gfp.VBR_q_frac;\n lowpass = linear_int(a, b, m);\n } else {\n lowpass = 19500;\n }\n }\n }\n if (gfp.mode == MPEGMode.MONO\n && (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_abr))\n lowpass *= 1.5;\n\n gfp.lowpassfreq = lowpass | 0;\n }\n\n if (gfp.out_samplerate == 0) {\n if (2 * gfp.lowpassfreq > gfp.in_samplerate) {\n gfp.lowpassfreq = gfp.in_samplerate / 2;\n }\n gfp.out_samplerate = optimum_samplefreq(gfp.lowpassfreq | 0,\n gfp.in_samplerate);\n }\n\n gfp.lowpassfreq = Math.min(20500, gfp.lowpassfreq);\n gfp.lowpassfreq = Math.min(gfp.out_samplerate / 2, gfp.lowpassfreq);\n\n if (gfp.VBR == VbrMode.vbr_off) {\n gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out\n / (1.e3 * gfp.brate);\n }\n if (gfp.VBR == VbrMode.vbr_abr) {\n gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out\n / (1.e3 * gfp.VBR_mean_bitrate_kbps);\n }\n\n /*\n * do not compute ReplayGain values and do not find the peak sample if\n * we can't store them\n */\n if (!gfp.bWriteVbrTag) {\n gfp.findReplayGain = false;\n gfp.decode_on_the_fly = false;\n gfc.findPeakSample = false;\n }\n gfc.findReplayGain = gfp.findReplayGain;\n gfc.decode_on_the_fly = gfp.decode_on_the_fly;\n\n if (gfc.decode_on_the_fly)\n gfc.findPeakSample = true;\n\n if (gfc.findReplayGain) {\n if (ga.InitGainAnalysis(gfc.rgdata, gfp.out_samplerate) == GainAnalysis.INIT_GAIN_ANALYSIS_ERROR) {\n gfp.internal_flags = null;\n return -6;\n }\n }\n\n if (gfc.decode_on_the_fly && !gfp.decode_only) {\n if (gfc.hip != null) {\n mpglib.hip_decode_exit(gfc.hip);\n }\n gfc.hip = mpglib.hip_decode_init();\n }\n\n gfc.mode_gr = gfp.out_samplerate <= 24000 ? 1 : 2;\n /*\n * Number of granules per frame\n */\n gfp.framesize = 576 * gfc.mode_gr;\n gfp.encoder_delay = Encoder.ENCDELAY;\n\n gfc.resample_ratio = gfp.in_samplerate / gfp.out_samplerate;\n\n /**\n *
\n * sample freq bitrate compression ratio\n * [kHz] [kbps/channel] for 16 bit input\n * 44.1 56 12.6\n * 44.1 64 11.025\n * 44.1 80 8.82\n * 22.05 24 14.7\n * 22.05 32 11.025\n * 22.05 40 8.82\n * 16 16 16.0\n * 16 24 10.667\n *\n */\n /**\n *
\n * For VBR, take a guess at the compression_ratio.\n * For example:\n *\n * VBR_q compression like\n * - 4.4 320 kbps/44 kHz\n * 0...1 5.5 256 kbps/44 kHz\n * 2 7.3 192 kbps/44 kHz\n * 4 8.8 160 kbps/44 kHz\n * 6 11 128 kbps/44 kHz\n * 9 14.7 96 kbps\n *\n * for lower bitrates, downsample with --resample\n *\n */\n switch (gfp.VBR) {\n case VbrMode.vbr_mt:\n case VbrMode.vbr_rh:\n case VbrMode.vbr_mtrh:\n {\n /* numbers are a bit strange, but they determine the lowpass value */\n var cmp = [5.7, 6.5, 7.3, 8.2, 10, 11.9, 13, 14,\n 15, 16.5];\n gfp.compression_ratio = cmp[gfp.VBR_q];\n }\n break;\n case VbrMode.vbr_abr:\n gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out\n / (1.e3 * gfp.VBR_mean_bitrate_kbps);\n break;\n default:\n gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out\n / (1.e3 * gfp.brate);\n break;\n }\n\n /*\n * mode = -1 (not set by user) or mode = MONO (because of only 1 input\n * channel). If mode has not been set, then select J-STEREO\n */\n if (gfp.mode == MPEGMode.NOT_SET) {\n gfp.mode = MPEGMode.JOINT_STEREO;\n }\n\n /* apply user driven high pass filter */\n if (gfp.highpassfreq > 0) {\n gfc.highpass1 = 2. * gfp.highpassfreq;\n\n if (gfp.highpasswidth >= 0)\n gfc.highpass2 = 2. * (gfp.highpassfreq + gfp.highpasswidth);\n else\n /* 0% above on default */\n gfc.highpass2 = (1 + 0.00) * 2. * gfp.highpassfreq;\n\n gfc.highpass1 /= gfp.out_samplerate;\n gfc.highpass2 /= gfp.out_samplerate;\n } else {\n gfc.highpass1 = 0;\n gfc.highpass2 = 0;\n }\n /* apply user driven low pass filter */\n if (gfp.lowpassfreq > 0) {\n gfc.lowpass2 = 2. * gfp.lowpassfreq;\n if (gfp.lowpasswidth >= 0) {\n gfc.lowpass1 = 2. * (gfp.lowpassfreq - gfp.lowpasswidth);\n if (gfc.lowpass1 < 0) /* has to be >= 0 */\n gfc.lowpass1 = 0;\n } else { /* 0% below on default */\n gfc.lowpass1 = (1 - 0.00) * 2. * gfp.lowpassfreq;\n }\n gfc.lowpass1 /= gfp.out_samplerate;\n gfc.lowpass2 /= gfp.out_samplerate;\n } else {\n gfc.lowpass1 = 0;\n gfc.lowpass2 = 0;\n }\n\n /**********************************************************************/\n /* compute info needed for polyphase filter (filter type==0, default) */\n /**********************************************************************/\n lame_init_params_ppflt(gfp);\n /*******************************************************\n * samplerate and bitrate index\n *******************************************************/\n gfc.samplerate_index = SmpFrqIndex(gfp.out_samplerate, gfp);\n if (gfc.samplerate_index < 0) {\n gfp.internal_flags = null;\n return -1;\n }\n\n if (gfp.VBR == VbrMode.vbr_off) {\n if (gfp.free_format) {\n gfc.bitrate_index = 0;\n } else {\n gfp.brate = FindNearestBitrate(gfp.brate, gfp.version,\n gfp.out_samplerate);\n gfc.bitrate_index = BitrateIndex(gfp.brate, gfp.version,\n gfp.out_samplerate);\n if (gfc.bitrate_index <= 0) {\n gfp.internal_flags = null;\n return -1;\n }\n }\n } else {\n gfc.bitrate_index = 1;\n }\n\n /* for CBR, we will write an \"info\" tag. */\n\n if (gfp.analysis)\n gfp.bWriteVbrTag = false;\n\n /* some file options not allowed if output is: not specified or stdout */\n if (gfc.pinfo != null)\n gfp.bWriteVbrTag = false;\n /* disable Xing VBR tag */\n\n bs.init_bit_stream_w(gfc);\n\n var j = gfc.samplerate_index + (3 * gfp.version) + 6\n * (gfp.out_samplerate < 16000 ? 1 : 0);\n for (var i = 0; i < Encoder.SBMAX_l + 1; i++)\n gfc.scalefac_band.l[i] = qupvt.sfBandIndex[j].l[i];\n\n for (var i = 0; i < Encoder.PSFB21 + 1; i++) {\n var size = (gfc.scalefac_band.l[22] - gfc.scalefac_band.l[21])\n / Encoder.PSFB21;\n var start = gfc.scalefac_band.l[21] + i * size;\n gfc.scalefac_band.psfb21[i] = start;\n }\n gfc.scalefac_band.psfb21[Encoder.PSFB21] = 576;\n\n for (var i = 0; i < Encoder.SBMAX_s + 1; i++)\n gfc.scalefac_band.s[i] = qupvt.sfBandIndex[j].s[i];\n\n for (var i = 0; i < Encoder.PSFB12 + 1; i++) {\n var size = (gfc.scalefac_band.s[13] - gfc.scalefac_band.s[12])\n / Encoder.PSFB12;\n var start = gfc.scalefac_band.s[12] + i * size;\n gfc.scalefac_band.psfb12[i] = start;\n }\n gfc.scalefac_band.psfb12[Encoder.PSFB12] = 192;\n /* determine the mean bitrate for main data */\n if (gfp.version == 1) /* MPEG 1 */\n gfc.sideinfo_len = (gfc.channels_out == 1) ? 4 + 17 : 4 + 32;\n else\n /* MPEG 2 */\n gfc.sideinfo_len = (gfc.channels_out == 1) ? 4 + 9 : 4 + 17;\n\n if (gfp.error_protection)\n gfc.sideinfo_len += 2;\n\n lame_init_bitstream(gfp);\n\n gfc.Class_ID = LAME_ID;\n\n {\n var k;\n\n for (k = 0; k < 19; k++)\n gfc.nsPsy.pefirbuf[k] = 700 * gfc.mode_gr * gfc.channels_out;\n\n if (gfp.ATHtype == -1)\n gfp.ATHtype = 4;\n }\n assert(gfp.VBR_q <= 9);\n assert(gfp.VBR_q >= 0);\n\n switch (gfp.VBR) {\n\n case VbrMode.vbr_mt:\n gfp.VBR = VbrMode.vbr_mtrh;\n //$FALL-THROUGH$\n case VbrMode.vbr_mtrh:\n {\n if (gfp.useTemporal == null) {\n gfp.useTemporal = false;\n /* off by default for this VBR mode */\n }\n\n p.apply_preset(gfp, 500 - (gfp.VBR_q * 10), 0);\n /**\n *
\n * The newer VBR code supports only a limited\n * subset of quality levels:\n * 9-5=5 are the same, uses x^3/4 quantization\n * 4-0=0 are the same 5 plus best huffman divide code\n *\n */\n if (gfp.quality < 0)\n gfp.quality = LAME_DEFAULT_QUALITY;\n if (gfp.quality < 5)\n gfp.quality = 0;\n if (gfp.quality > 5)\n gfp.quality = 5;\n\n gfc.PSY.mask_adjust = gfp.maskingadjust;\n gfc.PSY.mask_adjust_short = gfp.maskingadjust_short;\n\n /*\n * sfb21 extra only with MPEG-1 at higher sampling rates\n */\n if (gfp.experimentalY)\n gfc.sfb21_extra = false;\n else\n gfc.sfb21_extra = (gfp.out_samplerate > 44000);\n\n gfc.iteration_loop = new VBRNewIterationLoop(qu);\n break;\n\n }\n case VbrMode.vbr_rh:\n {\n\n p.apply_preset(gfp, 500 - (gfp.VBR_q * 10), 0);\n\n gfc.PSY.mask_adjust = gfp.maskingadjust;\n gfc.PSY.mask_adjust_short = gfp.maskingadjust_short;\n\n /*\n * sfb21 extra only with MPEG-1 at higher sampling rates\n */\n if (gfp.experimentalY)\n gfc.sfb21_extra = false;\n else\n gfc.sfb21_extra = (gfp.out_samplerate > 44000);\n\n /*\n * VBR needs at least the output of GPSYCHO, so we have to garantee\n * that by setting a minimum quality level, actually level 6 does\n * it. down to level 6\n */\n if (gfp.quality > 6)\n gfp.quality = 6;\n\n if (gfp.quality < 0)\n gfp.quality = LAME_DEFAULT_QUALITY;\n\n gfc.iteration_loop = new VBROldIterationLoop(qu);\n break;\n }\n\n default: /* cbr/abr */\n {\n var vbrmode;\n\n /*\n * no sfb21 extra with CBR code\n */\n gfc.sfb21_extra = false;\n\n if (gfp.quality < 0)\n gfp.quality = LAME_DEFAULT_QUALITY;\n\n vbrmode = gfp.VBR;\n if (vbrmode == VbrMode.vbr_off)\n gfp.VBR_mean_bitrate_kbps = gfp.brate;\n /* second, set parameters depending on bitrate */\n p.apply_preset(gfp, gfp.VBR_mean_bitrate_kbps, 0);\n gfp.VBR = vbrmode;\n\n gfc.PSY.mask_adjust = gfp.maskingadjust;\n gfc.PSY.mask_adjust_short = gfp.maskingadjust_short;\n\n if (vbrmode == VbrMode.vbr_off) {\n gfc.iteration_loop = new CBRNewIterationLoop(qu);\n } else {\n gfc.iteration_loop = new ABRIterationLoop(qu);\n }\n break;\n }\n }\n assert(gfp.scale >= 0);\n /* initialize default values common for all modes */\n\n if (gfp.VBR != VbrMode.vbr_off) { /* choose a min/max bitrate for VBR */\n /* if the user didn't specify VBR_max_bitrate: */\n gfc.VBR_min_bitrate = 1;\n /*\n * default: allow 8 kbps (MPEG-2) or 32 kbps (MPEG-1)\n */\n gfc.VBR_max_bitrate = 14;\n /*\n * default: allow 160 kbps (MPEG-2) or 320 kbps (MPEG-1)\n */\n if (gfp.out_samplerate < 16000)\n gfc.VBR_max_bitrate = 8;\n /* default: allow 64 kbps (MPEG-2.5) */\n if (gfp.VBR_min_bitrate_kbps != 0) {\n gfp.VBR_min_bitrate_kbps = FindNearestBitrate(\n gfp.VBR_min_bitrate_kbps, gfp.version,\n gfp.out_samplerate);\n gfc.VBR_min_bitrate = BitrateIndex(gfp.VBR_min_bitrate_kbps,\n gfp.version, gfp.out_samplerate);\n if (gfc.VBR_min_bitrate < 0)\n return -1;\n }\n if (gfp.VBR_max_bitrate_kbps != 0) {\n gfp.VBR_max_bitrate_kbps = FindNearestBitrate(\n gfp.VBR_max_bitrate_kbps, gfp.version,\n gfp.out_samplerate);\n gfc.VBR_max_bitrate = BitrateIndex(gfp.VBR_max_bitrate_kbps,\n gfp.version, gfp.out_samplerate);\n if (gfc.VBR_max_bitrate < 0)\n return -1;\n }\n gfp.VBR_min_bitrate_kbps = Tables.bitrate_table[gfp.version][gfc.VBR_min_bitrate];\n gfp.VBR_max_bitrate_kbps = Tables.bitrate_table[gfp.version][gfc.VBR_max_bitrate];\n gfp.VBR_mean_bitrate_kbps = Math.min(\n Tables.bitrate_table[gfp.version][gfc.VBR_max_bitrate],\n gfp.VBR_mean_bitrate_kbps);\n gfp.VBR_mean_bitrate_kbps = Math.max(\n Tables.bitrate_table[gfp.version][gfc.VBR_min_bitrate],\n gfp.VBR_mean_bitrate_kbps);\n }\n\n /* just another daily changing developer switch */\n if (gfp.tune) {\n gfc.PSY.mask_adjust += gfp.tune_value_a;\n gfc.PSY.mask_adjust_short += gfp.tune_value_a;\n }\n\n /* initialize internal qval settings */\n lame_init_qval(gfp);\n assert(gfp.scale >= 0);\n /*\n * automatic ATH adjustment on\n */\n if (gfp.athaa_type < 0)\n gfc.ATH.useAdjust = 3;\n else\n gfc.ATH.useAdjust = gfp.athaa_type;\n\n /* initialize internal adaptive ATH settings -jd */\n gfc.ATH.aaSensitivityP = Math.pow(10.0, gfp.athaa_sensitivity\n / -10.0);\n\n if (gfp.short_blocks == null) {\n gfp.short_blocks = ShortBlock.short_block_allowed;\n }\n\n /*\n * Note Jan/2003: Many hardware decoders cannot handle short blocks in\n * regular stereo mode unless they are coupled (same type in both\n * channels) it is a rare event (1 frame per min. or so) that LAME would\n * use uncoupled short blocks, so lets turn them off until we decide how\n * to handle this. No other encoders allow uncoupled short blocks, even\n * though it is in the standard.\n */\n /*\n * rh 20040217: coupling makes no sense for mono and dual-mono streams\n */\n if (gfp.short_blocks == ShortBlock.short_block_allowed\n && (gfp.mode == MPEGMode.JOINT_STEREO || gfp.mode == MPEGMode.STEREO)) {\n gfp.short_blocks = ShortBlock.short_block_coupled;\n }\n\n if (gfp.quant_comp < 0)\n gfp.quant_comp = 1;\n if (gfp.quant_comp_short < 0)\n gfp.quant_comp_short = 0;\n\n if (gfp.msfix < 0)\n gfp.msfix = 0;\n\n /* select psychoacoustic model */\n gfp.exp_nspsytune = gfp.exp_nspsytune | 1;\n\n if (gfp.internal_flags.nsPsy.attackthre < 0)\n gfp.internal_flags.nsPsy.attackthre = PsyModel.NSATTACKTHRE;\n if (gfp.internal_flags.nsPsy.attackthre_s < 0)\n gfp.internal_flags.nsPsy.attackthre_s = PsyModel.NSATTACKTHRE_S;\n\n assert(gfp.scale >= 0);\n\n if (gfp.scale < 0)\n gfp.scale = 1;\n\n if (gfp.ATHtype < 0)\n gfp.ATHtype = 4;\n\n if (gfp.ATHcurve < 0)\n gfp.ATHcurve = 4;\n\n if (gfp.athaa_loudapprox < 0)\n gfp.athaa_loudapprox = 2;\n\n if (gfp.interChRatio < 0)\n gfp.interChRatio = 0;\n\n if (gfp.useTemporal == null)\n gfp.useTemporal = true;\n /* on by default */\n\n /*\n * padding method as described in\n * \"MPEG-Layer3 / Bitstream Syntax and Decoding\" by Martin Sieler, Ralph\n * Sperschneider\n *\n * note: there is no padding for the very first frame\n *\n * Robert Hegemann 2000-06-22\n */\n gfc.slot_lag = gfc.frac_SpF = 0;\n if (gfp.VBR == VbrMode.vbr_off)\n gfc.slot_lag = gfc.frac_SpF = (((gfp.version + 1) * 72000 * gfp.brate) % gfp.out_samplerate) | 0;\n\n qupvt.iteration_init(gfp);\n psy.psymodel_init(gfp);\n assert(gfp.scale >= 0);\n return 0;\n }\n\n function update_inbuffer_size(gfc, nsamples) {\n if (gfc.in_buffer_0 == null || gfc.in_buffer_nsamples < nsamples) {\n gfc.in_buffer_0 = new_float(nsamples);\n gfc.in_buffer_1 = new_float(nsamples);\n gfc.in_buffer_nsamples = nsamples;\n }\n }\n\n this.lame_encode_flush = function (gfp, mp3buffer, mp3bufferPos, mp3buffer_size) {\n var gfc = gfp.internal_flags;\n var buffer = new_short_n([2, 1152]);\n var imp3 = 0, mp3count, mp3buffer_size_remaining;\n\n /*\n * we always add POSTDELAY=288 padding to make sure granule with real\n * data can be complety decoded (because of 50% overlap with next\n * granule\n */\n var end_padding;\n var frames_left;\n var samples_to_encode = gfc.mf_samples_to_encode - Encoder.POSTDELAY;\n var mf_needed = calcNeeded(gfp);\n\n /* Was flush already called? */\n if (gfc.mf_samples_to_encode < 1) {\n return 0;\n }\n mp3count = 0;\n\n if (gfp.in_samplerate != gfp.out_samplerate) {\n /*\n * delay due to resampling; needs to be fixed, if resampling code\n * gets changed\n */\n samples_to_encode += 16. * gfp.out_samplerate / gfp.in_samplerate;\n }\n end_padding = gfp.framesize - (samples_to_encode % gfp.framesize);\n if (end_padding < 576)\n end_padding += gfp.framesize;\n gfp.encoder_padding = end_padding;\n\n frames_left = (samples_to_encode + end_padding) / gfp.framesize;\n\n /*\n * send in a frame of 0 padding until all internal sample buffers are\n * flushed\n */\n while (frames_left > 0 && imp3 >= 0) {\n var bunch = mf_needed - gfc.mf_size;\n var frame_num = gfp.frameNum;\n\n bunch *= gfp.in_samplerate;\n bunch /= gfp.out_samplerate;\n if (bunch > 1152)\n bunch = 1152;\n if (bunch < 1)\n bunch = 1;\n\n mp3buffer_size_remaining = mp3buffer_size - mp3count;\n\n /* if user specifed buffer size = 0, dont check size */\n if (mp3buffer_size == 0)\n mp3buffer_size_remaining = 0;\n\n imp3 = this.lame_encode_buffer(gfp, buffer[0], buffer[1], bunch,\n mp3buffer, mp3bufferPos, mp3buffer_size_remaining);\n\n mp3bufferPos += imp3;\n mp3count += imp3;\n frames_left -= (frame_num != gfp.frameNum) ? 1 : 0;\n }\n /*\n * Set gfc.mf_samples_to_encode to 0, so we may detect and break loops\n * calling it more than once in a row.\n */\n gfc.mf_samples_to_encode = 0;\n\n if (imp3 < 0) {\n /* some type of fatal error */\n return imp3;\n }\n\n mp3buffer_size_remaining = mp3buffer_size - mp3count;\n /* if user specifed buffer size = 0, dont check size */\n if (mp3buffer_size == 0)\n mp3buffer_size_remaining = 0;\n\n /* mp3 related stuff. bit buffer might still contain some mp3 data */\n bs.flush_bitstream(gfp);\n imp3 = bs.copy_buffer(gfc, mp3buffer, mp3bufferPos,\n mp3buffer_size_remaining, 1);\n if (imp3 < 0) {\n /* some type of fatal error */\n return imp3;\n }\n mp3bufferPos += imp3;\n mp3count += imp3;\n mp3buffer_size_remaining = mp3buffer_size - mp3count;\n /* if user specifed buffer size = 0, dont check size */\n if (mp3buffer_size == 0)\n mp3buffer_size_remaining = 0;\n\n if (gfp.write_id3tag_automatic) {\n /* write a id3 tag to the bitstream */\n id3.id3tag_write_v1(gfp);\n\n imp3 = bs.copy_buffer(gfc, mp3buffer, mp3bufferPos,\n mp3buffer_size_remaining, 0);\n\n if (imp3 < 0) {\n return imp3;\n }\n mp3count += imp3;\n }\n return mp3count;\n };\n\n this.lame_encode_buffer = function (gfp, buffer_l, buffer_r, nsamples, mp3buf, mp3bufPos, mp3buf_size) {\n var gfc = gfp.internal_flags;\n var in_buffer = [null, null];\n\n if (gfc.Class_ID != LAME_ID)\n return -3;\n\n if (nsamples == 0)\n return 0;\n\n update_inbuffer_size(gfc, nsamples);\n\n in_buffer[0] = gfc.in_buffer_0;\n in_buffer[1] = gfc.in_buffer_1;\n\n /* make a copy of input buffer, changing type to sample_t */\n for (var i = 0; i < nsamples; i++) {\n in_buffer[0][i] = buffer_l[i];\n if (gfc.channels_in > 1)\n in_buffer[1][i] = buffer_r[i];\n }\n\n return lame_encode_buffer_sample(gfp, in_buffer[0], in_buffer[1],\n nsamples, mp3buf, mp3bufPos, mp3buf_size);\n }\n\n function calcNeeded(gfp) {\n var mf_needed = Encoder.BLKSIZE + gfp.framesize - Encoder.FFTOFFSET;\n /*\n * amount needed for FFT\n */\n mf_needed = Math.max(mf_needed, 512 + gfp.framesize - 32);\n assert(LameInternalFlags.MFSIZE >= mf_needed);\n\n return mf_needed;\n }\n\n function lame_encode_buffer_sample(gfp, buffer_l, buffer_r, nsamples, mp3buf, mp3bufPos, mp3buf_size) {\n var gfc = gfp.internal_flags;\n var mp3size = 0, ret, i, ch, mf_needed;\n var mp3out;\n var mfbuf = [null, null];\n var in_buffer = [null, null];\n\n if (gfc.Class_ID != LAME_ID)\n return -3;\n\n if (nsamples == 0)\n return 0;\n\n /* copy out any tags that may have been written into bitstream */\n mp3out = bs.copy_buffer(gfc, mp3buf, mp3bufPos, mp3buf_size, 0);\n if (mp3out < 0)\n return mp3out;\n /* not enough buffer space */\n mp3bufPos += mp3out;\n mp3size += mp3out;\n\n in_buffer[0] = buffer_l;\n in_buffer[1] = buffer_r;\n\n /* Apply user defined re-scaling */\n\n /* user selected scaling of the samples */\n if (BitStream.NEQ(gfp.scale, 0) && BitStream.NEQ(gfp.scale, 1.0)) {\n for (i = 0; i < nsamples; ++i) {\n in_buffer[0][i] *= gfp.scale;\n if (gfc.channels_out == 2)\n in_buffer[1][i] *= gfp.scale;\n }\n }\n\n /* user selected scaling of the channel 0 (left) samples */\n if (BitStream.NEQ(gfp.scale_left, 0)\n && BitStream.NEQ(gfp.scale_left, 1.0)) {\n for (i = 0; i < nsamples; ++i) {\n in_buffer[0][i] *= gfp.scale_left;\n }\n }\n\n /* user selected scaling of the channel 1 (right) samples */\n if (BitStream.NEQ(gfp.scale_right, 0)\n && BitStream.NEQ(gfp.scale_right, 1.0)) {\n for (i = 0; i < nsamples; ++i) {\n in_buffer[1][i] *= gfp.scale_right;\n }\n }\n\n /* Downsample to Mono if 2 channels in and 1 channel out */\n if (gfp.num_channels == 2 && gfc.channels_out == 1) {\n for (i = 0; i < nsamples; ++i) {\n in_buffer[0][i] = 0.5 * ( in_buffer[0][i] + in_buffer[1][i]);\n in_buffer[1][i] = 0.0;\n }\n }\n\n mf_needed = calcNeeded(gfp);\n\n mfbuf[0] = gfc.mfbuf[0];\n mfbuf[1] = gfc.mfbuf[1];\n\n var in_bufferPos = 0;\n while (nsamples > 0) {\n var in_buffer_ptr = [null, null];\n var n_in = 0;\n /* number of input samples processed with fill_buffer */\n var n_out = 0;\n /* number of samples output with fill_buffer */\n /* n_in <> n_out if we are resampling */\n\n in_buffer_ptr[0] = in_buffer[0];\n in_buffer_ptr[1] = in_buffer[1];\n /* copy in new samples into mfbuf, with resampling */\n var inOut = new InOut();\n fill_buffer(gfp, mfbuf, in_buffer_ptr, in_bufferPos, nsamples,\n inOut);\n n_in = inOut.n_in;\n n_out = inOut.n_out;\n\n /* compute ReplayGain of resampled input if requested */\n if (gfc.findReplayGain && !gfc.decode_on_the_fly)\n if (ga.AnalyzeSamples(gfc.rgdata, mfbuf[0], gfc.mf_size,\n mfbuf[1], gfc.mf_size, n_out, gfc.channels_out) == GainAnalysis.GAIN_ANALYSIS_ERROR)\n return -6;\n\n /* update in_buffer counters */\n nsamples -= n_in;\n in_bufferPos += n_in;\n if (gfc.channels_out == 2)\n ;// in_bufferPos += n_in;\n\n /* update mfbuf[] counters */\n gfc.mf_size += n_out;\n assert(gfc.mf_size <= LameInternalFlags.MFSIZE);\n\n /*\n * lame_encode_flush may have set gfc.mf_sample_to_encode to 0 so we\n * have to reinitialize it here when that happened.\n */\n if (gfc.mf_samples_to_encode < 1) {\n gfc.mf_samples_to_encode = Encoder.ENCDELAY + Encoder.POSTDELAY;\n }\n gfc.mf_samples_to_encode += n_out;\n\n if (gfc.mf_size >= mf_needed) {\n /* encode the frame. */\n /* mp3buf = pointer to current location in buffer */\n /* mp3buf_size = size of original mp3 output buffer */\n /* = 0 if we should not worry about the */\n /* buffer size because calling program is */\n /* to lazy to compute it */\n /* mp3size = size of data written to buffer so far */\n /* mp3buf_size-mp3size = amount of space avalable */\n\n var buf_size = mp3buf_size - mp3size;\n if (mp3buf_size == 0)\n buf_size = 0;\n\n ret = lame_encode_frame(gfp, mfbuf[0], mfbuf[1], mp3buf,\n mp3bufPos, buf_size);\n\n if (ret < 0)\n return ret;\n mp3bufPos += ret;\n mp3size += ret;\n\n /* shift out old samples */\n gfc.mf_size -= gfp.framesize;\n gfc.mf_samples_to_encode -= gfp.framesize;\n for (ch = 0; ch < gfc.channels_out; ch++)\n for (i = 0; i < gfc.mf_size; i++)\n mfbuf[ch][i] = mfbuf[ch][i + gfp.framesize];\n }\n }\n assert(nsamples == 0);\n\n return mp3size;\n }\n\n function lame_encode_frame(gfp, inbuf_l, inbuf_r, mp3buf, mp3bufPos, mp3buf_size) {\n var ret = self.enc.lame_encode_mp3_frame(gfp, inbuf_l, inbuf_r, mp3buf,\n mp3bufPos, mp3buf_size);\n gfp.frameNum++;\n return ret;\n }\n\n function InOut() {\n this.n_in = 0;\n this.n_out = 0;\n }\n\n\n function NumUsed() {\n this.num_used = 0;\n }\n\n /**\n * Greatest common divisor.\n *
\n * Joint work of Euclid and M. Hendry\n */\n function gcd(i, j) {\n return j != 0 ? gcd(j, i % j) : i;\n }\n\n /**\n * Resampling via FIR filter, blackman window.\n */\n function blackman(x, fcn, l) {\n /*\n * This algorithm from: SIGNAL PROCESSING ALGORITHMS IN FORTRAN AND C\n * S.D. Stearns and R.A. David, Prentice-Hall, 1992\n */\n var wcn = (Math.PI * fcn);\n\n x /= l;\n if (x < 0)\n x = 0;\n if (x > 1)\n x = 1;\n var x2 = x - .5;\n\n var bkwn = 0.42 - 0.5 * Math.cos(2 * x * Math.PI) + 0.08 * Math.cos(4 * x * Math.PI);\n if (Math.abs(x2) < 1e-9)\n return (wcn / Math.PI);\n else\n return (bkwn * Math.sin(l * wcn * x2) / (Math.PI * l * x2));\n }\n\n function fill_buffer_resample(gfp, outbuf, outbufPos, desired_len, inbuf, in_bufferPos, len, num_used, ch) {\n var gfc = gfp.internal_flags;\n var i, j = 0, k;\n /* number of convolution functions to pre-compute */\n var bpc = gfp.out_samplerate\n / gcd(gfp.out_samplerate, gfp.in_samplerate);\n if (bpc > LameInternalFlags.BPC)\n bpc = LameInternalFlags.BPC;\n\n var intratio = (Math.abs(gfc.resample_ratio\n - Math.floor(.5 + gfc.resample_ratio)) < .0001) ? 1 : 0;\n var fcn = 1.00 / gfc.resample_ratio;\n if (fcn > 1.00)\n fcn = 1.00;\n var filter_l = 31;\n if (0 == filter_l % 2)\n --filter_l;\n /* must be odd */\n filter_l += intratio;\n /* unless resample_ratio=int, it must be even */\n\n var BLACKSIZE = filter_l + 1;\n /* size of data needed for FIR */\n\n if (gfc.fill_buffer_resample_init == 0) {\n gfc.inbuf_old[0] = new_float(BLACKSIZE);\n gfc.inbuf_old[1] = new_float(BLACKSIZE);\n for (i = 0; i <= 2 * bpc; ++i)\n gfc.blackfilt[i] = new_float(BLACKSIZE);\n\n gfc.itime[0] = 0;\n gfc.itime[1] = 0;\n\n /* precompute blackman filter coefficients */\n for (j = 0; j <= 2 * bpc; j++) {\n var sum = 0.;\n var offset = (j - bpc) / (2. * bpc);\n for (i = 0; i <= filter_l; i++)\n sum += gfc.blackfilt[j][i] = blackman(i - offset, fcn,\n filter_l);\n for (i = 0; i <= filter_l; i++)\n gfc.blackfilt[j][i] /= sum;\n }\n gfc.fill_buffer_resample_init = 1;\n }\n\n var inbuf_old = gfc.inbuf_old[ch];\n\n /* time of j'th element in inbuf = itime + j/ifreq; */\n /* time of k'th element in outbuf = j/ofreq */\n for (k = 0; k < desired_len; k++) {\n var time0;\n var joff;\n\n time0 = k * gfc.resample_ratio;\n /* time of k'th output sample */\n j = 0 | Math.floor(time0 - gfc.itime[ch]);\n\n /* check if we need more input data */\n if ((filter_l + j - filter_l / 2) >= len)\n break;\n\n /* blackman filter. by default, window centered at j+.5(filter_l%2) */\n /* but we want a window centered at time0. */\n var offset = (time0 - gfc.itime[ch] - (j + .5 * (filter_l % 2)));\n assert(Math.abs(offset) <= .501);\n\n /* find the closest precomputed window for this offset: */\n joff = 0 | Math.floor((offset * 2 * bpc) + bpc + .5);\n var xvalue = 0.;\n for (i = 0; i <= filter_l; ++i) {\n var j2 = i + j - filter_l / 2;\n var y;\n assert(j2 < len);\n assert(j2 + BLACKSIZE >= 0);\n y = (j2 < 0) ? inbuf_old[BLACKSIZE + j2] : inbuf[in_bufferPos\n + j2];\n xvalue += y * gfc.blackfilt[joff][i];\n }\n outbuf[outbufPos + k] = xvalue;\n }\n\n /* k = number of samples added to outbuf */\n /* last k sample used data from [j-filter_l/2,j+filter_l-filter_l/2] */\n\n /* how many samples of input data were used: */\n num_used.num_used = Math.min(len, filter_l + j - filter_l / 2);\n\n /*\n * adjust our input time counter. Incriment by the number of samples\n * used, then normalize so that next output sample is at time 0, next\n * input buffer is at time itime[ch]\n */\n gfc.itime[ch] += num_used.num_used - k * gfc.resample_ratio;\n\n /* save the last BLACKSIZE samples into the inbuf_old buffer */\n if (num_used.num_used >= BLACKSIZE) {\n for (i = 0; i < BLACKSIZE; i++)\n inbuf_old[i] = inbuf[in_bufferPos + num_used.num_used + i\n - BLACKSIZE];\n } else {\n /* shift in num_used.num_used samples into inbuf_old */\n var n_shift = BLACKSIZE - num_used.num_used;\n /*\n * number of samples to\n * shift\n */\n\n /*\n * shift n_shift samples by num_used.num_used, to make room for the\n * num_used new samples\n */\n for (i = 0; i < n_shift; ++i)\n inbuf_old[i] = inbuf_old[i + num_used.num_used];\n\n /* shift in the num_used.num_used samples */\n for (j = 0; i < BLACKSIZE; ++i, ++j)\n inbuf_old[i] = inbuf[in_bufferPos + j];\n\n assert(j == num_used.num_used);\n }\n return k;\n /* return the number samples created at the new samplerate */\n }\n\n function fill_buffer(gfp, mfbuf, in_buffer, in_bufferPos, nsamples, io) {\n var gfc = gfp.internal_flags;\n\n /* copy in new samples into mfbuf, with resampling if necessary */\n if ((gfc.resample_ratio < .9999) || (gfc.resample_ratio > 1.0001)) {\n for (var ch = 0; ch < gfc.channels_out; ch++) {\n var numUsed = new NumUsed();\n io.n_out = fill_buffer_resample(gfp, mfbuf[ch], gfc.mf_size,\n gfp.framesize, in_buffer[ch], in_bufferPos, nsamples,\n numUsed, ch);\n io.n_in = numUsed.num_used;\n }\n } else {\n io.n_out = Math.min(gfp.framesize, nsamples);\n io.n_in = io.n_out;\n for (var i = 0; i < io.n_out; ++i) {\n mfbuf[0][gfc.mf_size + i] = in_buffer[0][in_bufferPos + i];\n if (gfc.channels_out == 2)\n mfbuf[1][gfc.mf_size + i] = in_buffer[1][in_bufferPos + i];\n }\n }\n }\n\n}\n\nmodule.exports = Lame;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nfunction Presets() {\n function VBRPresets(qual, comp, compS,\n y, shThreshold, shThresholdS,\n adj, adjShort, lower,\n curve, sens, inter,\n joint, mod, fix) {\n this.vbr_q = qual;\n this.quant_comp = comp;\n this.quant_comp_s = compS;\n this.expY = y;\n this.st_lrm = shThreshold;\n this.st_s = shThresholdS;\n this.masking_adj = adj;\n this.masking_adj_short = adjShort;\n this.ath_lower = lower;\n this.ath_curve = curve;\n this.ath_sensitivity = sens;\n this.interch = inter;\n this.safejoint = joint;\n this.sfb21mod = mod;\n this.msfix = fix;\n }\n\n function ABRPresets(kbps, comp, compS,\n joint, fix, shThreshold,\n shThresholdS, bass, sc,\n mask, lower, curve,\n interCh, sfScale) {\n this.quant_comp = comp;\n this.quant_comp_s = compS;\n this.safejoint = joint;\n this.nsmsfix = fix;\n this.st_lrm = shThreshold;\n this.st_s = shThresholdS;\n this.nsbass = bass;\n this.scale = sc;\n this.masking_adj = mask;\n this.ath_lower = lower;\n this.ath_curve = curve;\n this.interch = interCh;\n this.sfscale = sfScale;\n }\n\n var lame;\n\n this.setModules = function (_lame) {\n lame = _lame;\n };\n\n /**\n *
\n * Switch mappings for VBR mode VBR_RH\n * vbr_q qcomp_l qcomp_s expY st_lrm st_s mask adj_l adj_s ath_lower ath_curve ath_sens interChR safejoint sfb21mod msfix\n *\n */\n var vbr_old_switch_map = [\n new VBRPresets(0, 9, 9, 0, 5.20, 125.0, -4.2, -6.3, 4.8, 1, 0, 0, 2, 21, 0.97),\n new VBRPresets(1, 9, 9, 0, 5.30, 125.0, -3.6, -5.6, 4.5, 1.5, 0, 0, 2, 21, 1.35),\n new VBRPresets(2, 9, 9, 0, 5.60, 125.0, -2.2, -3.5, 2.8, 2, 0, 0, 2, 21, 1.49),\n new VBRPresets(3, 9, 9, 1, 5.80, 130.0, -1.8, -2.8, 2.6, 3, -4, 0, 2, 20, 1.64),\n new VBRPresets(4, 9, 9, 1, 6.00, 135.0, -0.7, -1.1, 1.1, 3.5, -8, 0, 2, 0, 1.79),\n new VBRPresets(5, 9, 9, 1, 6.40, 140.0, 0.5, 0.4, -7.5, 4, -12, 0.0002, 0, 0, 1.95),\n new VBRPresets(6, 9, 9, 1, 6.60, 145.0, 0.67, 0.65, -14.7, 6.5, -19, 0.0004, 0, 0, 2.30),\n new VBRPresets(7, 9, 9, 1, 6.60, 145.0, 0.8, 0.75, -19.7, 8, -22, 0.0006, 0, 0, 2.70),\n new VBRPresets(8, 9, 9, 1, 6.60, 145.0, 1.2, 1.15, -27.5, 10, -23, 0.0007, 0, 0, 0),\n new VBRPresets(9, 9, 9, 1, 6.60, 145.0, 1.6, 1.6, -36, 11, -25, 0.0008, 0, 0, 0),\n new VBRPresets(10, 9, 9, 1, 6.60, 145.0, 2.0, 2.0, -36, 12, -25, 0.0008, 0, 0, 0)\n ];\n\n /**\n *
\n * vbr_q qcomp_l qcomp_s expY st_lrm st_s mask adj_l adj_s ath_lower ath_curve ath_sens interChR safejoint sfb21mod msfix\n *\n */\n var vbr_psy_switch_map = [\n new VBRPresets(0, 9, 9, 0, 4.20, 25.0, -7.0, -4.0, 7.5, 1, 0, 0, 2, 26, 0.97),\n new VBRPresets(1, 9, 9, 0, 4.20, 25.0, -5.6, -3.6, 4.5, 1.5, 0, 0, 2, 21, 1.35),\n new VBRPresets(2, 9, 9, 0, 4.20, 25.0, -4.4, -1.8, 2, 2, 0, 0, 2, 18, 1.49),\n new VBRPresets(3, 9, 9, 1, 4.20, 25.0, -3.4, -1.25, 1.1, 3, -4, 0, 2, 15, 1.64),\n new VBRPresets(4, 9, 9, 1, 4.20, 25.0, -2.2, 0.1, 0, 3.5, -8, 0, 2, 0, 1.79),\n new VBRPresets(5, 9, 9, 1, 4.20, 25.0, -1.0, 1.65, -7.7, 4, -12, 0.0002, 0, 0, 1.95),\n new VBRPresets(6, 9, 9, 1, 4.20, 25.0, -0.0, 2.47, -7.7, 6.5, -19, 0.0004, 0, 0, 2),\n new VBRPresets(7, 9, 9, 1, 4.20, 25.0, 0.5, 2.0, -14.5, 8, -22, 0.0006, 0, 0, 2),\n new VBRPresets(8, 9, 9, 1, 4.20, 25.0, 1.0, 2.4, -22.0, 10, -23, 0.0007, 0, 0, 2),\n new VBRPresets(9, 9, 9, 1, 4.20, 25.0, 1.5, 2.95, -30.0, 11, -25, 0.0008, 0, 0, 2),\n new VBRPresets(10, 9, 9, 1, 4.20, 25.0, 2.0, 2.95, -36.0, 12, -30, 0.0008, 0, 0, 2)\n ];\n\n function apply_vbr_preset(gfp, a, enforce) {\n var vbr_preset = gfp.VBR == VbrMode.vbr_rh ? vbr_old_switch_map\n : vbr_psy_switch_map;\n\n var x = gfp.VBR_q_frac;\n var p = vbr_preset[a];\n var q = vbr_preset[a + 1];\n var set = p;\n\n // NOOP(vbr_q);\n // NOOP(quant_comp);\n // NOOP(quant_comp_s);\n // NOOP(expY);\n p.st_lrm = p.st_lrm + x * (q.st_lrm - p.st_lrm);\n // LERP(st_lrm);\n p.st_s = p.st_s + x * (q.st_s - p.st_s);\n // LERP(st_s);\n p.masking_adj = p.masking_adj + x * (q.masking_adj - p.masking_adj);\n // LERP(masking_adj);\n p.masking_adj_short = p.masking_adj_short + x\n * (q.masking_adj_short - p.masking_adj_short);\n // LERP(masking_adj_short);\n p.ath_lower = p.ath_lower + x * (q.ath_lower - p.ath_lower);\n // LERP(ath_lower);\n p.ath_curve = p.ath_curve + x * (q.ath_curve - p.ath_curve);\n // LERP(ath_curve);\n p.ath_sensitivity = p.ath_sensitivity + x\n * (q.ath_sensitivity - p.ath_sensitivity);\n // LERP(ath_sensitivity);\n p.interch = p.interch + x * (q.interch - p.interch);\n // LERP(interch);\n // NOOP(safejoint);\n // NOOP(sfb21mod);\n p.msfix = p.msfix + x * (q.msfix - p.msfix);\n // LERP(msfix);\n\n lame_set_VBR_q(gfp, set.vbr_q);\n\n if (enforce != 0)\n gfp.quant_comp = set.quant_comp;\n else if (!(Math.abs(gfp.quant_comp - -1) > 0))\n gfp.quant_comp = set.quant_comp;\n // SET_OPTION(quant_comp, set.quant_comp, -1);\n if (enforce != 0)\n gfp.quant_comp_short = set.quant_comp_s;\n else if (!(Math.abs(gfp.quant_comp_short - -1) > 0))\n gfp.quant_comp_short = set.quant_comp_s;\n // SET_OPTION(quant_comp_short, set.quant_comp_s, -1);\n if (set.expY != 0) {\n gfp.experimentalY = set.expY != 0;\n }\n if (enforce != 0)\n gfp.internal_flags.nsPsy.attackthre = set.st_lrm;\n else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre - -1) > 0))\n gfp.internal_flags.nsPsy.attackthre = set.st_lrm;\n // SET_OPTION(short_threshold_lrm, set.st_lrm, -1);\n if (enforce != 0)\n gfp.internal_flags.nsPsy.attackthre_s = set.st_s;\n else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre_s - -1) > 0))\n gfp.internal_flags.nsPsy.attackthre_s = set.st_s;\n // SET_OPTION(short_threshold_s, set.st_s, -1);\n if (enforce != 0)\n gfp.maskingadjust = set.masking_adj;\n else if (!(Math.abs(gfp.maskingadjust - 0) > 0))\n gfp.maskingadjust = set.masking_adj;\n // SET_OPTION(maskingadjust, set.masking_adj, 0);\n if (enforce != 0)\n gfp.maskingadjust_short = set.masking_adj_short;\n else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0))\n gfp.maskingadjust_short = set.masking_adj_short;\n // SET_OPTION(maskingadjust_short, set.masking_adj_short, 0);\n if (enforce != 0)\n gfp.ATHlower = -set.ath_lower / 10.0;\n else if (!(Math.abs((-gfp.ATHlower * 10.0) - 0) > 0))\n gfp.ATHlower = -set.ath_lower / 10.0;\n // SET_OPTION(ATHlower, set.ath_lower, 0);\n if (enforce != 0)\n gfp.ATHcurve = set.ath_curve;\n else if (!(Math.abs(gfp.ATHcurve - -1) > 0))\n gfp.ATHcurve = set.ath_curve;\n // SET_OPTION(ATHcurve, set.ath_curve, -1);\n if (enforce != 0)\n gfp.athaa_sensitivity = set.ath_sensitivity;\n else if (!(Math.abs(gfp.athaa_sensitivity - -1) > 0))\n gfp.athaa_sensitivity = set.ath_sensitivity;\n // SET_OPTION(athaa_sensitivity, set.ath_sensitivity, 0);\n if (set.interch > 0) {\n if (enforce != 0)\n gfp.interChRatio = set.interch;\n else if (!(Math.abs(gfp.interChRatio - -1) > 0))\n gfp.interChRatio = set.interch;\n // SET_OPTION(interChRatio, set.interch, -1);\n }\n\n /* parameters for which there is no proper set/get interface */\n if (set.safejoint > 0) {\n gfp.exp_nspsytune = gfp.exp_nspsytune | set.safejoint;\n }\n if (set.sfb21mod > 0) {\n gfp.exp_nspsytune = gfp.exp_nspsytune | (set.sfb21mod << 20);\n }\n if (enforce != 0)\n gfp.msfix = set.msfix;\n else if (!(Math.abs(gfp.msfix - -1) > 0))\n gfp.msfix = set.msfix;\n // SET_OPTION(msfix, set.msfix, -1);\n\n if (enforce == 0) {\n gfp.VBR_q = a;\n gfp.VBR_q_frac = x;\n }\n }\n\n /**\n *
\n * Switch mappings for ABR mode\n *\n * kbps quant q_s safejoint nsmsfix st_lrm st_s ns-bass scale msk ath_lwr ath_curve interch , sfscale\n *\n */\n var abr_switch_map = [\n new ABRPresets(8, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -30.0, 11, 0.0012, 1), /* 8, impossible to use in stereo */\n new ABRPresets(16, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -25.0, 11, 0.0010, 1), /* 16 */\n new ABRPresets(24, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -20.0, 11, 0.0010, 1), /* 24 */\n new ABRPresets(32, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -15.0, 11, 0.0010, 1), /* 32 */\n new ABRPresets(40, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -10.0, 11, 0.0009, 1), /* 40 */\n new ABRPresets(48, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -10.0, 11, 0.0009, 1), /* 48 */\n new ABRPresets(56, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -6.0, 11, 0.0008, 1), /* 56 */\n new ABRPresets(64, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -2.0, 11, 0.0008, 1), /* 64 */\n new ABRPresets(80, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, .0, 8, 0.0007, 1), /* 80 */\n new ABRPresets(96, 9, 9, 0, 2.50, 6.60, 145, 0, 0.95, 0, 1.0, 5.5, 0.0006, 1), /* 96 */\n new ABRPresets(112, 9, 9, 0, 2.25, 6.60, 145, 0, 0.95, 0, 2.0, 4.5, 0.0005, 1), /* 112 */\n new ABRPresets(128, 9, 9, 0, 1.95, 6.40, 140, 0, 0.95, 0, 3.0, 4, 0.0002, 1), /* 128 */\n new ABRPresets(160, 9, 9, 1, 1.79, 6.00, 135, 0, 0.95, -2, 5.0, 3.5, 0, 1), /* 160 */\n new ABRPresets(192, 9, 9, 1, 1.49, 5.60, 125, 0, 0.97, -4, 7.0, 3, 0, 0), /* 192 */\n new ABRPresets(224, 9, 9, 1, 1.25, 5.20, 125, 0, 0.98, -6, 9.0, 2, 0, 0), /* 224 */\n new ABRPresets(256, 9, 9, 1, 0.97, 5.20, 125, 0, 1.00, -8, 10.0, 1, 0, 0), /* 256 */\n new ABRPresets(320, 9, 9, 1, 0.90, 5.20, 125, 0, 1.00, -10, 12.0, 0, 0, 0) /* 320 */\n ];\n\n function apply_abr_preset(gfp, preset, enforce) {\n /* Variables for the ABR stuff */\n var actual_bitrate = preset;\n\n var r = lame.nearestBitrateFullIndex(preset);\n\n gfp.VBR = VbrMode.vbr_abr;\n gfp.VBR_mean_bitrate_kbps = actual_bitrate;\n gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps, 320);\n gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps, 8);\n gfp.brate = gfp.VBR_mean_bitrate_kbps;\n if (gfp.VBR_mean_bitrate_kbps > 320) {\n gfp.disable_reservoir = true;\n }\n\n /* parameters for which there is no proper set/get interface */\n if (abr_switch_map[r].safejoint > 0)\n gfp.exp_nspsytune = gfp.exp_nspsytune | 2;\n /* safejoint */\n\n if (abr_switch_map[r].sfscale > 0) {\n gfp.internal_flags.noise_shaping = 2;\n }\n /* ns-bass tweaks */\n if (Math.abs(abr_switch_map[r].nsbass) > 0) {\n var k = (int)(abr_switch_map[r].nsbass * 4);\n if (k < 0)\n k += 64;\n gfp.exp_nspsytune = gfp.exp_nspsytune | (k << 2);\n }\n\n if (enforce != 0)\n gfp.quant_comp = abr_switch_map[r].quant_comp;\n else if (!(Math.abs(gfp.quant_comp - -1) > 0))\n gfp.quant_comp = abr_switch_map[r].quant_comp;\n // SET_OPTION(quant_comp, abr_switch_map[r].quant_comp, -1);\n if (enforce != 0)\n gfp.quant_comp_short = abr_switch_map[r].quant_comp_s;\n else if (!(Math.abs(gfp.quant_comp_short - -1) > 0))\n gfp.quant_comp_short = abr_switch_map[r].quant_comp_s;\n // SET_OPTION(quant_comp_short, abr_switch_map[r].quant_comp_s, -1);\n\n if (enforce != 0)\n gfp.msfix = abr_switch_map[r].nsmsfix;\n else if (!(Math.abs(gfp.msfix - -1) > 0))\n gfp.msfix = abr_switch_map[r].nsmsfix;\n // SET_OPTION(msfix, abr_switch_map[r].nsmsfix, -1);\n\n if (enforce != 0)\n gfp.internal_flags.nsPsy.attackthre = abr_switch_map[r].st_lrm;\n else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre - -1) > 0))\n gfp.internal_flags.nsPsy.attackthre = abr_switch_map[r].st_lrm;\n // SET_OPTION(short_threshold_lrm, abr_switch_map[r].st_lrm, -1);\n if (enforce != 0)\n gfp.internal_flags.nsPsy.attackthre_s = abr_switch_map[r].st_s;\n else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre_s - -1) > 0))\n gfp.internal_flags.nsPsy.attackthre_s = abr_switch_map[r].st_s;\n // SET_OPTION(short_threshold_s, abr_switch_map[r].st_s, -1);\n\n /*\n * ABR seems to have big problems with clipping, especially at low\n * bitrates\n */\n /*\n * so we compensate for that here by using a scale value depending on\n * bitrate\n */\n if (enforce != 0)\n gfp.scale = abr_switch_map[r].scale;\n else if (!(Math.abs(gfp.scale - -1) > 0))\n gfp.scale = abr_switch_map[r].scale;\n // SET_OPTION(scale, abr_switch_map[r].scale, -1);\n\n if (enforce != 0)\n gfp.maskingadjust = abr_switch_map[r].masking_adj;\n else if (!(Math.abs(gfp.maskingadjust - 0) > 0))\n gfp.maskingadjust = abr_switch_map[r].masking_adj;\n // SET_OPTION(maskingadjust, abr_switch_map[r].masking_adj, 0);\n if (abr_switch_map[r].masking_adj > 0) {\n if (enforce != 0)\n gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * .9);\n else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0))\n gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * .9);\n // SET_OPTION(maskingadjust_short, abr_switch_map[r].masking_adj *\n // .9, 0);\n } else {\n if (enforce != 0)\n gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * 1.1);\n else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0))\n gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * 1.1);\n // SET_OPTION(maskingadjust_short, abr_switch_map[r].masking_adj *\n // 1.1, 0);\n }\n\n if (enforce != 0)\n gfp.ATHlower = -abr_switch_map[r].ath_lower / 10.;\n else if (!(Math.abs((-gfp.ATHlower * 10.) - 0) > 0))\n gfp.ATHlower = -abr_switch_map[r].ath_lower / 10.;\n // SET_OPTION(ATHlower, abr_switch_map[r].ath_lower, 0);\n if (enforce != 0)\n gfp.ATHcurve = abr_switch_map[r].ath_curve;\n else if (!(Math.abs(gfp.ATHcurve - -1) > 0))\n gfp.ATHcurve = abr_switch_map[r].ath_curve;\n // SET_OPTION(ATHcurve, abr_switch_map[r].ath_curve, -1);\n\n if (enforce != 0)\n gfp.interChRatio = abr_switch_map[r].interch;\n else if (!(Math.abs(gfp.interChRatio - -1) > 0))\n gfp.interChRatio = abr_switch_map[r].interch;\n // SET_OPTION(interChRatio, abr_switch_map[r].interch, -1);\n\n return preset;\n }\n\n this.apply_preset = function(gfp, preset, enforce) {\n /* translate legacy presets */\n switch (preset) {\n case Lame.R3MIX:\n {\n preset = Lame.V3;\n gfp.VBR = VbrMode.vbr_mtrh;\n break;\n }\n case Lame.MEDIUM:\n {\n preset = Lame.V4;\n gfp.VBR = VbrMode.vbr_rh;\n break;\n }\n case Lame.MEDIUM_FAST:\n {\n preset = Lame.V4;\n gfp.VBR = VbrMode.vbr_mtrh;\n break;\n }\n case Lame.STANDARD:\n {\n preset = Lame.V2;\n gfp.VBR = VbrMode.vbr_rh;\n break;\n }\n case Lame.STANDARD_FAST:\n {\n preset = Lame.V2;\n gfp.VBR = VbrMode.vbr_mtrh;\n break;\n }\n case Lame.EXTREME:\n {\n preset = Lame.V0;\n gfp.VBR = VbrMode.vbr_rh;\n break;\n }\n case Lame.EXTREME_FAST:\n {\n preset = Lame.V0;\n gfp.VBR = VbrMode.vbr_mtrh;\n break;\n }\n case Lame.INSANE:\n {\n preset = 320;\n gfp.preset = preset;\n apply_abr_preset(gfp, preset, enforce);\n gfp.VBR = VbrMode.vbr_off;\n return preset;\n }\n }\n\n gfp.preset = preset;\n {\n switch (preset) {\n case Lame.V9:\n apply_vbr_preset(gfp, 9, enforce);\n return preset;\n case Lame.V8:\n apply_vbr_preset(gfp, 8, enforce);\n return preset;\n case Lame.V7:\n apply_vbr_preset(gfp, 7, enforce);\n return preset;\n case Lame.V6:\n apply_vbr_preset(gfp, 6, enforce);\n return preset;\n case Lame.V5:\n apply_vbr_preset(gfp, 5, enforce);\n return preset;\n case Lame.V4:\n apply_vbr_preset(gfp, 4, enforce);\n return preset;\n case Lame.V3:\n apply_vbr_preset(gfp, 3, enforce);\n return preset;\n case Lame.V2:\n apply_vbr_preset(gfp, 2, enforce);\n return preset;\n case Lame.V1:\n apply_vbr_preset(gfp, 1, enforce);\n return preset;\n case Lame.V0:\n apply_vbr_preset(gfp, 0, enforce);\n return preset;\n default:\n break;\n }\n }\n if (8 <= preset && preset <= 320) {\n return apply_abr_preset(gfp, preset, enforce);\n }\n\n /* no corresponding preset found */\n gfp.preset = 0;\n return preset;\n }\n\n // Rest from getset.c:\n\n /**\n * VBR quality level.
\n * Amplify the scalefactor bands that violate the masking threshold.\n * See ISO 11172-3 Section C.1.5.4.3.5\n *\n * distort[] = noise/masking\n * distort[] > 1 ==> noise is not masked\n * distort[] < 1 ==> noise is masked\n * max_dist = maximum value of distort[]\n *\n * Three algorithms:\n * noise_shaping_amp\n * 0 Amplify all bands with distort[]>1.\n *\n * 1 Amplify all bands with distort[] >= max_dist^(.5);\n * ( 50% in the db scale)\n *\n * 2 Amplify first band with distort[] >= max_dist;\n *\n *\n * For algorithms 0 and 1, if max_dist < 1, then amplify all bands\n * with distort[] >= .95*max_dist. This is to make sure we always\n * amplify at least one band.\n *\n */\n function amp_scalefac_bands(gfp, cod_info, distort, xrpow, bRefine) {\n var gfc = gfp.internal_flags;\n var ifqstep34;\n\n if (cod_info.scalefac_scale == 0) {\n ifqstep34 = 1.29683955465100964055;\n /* 2**(.75*.5) */\n } else {\n ifqstep34 = 1.68179283050742922612;\n /* 2**(.75*1) */\n }\n\n /* compute maximum value of distort[] */\n var trigger = 0;\n for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) {\n if (trigger < distort[sfb])\n trigger = distort[sfb];\n }\n\n var noise_shaping_amp = gfc.noise_shaping_amp;\n if (noise_shaping_amp == 3) {\n if (bRefine)\n noise_shaping_amp = 2;\n else\n noise_shaping_amp = 1;\n }\n switch (noise_shaping_amp) {\n case 2:\n /* amplify exactly 1 band */\n break;\n\n case 1:\n /* amplify bands within 50% of max (on db scale) */\n if (trigger > 1.0)\n trigger = Math.pow(trigger, .5);\n else\n trigger *= .95;\n break;\n\n case 0:\n default:\n /* ISO algorithm. amplify all bands with distort>1 */\n if (trigger > 1.0)\n trigger = 1.0;\n else\n trigger *= .95;\n break;\n }\n\n var j = 0;\n for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) {\n var width = cod_info.width[sfb];\n var l;\n j += width;\n if (distort[sfb] < trigger)\n continue;\n\n if ((gfc.substep_shaping & 2) != 0) {\n gfc.pseudohalf[sfb] = (0 == gfc.pseudohalf[sfb]) ? 1 : 0;\n if (0 == gfc.pseudohalf[sfb] && gfc.noise_shaping_amp == 2)\n return;\n }\n cod_info.scalefac[sfb]++;\n for (l = -width; l < 0; l++) {\n xrpow[j + l] *= ifqstep34;\n if (xrpow[j + l] > cod_info.xrpow_max)\n cod_info.xrpow_max = xrpow[j + l];\n }\n\n if (gfc.noise_shaping_amp == 2)\n return;\n }\n }\n\n /**\n * Takehiro Tominaga 2000-xx-xx\n *\n * turns on scalefac scale and adjusts scalefactors\n */\n function inc_scalefac_scale(cod_info, xrpow) {\n var ifqstep34 = 1.29683955465100964055;\n\n var j = 0;\n for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) {\n var width = cod_info.width[sfb];\n var s = cod_info.scalefac[sfb];\n if (cod_info.preflag != 0)\n s += qupvt.pretab[sfb];\n j += width;\n if ((s & 1) != 0) {\n s++;\n for (var l = -width; l < 0; l++) {\n xrpow[j + l] *= ifqstep34;\n if (xrpow[j + l] > cod_info.xrpow_max)\n cod_info.xrpow_max = xrpow[j + l];\n }\n }\n cod_info.scalefac[sfb] = s >> 1;\n }\n cod_info.preflag = 0;\n cod_info.scalefac_scale = 1;\n }\n\n /**\n * Takehiro Tominaga 2000-xx-xx\n *\n * increases the subblock gain and adjusts scalefactors\n */\n function inc_subblock_gain(gfc, cod_info, xrpow) {\n var sfb;\n var scalefac = cod_info.scalefac;\n\n /* subbloc_gain can't do anything in the long block region */\n for (sfb = 0; sfb < cod_info.sfb_lmax; sfb++) {\n if (scalefac[sfb] >= 16)\n return true;\n }\n\n for (var window = 0; window < 3; window++) {\n var s1 = 0;\n var s2 = 0;\n\n for (sfb = cod_info.sfb_lmax + window; sfb < cod_info.sfbdivide; sfb += 3) {\n if (s1 < scalefac[sfb])\n s1 = scalefac[sfb];\n }\n for (; sfb < cod_info.sfbmax; sfb += 3) {\n if (s2 < scalefac[sfb])\n s2 = scalefac[sfb];\n }\n\n if (s1 < 16 && s2 < 8)\n continue;\n\n if (cod_info.subblock_gain[window] >= 7)\n return true;\n\n /*\n * even though there is no scalefactor for sfb12 subblock gain\n * affects upper frequencies too, that's why we have to go up to\n * SBMAX_s\n */\n cod_info.subblock_gain[window]++;\n var j = gfc.scalefac_band.l[cod_info.sfb_lmax];\n for (sfb = cod_info.sfb_lmax + window; sfb < cod_info.sfbmax; sfb += 3) {\n var amp;\n var width = cod_info.width[sfb];\n var s = scalefac[sfb];\n assert(s >= 0);\n s = s - (4 >> cod_info.scalefac_scale);\n if (s >= 0) {\n scalefac[sfb] = s;\n j += width * 3;\n continue;\n }\n\n scalefac[sfb] = 0;\n {\n var gain = 210 + (s << (cod_info.scalefac_scale + 1));\n amp = qupvt.IPOW20(gain);\n }\n j += width * (window + 1);\n for (var l = -width; l < 0; l++) {\n xrpow[j + l] *= amp;\n if (xrpow[j + l] > cod_info.xrpow_max)\n cod_info.xrpow_max = xrpow[j + l];\n }\n j += width * (3 - window - 1);\n }\n\n {\n var amp = qupvt.IPOW20(202);\n j += cod_info.width[sfb] * (window + 1);\n for (var l = -cod_info.width[sfb]; l < 0; l++) {\n xrpow[j + l] *= amp;\n if (xrpow[j + l] > cod_info.xrpow_max)\n cod_info.xrpow_max = xrpow[j + l];\n }\n }\n }\n return false;\n }\n\n /**\n *
\n * Takehiro Tominaga /date??\n * Robert Hegemann 2000-09-06: made a function of it\n *\n * amplifies scalefactor bands,\n * - if all are already amplified returns 0\n * - if some bands are amplified too much:\n * * try to increase scalefac_scale\n * * if already scalefac_scale was set\n * try on short blocks to increase subblock gain\n *\n */\n function balance_noise(gfp, cod_info, distort, xrpow, bRefine) {\n var gfc = gfp.internal_flags;\n\n amp_scalefac_bands(gfp, cod_info, distort, xrpow, bRefine);\n\n /*\n * check to make sure we have not amplified too much loop_break returns\n * 0 if there is an unamplified scalefac scale_bitcount returns 0 if no\n * scalefactors are too large\n */\n\n var status = loop_break(cod_info);\n\n if (status)\n return false;\n /* all bands amplified */\n\n /*\n * not all scalefactors have been amplified. so these scalefacs are\n * possibly valid. encode them:\n */\n if (gfc.mode_gr == 2)\n status = tk.scale_bitcount(cod_info);\n else\n status = tk.scale_bitcount_lsf(gfc, cod_info);\n\n if (!status)\n return true;\n /* amplified some bands not exceeding limits */\n\n /*\n * some scalefactors are too large. lets try setting scalefac_scale=1\n */\n if (gfc.noise_shaping > 1) {\n Arrays.fill(gfc.pseudohalf, 0);\n if (0 == cod_info.scalefac_scale) {\n inc_scalefac_scale(cod_info, xrpow);\n status = false;\n } else {\n if (cod_info.block_type == Encoder.SHORT_TYPE\n && gfc.subblock_gain > 0) {\n status = (inc_subblock_gain(gfc, cod_info, xrpow) || loop_break(cod_info));\n }\n }\n }\n\n if (!status) {\n if (gfc.mode_gr == 2)\n status = tk.scale_bitcount(cod_info);\n else\n status = tk.scale_bitcount_lsf(gfc, cod_info);\n }\n return !status;\n }\n\n /**\n *
\n * Function: The outer iteration loop controls the masking conditions\n * of all scalefactorbands. It computes the best scalefac and\n * global gain. This module calls the inner iteration loop\n *\n * mt 5/99 completely rewritten to allow for bit reservoir control,\n * mid/side channels with L/R or mid/side masking thresholds,\n * and chooses best quantization instead of last quantization when\n * no distortion free quantization can be found.\n *\n * added VBR support mt 5/99\n *\n * some code shuffle rh 9/00\n *\n *\n * @param l3_xmin\n * allowed distortion\n * @param xrpow\n * coloured magnitudes of spectral\n * @param targ_bits\n * maximum allowed bits\n */\n this.outer_loop = function (gfp, cod_info, l3_xmin, xrpow, ch, targ_bits) {\n var gfc = gfp.internal_flags;\n var cod_info_w = new GrInfo();\n var save_xrpow = new_float(576);\n var distort = new_float(L3Side.SFBMAX);\n var best_noise_info = new CalcNoiseResult();\n var better;\n var prev_noise = new CalcNoiseData();\n var best_part2_3_length = 9999999;\n var bEndOfSearch = false;\n var bRefine = false;\n var best_ggain_pass1 = 0;\n\n bin_search_StepSize(gfc, cod_info, targ_bits, ch, xrpow);\n\n if (0 == gfc.noise_shaping)\n /* fast mode, no noise shaping, we are ready */\n return 100;\n /* default noise_info.over_count */\n\n /* compute the distortion in this quantization */\n /* coefficients and thresholds both l/r (or both mid/side) */\n qupvt.calc_noise(cod_info, l3_xmin, distort, best_noise_info,\n prev_noise);\n best_noise_info.bits = cod_info.part2_3_length;\n\n cod_info_w.assign(cod_info);\n var age = 0;\n System.arraycopy(xrpow, 0, save_xrpow, 0, 576);\n\n while (!bEndOfSearch) {\n /* BEGIN MAIN LOOP */\n do {\n var noise_info = new CalcNoiseResult();\n var search_limit;\n var maxggain = 255;\n\n /*\n * When quantization with no distorted bands is found, allow up\n * to X new unsuccesful tries in serial. This gives us more\n * possibilities for different quant_compare modes. Much more\n * than 3 makes not a big difference, it is only slower.\n */\n\n if ((gfc.substep_shaping & 2) != 0) {\n search_limit = 20;\n } else {\n search_limit = 3;\n }\n\n /*\n * Check if the last scalefactor band is distorted. in VBR mode\n * we can't get rid of the distortion, so quit now and VBR mode\n * will try again with more bits. (makes a 10% speed increase,\n * the files I tested were binary identical, 2000/05/20 Robert\n * Hegemann) distort[] > 1 means noise > allowed noise\n */\n if (gfc.sfb21_extra) {\n if (distort[cod_info_w.sfbmax] > 1.0)\n break;\n if (cod_info_w.block_type == Encoder.SHORT_TYPE\n && (distort[cod_info_w.sfbmax + 1] > 1.0 || distort[cod_info_w.sfbmax + 2] > 1.0))\n break;\n }\n\n /* try a new scalefactor conbination on cod_info_w */\n if (!balance_noise(gfp, cod_info_w, distort, xrpow, bRefine))\n break;\n if (cod_info_w.scalefac_scale != 0)\n maxggain = 254;\n\n /*\n * inner_loop starts with the initial quantization step computed\n * above and slowly increases until the bits < huff_bits. Thus\n * it is important not to start with too large of an inital\n * quantization step. Too small is ok, but inner_loop will take\n * longer\n */\n var huff_bits = targ_bits - cod_info_w.part2_length;\n if (huff_bits <= 0)\n break;\n\n /*\n * increase quantizer stepsize until needed bits are below\n * maximum\n */\n while ((cod_info_w.part2_3_length = tk.count_bits(gfc, xrpow,\n cod_info_w, prev_noise)) > huff_bits\n && cod_info_w.global_gain <= maxggain)\n cod_info_w.global_gain++;\n\n if (cod_info_w.global_gain > maxggain)\n break;\n\n if (best_noise_info.over_count == 0) {\n\n while ((cod_info_w.part2_3_length = tk.count_bits(gfc,\n xrpow, cod_info_w, prev_noise)) > best_part2_3_length\n && cod_info_w.global_gain <= maxggain)\n cod_info_w.global_gain++;\n\n if (cod_info_w.global_gain > maxggain)\n break;\n }\n\n /* compute the distortion in this quantization */\n qupvt.calc_noise(cod_info_w, l3_xmin, distort, noise_info,\n prev_noise);\n noise_info.bits = cod_info_w.part2_3_length;\n\n /*\n * check if this quantization is better than our saved\n * quantization\n */\n if (cod_info.block_type != Encoder.SHORT_TYPE) {\n // NORM, START or STOP type\n better = gfp.quant_comp;\n } else\n better = gfp.quant_comp_short;\n\n better = quant_compare(better, best_noise_info, noise_info,\n cod_info_w, distort) ? 1 : 0;\n\n /* save data so we can restore this quantization later */\n if (better != 0) {\n best_part2_3_length = cod_info.part2_3_length;\n best_noise_info = noise_info;\n cod_info.assign(cod_info_w);\n age = 0;\n /* save data so we can restore this quantization later */\n /* store for later reuse */\n System.arraycopy(xrpow, 0, save_xrpow, 0, 576);\n } else {\n /* early stop? */\n if (gfc.full_outer_loop == 0) {\n if (++age > search_limit\n && best_noise_info.over_count == 0)\n break;\n if ((gfc.noise_shaping_amp == 3) && bRefine && age > 30)\n break;\n if ((gfc.noise_shaping_amp == 3)\n && bRefine\n && (cod_info_w.global_gain - best_ggain_pass1) > 15)\n break;\n }\n }\n } while ((cod_info_w.global_gain + cod_info_w.scalefac_scale) < 255);\n\n if (gfc.noise_shaping_amp == 3) {\n if (!bRefine) {\n /* refine search */\n cod_info_w.assign(cod_info);\n System.arraycopy(save_xrpow, 0, xrpow, 0, 576);\n age = 0;\n best_ggain_pass1 = cod_info_w.global_gain;\n\n bRefine = true;\n } else {\n /* search already refined, stop */\n bEndOfSearch = true;\n }\n\n } else {\n bEndOfSearch = true;\n }\n }\n\n assert((cod_info.global_gain + cod_info.scalefac_scale) <= 255);\n /*\n * finish up\n */\n if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh)\n /* restore for reuse on next try */\n System.arraycopy(save_xrpow, 0, xrpow, 0, 576);\n /*\n * do the 'substep shaping'\n */\n else if ((gfc.substep_shaping & 1) != 0)\n trancate_smallspectrums(gfc, cod_info, l3_xmin, xrpow);\n\n return best_noise_info.over_count;\n }\n\n /**\n * Robert Hegemann 2000-09-06\n *\n * update reservoir status after FINAL quantization/bitrate\n */\n this.iteration_finish_one = function (gfc, gr, ch) {\n var l3_side = gfc.l3_side;\n var cod_info = l3_side.tt[gr][ch];\n\n /*\n * try some better scalefac storage\n */\n tk.best_scalefac_store(gfc, gr, ch, l3_side);\n\n /*\n * best huffman_divide may save some bits too\n */\n if (gfc.use_best_huffman == 1)\n tk.best_huffman_divide(gfc, cod_info);\n\n /*\n * update reservoir status after FINAL quantization/bitrate\n */\n rv.ResvAdjust(gfc, cod_info);\n };\n\n /**\n *\n * 2000-09-04 Robert Hegemann\n *\n * @param l3_xmin\n * allowed distortion of the scalefactor\n * @param xrpow\n * coloured magnitudes of spectral values\n */\n this.VBR_encode_granule = function (gfp, cod_info, l3_xmin, xrpow, ch, min_bits, max_bits) {\n var gfc = gfp.internal_flags;\n var bst_cod_info = new GrInfo();\n var bst_xrpow = new_float(576);\n var Max_bits = max_bits;\n var real_bits = max_bits + 1;\n var this_bits = (max_bits + min_bits) / 2;\n var dbits, over, found = 0;\n var sfb21_extra = gfc.sfb21_extra;\n\n assert(Max_bits <= LameInternalFlags.MAX_BITS_PER_CHANNEL);\n Arrays.fill(bst_cod_info.l3_enc, 0);\n\n /*\n * search within round about 40 bits of optimal\n */\n do {\n assert(this_bits >= min_bits);\n assert(this_bits <= max_bits);\n assert(min_bits <= max_bits);\n\n if (this_bits > Max_bits - 42)\n gfc.sfb21_extra = false;\n else\n gfc.sfb21_extra = sfb21_extra;\n\n over = outer_loop(gfp, cod_info, l3_xmin, xrpow, ch, this_bits);\n\n /*\n * is quantization as good as we are looking for ? in this case: is\n * no scalefactor band distorted?\n */\n if (over <= 0) {\n found = 1;\n /*\n * now we know it can be done with \"real_bits\" and maybe we can\n * skip some iterations\n */\n real_bits = cod_info.part2_3_length;\n\n /*\n * store best quantization so far\n */\n bst_cod_info.assign(cod_info);\n System.arraycopy(xrpow, 0, bst_xrpow, 0, 576);\n\n /*\n * try with fewer bits\n */\n max_bits = real_bits - 32;\n dbits = max_bits - min_bits;\n this_bits = (max_bits + min_bits) / 2;\n } else {\n /*\n * try with more bits\n */\n min_bits = this_bits + 32;\n dbits = max_bits - min_bits;\n this_bits = (max_bits + min_bits) / 2;\n\n if (found != 0) {\n found = 2;\n /*\n * start again with best quantization so far\n */\n cod_info.assign(bst_cod_info);\n System.arraycopy(bst_xrpow, 0, xrpow, 0, 576);\n }\n }\n } while (dbits > 12);\n\n gfc.sfb21_extra = sfb21_extra;\n\n /*\n * found=0 => nothing found, use last one found=1 => we just found the\n * best and left the loop found=2 => we restored a good one and have now\n * l3_enc to restore too\n */\n if (found == 2) {\n System.arraycopy(bst_cod_info.l3_enc, 0, cod_info.l3_enc, 0, 576);\n }\n assert(cod_info.part2_3_length <= Max_bits);\n }\n\n /**\n * Robert Hegemann 2000-09-05\n *\n * calculates * how many bits are available for analog silent granules * how\n * many bits to use for the lowest allowed bitrate * how many bits each\n * bitrate would provide\n */\n this.get_framebits = function (gfp, frameBits) {\n var gfc = gfp.internal_flags;\n\n /*\n * always use at least this many bits per granule per channel unless we\n * detect analog silence, see below\n */\n gfc.bitrate_index = gfc.VBR_min_bitrate;\n var bitsPerFrame = bs.getframebits(gfp);\n\n /*\n * bits for analog silence\n */\n gfc.bitrate_index = 1;\n bitsPerFrame = bs.getframebits(gfp);\n\n for (var i = 1; i <= gfc.VBR_max_bitrate; i++) {\n gfc.bitrate_index = i;\n var mb = new MeanBits(bitsPerFrame);\n frameBits[i] = rv.ResvFrameBegin(gfp, mb);\n bitsPerFrame = mb.bits;\n }\n };\n\n /* RH: this one needs to be overhauled sometime */\n\n /**\n *
\n * 2000-09-04 Robert Hegemann\n *\n * * converts LR to MS coding when necessary\n * * calculates allowed/adjusted quantization noise amounts\n * * detects analog silent frames\n *\n * some remarks:\n * - lower masking depending on Quality setting\n * - quality control together with adjusted ATH MDCT scaling\n * on lower quality setting allocate more noise from\n * ATH masking, and on higher quality setting allocate\n * less noise from ATH masking.\n * - experiments show that going more than 2dB over GPSYCHO's\n * limits ends up in very annoying artefacts\n *\n */\n this.VBR_old_prepare = function (gfp, pe, ms_ener_ratio, ratio, l3_xmin, frameBits, min_bits,\n max_bits, bands) {\n var gfc = gfp.internal_flags;\n\n var masking_lower_db, adjust = 0.0;\n var analog_silence = 1;\n var bits = 0;\n\n gfc.bitrate_index = gfc.VBR_max_bitrate;\n var avg = rv.ResvFrameBegin(gfp, new MeanBits(0)) / gfc.mode_gr;\n\n get_framebits(gfp, frameBits);\n\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n var mxb = qupvt.on_pe(gfp, pe, max_bits[gr], avg, gr, 0);\n if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) {\n ms_convert(gfc.l3_side, gr);\n qupvt.reduce_side(max_bits[gr], ms_ener_ratio[gr], avg, mxb);\n }\n for (var ch = 0; ch < gfc.channels_out; ++ch) {\n var cod_info = gfc.l3_side.tt[gr][ch];\n\n if (cod_info.block_type != Encoder.SHORT_TYPE) {\n // NORM, START or STOP type\n adjust = 1.28 / (1 + Math\n .exp(3.5 - pe[gr][ch] / 300.)) - 0.05;\n masking_lower_db = gfc.PSY.mask_adjust - adjust;\n } else {\n adjust = 2.56 / (1 + Math\n .exp(3.5 - pe[gr][ch] / 300.)) - 0.14;\n masking_lower_db = gfc.PSY.mask_adjust_short - adjust;\n }\n gfc.masking_lower = Math.pow(10.0,\n masking_lower_db * 0.1);\n\n init_outer_loop(gfc, cod_info);\n bands[gr][ch] = qupvt.calc_xmin(gfp, ratio[gr][ch], cod_info,\n l3_xmin[gr][ch]);\n if (bands[gr][ch] != 0)\n analog_silence = 0;\n\n min_bits[gr][ch] = 126;\n\n bits += max_bits[gr][ch];\n }\n }\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n for (var ch = 0; ch < gfc.channels_out; ch++) {\n if (bits > frameBits[gfc.VBR_max_bitrate]) {\n max_bits[gr][ch] *= frameBits[gfc.VBR_max_bitrate];\n max_bits[gr][ch] /= bits;\n }\n if (min_bits[gr][ch] > max_bits[gr][ch])\n min_bits[gr][ch] = max_bits[gr][ch];\n\n }\n /* for ch */\n }\n /* for gr */\n\n return analog_silence;\n };\n\n this.bitpressure_strategy = function (gfc, l3_xmin, min_bits, max_bits) {\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n for (var ch = 0; ch < gfc.channels_out; ch++) {\n var gi = gfc.l3_side.tt[gr][ch];\n var pxmin = l3_xmin[gr][ch];\n var pxminPos = 0;\n for (var sfb = 0; sfb < gi.psy_lmax; sfb++)\n pxmin[pxminPos++] *= 1. + .029 * sfb * sfb\n / Encoder.SBMAX_l / Encoder.SBMAX_l;\n\n if (gi.block_type == Encoder.SHORT_TYPE) {\n for (var sfb = gi.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) {\n pxmin[pxminPos++] *= 1. + .029 * sfb * sfb\n / Encoder.SBMAX_s / Encoder.SBMAX_s;\n pxmin[pxminPos++] *= 1. + .029 * sfb * sfb\n / Encoder.SBMAX_s / Encoder.SBMAX_s;\n pxmin[pxminPos++] *= 1. + .029 * sfb * sfb\n / Encoder.SBMAX_s / Encoder.SBMAX_s;\n }\n }\n max_bits[gr][ch] = 0 | Math.max(min_bits[gr][ch],\n 0.9 * max_bits[gr][ch]);\n }\n }\n };\n\n this.VBR_new_prepare = function (gfp, pe, ratio, l3_xmin, frameBits, max_bits) {\n var gfc = gfp.internal_flags;\n\n var analog_silence = 1;\n var avg = 0, bits = 0;\n var maximum_framebits;\n\n if (!gfp.free_format) {\n gfc.bitrate_index = gfc.VBR_max_bitrate;\n\n var mb = new MeanBits(avg);\n rv.ResvFrameBegin(gfp, mb);\n avg = mb.bits;\n\n get_framebits(gfp, frameBits);\n maximum_framebits = frameBits[gfc.VBR_max_bitrate];\n } else {\n gfc.bitrate_index = 0;\n var mb = new MeanBits(avg);\n maximum_framebits = rv.ResvFrameBegin(gfp, mb);\n avg = mb.bits;\n frameBits[0] = maximum_framebits;\n }\n\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n qupvt.on_pe(gfp, pe, max_bits[gr], avg, gr, 0);\n if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) {\n ms_convert(gfc.l3_side, gr);\n }\n for (var ch = 0; ch < gfc.channels_out; ++ch) {\n var cod_info = gfc.l3_side.tt[gr][ch];\n\n gfc.masking_lower = Math.pow(10.0,\n gfc.PSY.mask_adjust * 0.1);\n\n init_outer_loop(gfc, cod_info);\n if (0 != qupvt.calc_xmin(gfp, ratio[gr][ch], cod_info,\n l3_xmin[gr][ch]))\n analog_silence = 0;\n\n bits += max_bits[gr][ch];\n }\n }\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n for (var ch = 0; ch < gfc.channels_out; ch++) {\n if (bits > maximum_framebits) {\n max_bits[gr][ch] *= maximum_framebits;\n max_bits[gr][ch] /= bits;\n }\n\n }\n /* for ch */\n }\n /* for gr */\n\n return analog_silence;\n };\n\n /**\n * calculates target bits for ABR encoding\n *\n * mt 2000/05/31\n */\n this.calc_target_bits = function (gfp, pe, ms_ener_ratio, targ_bits, analog_silence_bits, max_frame_bits) {\n var gfc = gfp.internal_flags;\n var l3_side = gfc.l3_side;\n var res_factor;\n var gr, ch, totbits, mean_bits = 0;\n\n gfc.bitrate_index = gfc.VBR_max_bitrate;\n var mb = new MeanBits(mean_bits);\n max_frame_bits[0] = rv.ResvFrameBegin(gfp, mb);\n mean_bits = mb.bits;\n\n gfc.bitrate_index = 1;\n mean_bits = bs.getframebits(gfp) - gfc.sideinfo_len * 8;\n analog_silence_bits[0] = mean_bits / (gfc.mode_gr * gfc.channels_out);\n\n mean_bits = gfp.VBR_mean_bitrate_kbps * gfp.framesize * 1000;\n if ((gfc.substep_shaping & 1) != 0)\n mean_bits *= 1.09;\n mean_bits /= gfp.out_samplerate;\n mean_bits -= gfc.sideinfo_len * 8;\n mean_bits /= (gfc.mode_gr * gfc.channels_out);\n\n /**\n *
\n * res_factor is the percentage of the target bitrate that should\n * be used on average. the remaining bits are added to the\n * bitreservoir and used for difficult to encode frames.\n *\n * Since we are tracking the average bitrate, we should adjust\n * res_factor \"on the fly\", increasing it if the average bitrate\n * is greater than the requested bitrate, and decreasing it\n * otherwise. Reasonable ranges are from .9 to 1.0\n *\n * Until we get the above suggestion working, we use the following\n * tuning:\n * compression ratio res_factor\n * 5.5 (256kbps) 1.0 no need for bitreservoir\n * 11 (128kbps) .93 7% held for reservoir\n *\n * with linear interpolation for other values.\n *\n */\n res_factor = .93 + .07 * (11.0 - gfp.compression_ratio)\n / (11.0 - 5.5);\n if (res_factor < .90)\n res_factor = .90;\n if (res_factor > 1.00)\n res_factor = 1.00;\n\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n var sum = 0;\n for (ch = 0; ch < gfc.channels_out; ch++) {\n targ_bits[gr][ch] = (int)(res_factor * mean_bits);\n\n if (pe[gr][ch] > 700) {\n var add_bits = (int)((pe[gr][ch] - 700) / 1.4);\n\n var cod_info = l3_side.tt[gr][ch];\n targ_bits[gr][ch] = (int)(res_factor * mean_bits);\n\n /* short blocks use a little extra, no matter what the pe */\n if (cod_info.block_type == Encoder.SHORT_TYPE) {\n if (add_bits < mean_bits / 2)\n add_bits = mean_bits / 2;\n }\n /* at most increase bits by 1.5*average */\n if (add_bits > mean_bits * 3 / 2)\n add_bits = mean_bits * 3 / 2;\n else if (add_bits < 0)\n add_bits = 0;\n\n targ_bits[gr][ch] += add_bits;\n }\n if (targ_bits[gr][ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL) {\n targ_bits[gr][ch] = LameInternalFlags.MAX_BITS_PER_CHANNEL;\n }\n sum += targ_bits[gr][ch];\n }\n /* for ch */\n if (sum > LameInternalFlags.MAX_BITS_PER_GRANULE) {\n for (ch = 0; ch < gfc.channels_out; ++ch) {\n targ_bits[gr][ch] *= LameInternalFlags.MAX_BITS_PER_GRANULE;\n targ_bits[gr][ch] /= sum;\n }\n }\n }\n /* for gr */\n\n if (gfc.mode_ext == Encoder.MPG_MD_MS_LR)\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n qupvt.reduce_side(targ_bits[gr], ms_ener_ratio[gr], mean_bits\n * gfc.channels_out,\n LameInternalFlags.MAX_BITS_PER_GRANULE);\n }\n\n /*\n * sum target bits\n */\n totbits = 0;\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n if (targ_bits[gr][ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL)\n targ_bits[gr][ch] = LameInternalFlags.MAX_BITS_PER_CHANNEL;\n totbits += targ_bits[gr][ch];\n }\n }\n\n /*\n * repartion target bits if needed\n */\n if (totbits > max_frame_bits[0]) {\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n targ_bits[gr][ch] *= max_frame_bits[0];\n targ_bits[gr][ch] /= totbits;\n }\n }\n }\n }\n\n}\n\nmodule.exports = Quantize;\n","/*\n * bit reservoir source file\n *\n * Copyright (c) 1999-2000 Mark Taylor\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Library General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the\n * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n * Boston, MA 02111-1307, USA.\n */\n\n/* $Id: Reservoir.java,v 1.9 2011/05/24 20:48:06 kenchis Exp $ */\n\n//package mp3;\n\n/**\n * ResvFrameBegin:
\n * 1. The following rule can be used to calculate the maximum\n * number of bits used for one granule [^W frame]:\n */\n\nvar common = require('./common.js');\nvar assert = common.assert;\n\nfunction Reservoir() {\n\tvar bs;\n\n\tthis.setModules = function(_bs) {\n\t\tbs = _bs;\n\t}\n\n\tthis.ResvFrameBegin = function(gfp, mean_bits) {\n\t\tvar gfc = gfp.internal_flags;\n\t\tvar maxmp3buf;\n\t\tvar l3_side = gfc.l3_side;\n\n\t\tvar frameLength = bs.getframebits(gfp);\n\t\tmean_bits.bits = (frameLength - gfc.sideinfo_len * 8) / gfc.mode_gr;\n\n\t\t/**\n\t\t *
\n * At the highest possible bitrate of Layer III (320 kbps\n * per stereo signal [^W^W^W], 48 kHz) the frames must be of\n * [^W^W^W are designed to have] constant length, i.e.\n * one buffer [^W^W the frame] length is:
\n * \n * 320 kbps * 1152/48 kHz = 7680 bit = 960 byte\n * \n * This value is used as the maximum buffer per channel [^W^W] at\n * lower bitrates [than 320 kbps]. At 64 kbps mono or 128 kbps\n * stereo the main granule length is 64 kbps * 576/48 kHz = 768 bit\n * [per granule and channel] at 48 kHz sampling frequency.\n * This means that there is a maximum deviation (short time buffer\n * [= reservoir]) of 7680 - 2*2*768 = 4608 bits is allowed at 64 kbps.\n * The actual deviation is equal to the number of bytes [with the\n * meaning of octets] denoted by the main_data_end offset pointer.\n * The actual maximum deviation is (2^9-1)*8 bit = 4088 bits\n * [for MPEG-1 and (2^8-1)*8 bit for MPEG-2, both are hard limits].\n * ... The xchange of buffer bits between the left and right channel\n * is allowed without restrictions [exception: dual channel].\n * Because of the [constructed] constraint on the buffer size\n * main_data_end is always set to 0 in the case of bit_rate_index==14,\n * i.e. data rate 320 kbps per stereo signal [^W^W^W]. In this case\n * all data are allocated between adjacent header [^W sync] words\n * [, i.e. there is no buffering at all].\n *
\n\t\t * Meaning of the variables:\n\t\t * resvLimit: (0, 8, ..., 8*255 (MPEG-2), 8*511 (MPEG-1))\n\t\t * Number of bits can be stored in previous frame(s) due to\n\t\t * counter size constaints\n\t\t * maxmp3buf: ( ??? ... 8*1951 (MPEG-1 and 2), 8*2047 (MPEG-2.5))\n\t\t * Number of bits allowed to encode one frame (you can take 8*511 bit\n\t\t * from the bit reservoir and at most 8*1440 bit from the current\n\t\t * frame (320 kbps, 32 kHz), so 8*1951 bit is the largest possible\n\t\t * value for MPEG-1 and -2)\n\t\t * \n\t\t * maximum allowed granule/channel size times 4 = 8*2047 bits.,\n\t\t * so this is the absolute maximum supported by the format.\n\t\t * \n\t\t * \n\t\t * fullFrameBits: maximum number of bits available for encoding\n\t\t * the current frame.\n\t\t * \n\t\t * mean_bits: target number of bits per granule.\n\t\t * \n\t\t * frameLength:\n\t\t * \n\t\t * gfc.ResvMax: maximum allowed reservoir\n\t\t * \n\t\t * gfc.ResvSize: current reservoir size\n\t\t * \n\t\t * l3_side.resvDrain_pre:\n\t\t * ancillary data to be added to previous frame:\n\t\t * (only usefull in VBR modes if it is possible to have\n\t\t * maxmp3buf < fullFrameBits)). Currently disabled,\n\t\t * see #define NEW_DRAIN\n\t\t * 2010-02-13: RH now enabled, it seems to be needed for CBR too,\n\t\t * as there exists one example, where the FhG decoder\n\t\t * can't decode a -b320 CBR file anymore.\n\t\t * \n\t\t * l3_side.resvDrain_post:\n\t\t * ancillary data to be added to this frame:\n\t\t * \n\t\t *\n\t\t */\n\n\t\t/* main_data_begin has 9 bits in MPEG-1, 8 bits MPEG-2 */\n\t\tvar resvLimit = (8 * 256) * gfc.mode_gr - 8;\n\n\t\t/*\n\t\t * maximum allowed frame size. dont use more than this number of bits,\n\t\t * even if the frame has the space for them:\n\t\t */\n\t\tif (gfp.brate > 320) {\n\t\t\t/* in freeformat the buffer is constant */\n\t\t\tmaxmp3buf = 8 * ((int) ((gfp.brate * 1000)\n\t\t\t\t\t/ (gfp.out_samplerate / 1152) / 8 + .5));\n\t\t} else {\n\t\t\t/*\n\t\t\t * all mp3 decoders should have enough buffer to handle this value:\n\t\t\t * size of a 320kbps 32kHz frame\n\t\t\t */\n\t\t\tmaxmp3buf = 8 * 1440;\n\n\t\t\t/*\n\t\t\t * Bouvigne suggests this more lax interpretation of the ISO doc\n\t\t\t * instead of using 8*960.\n\t\t\t */\n\n\t\t\tif (gfp.strict_ISO) {\n\t\t\t\tmaxmp3buf = 8 * ((int) (320000 / (gfp.out_samplerate / 1152) / 8 + .5));\n\t\t\t}\n\t\t}\n\n\t\tgfc.ResvMax = maxmp3buf - frameLength;\n\t\tif (gfc.ResvMax > resvLimit)\n\t\t\tgfc.ResvMax = resvLimit;\n\t\tif (gfc.ResvMax < 0 || gfp.disable_reservoir)\n\t\t\tgfc.ResvMax = 0;\n\n\t\tvar fullFrameBits = mean_bits.bits * gfc.mode_gr\n\t\t\t\t+ Math.min(gfc.ResvSize, gfc.ResvMax);\n\n\t\tif (fullFrameBits > maxmp3buf)\n\t\t\tfullFrameBits = maxmp3buf;\n\n\t\tassert (0 == gfc.ResvMax % 8);\n\t\tassert (gfc.ResvMax >= 0);\n\n\t\tl3_side.resvDrain_pre = 0;\n\n\t\t// frame analyzer code\n\t\tif (gfc.pinfo != null) {\n\t\t\t/*\n\t\t\t * expected bits per channel per granule [is this also right for\n\t\t\t * mono/stereo, MPEG-1/2 ?]\n\t\t\t */\n\t\t\tgfc.pinfo.mean_bits = mean_bits.bits / 2;\n\t\t\tgfc.pinfo.resvsize = gfc.ResvSize;\n\t\t}\n\n\t\treturn fullFrameBits;\n\t}\n\n\t/**\n\t * returns targ_bits: target number of bits to use for 1 granule
\n * 4 bytes for Header Tag\n * 4 bytes for Header Flags\n * 100 bytes for entry (toc)\n * 4 bytes for frame size\n * 4 bytes for stream size\n * 4 bytes for VBR scale. a VBR quality indicator: 0=best 100=worst\n * 20 bytes for LAME tag. for example, \"LAME3.12 (beta 6)\"\n * ___________\n * 140 bytes\n *\n */\n var VBRHEADERSIZE = (NUMTOCENTRIES + 4 + 4 + 4 + 4 + 4);\n\n var LAMEHEADERSIZE = (VBRHEADERSIZE + 9 + 1 + 1 + 8\n + 1 + 1 + 3 + 1 + 1 + 2 + 4 + 2 + 2);\n\n /**\n * The size of the Xing header MPEG-1, bit rate in kbps.\n */\n var XING_BITRATE1 = 128;\n /**\n * The size of the Xing header MPEG-2, bit rate in kbps.\n */\n var XING_BITRATE2 = 64;\n /**\n * The size of the Xing header MPEG-2.5, bit rate in kbps.\n */\n var XING_BITRATE25 = 32;\n\n /**\n * ISO-8859-1 charset for byte to string operations.\n */\n var ISO_8859_1 = null; //Charset.forName(\"ISO-8859-1\");\n\n /**\n * VBR header magic string.\n */\n var VBRTag0 = \"Xing\";\n /**\n * VBR header magic string (VBR == VBRMode.vbr_off).\n */\n var VBRTag1 = \"Info\";\n\n /**\n * Lookup table for fast CRC-16 computation. Uses the polynomial\n * x^16+x^15+x^2+1\n */\n var crc16Lookup = [0x0000, 0xC0C1, 0xC181, 0x0140,\n 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741,\n 0x0500, 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41,\n 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 0x0A00, 0xCAC1, 0xCB81, 0x0B40,\n 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801, 0x18C0, 0x1980, 0xD941,\n 0x1B00, 0xDBC1, 0xDA81, 0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40,\n 0xDD01, 0x1DC0, 0x1C80, 0xDC41, 0x1400, 0xD4C1, 0xD581, 0x1540,\n 0xD701, 0x17C0, 0x1680, 0xD641, 0xD201, 0x12C0, 0x1380, 0xD341,\n 0x1100, 0xD1C1, 0xD081, 0x1040, 0xF001, 0x30C0, 0x3180, 0xF141,\n 0x3300, 0xF3C1, 0xF281, 0x3240, 0x3600, 0xF6C1, 0xF781, 0x3740,\n 0xF501, 0x35C0, 0x3480, 0xF441, 0x3C00, 0xFCC1, 0xFD81, 0x3D40,\n 0xFF01, 0x3FC0, 0x3E80, 0xFE41, 0xFA01, 0x3AC0, 0x3B80, 0xFB41,\n 0x3900, 0xF9C1, 0xF881, 0x3840, 0x2800, 0xE8C1, 0xE981, 0x2940,\n 0xEB01, 0x2BC0, 0x2A80, 0xEA41, 0xEE01, 0x2EC0, 0x2F80, 0xEF41,\n 0x2D00, 0xEDC1, 0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541,\n 0x2700, 0xE7C1, 0xE681, 0x2640, 0x2200, 0xE2C1, 0xE381, 0x2340,\n 0xE101, 0x21C0, 0x2080, 0xE041, 0xA001, 0x60C0, 0x6180, 0xA141,\n 0x6300, 0xA3C1, 0xA281, 0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740,\n 0xA501, 0x65C0, 0x6480, 0xA441, 0x6C00, 0xACC1, 0xAD81, 0x6D40,\n 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01, 0x6AC0, 0x6B80, 0xAB41,\n 0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1, 0xB981, 0x7940,\n 0xBB01, 0x7BC0, 0x7A80, 0xBA41, 0xBE01, 0x7EC0, 0x7F80, 0xBF41,\n 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 0xB401, 0x74C0, 0x7580, 0xB541,\n 0x7700, 0xB7C1, 0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381, 0x7340,\n 0xB101, 0x71C0, 0x7080, 0xB041, 0x5000, 0x90C1, 0x9181, 0x5140,\n 0x9301, 0x53C0, 0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741,\n 0x5500, 0x95C1, 0x9481, 0x5440, 0x9C01, 0x5CC0, 0x5D80, 0x9D41,\n 0x5F00, 0x9FC1, 0x9E81, 0x5E40, 0x5A00, 0x9AC1, 0x9B81, 0x5B40,\n 0x9901, 0x59C0, 0x5880, 0x9841, 0x8801, 0x48C0, 0x4980, 0x8941,\n 0x4B00, 0x8BC1, 0x8A81, 0x4A40, 0x4E00, 0x8EC1, 0x8F81, 0x4F40,\n 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 0x4400, 0x84C1, 0x8581, 0x4540,\n 0x8701, 0x47C0, 0x4680, 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341,\n 0x4100, 0x81C1, 0x8081, 0x4040];\n\n /***********************************************************************\n * Robert Hegemann 2001-01-17\n ***********************************************************************/\n\n function addVbr(v, bitrate) {\n v.nVbrNumFrames++;\n v.sum += bitrate;\n v.seen++;\n\n if (v.seen < v.want) {\n return;\n }\n\n if (v.pos < v.size) {\n v.bag[v.pos] = v.sum;\n v.pos++;\n v.seen = 0;\n }\n if (v.pos == v.size) {\n for (var i = 1; i < v.size; i += 2) {\n v.bag[i / 2] = v.bag[i];\n }\n v.want *= 2;\n v.pos /= 2;\n }\n }\n\n function xingSeekTable(v, t) {\n if (v.pos <= 0)\n return;\n\n for (var i = 1; i < NUMTOCENTRIES; ++i) {\n var j = i / NUMTOCENTRIES, act, sum;\n var indx = 0 | (Math.floor(j * v.pos));\n if (indx > v.pos - 1)\n indx = v.pos - 1;\n act = v.bag[indx];\n sum = v.sum;\n var seek_point = 0 | (256. * act / sum);\n if (seek_point > 255)\n seek_point = 255;\n t[i] = 0xff & seek_point;\n }\n }\n\n /**\n * Add VBR entry, used to fill the VBR TOC entries.\n *\n * @param gfp\n * global flags\n */\n this.addVbrFrame = function (gfp) {\n var gfc = gfp.internal_flags;\n var kbps = Tables.bitrate_table[gfp.version][gfc.bitrate_index];\n assert(gfc.VBR_seek_table.bag != null);\n addVbr(gfc.VBR_seek_table, kbps);\n }\n\n /**\n * Read big endian integer (4-bytes) from header.\n *\n * @param buf\n * header containing the integer\n * @param bufPos\n * offset into the header\n * @return extracted integer\n */\n function extractInteger(buf, bufPos) {\n var x = buf[bufPos + 0] & 0xff;\n x <<= 8;\n x |= buf[bufPos + 1] & 0xff;\n x <<= 8;\n x |= buf[bufPos + 2] & 0xff;\n x <<= 8;\n x |= buf[bufPos + 3] & 0xff;\n return x;\n }\n\n /**\n * Write big endian integer (4-bytes) in the header.\n *\n * @param buf\n * header to write the integer into\n * @param bufPos\n * offset into the header\n * @param value\n * integer value to write\n */\n function createInteger(buf, bufPos, value) {\n buf[bufPos + 0] = 0xff & ((value >> 24) & 0xff);\n buf[bufPos + 1] = 0xff & ((value >> 16) & 0xff);\n buf[bufPos + 2] = 0xff & ((value >> 8) & 0xff);\n buf[bufPos + 3] = 0xff & (value & 0xff);\n }\n\n /**\n * Write big endian short (2-bytes) in the header.\n *\n * @param buf\n * header to write the integer into\n * @param bufPos\n * offset into the header\n * @param value\n * integer value to write\n */\n function createShort(buf, bufPos, value) {\n buf[bufPos + 0] = 0xff & ((value >> 8) & 0xff);\n buf[bufPos + 1] = 0xff & (value & 0xff);\n }\n\n /**\n * Check for magic strings (Xing/Info).\n *\n * @param buf\n * header to check\n * @param bufPos\n * header offset to check\n * @return magic string found\n */\n function isVbrTag(buf, bufPos) {\n return new String(buf, bufPos, VBRTag0.length(), ISO_8859_1)\n .equals(VBRTag0)\n || new String(buf, bufPos, VBRTag1.length(), ISO_8859_1)\n .equals(VBRTag1);\n }\n\n function shiftInBitsValue(x, n, v) {\n return 0xff & ((x << n) | (v & ~(-1 << n)));\n }\n\n /**\n * Construct the MP3 header using the settings of the global flags.\n *\n * \n *\n * @param gfp\n * global flags\n * @param buffer\n * header\n */\n function setLameTagFrameHeader(gfp, buffer) {\n var gfc = gfp.internal_flags;\n\n // MP3 Sync Word\n buffer[0] = shiftInBitsValue(buffer[0], 8, 0xff);\n\n buffer[1] = shiftInBitsValue(buffer[1], 3, 7);\n buffer[1] = shiftInBitsValue(buffer[1], 1,\n (gfp.out_samplerate < 16000) ? 0 : 1);\n // Version\n buffer[1] = shiftInBitsValue(buffer[1], 1, gfp.version);\n // 01 == Layer 3\n buffer[1] = shiftInBitsValue(buffer[1], 2, 4 - 3);\n // Error protection\n buffer[1] = shiftInBitsValue(buffer[1], 1, (!gfp.error_protection) ? 1\n : 0);\n\n // Bit rate\n buffer[2] = shiftInBitsValue(buffer[2], 4, gfc.bitrate_index);\n // Frequency\n buffer[2] = shiftInBitsValue(buffer[2], 2, gfc.samplerate_index);\n // Pad. Bit\n buffer[2] = shiftInBitsValue(buffer[2], 1, 0);\n // Priv. Bit\n buffer[2] = shiftInBitsValue(buffer[2], 1, gfp.extension);\n\n // Mode\n buffer[3] = shiftInBitsValue(buffer[3], 2, gfp.mode.ordinal());\n // Mode extension (Used with Joint Stereo)\n buffer[3] = shiftInBitsValue(buffer[3], 2, gfc.mode_ext);\n // Copy\n buffer[3] = shiftInBitsValue(buffer[3], 1, gfp.copyright);\n // Original\n buffer[3] = shiftInBitsValue(buffer[3], 1, gfp.original);\n // Emphasis\n buffer[3] = shiftInBitsValue(buffer[3], 2, gfp.emphasis);\n\n /* the default VBR header. 48 kbps layer III, no padding, no crc */\n /* but sampling freq, mode and copyright/copy protection taken */\n /* from first valid frame */\n buffer[0] = 0xff;\n var abyte = 0xff & (buffer[1] & 0xf1);\n var bitrate;\n if (1 == gfp.version) {\n bitrate = XING_BITRATE1;\n } else {\n if (gfp.out_samplerate < 16000)\n bitrate = XING_BITRATE25;\n else\n bitrate = XING_BITRATE2;\n }\n\n if (gfp.VBR == VbrMode.vbr_off)\n bitrate = gfp.brate;\n\n var bbyte;\n if (gfp.free_format)\n bbyte = 0x00;\n else\n bbyte = 0xff & (16 * lame.BitrateIndex(bitrate, gfp.version,\n gfp.out_samplerate));\n\n /*\n * Use as much of the info from the real frames in the Xing header:\n * samplerate, channels, crc, etc...\n */\n if (gfp.version == 1) {\n /* MPEG1 */\n buffer[1] = 0xff & (abyte | 0x0a);\n /* was 0x0b; */\n abyte = 0xff & (buffer[2] & 0x0d);\n /* AF keep also private bit */\n buffer[2] = 0xff & (bbyte | abyte);\n /* 64kbs MPEG1 frame */\n } else {\n /* MPEG2 */\n buffer[1] = 0xff & (abyte | 0x02);\n /* was 0x03; */\n abyte = 0xff & (buffer[2] & 0x0d);\n /* AF keep also private bit */\n buffer[2] = 0xff & (bbyte | abyte);\n /* 64kbs MPEG2 frame */\n }\n }\n\n /**\n * Get VBR tag information\n *\n * @param buf\n * header to analyze\n * @param bufPos\n * offset into the header\n * @return VBR tag data\n */\n this.getVbrTag = function (buf) {\n var pTagData = new VBRTagData();\n var bufPos = 0;\n\n /* get Vbr header data */\n pTagData.flags = 0;\n\n /* get selected MPEG header data */\n var hId = (buf[bufPos + 1] >> 3) & 1;\n var hSrIndex = (buf[bufPos + 2] >> 2) & 3;\n var hMode = (buf[bufPos + 3] >> 6) & 3;\n var hBitrate = ((buf[bufPos + 2] >> 4) & 0xf);\n hBitrate = Tables.bitrate_table[hId][hBitrate];\n\n /* check for FFE syncword */\n if ((buf[bufPos + 1] >> 4) == 0xE)\n pTagData.samprate = Tables.samplerate_table[2][hSrIndex];\n else\n pTagData.samprate = Tables.samplerate_table[hId][hSrIndex];\n\n /* determine offset of header */\n if (hId != 0) {\n /* mpeg1 */\n if (hMode != 3)\n bufPos += (32 + 4);\n else\n bufPos += (17 + 4);\n } else {\n /* mpeg2 */\n if (hMode != 3)\n bufPos += (17 + 4);\n else\n bufPos += (9 + 4);\n }\n\n if (!isVbrTag(buf, bufPos))\n return null;\n\n bufPos += 4;\n\n pTagData.hId = hId;\n\n /* get flags */\n var head_flags = pTagData.flags = extractInteger(buf, bufPos);\n bufPos += 4;\n\n if ((head_flags & FRAMES_FLAG) != 0) {\n pTagData.frames = extractInteger(buf, bufPos);\n bufPos += 4;\n }\n\n if ((head_flags & BYTES_FLAG) != 0) {\n pTagData.bytes = extractInteger(buf, bufPos);\n bufPos += 4;\n }\n\n if ((head_flags & TOC_FLAG) != 0) {\n if (pTagData.toc != null) {\n for (var i = 0; i < NUMTOCENTRIES; i++)\n pTagData.toc[i] = buf[bufPos + i];\n }\n bufPos += NUMTOCENTRIES;\n }\n\n pTagData.vbrScale = -1;\n\n if ((head_flags & VBR_SCALE_FLAG) != 0) {\n pTagData.vbrScale = extractInteger(buf, bufPos);\n bufPos += 4;\n }\n\n pTagData.headersize = ((hId + 1) * 72000 * hBitrate)\n / pTagData.samprate;\n\n bufPos += 21;\n var encDelay = buf[bufPos + 0] << 4;\n encDelay += buf[bufPos + 1] >> 4;\n var encPadding = (buf[bufPos + 1] & 0x0F) << 8;\n encPadding += buf[bufPos + 2] & 0xff;\n /* check for reasonable values (this may be an old Xing header, */\n /* not a INFO tag) */\n if (encDelay < 0 || encDelay > 3000)\n encDelay = -1;\n if (encPadding < 0 || encPadding > 3000)\n encPadding = -1;\n\n pTagData.encDelay = encDelay;\n pTagData.encPadding = encPadding;\n\n /* success */\n return pTagData;\n }\n\n /**\n * Initializes the header\n *\n * @param gfp\n * global flags\n */\n this.InitVbrTag = function (gfp) {\n var gfc = gfp.internal_flags;\n\n /**\n *
\n * Xing VBR pretends to be a 48kbs layer III frame. (at 44.1kHz).\n * (at 48kHz they use 56kbs since 48kbs frame not big enough for\n * table of contents)\n * let's always embed Xing header inside a 64kbs layer III frame.\n * this gives us enough room for a LAME version string too.\n * size determined by sampling frequency (MPEG1)\n * 32kHz: 216 bytes@48kbs 288bytes@ 64kbs\n * 44.1kHz: 156 bytes 208bytes@64kbs (+1 if padding = 1)\n * 48kHz: 144 bytes 192\n *\n * MPEG 2 values are the same since the framesize and samplerate\n * are each reduced by a factor of 2.\n *\n */\n var kbps_header;\n if (1 == gfp.version) {\n kbps_header = XING_BITRATE1;\n } else {\n if (gfp.out_samplerate < 16000)\n kbps_header = XING_BITRATE25;\n else\n kbps_header = XING_BITRATE2;\n }\n\n if (gfp.VBR == VbrMode.vbr_off)\n kbps_header = gfp.brate;\n\n // make sure LAME Header fits into Frame\n var totalFrameSize = ((gfp.version + 1) * 72000 * kbps_header)\n / gfp.out_samplerate;\n var headerSize = (gfc.sideinfo_len + LAMEHEADERSIZE);\n gfc.VBR_seek_table.TotalFrameSize = totalFrameSize;\n if (totalFrameSize < headerSize || totalFrameSize > MAXFRAMESIZE) {\n /* disable tag, it wont fit */\n gfp.bWriteVbrTag = false;\n return;\n }\n\n gfc.VBR_seek_table.nVbrNumFrames = 0;\n gfc.VBR_seek_table.nBytesWritten = 0;\n gfc.VBR_seek_table.sum = 0;\n\n gfc.VBR_seek_table.seen = 0;\n gfc.VBR_seek_table.want = 1;\n gfc.VBR_seek_table.pos = 0;\n\n if (gfc.VBR_seek_table.bag == null) {\n gfc.VBR_seek_table.bag = new int[400];\n gfc.VBR_seek_table.size = 400;\n }\n\n // write dummy VBR tag of all 0's into bitstream\n var buffer = new_byte(MAXFRAMESIZE);\n\n setLameTagFrameHeader(gfp, buffer);\n var n = gfc.VBR_seek_table.TotalFrameSize;\n for (var i = 0; i < n; ++i) {\n bs.add_dummy_byte(gfp, buffer[i] & 0xff, 1);\n }\n }\n\n /**\n * Fast CRC-16 computation (uses table crc16Lookup).\n *\n * @param value\n * @param crc\n * @return\n */\n function crcUpdateLookup(value, crc) {\n var tmp = crc ^ value;\n crc = (crc >> 8) ^ crc16Lookup[tmp & 0xff];\n return crc;\n }\n\n this.updateMusicCRC = function (crc, buffer, bufferPos, size) {\n for (var i = 0; i < size; ++i)\n crc[0] = crcUpdateLookup(buffer[bufferPos + i], crc[0]);\n }\n\n /**\n * Write LAME info: mini version + info on various switches used (Jonathan\n * Dee 2001/08/31).\n *\n * @param gfp\n * global flags\n * @param musicLength\n * music length\n * @param streamBuffer\n * pointer to output buffer\n * @param streamBufferPos\n * offset into the output buffer\n * @param crc\n * computation of CRC-16 of Lame Tag so far (starting at frame\n * sync)\n * @return number of bytes written to the stream\n */\n function putLameVBR(gfp, musicLength, streamBuffer, streamBufferPos, crc) {\n var gfc = gfp.internal_flags;\n var bytesWritten = 0;\n\n /* encoder delay */\n var encDelay = gfp.encoder_delay;\n /* encoder padding */\n var encPadding = gfp.encoder_padding;\n\n /* recall: gfp.VBR_q is for example set by the switch -V */\n /* gfp.quality by -q, -h, -f, etc */\n var quality = (100 - 10 * gfp.VBR_q - gfp.quality);\n\n var version = v.getLameVeryShortVersion();\n var vbr;\n var revision = 0x00;\n var revMethod;\n // numbering different in vbr_mode vs. Lame tag\n var vbrTypeTranslator = [1, 5, 3, 2, 4, 0, 3];\n var lowpass = 0 | (((gfp.lowpassfreq / 100.0) + .5) > 255 ? 255\n : (gfp.lowpassfreq / 100.0) + .5);\n var peakSignalAmplitude = 0;\n var radioReplayGain = 0;\n var audiophileReplayGain = 0;\n var noiseShaping = gfp.internal_flags.noise_shaping;\n var stereoMode = 0;\n var nonOptimal = 0;\n var sourceFreq = 0;\n var misc = 0;\n var musicCRC = 0;\n\n // psy model type: Gpsycho or NsPsytune\n var expNPsyTune = (gfp.exp_nspsytune & 1) != 0;\n var safeJoint = (gfp.exp_nspsytune & 2) != 0;\n var noGapMore = false;\n var noGapPrevious = false;\n var noGapCount = gfp.internal_flags.nogap_total;\n var noGapCurr = gfp.internal_flags.nogap_current;\n\n // 4 bits\n var athType = gfp.ATHtype;\n var flags = 0;\n\n // vbr modes\n var abrBitrate;\n switch (gfp.VBR) {\n case vbr_abr:\n abrBitrate = gfp.VBR_mean_bitrate_kbps;\n break;\n case vbr_off:\n abrBitrate = gfp.brate;\n break;\n default:\n abrBitrate = gfp.VBR_min_bitrate_kbps;\n }\n\n // revision and vbr method\n if (gfp.VBR.ordinal() < vbrTypeTranslator.length)\n vbr = vbrTypeTranslator[gfp.VBR.ordinal()];\n else\n vbr = 0x00; // unknown\n\n revMethod = 0x10 * revision + vbr;\n\n // ReplayGain\n if (gfc.findReplayGain) {\n if (gfc.RadioGain > 0x1FE)\n gfc.RadioGain = 0x1FE;\n if (gfc.RadioGain < -0x1FE)\n gfc.RadioGain = -0x1FE;\n\n // set name code\n radioReplayGain = 0x2000;\n // set originator code to `determined automatically'\n radioReplayGain |= 0xC00;\n\n if (gfc.RadioGain >= 0) {\n // set gain adjustment\n radioReplayGain |= gfc.RadioGain;\n } else {\n // set the sign bit\n radioReplayGain |= 0x200;\n // set gain adjustment\n radioReplayGain |= -gfc.RadioGain;\n }\n }\n\n // peak sample\n if (gfc.findPeakSample)\n peakSignalAmplitude = Math\n .abs(0 | ((( gfc.PeakSample) / 32767.0) * Math.pow(2, 23) + .5));\n\n // nogap\n if (noGapCount != -1) {\n if (noGapCurr > 0)\n noGapPrevious = true;\n\n if (noGapCurr < noGapCount - 1)\n noGapMore = true;\n }\n\n // flags\n flags = athType + ((expNPsyTune ? 1 : 0) << 4)\n + ((safeJoint ? 1 : 0) << 5) + ((noGapMore ? 1 : 0) << 6)\n + ((noGapPrevious ? 1 : 0) << 7);\n\n if (quality < 0)\n quality = 0;\n\n // stereo mode field (Intensity stereo is not implemented)\n switch (gfp.mode) {\n case MONO:\n stereoMode = 0;\n break;\n case STEREO:\n stereoMode = 1;\n break;\n case DUAL_CHANNEL:\n stereoMode = 2;\n break;\n case JOINT_STEREO:\n if (gfp.force_ms)\n stereoMode = 4;\n else\n stereoMode = 3;\n break;\n case NOT_SET:\n //$FALL-THROUGH$\n default:\n stereoMode = 7;\n break;\n }\n\n if (gfp.in_samplerate <= 32000)\n sourceFreq = 0x00;\n else if (gfp.in_samplerate == 48000)\n sourceFreq = 0x02;\n else if (gfp.in_samplerate > 48000)\n sourceFreq = 0x03;\n else {\n // default is 44100Hz\n sourceFreq = 0x01;\n }\n\n // Check if the user overrided the default LAME behavior with some\n // nasty options\n if (gfp.short_blocks == ShortBlock.short_block_forced\n || gfp.short_blocks == ShortBlock.short_block_dispensed\n || ((gfp.lowpassfreq == -1) && (gfp.highpassfreq == -1)) || /* \"-k\" */\n (gfp.scale_left < gfp.scale_right)\n || (gfp.scale_left > gfp.scale_right)\n || (gfp.disable_reservoir && gfp.brate < 320) || gfp.noATH\n || gfp.ATHonly || (athType == 0) || gfp.in_samplerate <= 32000)\n nonOptimal = 1;\n\n misc = noiseShaping + (stereoMode << 2) + (nonOptimal << 5)\n + (sourceFreq << 6);\n\n musicCRC = gfc.nMusicCRC;\n\n // Write all this information into the stream\n\n createInteger(streamBuffer, streamBufferPos + bytesWritten, quality);\n bytesWritten += 4;\n\n for (var j = 0; j < 9; j++) {\n streamBuffer[streamBufferPos + bytesWritten + j] = 0xff & version .charAt(j);\n }\n bytesWritten += 9;\n\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & revMethod;\n bytesWritten++;\n\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & lowpass;\n bytesWritten++;\n\n createInteger(streamBuffer, streamBufferPos + bytesWritten,\n peakSignalAmplitude);\n bytesWritten += 4;\n\n createShort(streamBuffer, streamBufferPos + bytesWritten,\n radioReplayGain);\n bytesWritten += 2;\n\n createShort(streamBuffer, streamBufferPos + bytesWritten,\n audiophileReplayGain);\n bytesWritten += 2;\n\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & flags;\n bytesWritten++;\n\n if (abrBitrate >= 255)\n streamBuffer[streamBufferPos + bytesWritten] = 0xFF;\n else\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & abrBitrate;\n bytesWritten++;\n\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & (encDelay >> 4);\n streamBuffer[streamBufferPos + bytesWritten + 1] = 0xff & ((encDelay << 4) + (encPadding >> 8));\n streamBuffer[streamBufferPos + bytesWritten + 2] = 0xff & encPadding;\n\n bytesWritten += 3;\n\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & misc;\n bytesWritten++;\n\n // unused in rev0\n streamBuffer[streamBufferPos + bytesWritten++] = 0;\n\n createShort(streamBuffer, streamBufferPos + bytesWritten, gfp.preset);\n bytesWritten += 2;\n\n createInteger(streamBuffer, streamBufferPos + bytesWritten, musicLength);\n bytesWritten += 4;\n\n createShort(streamBuffer, streamBufferPos + bytesWritten, musicCRC);\n bytesWritten += 2;\n\n // Calculate tag CRC.... must be done here, since it includes previous\n // information\n\n for (var i = 0; i < bytesWritten; i++)\n crc = crcUpdateLookup(streamBuffer[streamBufferPos + i], crc);\n\n createShort(streamBuffer, streamBufferPos + bytesWritten, crc);\n bytesWritten += 2;\n\n return bytesWritten;\n }\n\n function skipId3v2(fpStream) {\n // seek to the beginning of the stream\n fpStream.seek(0);\n // read 10 bytes in case there's an ID3 version 2 header here\n var id3v2Header = new_byte(10);\n fpStream.readFully(id3v2Header);\n /* does the stream begin with the ID3 version 2 file identifier? */\n var id3v2TagSize;\n if (!new String(id3v2Header, \"ISO-8859-1\").startsWith(\"ID3\")) {\n /*\n * the tag size (minus the 10-byte header) is encoded into four\n * bytes where the most significant bit is clear in each byte\n */\n id3v2TagSize = (((id3v2Header[6] & 0x7f) << 21)\n | ((id3v2Header[7] & 0x7f) << 14)\n | ((id3v2Header[8] & 0x7f) << 7) | (id3v2Header[9] & 0x7f))\n + id3v2Header.length;\n } else {\n /* no ID3 version 2 tag in this stream */\n id3v2TagSize = 0;\n }\n return id3v2TagSize;\n }\n\n this.getLameTagFrame = function (gfp, buffer) {\n var gfc = gfp.internal_flags;\n\n if (!gfp.bWriteVbrTag) {\n return 0;\n }\n if (gfc.Class_ID != Lame.LAME_ID) {\n return 0;\n }\n if (gfc.VBR_seek_table.pos <= 0) {\n return 0;\n }\n if (buffer.length < gfc.VBR_seek_table.TotalFrameSize) {\n return gfc.VBR_seek_table.TotalFrameSize;\n }\n\n Arrays.fill(buffer, 0, gfc.VBR_seek_table.TotalFrameSize, 0);\n\n // 4 bytes frame header\n setLameTagFrameHeader(gfp, buffer);\n\n // Create TOC entries\n var toc = new_byte(NUMTOCENTRIES);\n\n if (gfp.free_format) {\n for (var i = 1; i < NUMTOCENTRIES; ++i)\n toc[i] = 0xff & (255 * i / 100);\n } else {\n xingSeekTable(gfc.VBR_seek_table, toc);\n }\n\n // Start writing the tag after the zero frame\n var streamIndex = gfc.sideinfo_len;\n /**\n * Note: Xing header specifies that Xing data goes in the ancillary data\n * with NO ERROR PROTECTION. If error protecton in enabled, the Xing\n * data still starts at the same offset, and now it is in sideinfo data\n * block, and thus will not decode correctly by non-Xing tag aware\n * players\n */\n if (gfp.error_protection)\n streamIndex -= 2;\n\n // Put Vbr tag\n if (gfp.VBR == VbrMode.vbr_off) {\n buffer[streamIndex++] = 0xff & VBRTag1.charAt(0);\n buffer[streamIndex++] = 0xff & VBRTag1.charAt(1);\n buffer[streamIndex++] = 0xff & VBRTag1.charAt(2);\n buffer[streamIndex++] = 0xff & VBRTag1.charAt(3);\n\n } else {\n buffer[streamIndex++] = 0xff & VBRTag0.charAt(0);\n buffer[streamIndex++] = 0xff & VBRTag0.charAt(1);\n buffer[streamIndex++] = 0xff & VBRTag0.charAt(2);\n buffer[streamIndex++] = 0xff & VBRTag0.charAt(3);\n }\n\n // Put header flags\n createInteger(buffer, streamIndex, FRAMES_FLAG + BYTES_FLAG + TOC_FLAG\n + VBR_SCALE_FLAG);\n streamIndex += 4;\n\n // Put Total Number of frames\n createInteger(buffer, streamIndex, gfc.VBR_seek_table.nVbrNumFrames);\n streamIndex += 4;\n\n // Put total audio stream size, including Xing/LAME Header\n var streamSize = (gfc.VBR_seek_table.nBytesWritten + gfc.VBR_seek_table.TotalFrameSize);\n createInteger(buffer, streamIndex, 0 | streamSize);\n streamIndex += 4;\n\n /* Put TOC */\n System.arraycopy(toc, 0, buffer, streamIndex, toc.length);\n streamIndex += toc.length;\n\n if (gfp.error_protection) {\n // (jo) error_protection: add crc16 information to header\n bs.CRC_writeheader(gfc, buffer);\n }\n\n // work out CRC so far: initially crc = 0\n var crc = 0x00;\n for (var i = 0; i < streamIndex; i++)\n crc = crcUpdateLookup(buffer[i], crc);\n // Put LAME VBR info\n streamIndex += putLameVBR(gfp, streamSize, buffer, streamIndex, crc);\n\n return gfc.VBR_seek_table.TotalFrameSize;\n }\n\n /**\n * Write final VBR tag to the file.\n *\n * @param gfp\n * global flags\n * @param stream\n * stream to add the VBR tag to\n * @return 0 (OK), -1 else\n * @throws IOException\n * I/O error\n */\n this.putVbrTag = function (gfp, stream) {\n var gfc = gfp.internal_flags;\n\n if (gfc.VBR_seek_table.pos <= 0)\n return -1;\n\n // Seek to end of file\n stream.seek(stream.length());\n\n // Get file size, abort if file has zero length.\n if (stream.length() == 0)\n return -1;\n\n // The VBR tag may NOT be located at the beginning of the stream. If an\n // ID3 version 2 tag was added, then it must be skipped to write the VBR\n // tag data.\n var id3v2TagSize = skipId3v2(stream);\n\n // Seek to the beginning of the stream\n stream.seek(id3v2TagSize);\n\n var buffer = new_byte(MAXFRAMESIZE);\n var bytes = getLameTagFrame(gfp, buffer);\n if (bytes > buffer.length) {\n return -1;\n }\n\n if (bytes < 1) {\n return 0;\n }\n\n // Put it all to disk again\n stream.write(buffer, 0, bytes);\n // success\n return 0;\n }\n\n}\n\nmodule.exports = VBRTag;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nLame = require('./Lame.js');\nPresets = require('./Presets.js');\nGainAnalysis = require('./GainAnalysis.js');\nQuantizePVT = require('./QuantizePVT.js');\nQuantize = require('./Quantize.js');\nTakehiro = require('./Takehiro.js');\nReservoir = require('./Reservoir.js');\nMPEGMode = require('./MPEGMode.js');\nBitStream = require('./BitStream.js');\nvar Encoder = require('./Encoder.js');\nvar Version = require('./Version.js');\nvar VBRTag = require('./VBRTag.js');\n\nfunction GetAudio() {\n var parse;\n var mpg;\n\n this.setModules = function (parse2, mpg2) {\n parse = parse2;\n mpg = mpg2;\n }\n}\n\n\nfunction Parse() {\n var ver;\n var id3;\n var pre;\n\n this.setModules = function (ver2, id32, pre2) {\n ver = ver2;\n id3 = id32;\n pre = pre2;\n }\n}\n\nfunction MPGLib() {\n}\n\nfunction ID3Tag() {\n var bits;\n var ver;\n\n this.setModules = function (_bits, _ver) {\n bits = _bits;\n ver = _ver;\n }\n}\n\nfunction Mp3Encoder(channels, samplerate, kbps) {\n if (arguments.length != 3) {\n console.error('WARN: Mp3Encoder(channels, samplerate, kbps) not specified');\n channels = 1;\n samplerate = 44100;\n kbps = 128;\n }\n var lame = new Lame();\n var gaud = new GetAudio();\n var ga = new GainAnalysis();\n var bs = new BitStream();\n var p = new Presets();\n var qupvt = new QuantizePVT();\n var qu = new Quantize();\n var vbr = new VBRTag();\n var ver = new Version();\n var id3 = new ID3Tag();\n var rv = new Reservoir();\n var tak = new Takehiro();\n var parse = new Parse();\n var mpg = new MPGLib();\n\n lame.setModules(ga, bs, p, qupvt, qu, vbr, ver, id3, mpg);\n bs.setModules(ga, mpg, ver, vbr);\n id3.setModules(bs, ver);\n p.setModules(lame);\n qu.setModules(bs, rv, qupvt, tak);\n qupvt.setModules(tak, rv, lame.enc.psy);\n rv.setModules(bs);\n tak.setModules(qupvt);\n vbr.setModules(lame, bs, ver);\n gaud.setModules(parse, mpg);\n parse.setModules(ver, id3, p);\n\n var gfp = lame.lame_init();\n\n gfp.num_channels = channels;\n gfp.in_samplerate = samplerate;\n gfp.brate = kbps;\n gfp.mode = MPEGMode.STEREO;\n gfp.quality = 3;\n gfp.bWriteVbrTag = false;\n gfp.disable_reservoir = true;\n gfp.write_id3tag_automatic = false;\n\n var retcode = lame.lame_init_params(gfp);\n assert(0 == retcode);\n var maxSamples = 1152;\n var mp3buf_size = 0 | (1.25 * maxSamples + 7200);\n var mp3buf = new_byte(mp3buf_size);\n\n this.encodeBuffer = function (left, right) {\n if (channels == 1) {\n right = left;\n }\n assert(left.length == right.length);\n if (left.length > maxSamples) {\n maxSamples = left.length;\n mp3buf_size = 0 | (1.25 * maxSamples + 7200);\n mp3buf = new_byte(mp3buf_size);\n }\n\n var _sz = lame.lame_encode_buffer(gfp, left, right, left.length, mp3buf, 0, mp3buf_size);\n return new Int8Array(mp3buf.subarray(0, _sz));\n };\n\n this.flush = function () {\n var _sz = lame.lame_encode_flush(gfp, mp3buf, 0, mp3buf_size);\n return new Int8Array(mp3buf.subarray(0, _sz));\n };\n}\n\nfunction WavHeader() {\n this.dataOffset = 0;\n this.dataLen = 0;\n this.channels = 0;\n this.sampleRate = 0;\n}\n\nfunction fourccToInt(fourcc) {\n return fourcc.charCodeAt(0) << 24 | fourcc.charCodeAt(1) << 16 | fourcc.charCodeAt(2) << 8 | fourcc.charCodeAt(3);\n}\n\nWavHeader.RIFF = fourccToInt(\"RIFF\");\nWavHeader.WAVE = fourccToInt(\"WAVE\");\nWavHeader.fmt_ = fourccToInt(\"fmt \");\nWavHeader.data = fourccToInt(\"data\");\n\nWavHeader.readHeader = function (dataView) {\n var w = new WavHeader();\n\n var header = dataView.getUint32(0, false);\n if (WavHeader.RIFF != header) {\n return;\n }\n var fileLen = dataView.getUint32(4, true);\n if (WavHeader.WAVE != dataView.getUint32(8, false)) {\n return;\n }\n if (WavHeader.fmt_ != dataView.getUint32(12, false)) {\n return;\n }\n var fmtLen = dataView.getUint32(16, true);\n var pos = 16 + 4;\n switch (fmtLen) {\n case 16:\n case 18:\n w.channels = dataView.getUint16(pos + 2, true);\n w.sampleRate = dataView.getUint32(pos + 4, true);\n break;\n default:\n throw 'extended fmt chunk not implemented';\n }\n pos += fmtLen;\n var data = WavHeader.data;\n var len = 0;\n while (data != header) {\n header = dataView.getUint32(pos, false);\n len = dataView.getUint32(pos + 4, true);\n if (data == header) {\n break;\n }\n pos += (len + 8);\n }\n w.dataLen = len;\n w.dataOffset = pos + 8;\n return w;\n};\n\nmodule.exports.Mp3Encoder = Mp3Encoder;\nmodule.exports.WavHeader = WavHeader;\n","import { Mp3Encoder } from 'lamejs';\n\nclass Encoder {\n constructor(config) {\n this.config = {\n sampleRate: 44100,\n bitRate: 128\n };\n\n Object.assign(this.config, config);\n\n this.mp3Encoder = new Mp3Encoder(\n 1,\n this.config.sampleRate,\n this.config.bitRate\n );\n\n // Audio is processed by frames of 1152 samples per audio channel\n // http://lame.sourceforge.net/tech-FAQ.txt\n this.maxSamples = 1152;\n\n this.samplesMono = null;\n this.clearBuffer();\n }\n\n /**\n * Clear active buffer\n */\n clearBuffer() {\n this.dataBuffer = [];\n }\n\n /**\n * Append new audio buffer to current active buffer\n * @param {Buffer} buffer\n */\n appendToBuffer(buffer) {\n this.dataBuffer.push(new Int8Array(buffer));\n }\n\n /**\n * Float current data to 16 bits PCM\n * @param {Float32Array} input\n * @param {Int16Array} output\n */\n floatTo16BitPCM(input, output) {\n for (let i = 0; i < input.length; i++) {\n const s = Math.max(-1, Math.min(1, input[i]));\n output[i] = (s < 0 ? s * 0x8000 : s * 0x7FFF);\n }\n }\n\n /**\n * Convert buffer to proper format\n * @param {Array} arrayBuffer\n */\n convertBuffer(arrayBuffer) {\n const data = new Float32Array(arrayBuffer);\n const out = new Int16Array(arrayBuffer.length);\n this.floatTo16BitPCM(data, out);\n\n return out;\n }\n\n /**\n * Encode and append current buffer to dataBuffer\n * @param {Array} arrayBuffer\n */\n encode(arrayBuffer) {\n this.samplesMono = this.convertBuffer(arrayBuffer);\n let remaining = this.samplesMono.length;\n\n for (let i = 0; remaining >= 0; i += this.maxSamples) {\n const left = this.samplesMono.subarray(i, i + this.maxSamples);\n const mp3buffer = this.mp3Encoder.encodeBuffer(left);\n this.appendToBuffer(mp3buffer);\n remaining -= this.maxSamples;\n }\n }\n\n /**\n * Return full dataBuffer\n */\n finish() {\n this.appendToBuffer(this.mp3Encoder.flush());\n\n return this.dataBuffer;\n }\n};\n\nexport default Encoder;\n","import Encoder from './encoder';\n\nclass MicRecorder {\n constructor(config) {\n this.config = {\n // 128 or 160 kbit/s – mid-range bitrate quality\n bitRate: 128,\n\n // There is a known issue with some macOS machines, where the recording\n // will sometimes have a loud 'pop' or 'pop-click' sound. This flag\n // prevents getting audio from the microphone a few milliseconds after\n // the begining of the recording. It also helps to remove the mouse\n // \"click\" sound from the output mp3 file.\n startRecordingAt: 300,\n deviceId: null,\n };\n\n this.activeStream = null;\n this.context = null;\n this.microphone = null;\n this.processor = null;\n this.startTime = 0;\n\n Object.assign(this.config, config);\n }\n\n /**\n * Starts to listen for the microphone sound\n * @param {MediaStream} stream\n */\n addMicrophoneListener(stream) {\n this.activeStream = stream;\n\n // This prevents the weird noise once you start listening to the microphone\n this.timerToStart = setTimeout(() => {\n delete this.timerToStart;\n }, this.config.startRecordingAt);\n\n // Set up Web Audio API to process data from the media stream (microphone).\n this.microphone = this.context.createMediaStreamSource(stream);\n\n // Settings a bufferSize of 0 instructs the browser to choose the best bufferSize\n this.processor = this.context.createScriptProcessor(0, 1, 1);\n\n // Add all buffers from LAME into an array.\n this.processor.onaudioprocess = (event) => {\n if (this.timerToStart) {\n return;\n }\n\n // Send microphone data to LAME for MP3 encoding while recording.\n this.lameEncoder.encode(event.inputBuffer.getChannelData(0));\n };\n\n // Begin retrieving microphone data.\n this.microphone.connect(this.processor);\n this.processor.connect(this.context.destination);\n };\n\n /**\n * Disconnect microphone, processor and remove activeStream\n */\n stop() {\n if (this.processor && this.microphone) {\n // Clean up the Web Audio API resources.\n this.microphone.disconnect();\n this.processor.disconnect();\n\n // If all references using this.context are destroyed, context is closed\n // automatically. DOMException is fired when trying to close again\n if (this.context && this.context.state !== 'closed') {\n this.context.close();\n }\n\n this.processor.onaudioprocess = null;\n\n // Stop all audio tracks. Also, removes recording icon from chrome tab\n this.activeStream.getAudioTracks().forEach(track => track.stop());\n }\n\n return this;\n };\n\n /**\n * Requests access to the microphone and start recording\n * @return Promise\n */\n start() {\n const AudioContext = window.AudioContext || window.webkitAudioContext;\n this.context = new AudioContext();\n this.config.sampleRate = this.context.sampleRate;\n this.lameEncoder = new Encoder(this.config);\n\n const audio = this.config.deviceId ? { deviceId: { exact: this.config.deviceId } } : true;\n\n return new Promise((resolve, reject) => {\n navigator.mediaDevices.getUserMedia({ audio })\n .then(stream => {\n this.addMicrophoneListener(stream);\n resolve(stream);\n }).catch(function(err) {\n reject(err);\n });\n })\n };\n\n /**\n * Return Mp3 Buffer and Blob with type mp3\n * @return {Promise}\n */\n getMp3() {\n const finalBuffer = this.lameEncoder.finish();\n\n return new Promise((resolve, reject) => {\n if (finalBuffer.length === 0) {\n reject(new Error('No buffer to send'));\n } else {\n resolve([finalBuffer, new Blob(finalBuffer, { type: 'audio/mp3' })]);\n this.lameEncoder.clearBuffer();\n }\n });\n };\n};\n\nexport default MicRecorder;\n"],"names":["new_byte","new_int","new_float","new_double","new_float_n","new_int_n","new_array_n","Arrays","System","Util","ShortBlock","Float","VbrMode","assert","Encoder","III_psy_xmin","require$$0","require$$1","FFT","MPEGMode","L3Side","GrInfo","LameInternalFlags","IIISideInfo","ScaleFac","NsPsy","VBRSeekInfo","GainAnalysis","MeanBits","Tables","QuantizePVT","Takehiro","BitStream","new_short_n","Lame","PsyModel","LameGlobalFlags","ATH","ReplayGain","CBRNewIterationLoop","Presets","CalcNoiseResult","Quantize","VBRQuantize","CalcNoiseData","Reservoir","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","VBRTag","Version","config","assign","mp3Encoder","Mp3Encoder","sampleRate","bitRate","maxSamples","samplesMono","clearBuffer","dataBuffer","buffer","push","Int8Array","input","output","i","length","s","Math","max","min","arrayBuffer","data","Float32Array","out","Int16Array","floatTo16BitPCM","convertBuffer","remaining","left","subarray","mp3buffer","encodeBuffer","appendToBuffer","flush","MicRecorder","activeStream","context","microphone","processor","startTime","stream","timerToStart","setTimeout","startRecordingAt","createMediaStreamSource","createScriptProcessor","onaudioprocess","event","lameEncoder","encode","inputBuffer","getChannelData","connect","destination","disconnect","state","close","getAudioTracks","forEach","track","stop","AudioContext","window","webkitAudioContext","audio","deviceId","exact","Promise","resolve","reject","mediaDevices","getUserMedia","then","addMicrophoneListener","catch","err","finalBuffer","finish","Error","Blob","type"],"mappings":"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AAC;GACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;GACf,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;GACV,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;GACf,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;GACV,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;GACf,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;GACV,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;GACf,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;GACV,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;;GAEX,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;GACV,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;GACd,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;GACZ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;GACV,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;GACd,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;GACZ,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;GACX,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;GACf,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;GACZ,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;GACX,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;GACf,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;GACZ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;GACV,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;GACd,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;GACZ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;GACV,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;GACd,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;GACZ,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;GACX,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;GACd,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;GACX,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;GACd,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;GACV,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;GACd,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;G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C,EAAE,GAAG,EAAE,CAAC,CAAC;oBACxC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;oBACxC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACpB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACpB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACpB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;oBACxC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;oBACxC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;oBACrB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;oBACrB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;oBACrB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;oBACrB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;oBACtB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;oBACtB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACrB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACpB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACrB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC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AgB,EAAE,gBAAgB,EAAE,CAAC,gBAAgB;YACrD,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;QACzD,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACnD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACtD,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,gBAAgB;YACtD,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB;YACrD,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,gBAAgB;YACtD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACtD,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,gBAAgB,CAAC;QAC1D,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACnD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACtD,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,gBAAgB;YACrD,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB;YACrD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,gBAAgB;YACrD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACtD,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,gBAAgB,CAAC;QAC1D,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACnD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACtD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACtD,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,gBAAgB;YACtD,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,gBAAgB;YACtD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,gBAAgB;YACrD,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,gBAAgB,CAAC;QAC1D,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACnD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,gBAAgB;YACrD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACtD,g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,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC/D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC/D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC5D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC5D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC1D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;CAC5D,CAAC;;AAEFA,QAAM,CAAC,KAAK,GAAG;IACX,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE;IACpE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC7D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC/D,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAChE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,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G,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACzE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC3E,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IAC7E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC9E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC9E,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;CAC1D,CAAC;;AAEFA,QAAM,CAAC,KAAK,GAAG;IACX,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAC1E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACxE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACxE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACzE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC3E,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC7E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC7E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC7E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC7E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC7E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC5E,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG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AE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CACjE,CAAC;;AAEFA,QAAM,CAAC,IAAI,GAAG;IACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC3D,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC7D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CACjE,CAAC;;AAEFA,QAAM,CAAC,MAAM,GAAG;IACZ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC3D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC5D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CACjE,CAAC;;AAEFA,QAAM,CAAC,IAAI,GAAG;IACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC3D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC5D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CACjE,CAAC;;AAEFA,QAAM,CAAC,IAAI,GAAG;IACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC1D,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC5D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC7D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,C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,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,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EAAE,CAAC,CAAC;QAC1E,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,IAAI,UAAU,CAAC,EA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AE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EA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"} \ No newline at end of file +{"version":3,"file":"index.js","sources":["../node_modules/lamejs/src/js/common.js","../node_modules/lamejs/src/js/NewMDCT.js","../node_modules/lamejs/src/js/III_psy_xmin.js","../node_modules/lamejs/src/js/III_psy_ratio.js","../node_modules/lamejs/src/js/Encoder.js","../node_modules/lamejs/src/js/FFT.js","../node_modules/lamejs/src/js/PsyModel.js","../node_modules/lamejs/src/js/MPEGMode.js","../node_modules/lamejs/src/js/LameGlobalFlags.js","../node_modules/lamejs/src/js/L3Side.js","../node_modules/lamejs/src/js/GrInfo.js","../node_modules/lamejs/src/js/IIISideInfo.js","../node_modules/lamejs/src/js/ScaleFac.js","../node_modules/lamejs/src/js/NsPsy.js","../node_modules/lamejs/src/js/VBRSeekInfo.js","../node_modules/lamejs/src/js/LameInternalFlags.js","../node_modules/lamejs/src/js/ATH.js","../node_modules/lamejs/src/js/GainAnalysis.js","../node_modules/lamejs/src/js/ReplayGain.js","../node_modules/lamejs/src/js/MeanBits.js","../node_modules/lamejs/src/js/CBRNewIterationLoop.js","../node_modules/lamejs/src/js/Tables.js","../node_modules/lamejs/src/js/QuantizePVT.js","../node_modules/lamejs/src/js/Takehiro.js","../node_modules/lamejs/src/js/BitStream.js","../node_modules/lamejs/src/js/Lame.js","../node_modules/lamejs/src/js/Presets.js","../node_modules/lamejs/src/js/VBRQuantize.js","../node_modules/lamejs/src/js/CalcNoiseResult.js","../node_modules/lamejs/src/js/CalcNoiseData.js","../node_modules/lamejs/src/js/Quantize.js","../node_modules/lamejs/src/js/Reservoir.js","../node_modules/lamejs/src/js/Version.js","../node_modules/lamejs/src/js/VBRTag.js","../node_modules/lamejs/src/js/index.js","../src/encoder.js","../src/mic-recorder.js"],"sourcesContent":["function new_byte(count) {\n return new Int8Array(count);\n}\n\nfunction new_short(count) {\n return new Int16Array(count);\n}\n\nfunction new_int(count) {\n return new Int32Array(count);\n}\n\nfunction new_float(count) {\n return new Float32Array(count);\n}\n\nfunction new_double(count) {\n return new Float64Array(count);\n}\n\nfunction new_float_n(args) {\n if (args.length == 1) {\n return new_float(args[0]);\n }\n var sz = args[0];\n args = args.slice(1);\n var A = [];\n for (var i = 0; i < sz; i++) {\n A.push(new_float_n(args));\n }\n return A;\n}\nfunction new_int_n(args) {\n if (args.length == 1) {\n return new_int(args[0]);\n }\n var sz = args[0];\n args = args.slice(1);\n var A = [];\n for (var i = 0; i < sz; i++) {\n A.push(new_int_n(args));\n }\n return A;\n}\n\nfunction new_short_n(args) {\n if (args.length == 1) {\n return new_short(args[0]);\n }\n var sz = args[0];\n args = args.slice(1);\n var A = [];\n for (var i = 0; i < sz; i++) {\n A.push(new_short_n(args));\n }\n return A;\n}\n\nfunction new_array_n(args) {\n if (args.length == 1) {\n return new Array(args[0]);\n }\n var sz = args[0];\n args = args.slice(1);\n var A = [];\n for (var i = 0; i < sz; i++) {\n A.push(new_array_n(args));\n }\n return A;\n}\n\n\nvar Arrays = {};\n\nArrays.fill = function (a, fromIndex, toIndex, val) {\n if (arguments.length == 2) {\n for (var i = 0; i < a.length; i++) {\n a[i] = arguments[1];\n }\n } else {\n for (var i = fromIndex; i < toIndex; i++) {\n a[i] = val;\n }\n }\n};\n\nvar System = {};\n\nSystem.arraycopy = function (src, srcPos, dest, destPos, length) {\n var srcEnd = srcPos + length;\n while (srcPos < srcEnd)\n dest[destPos++] = src[srcPos++];\n};\n\n\nvar Util = {};\nUtil.SQRT2 = 1.41421356237309504880;\nUtil.FAST_LOG10 = function (x) {\n return Math.log10(x);\n};\n\nUtil.FAST_LOG10_X = function (x, y) {\n return Math.log10(x) * y;\n};\n\nfunction ShortBlock(ordinal) {\n this.ordinal = ordinal;\n}\n/**\n * LAME may use them, even different block types for L/R.\n */\nShortBlock.short_block_allowed = new ShortBlock(0);\n/**\n * LAME may use them, but always same block types in L/R.\n */\nShortBlock.short_block_coupled = new ShortBlock(1);\n/**\n * LAME will not use short blocks, long blocks only.\n */\nShortBlock.short_block_dispensed = new ShortBlock(2);\n/**\n * LAME will not use long blocks, short blocks only.\n */\nShortBlock.short_block_forced = new ShortBlock(3);\n\nvar Float = {};\nFloat.MAX_VALUE = 3.4028235e+38;\n\nfunction VbrMode(ordinal) {\n this.ordinal = ordinal;\n}\nVbrMode.vbr_off = new VbrMode(0);\nVbrMode.vbr_mt = new VbrMode(1);\nVbrMode.vbr_rh = new VbrMode(2);\nVbrMode.vbr_abr = new VbrMode(3);\nVbrMode.vbr_mtrh = new VbrMode(4);\nVbrMode.vbr_default = VbrMode.vbr_mtrh;\n\nvar assert = function (x) {\n //console.assert(x);\n};\n\nmodule.exports = {\n \"System\": System,\n \"VbrMode\": VbrMode,\n \"Float\": Float,\n \"ShortBlock\": ShortBlock,\n \"Util\": Util,\n \"Arrays\": Arrays,\n \"new_array_n\": new_array_n,\n \"new_byte\": new_byte,\n \"new_double\": new_double,\n \"new_float\": new_float,\n \"new_float_n\": new_float_n,\n \"new_int\": new_int,\n \"new_int_n\": new_int_n,\n \"new_short\": new_short,\n \"new_short_n\": new_short_n,\n \"assert\": assert\n};\n","/*\n * MP3 window subband -> subband filtering -> mdct routine\n *\n * Copyright (c) 1999-2000 Takehiro Tominaga\n *\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Library General Public License for more details.\n *\n * You should have received a copy of the GNU Library General Public\n * License along with this library; if not, write to the\n * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n * Boston, MA 02111-1307, USA.\n */\n/*\n * Special Thanks to Patrick De Smet for your advices.\n */\n\n/* $Id: NewMDCT.java,v 1.11 2011/05/24 20:48:06 kenchis Exp $ */\n\n//package mp3;\n\n//import java.util.Arrays;\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\n\n\nfunction NewMDCT() {\n\n\tvar enwindow = [\n\t\t\t-4.77e-07 * 0.740951125354959 / 2.384e-06,\n\t\t\t1.03951e-04 * 0.740951125354959 / 2.384e-06,\n\t\t\t9.53674e-04 * 0.740951125354959 / 2.384e-06,\n\t\t\t2.841473e-03 * 0.740951125354959 / 2.384e-06,\n\t\t\t3.5758972e-02 * 0.740951125354959 / 2.384e-06,\n\t\t\t3.401756e-03 * 0.740951125354959 / 2.384e-06,\n\t\t\t9.83715e-04 * 0.740951125354959 / 2.384e-06,\n\t\t\t9.9182e-05 * 0.740951125354959 / 2.384e-06, /* 15 */\n\t\t\t1.2398e-05 * 0.740951125354959 / 2.384e-06,\n\t\t\t1.91212e-04 * 0.740951125354959 / 2.384e-06,\n\t\t\t2.283096e-03 * 0.740951125354959 / 2.384e-06,\n\t\t\t1.6994476e-02 * 0.740951125354959 / 2.384e-06,\n\t\t\t-1.8756866e-02 * 0.740951125354959 / 2.384e-06,\n\t\t\t-2.630711e-03 * 0.740951125354959 / 2.384e-06,\n\t\t\t-2.47478e-04 * 0.740951125354959 / 2.384e-06,\n\t\t\t-1.4782e-05 * 0.740951125354959 / 2.384e-06,\n\t\t\t9.063471690191471e-01, 1.960342806591213e-01,\n\n\t\t\t-4.77e-07 * 0.773010453362737 / 2.384e-06,\n\t\t\t1.05858e-04 * 0.773010453362737 / 2.384e-06,\n\t\t\t9.30786e-04 * 0.773010453362737 / 2.384e-06,\n\t\t\t2.521515e-03 * 0.773010453362737 / 2.384e-06,\n\t\t\t3.5694122e-02 * 0.773010453362737 / 2.384e-06,\n\t\t\t3.643036e-03 * 0.773010453362737 / 2.384e-06,\n\t\t\t9.91821e-04 * 0.773010453362737 / 2.384e-06,\n\t\t\t9.6321e-05 * 0.773010453362737 / 2.384e-06, /* 14 */\n\t\t\t1.1444e-05 * 0.773010453362737 / 2.384e-06,\n\t\t\t1.65462e-04 * 0.773010453362737 / 2.384e-06,\n\t\t\t2.110004e-03 * 0.773010453362737 / 2.384e-06,\n\t\t\t1.6112804e-02 * 0.773010453362737 / 2.384e-06,\n\t\t\t-1.9634247e-02 * 0.773010453362737 / 2.384e-06,\n\t\t\t-2.803326e-03 * 0.773010453362737 / 2.384e-06,\n\t\t\t-2.77042e-04 * 0.773010453362737 / 2.384e-06,\n\t\t\t-1.6689e-05 * 0.773010453362737 / 2.384e-06,\n\t\t\t8.206787908286602e-01, 3.901806440322567e-01,\n\n\t\t\t-4.77e-07 * 0.803207531480645 / 2.384e-06,\n\t\t\t1.07288e-04 * 0.803207531480645 / 2.384e-06,\n\t\t\t9.02653e-04 * 0.803207531480645 / 2.384e-06,\n\t\t\t2.174854e-03 * 0.803207531480645 / 2.384e-06,\n\t\t\t3.5586357e-02 * 0.803207531480645 / 2.384e-06,\n\t\t\t3.858566e-03 * 0.803207531480645 / 2.384e-06,\n\t\t\t9.95159e-04 * 0.803207531480645 / 2.384e-06,\n\t\t\t9.3460e-05 * 0.803207531480645 / 2.384e-06, /* 13 */\n\t\t\t1.0014e-05 * 0.803207531480645 / 2.384e-06,\n\t\t\t1.40190e-04 * 0.803207531480645 / 2.384e-06,\n\t\t\t1.937389e-03 * 0.803207531480645 / 2.384e-06,\n\t\t\t1.5233517e-02 * 0.803207531480645 / 2.384e-06,\n\t\t\t-2.0506859e-02 * 0.803207531480645 / 2.384e-06,\n\t\t\t-2.974033e-03 * 0.803207531480645 / 2.384e-06,\n\t\t\t-3.07560e-04 * 0.803207531480645 / 2.384e-06,\n\t\t\t-1.8120e-05 * 0.803207531480645 / 2.384e-06,\n\t\t\t7.416505462720353e-01, 5.805693545089249e-01,\n\n\t\t\t-4.77e-07 * 0.831469612302545 / 2.384e-06,\n\t\t\t1.08242e-04 * 0.831469612302545 / 2.384e-06,\n\t\t\t8.68797e-04 * 0.831469612302545 / 2.384e-06,\n\t\t\t1.800537e-03 * 0.831469612302545 / 2.384e-06,\n\t\t\t3.5435200e-02 * 0.831469612302545 / 2.384e-06,\n\t\t\t4.049301e-03 * 0.831469612302545 / 2.384e-06,\n\t\t\t9.94205e-04 * 0.831469612302545 / 2.384e-06,\n\t\t\t9.0599e-05 * 0.831469612302545 / 2.384e-06, /* 12 */\n\t\t\t9.060e-06 * 0.831469612302545 / 2.384e-06,\n\t\t\t1.16348e-04 * 0.831469612302545 / 2.384e-06,\n\t\t\t1.766682e-03 * 0.831469612302545 / 2.384e-06,\n\t\t\t1.4358521e-02 * 0.831469612302545 / 2.384e-06,\n\t\t\t-2.1372318e-02 * 0.831469612302545 / 2.384e-06,\n\t\t\t-3.14188e-03 * 0.831469612302545 / 2.384e-06,\n\t\t\t-3.39031e-04 * 0.831469612302545 / 2.384e-06,\n\t\t\t-1.9550e-05 * 0.831469612302545 / 2.384e-06,\n\t\t\t6.681786379192989e-01, 7.653668647301797e-01,\n\n\t\t\t-4.77e-07 * 0.857728610000272 / 2.384e-06,\n\t\t\t1.08719e-04 * 0.857728610000272 / 2.384e-06,\n\t\t\t8.29220e-04 * 0.857728610000272 / 2.384e-06,\n\t\t\t1.399517e-03 * 0.857728610000272 / 2.384e-06,\n\t\t\t3.5242081e-02 * 0.857728610000272 / 2.384e-06,\n\t\t\t4.215240e-03 * 0.857728610000272 / 2.384e-06,\n\t\t\t9.89437e-04 * 0.857728610000272 / 2.384e-06,\n\t\t\t8.7261e-05 * 0.857728610000272 / 2.384e-06, /* 11 */\n\t\t\t8.106e-06 * 0.857728610000272 / 2.384e-06,\n\t\t\t9.3937e-05 * 0.857728610000272 / 2.384e-06,\n\t\t\t1.597881e-03 * 0.857728610000272 / 2.384e-06,\n\t\t\t1.3489246e-02 * 0.857728610000272 / 2.384e-06,\n\t\t\t-2.2228718e-02 * 0.857728610000272 / 2.384e-06,\n\t\t\t-3.306866e-03 * 0.857728610000272 / 2.384e-06,\n\t\t\t-3.71456e-04 * 0.857728610000272 / 2.384e-06,\n\t\t\t-2.1458e-05 * 0.857728610000272 / 2.384e-06,\n\t\t\t5.993769336819237e-01, 9.427934736519954e-01,\n\n\t\t\t-4.77e-07 * 0.881921264348355 / 2.384e-06,\n\t\t\t1.08719e-04 * 0.881921264348355 / 2.384e-06,\n\t\t\t7.8392e-04 * 0.881921264348355 / 2.384e-06,\n\t\t\t9.71317e-04 * 0.881921264348355 / 2.384e-06,\n\t\t\t3.5007000e-02 * 0.881921264348355 / 2.384e-06,\n\t\t\t4.357815e-03 * 0.881921264348355 / 2.384e-06,\n\t\t\t9.80854e-04 * 0.881921264348355 / 2.384e-06,\n\t\t\t8.3923e-05 * 0.881921264348355 / 2.384e-06, /* 10 */\n\t\t\t7.629e-06 * 0.881921264348355 / 2.384e-06,\n\t\t\t7.2956e-05 * 0.881921264348355 / 2.384e-06,\n\t\t\t1.432419e-03 * 0.881921264348355 / 2.384e-06,\n\t\t\t1.2627602e-02 * 0.881921264348355 / 2.384e-06,\n\t\t\t-2.3074150e-02 * 0.881921264348355 / 2.384e-06,\n\t\t\t-3.467083e-03 * 0.881921264348355 / 2.384e-06,\n\t\t\t-4.04358e-04 * 0.881921264348355 / 2.384e-06,\n\t\t\t-2.3365e-05 * 0.881921264348355 / 2.384e-06,\n\t\t\t5.345111359507916e-01, 1.111140466039205e+00,\n\n\t\t\t-9.54e-07 * 0.903989293123443 / 2.384e-06,\n\t\t\t1.08242e-04 * 0.903989293123443 / 2.384e-06,\n\t\t\t7.31945e-04 * 0.903989293123443 / 2.384e-06,\n\t\t\t5.15938e-04 * 0.903989293123443 / 2.384e-06,\n\t\t\t3.4730434e-02 * 0.903989293123443 / 2.384e-06,\n\t\t\t4.477024e-03 * 0.903989293123443 / 2.384e-06,\n\t\t\t9.68933e-04 * 0.903989293123443 / 2.384e-06,\n\t\t\t8.0585e-05 * 0.903989293123443 / 2.384e-06, /* 9 */\n\t\t\t6.676e-06 * 0.903989293123443 / 2.384e-06,\n\t\t\t5.2929e-05 * 0.903989293123443 / 2.384e-06,\n\t\t\t1.269817e-03 * 0.903989293123443 / 2.384e-06,\n\t\t\t1.1775017e-02 * 0.903989293123443 / 2.384e-06,\n\t\t\t-2.3907185e-02 * 0.903989293123443 / 2.384e-06,\n\t\t\t-3.622532e-03 * 0.903989293123443 / 2.384e-06,\n\t\t\t-4.38213e-04 * 0.903989293123443 / 2.384e-06,\n\t\t\t-2.5272e-05 * 0.903989293123443 / 2.384e-06,\n\t\t\t4.729647758913199e-01, 1.268786568327291e+00,\n\n\t\t\t-9.54e-07 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t1.06812e-04 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t6.74248e-04 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t3.3379e-05 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t3.4412861e-02 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t4.573822e-03 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t9.54151e-04 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t7.6771e-05 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t6.199e-06 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t3.4332e-05 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t1.111031e-03 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t1.0933399e-02 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t-2.4725437e-02 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t-3.771782e-03 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t-4.72546e-04 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t-2.7657e-05 * 0.92387953251128675613 / 2.384e-06,\n\t\t\t4.1421356237309504879e-01, /* tan(PI/8) */\n\t\t\t1.414213562373095e+00,\n\n\t\t\t-9.54e-07 * 0.941544065183021 / 2.384e-06,\n\t\t\t1.05381e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t6.10352e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t-4.75883e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t3.4055710e-02 * 0.941544065183021 / 2.384e-06,\n\t\t\t4.649162e-03 * 0.941544065183021 / 2.384e-06,\n\t\t\t9.35555e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t7.3433e-05 * 0.941544065183021 / 2.384e-06, /* 7 */\n\t\t\t5.245e-06 * 0.941544065183021 / 2.384e-06,\n\t\t\t1.7166e-05 * 0.941544065183021 / 2.384e-06,\n\t\t\t9.56535e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t1.0103703e-02 * 0.941544065183021 / 2.384e-06,\n\t\t\t-2.5527000e-02 * 0.941544065183021 / 2.384e-06,\n\t\t\t-3.914356e-03 * 0.941544065183021 / 2.384e-06,\n\t\t\t-5.07355e-04 * 0.941544065183021 / 2.384e-06,\n\t\t\t-3.0041e-05 * 0.941544065183021 / 2.384e-06,\n\t\t\t3.578057213145241e-01, 1.546020906725474e+00,\n\n\t\t\t-9.54e-07 * 0.956940335732209 / 2.384e-06,\n\t\t\t1.02520e-04 * 0.956940335732209 / 2.384e-06,\n\t\t\t5.39303e-04 * 0.956940335732209 / 2.384e-06,\n\t\t\t-1.011848e-03 * 0.956940335732209 / 2.384e-06,\n\t\t\t3.3659935e-02 * 0.956940335732209 / 2.384e-06,\n\t\t\t4.703045e-03 * 0.956940335732209 / 2.384e-06,\n\t\t\t9.15051e-04 * 0.956940335732209 / 2.384e-06,\n\t\t\t7.0095e-05 * 0.956940335732209 / 2.384e-06, /* 6 */\n\t\t\t4.768e-06 * 0.956940335732209 / 2.384e-06,\n\t\t\t9.54e-07 * 0.956940335732209 / 2.384e-06,\n\t\t\t8.06808e-04 * 0.956940335732209 / 2.384e-06,\n\t\t\t9.287834e-03 * 0.956940335732209 / 2.384e-06,\n\t\t\t-2.6310921e-02 * 0.956940335732209 / 2.384e-06,\n\t\t\t-4.048824e-03 * 0.956940335732209 / 2.384e-06,\n\t\t\t-5.42164e-04 * 0.956940335732209 / 2.384e-06,\n\t\t\t-3.2425e-05 * 0.956940335732209 / 2.384e-06,\n\t\t\t3.033466836073424e-01, 1.662939224605090e+00,\n\n\t\t\t-1.431e-06 * 0.970031253194544 / 2.384e-06,\n\t\t\t9.9182e-05 * 0.970031253194544 / 2.384e-06,\n\t\t\t4.62532e-04 * 0.970031253194544 / 2.384e-06,\n\t\t\t-1.573563e-03 * 0.970031253194544 / 2.384e-06,\n\t\t\t3.3225536e-02 * 0.970031253194544 / 2.384e-06,\n\t\t\t4.737377e-03 * 0.970031253194544 / 2.384e-06,\n\t\t\t8.91685e-04 * 0.970031253194544 / 2.384e-06,\n\t\t\t6.6280e-05 * 0.970031253194544 / 2.384e-06, /* 5 */\n\t\t\t4.292e-06 * 0.970031253194544 / 2.384e-06,\n\t\t\t-1.3828e-05 * 0.970031253194544 / 2.384e-06,\n\t\t\t6.61850e-04 * 0.970031253194544 / 2.384e-06,\n\t\t\t8.487225e-03 * 0.970031253194544 / 2.384e-06,\n\t\t\t-2.7073860e-02 * 0.970031253194544 / 2.384e-06,\n\t\t\t-4.174709e-03 * 0.970031253194544 / 2.384e-06,\n\t\t\t-5.76973e-04 * 0.970031253194544 / 2.384e-06,\n\t\t\t-3.4809e-05 * 0.970031253194544 / 2.384e-06,\n\t\t\t2.504869601913055e-01, 1.763842528696710e+00,\n\n\t\t\t-1.431e-06 * 0.98078528040323 / 2.384e-06,\n\t\t\t9.5367e-05 * 0.98078528040323 / 2.384e-06,\n\t\t\t3.78609e-04 * 0.98078528040323 / 2.384e-06,\n\t\t\t-2.161503e-03 * 0.98078528040323 / 2.384e-06,\n\t\t\t3.2754898e-02 * 0.98078528040323 / 2.384e-06,\n\t\t\t4.752159e-03 * 0.98078528040323 / 2.384e-06,\n\t\t\t8.66413e-04 * 0.98078528040323 / 2.384e-06,\n\t\t\t6.2943e-05 * 0.98078528040323 / 2.384e-06, /* 4 */\n\t\t\t3.815e-06 * 0.98078528040323 / 2.384e-06,\n\t\t\t-2.718e-05 * 0.98078528040323 / 2.384e-06,\n\t\t\t5.22137e-04 * 0.98078528040323 / 2.384e-06,\n\t\t\t7.703304e-03 * 0.98078528040323 / 2.384e-06,\n\t\t\t-2.7815342e-02 * 0.98078528040323 / 2.384e-06,\n\t\t\t-4.290581e-03 * 0.98078528040323 / 2.384e-06,\n\t\t\t-6.11782e-04 * 0.98078528040323 / 2.384e-06,\n\t\t\t-3.7670e-05 * 0.98078528040323 / 2.384e-06,\n\t\t\t1.989123673796580e-01, 1.847759065022573e+00,\n\n\t\t\t-1.907e-06 * 0.989176509964781 / 2.384e-06,\n\t\t\t9.0122e-05 * 0.989176509964781 / 2.384e-06,\n\t\t\t2.88486e-04 * 0.989176509964781 / 2.384e-06,\n\t\t\t-2.774239e-03 * 0.989176509964781 / 2.384e-06,\n\t\t\t3.2248020e-02 * 0.989176509964781 / 2.384e-06,\n\t\t\t4.748821e-03 * 0.989176509964781 / 2.384e-06,\n\t\t\t8.38757e-04 * 0.989176509964781 / 2.384e-06,\n\t\t\t5.9605e-05 * 0.989176509964781 / 2.384e-06, /* 3 */\n\t\t\t3.338e-06 * 0.989176509964781 / 2.384e-06,\n\t\t\t-3.9577e-05 * 0.989176509964781 / 2.384e-06,\n\t\t\t3.88145e-04 * 0.989176509964781 / 2.384e-06,\n\t\t\t6.937027e-03 * 0.989176509964781 / 2.384e-06,\n\t\t\t-2.8532982e-02 * 0.989176509964781 / 2.384e-06,\n\t\t\t-4.395962e-03 * 0.989176509964781 / 2.384e-06,\n\t\t\t-6.46591e-04 * 0.989176509964781 / 2.384e-06,\n\t\t\t-4.0531e-05 * 0.989176509964781 / 2.384e-06,\n\t\t\t1.483359875383474e-01, 1.913880671464418e+00,\n\n\t\t\t-1.907e-06 * 0.995184726672197 / 2.384e-06,\n\t\t\t8.4400e-05 * 0.995184726672197 / 2.384e-06,\n\t\t\t1.91689e-04 * 0.995184726672197 / 2.384e-06,\n\t\t\t-3.411293e-03 * 0.995184726672197 / 2.384e-06,\n\t\t\t3.1706810e-02 * 0.995184726672197 / 2.384e-06,\n\t\t\t4.728317e-03 * 0.995184726672197 / 2.384e-06,\n\t\t\t8.09669e-04 * 0.995184726672197 / 2.384e-06,\n\t\t\t5.579e-05 * 0.995184726672197 / 2.384e-06,\n\t\t\t3.338e-06 * 0.995184726672197 / 2.384e-06,\n\t\t\t-5.0545e-05 * 0.995184726672197 / 2.384e-06,\n\t\t\t2.59876e-04 * 0.995184726672197 / 2.384e-06,\n\t\t\t6.189346e-03 * 0.995184726672197 / 2.384e-06,\n\t\t\t-2.9224873e-02 * 0.995184726672197 / 2.384e-06,\n\t\t\t-4.489899e-03 * 0.995184726672197 / 2.384e-06,\n\t\t\t-6.80923e-04 * 0.995184726672197 / 2.384e-06,\n\t\t\t-4.3392e-05 * 0.995184726672197 / 2.384e-06,\n\t\t\t9.849140335716425e-02, 1.961570560806461e+00,\n\n\t\t\t-2.384e-06 * 0.998795456205172 / 2.384e-06,\n\t\t\t7.7724e-05 * 0.998795456205172 / 2.384e-06,\n\t\t\t8.8215e-05 * 0.998795456205172 / 2.384e-06,\n\t\t\t-4.072189e-03 * 0.998795456205172 / 2.384e-06,\n\t\t\t3.1132698e-02 * 0.998795456205172 / 2.384e-06,\n\t\t\t4.691124e-03 * 0.998795456205172 / 2.384e-06,\n\t\t\t7.79152e-04 * 0.998795456205172 / 2.384e-06,\n\t\t\t5.2929e-05 * 0.998795456205172 / 2.384e-06,\n\t\t\t2.861e-06 * 0.998795456205172 / 2.384e-06,\n\t\t\t-6.0558e-05 * 0.998795456205172 / 2.384e-06,\n\t\t\t1.37329e-04 * 0.998795456205172 / 2.384e-06,\n\t\t\t5.462170e-03 * 0.998795456205172 / 2.384e-06,\n\t\t\t-2.9890060e-02 * 0.998795456205172 / 2.384e-06,\n\t\t\t-4.570484e-03 * 0.998795456205172 / 2.384e-06,\n\t\t\t-7.14302e-04 * 0.998795456205172 / 2.384e-06,\n\t\t\t-4.6253e-05 * 0.998795456205172 / 2.384e-06,\n\t\t\t4.912684976946725e-02, 1.990369453344394e+00,\n\n\t\t\t3.5780907e-02 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t1.7876148e-02 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t3.134727e-03 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t2.457142e-03 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t9.71317e-04 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t2.18868e-04 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t1.01566e-04 * Util.SQRT2 * 0.5 / 2.384e-06,\n\t\t\t1.3828e-05 * Util.SQRT2 * 0.5 / 2.384e-06,\n\n\t\t\t3.0526638e-02 / 2.384e-06, 4.638195e-03 / 2.384e-06,\n\t\t\t7.47204e-04 / 2.384e-06, 4.9591e-05 / 2.384e-06,\n\t\t\t4.756451e-03 / 2.384e-06, 2.1458e-05 / 2.384e-06,\n\t\t\t-6.9618e-05 / 2.384e-06, /* 2.384e-06/2.384e-06 */\n\t];\n\n\tvar NS = 12;\n\tvar NL = 36;\n\n\tvar win = [\n\t [\n\t 2.382191739347913e-13,\n\t 6.423305872147834e-13,\n\t 9.400849094049688e-13,\n\t 1.122435026096556e-12,\n\t 1.183840321267481e-12,\n\t 1.122435026096556e-12,\n\t 9.400849094049690e-13,\n\t 6.423305872147839e-13,\n\t 2.382191739347918e-13,\n\n\t 5.456116108943412e-12,\n\t 4.878985199565852e-12,\n\t 4.240448995017367e-12,\n\t 3.559909094758252e-12,\n\t 2.858043359288075e-12,\n\t 2.156177623817898e-12,\n\t 1.475637723558783e-12,\n\t 8.371015190102974e-13,\n\t 2.599706096327376e-13,\n\n\t -5.456116108943412e-12,\n\t -4.878985199565852e-12,\n\t -4.240448995017367e-12,\n\t -3.559909094758252e-12,\n\t -2.858043359288076e-12,\n\t -2.156177623817898e-12,\n\t -1.475637723558783e-12,\n\t -8.371015190102975e-13,\n\t -2.599706096327376e-13,\n\n\t -2.382191739347923e-13,\n\t -6.423305872147843e-13,\n\t -9.400849094049696e-13,\n\t -1.122435026096556e-12,\n\t -1.183840321267481e-12,\n\t -1.122435026096556e-12,\n\t -9.400849094049694e-13,\n\t -6.423305872147840e-13,\n\t -2.382191739347918e-13,\n\t ],\n\t [\n\t 2.382191739347913e-13,\n\t 6.423305872147834e-13,\n\t 9.400849094049688e-13,\n\t 1.122435026096556e-12,\n\t 1.183840321267481e-12,\n\t 1.122435026096556e-12,\n\t 9.400849094049688e-13,\n\t 6.423305872147841e-13,\n\t 2.382191739347918e-13,\n\n\t 5.456116108943413e-12,\n\t 4.878985199565852e-12,\n\t 4.240448995017367e-12,\n\t 3.559909094758253e-12,\n\t 2.858043359288075e-12,\n\t 2.156177623817898e-12,\n\t 1.475637723558782e-12,\n\t 8.371015190102975e-13,\n\t 2.599706096327376e-13,\n\n\t -5.461314069809755e-12,\n\t -4.921085770524055e-12,\n\t -4.343405037091838e-12,\n\t -3.732668368707687e-12,\n\t -3.093523840190885e-12,\n\t -2.430835727329465e-12,\n\t -1.734679010007751e-12,\n\t -9.748253656609281e-13,\n\t -2.797435120168326e-13,\n\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t -2.283748241799531e-13,\n\t -4.037858874020686e-13,\n\t -2.146547464825323e-13,\n\t ],\n\t [\n\t 1.316524975873958e-01, /* win[SHORT_TYPE] */\n\t 4.142135623730950e-01,\n\t 7.673269879789602e-01,\n\n\t 1.091308501069271e+00, /* tantab_l */\n\t 1.303225372841206e+00,\n\t 1.569685577117490e+00,\n\t 1.920982126971166e+00,\n\t 2.414213562373094e+00,\n\t 3.171594802363212e+00,\n\t 4.510708503662055e+00,\n\t 7.595754112725146e+00,\n\t 2.290376554843115e+01,\n\n\t 0.98480775301220802032, /* cx */\n\t 0.64278760968653936292,\n\t 0.34202014332566882393,\n\t 0.93969262078590842791,\n\t -0.17364817766693030343,\n\t -0.76604444311897790243,\n\t 0.86602540378443870761,\n\t 0.500000000000000e+00,\n\n\t -5.144957554275265e-01, /* ca */\n\t -4.717319685649723e-01,\n\t -3.133774542039019e-01,\n\t -1.819131996109812e-01,\n\t -9.457419252642064e-02,\n\t -4.096558288530405e-02,\n\t -1.419856857247115e-02,\n\t -3.699974673760037e-03,\n\n\t 8.574929257125442e-01, /* cs */\n\t 8.817419973177052e-01,\n\t 9.496286491027329e-01,\n\t 9.833145924917901e-01,\n\t 9.955178160675857e-01,\n\t 9.991605581781475e-01,\n\t 9.998991952444470e-01,\n\t 9.999931550702802e-01,\n\t ],\n\t [\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 0.000000000000000e+00,\n\t 2.283748241799531e-13,\n\t 4.037858874020686e-13,\n\t 2.146547464825323e-13,\n\n\t 5.461314069809755e-12,\n\t 4.921085770524055e-12,\n\t 4.343405037091838e-12,\n\t 3.732668368707687e-12,\n\t 3.093523840190885e-12,\n\t 2.430835727329466e-12,\n\t 1.734679010007751e-12,\n\t 9.748253656609281e-13,\n\t 2.797435120168326e-13,\n\n\t -5.456116108943413e-12,\n\t -4.878985199565852e-12,\n\t -4.240448995017367e-12,\n\t -3.559909094758253e-12,\n\t -2.858043359288075e-12,\n\t -2.156177623817898e-12,\n\t -1.475637723558782e-12,\n\t -8.371015190102975e-13,\n\t -2.599706096327376e-13,\n\n\t -2.382191739347913e-13,\n\t -6.423305872147834e-13,\n\t -9.400849094049688e-13,\n\t -1.122435026096556e-12,\n\t -1.183840321267481e-12,\n\t -1.122435026096556e-12,\n\t -9.400849094049688e-13,\n\t -6.423305872147841e-13,\n\t -2.382191739347918e-13,\n\t ]\n\t];\n\n\tvar tantab_l = win[Encoder.SHORT_TYPE];\n\tvar cx = win[Encoder.SHORT_TYPE];\n\tvar ca = win[Encoder.SHORT_TYPE];\n\tvar cs = win[Encoder.SHORT_TYPE];\n\n\t/**\n\t * new IDCT routine written by Takehiro TOMINAGA\n\t *\n\t * PURPOSE: Overlapping window on PCM samples
\n * Mode Extention:\n * When we are in stereo mode, there are 4 possible methods to store these\n * two channels. The stereo modes -m? are using a subset of them.\n *\n * -ms: MPG_MD_LR_LR\n * -mj: MPG_MD_LR_LR and MPG_MD_MS_LR\n * -mf: MPG_MD_MS_LR\n * -mi: all\n *\n */\nEncoder.MPG_MD_LR_LR = 0;\nEncoder.MPG_MD_LR_I = 1;\nEncoder.MPG_MD_MS_LR = 2;\nEncoder.MPG_MD_MS_I = 3;\n\nEncoder.fircoef = [-0.0207887 * 5, -0.0378413 * 5,\n -0.0432472 * 5, -0.031183 * 5, 7.79609e-18 * 5, 0.0467745 * 5,\n 0.10091 * 5, 0.151365 * 5, 0.187098 * 5];\n\nfunction Encoder() {\n var NewMDCT = require('./NewMDCT.js');\n var III_psy_ratio = require('./III_psy_ratio.js');\n\n var FFTOFFSET = Encoder.FFTOFFSET;\n var MPG_MD_MS_LR = Encoder.MPG_MD_MS_LR;\n //BitStream bs;\n //PsyModel psy;\n //VBRTag vbr;\n //QuantizePVT qupvt;\n var bs = null;\n this.psy = null;\n var psy = null;\n var vbr = null;\n var qupvt = null;\n\n //public final void setModules(BitStream bs, PsyModel psy, QuantizePVT qupvt,\n // VBRTag vbr) {\n this.setModules = function (_bs, _psy, _qupvt, _vbr) {\n bs = _bs;\n this.psy = _psy;\n psy = _psy;\n vbr = _vbr;\n qupvt = _qupvt;\n };\n\n var newMDCT = new NewMDCT();\n\n /***********************************************************************\n *\n * encoder and decoder delays\n *\n ***********************************************************************/\n\n /**\n *
\n * layer III enc->dec delay: 1056 (1057?) (observed)\n * layer II enc->dec delay: 480 (481?) (observed)\n *\n * polyphase 256-16 (dec or enc) = 240\n * mdct 256+32 (9*32) (dec or enc) = 288\n * total: 512+16\n *\n * My guess is that delay of polyphase filterbank is actualy 240.5\n * (there are technical reasons for this, see postings in mp3encoder).\n * So total Encode+Decode delay = ENCDELAY + 528 + 1\n *\n */\n\n\n /**\n * auto-adjust of ATH, useful for low volume Gabriel Bouvigne 3 feb 2001\n *\n * modifies some values in gfp.internal_flags.ATH (gfc.ATH)\n */\n//private void adjust_ATH(final LameInternalFlags gfc) {\n function adjust_ATH(gfc) {\n var gr2_max, max_pow;\n\n if (gfc.ATH.useAdjust == 0) {\n gfc.ATH.adjust = 1.0;\n /* no adjustment */\n return;\n }\n\n /* jd - 2001 mar 12, 27, jun 30 */\n /* loudness based on equal loudness curve; */\n /* use granule with maximum combined loudness */\n max_pow = gfc.loudness_sq[0][0];\n gr2_max = gfc.loudness_sq[1][0];\n if (gfc.channels_out == 2) {\n max_pow += gfc.loudness_sq[0][1];\n gr2_max += gfc.loudness_sq[1][1];\n } else {\n max_pow += max_pow;\n gr2_max += gr2_max;\n }\n if (gfc.mode_gr == 2) {\n max_pow = Math.max(max_pow, gr2_max);\n }\n max_pow *= 0.5;\n /* max_pow approaches 1.0 for full band noise */\n\n /* jd - 2001 mar 31, jun 30 */\n /* user tuning of ATH adjustment region */\n max_pow *= gfc.ATH.aaSensitivityP;\n\n /*\n * adjust ATH depending on range of maximum value\n */\n\n /* jd - 2001 feb27, mar12,20, jun30, jul22 */\n /* continuous curves based on approximation */\n /* to GB's original values. */\n /* For an increase in approximate loudness, */\n /* set ATH adjust to adjust_limit immediately */\n /* after a delay of one frame. */\n /* For a loudness decrease, reduce ATH adjust */\n /* towards adjust_limit gradually. */\n /* max_pow is a loudness squared or a power. */\n if (max_pow > 0.03125) { /* ((1 - 0.000625)/ 31.98) from curve below */\n if (gfc.ATH.adjust >= 1.0) {\n gfc.ATH.adjust = 1.0;\n } else {\n /* preceding frame has lower ATH adjust; */\n /* ascend only to the preceding adjust_limit */\n /* in case there is leading low volume */\n if (gfc.ATH.adjust < gfc.ATH.adjustLimit) {\n gfc.ATH.adjust = gfc.ATH.adjustLimit;\n }\n }\n gfc.ATH.adjustLimit = 1.0;\n } else { /* adjustment curve */\n /* about 32 dB maximum adjust (0.000625) */\n var adj_lim_new = 31.98 * max_pow + 0.000625;\n if (gfc.ATH.adjust >= adj_lim_new) { /* descend gradually */\n gfc.ATH.adjust *= adj_lim_new * 0.075 + 0.925;\n if (gfc.ATH.adjust < adj_lim_new) { /* stop descent */\n gfc.ATH.adjust = adj_lim_new;\n }\n } else { /* ascend */\n if (gfc.ATH.adjustLimit >= adj_lim_new) {\n gfc.ATH.adjust = adj_lim_new;\n } else {\n /* preceding frame has lower ATH adjust; */\n /* ascend only to the preceding adjust_limit */\n if (gfc.ATH.adjust < gfc.ATH.adjustLimit) {\n gfc.ATH.adjust = gfc.ATH.adjustLimit;\n }\n }\n }\n gfc.ATH.adjustLimit = adj_lim_new;\n }\n }\n\n /**\n *
\n * some simple statistics\n *\n * bitrate index 0: free bitrate . not allowed in VBR mode\n * : bitrates, kbps depending on MPEG version\n * bitrate index 15: forbidden\n *\n * mode_ext:\n * 0: LR\n * 1: LR-i\n * 2: MS\n * 3: MS-i\n *\n */\n function updateStats(gfc) {\n var gr, ch;\n assert(0 <= gfc.bitrate_index && gfc.bitrate_index < 16);\n assert(0 <= gfc.mode_ext && gfc.mode_ext < 4);\n\n /* count bitrate indices */\n gfc.bitrate_stereoMode_Hist[gfc.bitrate_index][4]++;\n gfc.bitrate_stereoMode_Hist[15][4]++;\n\n /* count 'em for every mode extension in case of 2 channel encoding */\n if (gfc.channels_out == 2) {\n gfc.bitrate_stereoMode_Hist[gfc.bitrate_index][gfc.mode_ext]++;\n gfc.bitrate_stereoMode_Hist[15][gfc.mode_ext]++;\n }\n for (gr = 0; gr < gfc.mode_gr; ++gr) {\n for (ch = 0; ch < gfc.channels_out; ++ch) {\n var bt = gfc.l3_side.tt[gr][ch].block_type | 0;\n if (gfc.l3_side.tt[gr][ch].mixed_block_flag != 0)\n bt = 4;\n gfc.bitrate_blockType_Hist[gfc.bitrate_index][bt]++;\n gfc.bitrate_blockType_Hist[gfc.bitrate_index][5]++;\n gfc.bitrate_blockType_Hist[15][bt]++;\n gfc.bitrate_blockType_Hist[15][5]++;\n }\n }\n }\n\n function lame_encode_frame_init(gfp, inbuf) {\n var gfc = gfp.internal_flags;\n\n var ch, gr;\n\n if (gfc.lame_encode_frame_init == 0) {\n /* prime the MDCT/polyphase filterbank with a short block */\n var i, j;\n var primebuff0 = new_float(286 + 1152 + 576);\n var primebuff1 = new_float(286 + 1152 + 576);\n gfc.lame_encode_frame_init = 1;\n for (i = 0, j = 0; i < 286 + 576 * (1 + gfc.mode_gr); ++i) {\n if (i < 576 * gfc.mode_gr) {\n primebuff0[i] = 0;\n if (gfc.channels_out == 2)\n primebuff1[i] = 0;\n } else {\n primebuff0[i] = inbuf[0][j];\n if (gfc.channels_out == 2)\n primebuff1[i] = inbuf[1][j];\n ++j;\n }\n }\n /* polyphase filtering / mdct */\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n gfc.l3_side.tt[gr][ch].block_type = Encoder.SHORT_TYPE;\n }\n }\n newMDCT.mdct_sub48(gfc, primebuff0, primebuff1);\n\n /* check FFT will not use a negative starting offset */\n assert(576 >= Encoder.FFTOFFSET);\n /* check if we have enough data for FFT */\n assert(gfc.mf_size >= (Encoder.BLKSIZE + gfp.framesize - Encoder.FFTOFFSET));\n /* check if we have enough data for polyphase filterbank */\n assert(gfc.mf_size >= (512 + gfp.framesize - 32));\n }\n\n }\n\n /**\n *
\n * encodeframe() Layer 3\n *\n * encode a single frame\n *\n *\n * lame_encode_frame()\n *\n *\n * gr 0 gr 1\n * inbuf: |--------------|--------------|--------------|\n *\n *\n * Polyphase (18 windows, each shifted 32)\n * gr 0:\n * window1 <----512---.\n * window18 <----512---.\n *\n * gr 1:\n * window1 <----512---.\n * window18 <----512---.\n *\n *\n *\n * MDCT output: |--------------|--------------|--------------|\n *\n * FFT's <---------1024---------.\n * <---------1024-------.\n *\n *\n *\n * inbuf = buffer of PCM data size=MP3 framesize\n * encoder acts on inbuf[ch][0], but output is delayed by MDCTDELAY\n * so the MDCT coefficints are from inbuf[ch][-MDCTDELAY]\n *\n * psy-model FFT has a 1 granule delay, so we feed it data for the\n * next granule.\n * FFT is centered over granule: 224+576+224\n * So FFT starts at: 576-224-MDCTDELAY\n *\n * MPEG2: FFT ends at: BLKSIZE+576-224-MDCTDELAY (1328)\n * MPEG1: FFT ends at: BLKSIZE+2*576-224-MDCTDELAY (1904)\n *\n * MPEG2: polyphase first window: [0..511]\n * 18th window: [544..1055] (1056)\n * MPEG1: 36th window: [1120..1631] (1632)\n * data needed: 512+framesize-32\n *\n * A close look newmdct.c shows that the polyphase filterbank\n * only uses data from [0..510] for each window. Perhaps because the window\n * used by the filterbank is zero for the last point, so Takehiro's\n * code doesn't bother to compute with it.\n *\n * FFT starts at 576-224-MDCTDELAY (304) = 576-FFTOFFSET\n *\n *\n */\n\n\n this.lame_encode_mp3_frame = function (gfp, inbuf_l, inbuf_r, mp3buf, mp3bufPos, mp3buf_size) {\n var mp3count;\n var masking_LR = new_array_n([2, 2]);\n /*\n * LR masking &\n * energy\n */\n masking_LR[0][0] = new III_psy_ratio();\n masking_LR[0][1] = new III_psy_ratio();\n masking_LR[1][0] = new III_psy_ratio();\n masking_LR[1][1] = new III_psy_ratio();\n var masking_MS = new_array_n([2, 2]);\n /* MS masking & energy */\n masking_MS[0][0] = new III_psy_ratio();\n masking_MS[0][1] = new III_psy_ratio();\n masking_MS[1][0] = new III_psy_ratio();\n masking_MS[1][1] = new III_psy_ratio();\n //III_psy_ratio masking[][];\n var masking;\n /* pointer to selected maskings */\n var inbuf = [null, null];\n var gfc = gfp.internal_flags;\n\n var tot_ener = new_float_n([2, 4]);\n var ms_ener_ratio = [.5, .5];\n var pe = [[0., 0.], [0., 0.]];\n var pe_MS = [[0., 0.], [0., 0.]];\n\n//float[][] pe_use;\n var pe_use;\n\n var ch, gr;\n\n inbuf[0] = inbuf_l;\n inbuf[1] = inbuf_r;\n\n if (gfc.lame_encode_frame_init == 0) {\n /* first run? */\n lame_encode_frame_init(gfp, inbuf);\n\n }\n\n /********************** padding *****************************/\n /**\n *
\n * padding method as described in\n * \"MPEG-Layer3 / Bitstream Syntax and Decoding\"\n * by Martin Sieler, Ralph Sperschneider\n *\n * note: there is no padding for the very first frame\n *\n * Robert Hegemann 2000-06-22\n *\n */\n gfc.padding = 0;\n if ((gfc.slot_lag -= gfc.frac_SpF) < 0) {\n gfc.slot_lag += gfp.out_samplerate;\n gfc.padding = 1;\n }\n\n /****************************************\n * Stage 1: psychoacoustic model *\n ****************************************/\n\n if (gfc.psymodel != 0) {\n /*\n * psychoacoustic model psy model has a 1 granule (576) delay that\n * we must compensate for (mt 6/99).\n */\n var ret;\n var bufp = [null, null];\n /* address of beginning of left & right granule */\n var bufpPos = 0;\n /* address of beginning of left & right granule */\n var blocktype = new_int(2);\n\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n\n for (ch = 0; ch < gfc.channels_out; ch++) {\n bufp[ch] = inbuf[ch];\n bufpPos = 576 + gr * 576 - Encoder.FFTOFFSET;\n }\n if (gfp.VBR == VbrMode.vbr_mtrh || gfp.VBR == VbrMode.vbr_mt) {\n ret = psy.L3psycho_anal_vbr(gfp, bufp, bufpPos, gr,\n masking_LR, masking_MS, pe[gr], pe_MS[gr],\n tot_ener[gr], blocktype);\n } else {\n ret = psy.L3psycho_anal_ns(gfp, bufp, bufpPos, gr,\n masking_LR, masking_MS, pe[gr], pe_MS[gr],\n tot_ener[gr], blocktype);\n }\n if (ret != 0)\n return -4;\n\n if (gfp.mode == MPEGMode.JOINT_STEREO) {\n ms_ener_ratio[gr] = tot_ener[gr][2] + tot_ener[gr][3];\n if (ms_ener_ratio[gr] > 0)\n ms_ener_ratio[gr] = tot_ener[gr][3] / ms_ener_ratio[gr];\n }\n\n /* block type flags */\n for (ch = 0; ch < gfc.channels_out; ch++) {\n var cod_info = gfc.l3_side.tt[gr][ch];\n cod_info.block_type = blocktype[ch];\n cod_info.mixed_block_flag = 0;\n }\n }\n } else {\n /* no psy model */\n for (gr = 0; gr < gfc.mode_gr; gr++)\n for (ch = 0; ch < gfc.channels_out; ch++) {\n gfc.l3_side.tt[gr][ch].block_type = Encoder.NORM_TYPE;\n gfc.l3_side.tt[gr][ch].mixed_block_flag = 0;\n pe_MS[gr][ch] = pe[gr][ch] = 700;\n }\n }\n\n /* auto-adjust of ATH, useful for low volume */\n adjust_ATH(gfc);\n\n /****************************************\n * Stage 2: MDCT *\n ****************************************/\n\n /* polyphase filtering / mdct */\n newMDCT.mdct_sub48(gfc, inbuf[0], inbuf[1]);\n\n /****************************************\n * Stage 3: MS/LR decision *\n ****************************************/\n\n /* Here will be selected MS or LR coding of the 2 stereo channels */\n gfc.mode_ext = Encoder.MPG_MD_LR_LR;\n\n if (gfp.force_ms) {\n gfc.mode_ext = Encoder.MPG_MD_MS_LR;\n } else if (gfp.mode == MPEGMode.JOINT_STEREO) {\n /*\n * ms_ratio = is scaled, for historical reasons, to look like a\n * ratio of side_channel / total. 0 = signal is 100% mono .5 = L & R\n * uncorrelated\n */\n\n /**\n *
\n * [0] and [1] are the results for the two granules in MPEG-1,\n * in MPEG-2 it's only a faked averaging of the same value\n * _prev is the value of the last granule of the previous frame\n * _next is the value of the first granule of the next frame\n *\n */\n\n var sum_pe_MS = 0.;\n var sum_pe_LR = 0.;\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n sum_pe_MS += pe_MS[gr][ch];\n sum_pe_LR += pe[gr][ch];\n }\n }\n\n /* based on PE: M/S coding would not use much more bits than L/R */\n if (sum_pe_MS <= 1.00 * sum_pe_LR) {\n\n var gi0 = gfc.l3_side.tt[0];\n var gi1 = gfc.l3_side.tt[gfc.mode_gr - 1];\n\n if (gi0[0].block_type == gi0[1].block_type\n && gi1[0].block_type == gi1[1].block_type) {\n\n gfc.mode_ext = Encoder.MPG_MD_MS_LR;\n }\n }\n }\n\n /* bit and noise allocation */\n if (gfc.mode_ext == MPG_MD_MS_LR) {\n masking = masking_MS;\n /* use MS masking */\n pe_use = pe_MS;\n } else {\n masking = masking_LR;\n /* use LR masking */\n pe_use = pe;\n }\n\n /* copy data for MP3 frame analyzer */\n if (gfp.analysis && gfc.pinfo != null) {\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n gfc.pinfo.ms_ratio[gr] = gfc.ms_ratio[gr];\n gfc.pinfo.ms_ener_ratio[gr] = ms_ener_ratio[gr];\n gfc.pinfo.blocktype[gr][ch] = gfc.l3_side.tt[gr][ch].block_type;\n gfc.pinfo.pe[gr][ch] = pe_use[gr][ch];\n System.arraycopy(gfc.l3_side.tt[gr][ch].xr, 0,\n gfc.pinfo.xr[gr][ch], 0, 576);\n /*\n * in psymodel, LR and MS data was stored in pinfo. switch\n * to MS data:\n */\n if (gfc.mode_ext == MPG_MD_MS_LR) {\n gfc.pinfo.ers[gr][ch] = gfc.pinfo.ers[gr][ch + 2];\n System.arraycopy(gfc.pinfo.energy[gr][ch + 2], 0,\n gfc.pinfo.energy[gr][ch], 0,\n gfc.pinfo.energy[gr][ch].length);\n }\n }\n }\n }\n\n /****************************************\n * Stage 4: quantization loop *\n ****************************************/\n\n if (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_abr) {\n\n var i;\n var f;\n\n for (i = 0; i < 18; i++)\n gfc.nsPsy.pefirbuf[i] = gfc.nsPsy.pefirbuf[i + 1];\n\n f = 0.0;\n for (gr = 0; gr < gfc.mode_gr; gr++)\n for (ch = 0; ch < gfc.channels_out; ch++)\n f += pe_use[gr][ch];\n gfc.nsPsy.pefirbuf[18] = f;\n\n f = gfc.nsPsy.pefirbuf[9];\n for (i = 0; i < 9; i++)\n f += (gfc.nsPsy.pefirbuf[i] + gfc.nsPsy.pefirbuf[18 - i])\n * Encoder.fircoef[i];\n\n f = (670 * 5 * gfc.mode_gr * gfc.channels_out) / f;\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n pe_use[gr][ch] *= f;\n }\n }\n }\n gfc.iteration_loop.iteration_loop(gfp, pe_use, ms_ener_ratio, masking);\n\n /****************************************\n * Stage 5: bitstream formatting *\n ****************************************/\n\n /* write the frame to the bitstream */\n bs.format_bitstream(gfp);\n\n /* copy mp3 bit buffer into array */\n mp3count = bs.copy_buffer(gfc, mp3buf, mp3bufPos, mp3buf_size, 1);\n\n if (gfp.bWriteVbrTag)\n vbr.addVbrFrame(gfp);\n\n if (gfp.analysis && gfc.pinfo != null) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n var j;\n for (j = 0; j < FFTOFFSET; j++)\n gfc.pinfo.pcmdata[ch][j] = gfc.pinfo.pcmdata[ch][j\n + gfp.framesize];\n for (j = FFTOFFSET; j < 1600; j++) {\n gfc.pinfo.pcmdata[ch][j] = inbuf[ch][j - FFTOFFSET];\n }\n }\n qupvt.set_frame_pinfo(gfp, masking);\n }\n\n updateStats(gfc);\n\n return mp3count;\n }\n}\n\n\nmodule.exports = Encoder;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\n\nfunction FFT() {\n\n var window = new_float(Encoder.BLKSIZE);\n var window_s = new_float(Encoder.BLKSIZE_s / 2);\n\n var costab = [\n 9.238795325112867e-01, 3.826834323650898e-01,\n 9.951847266721969e-01, 9.801714032956060e-02,\n 9.996988186962042e-01, 2.454122852291229e-02,\n 9.999811752826011e-01, 6.135884649154475e-03\n ];\n\n function fht(fz, fzPos, n) {\n var tri = 0;\n var k4;\n var fi;\n var gi;\n\n n <<= 1;\n /* to get BLKSIZE, because of 3DNow! ASM routine */\n var fn = fzPos + n;\n k4 = 4;\n do {\n var s1, c1;\n var i, k1, k2, k3, kx;\n kx = k4 >> 1;\n k1 = k4;\n k2 = k4 << 1;\n k3 = k2 + k1;\n k4 = k2 << 1;\n fi = fzPos;\n gi = fi + kx;\n do {\n var f0, f1, f2, f3;\n f1 = fz[fi + 0] - fz[fi + k1];\n f0 = fz[fi + 0] + fz[fi + k1];\n f3 = fz[fi + k2] - fz[fi + k3];\n f2 = fz[fi + k2] + fz[fi + k3];\n fz[fi + k2] = f0 - f2;\n fz[fi + 0] = f0 + f2;\n fz[fi + k3] = f1 - f3;\n fz[fi + k1] = f1 + f3;\n f1 = fz[gi + 0] - fz[gi + k1];\n f0 = fz[gi + 0] + fz[gi + k1];\n f3 = (Util.SQRT2 * fz[gi + k3]);\n f2 = (Util.SQRT2 * fz[gi + k2]);\n fz[gi + k2] = f0 - f2;\n fz[gi + 0] = f0 + f2;\n fz[gi + k3] = f1 - f3;\n fz[gi + k1] = f1 + f3;\n gi += k4;\n fi += k4;\n } while (fi < fn);\n c1 = costab[tri + 0];\n s1 = costab[tri + 1];\n for (i = 1; i < kx; i++) {\n var c2, s2;\n c2 = 1 - (2 * s1) * s1;\n s2 = (2 * s1) * c1;\n fi = fzPos + i;\n gi = fzPos + k1 - i;\n do {\n var a, b, g0, f0, f1, g1, f2, g2, f3, g3;\n b = s2 * fz[fi + k1] - c2 * fz[gi + k1];\n a = c2 * fz[fi + k1] + s2 * fz[gi + k1];\n f1 = fz[fi + 0] - a;\n f0 = fz[fi + 0] + a;\n g1 = fz[gi + 0] - b;\n g0 = fz[gi + 0] + b;\n b = s2 * fz[fi + k3] - c2 * fz[gi + k3];\n a = c2 * fz[fi + k3] + s2 * fz[gi + k3];\n f3 = fz[fi + k2] - a;\n f2 = fz[fi + k2] + a;\n g3 = fz[gi + k2] - b;\n g2 = fz[gi + k2] + b;\n b = s1 * f2 - c1 * g3;\n a = c1 * f2 + s1 * g3;\n fz[fi + k2] = f0 - a;\n fz[fi + 0] = f0 + a;\n fz[gi + k3] = g1 - b;\n fz[gi + k1] = g1 + b;\n b = c1 * g2 - s1 * f3;\n a = s1 * g2 + c1 * f3;\n fz[gi + k2] = g0 - a;\n fz[gi + 0] = g0 + a;\n fz[fi + k3] = f1 - b;\n fz[fi + k1] = f1 + b;\n gi += k4;\n fi += k4;\n } while (fi < fn);\n c2 = c1;\n c1 = c2 * costab[tri + 0] - s1 * costab[tri + 1];\n s1 = c2 * costab[tri + 1] + s1 * costab[tri + 0];\n }\n tri += 2;\n } while (k4 < n);\n }\n\n var rv_tbl = [0x00, 0x80, 0x40,\n 0xc0, 0x20, 0xa0, 0x60, 0xe0, 0x10,\n 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70,\n 0xf0, 0x08, 0x88, 0x48, 0xc8, 0x28,\n 0xa8, 0x68, 0xe8, 0x18, 0x98, 0x58,\n 0xd8, 0x38, 0xb8, 0x78, 0xf8, 0x04,\n 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64,\n 0xe4, 0x14, 0x94, 0x54, 0xd4, 0x34,\n 0xb4, 0x74, 0xf4, 0x0c, 0x8c, 0x4c,\n 0xcc, 0x2c, 0xac, 0x6c, 0xec, 0x1c,\n 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c,\n 0xfc, 0x02, 0x82, 0x42, 0xc2, 0x22,\n 0xa2, 0x62, 0xe2, 0x12, 0x92, 0x52,\n 0xd2, 0x32, 0xb2, 0x72, 0xf2, 0x0a,\n 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a,\n 0xea, 0x1a, 0x9a, 0x5a, 0xda, 0x3a,\n 0xba, 0x7a, 0xfa, 0x06, 0x86, 0x46,\n 0xc6, 0x26, 0xa6, 0x66, 0xe6, 0x16,\n 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76,\n 0xf6, 0x0e, 0x8e, 0x4e, 0xce, 0x2e,\n 0xae, 0x6e, 0xee, 0x1e, 0x9e, 0x5e,\n 0xde, 0x3e, 0xbe, 0x7e, 0xfe];\n\n this.fft_short = function (gfc, x_real, chn, buffer, bufPos) {\n for (var b = 0; b < 3; b++) {\n var x = Encoder.BLKSIZE_s / 2;\n var k = 0xffff & ((576 / 3) * (b + 1));\n var j = Encoder.BLKSIZE_s / 8 - 1;\n do {\n var f0, f1, f2, f3, w;\n var i = rv_tbl[j << 2] & 0xff;\n\n f0 = window_s[i] * buffer[chn][bufPos + i + k];\n w = window_s[0x7f - i] * buffer[chn][bufPos + i + k + 0x80];\n f1 = f0 - w;\n f0 = f0 + w;\n f2 = window_s[i + 0x40] * buffer[chn][bufPos + i + k + 0x40];\n w = window_s[0x3f - i] * buffer[chn][bufPos + i + k + 0xc0];\n f3 = f2 - w;\n f2 = f2 + w;\n\n x -= 4;\n x_real[b][x + 0] = f0 + f2;\n x_real[b][x + 2] = f0 - f2;\n x_real[b][x + 1] = f1 + f3;\n x_real[b][x + 3] = f1 - f3;\n\n f0 = window_s[i + 0x01] * buffer[chn][bufPos + i + k + 0x01];\n w = window_s[0x7e - i] * buffer[chn][bufPos + i + k + 0x81];\n f1 = f0 - w;\n f0 = f0 + w;\n f2 = window_s[i + 0x41] * buffer[chn][bufPos + i + k + 0x41];\n w = window_s[0x3e - i] * buffer[chn][bufPos + i + k + 0xc1];\n f3 = f2 - w;\n f2 = f2 + w;\n\n x_real[b][x + Encoder.BLKSIZE_s / 2 + 0] = f0 + f2;\n x_real[b][x + Encoder.BLKSIZE_s / 2 + 2] = f0 - f2;\n x_real[b][x + Encoder.BLKSIZE_s / 2 + 1] = f1 + f3;\n x_real[b][x + Encoder.BLKSIZE_s / 2 + 3] = f1 - f3;\n } while (--j >= 0);\n\n fht(x_real[b], x, Encoder.BLKSIZE_s / 2);\n /* BLKSIZE_s/2 because of 3DNow! ASM routine */\n /* BLKSIZE/2 because of 3DNow! ASM routine */\n }\n }\n\n this.fft_long = function (gfc, y, chn, buffer, bufPos) {\n var jj = Encoder.BLKSIZE / 8 - 1;\n var x = Encoder.BLKSIZE / 2;\n\n do {\n var f0, f1, f2, f3, w;\n var i = rv_tbl[jj] & 0xff;\n f0 = window[i] * buffer[chn][bufPos + i];\n w = window[i + 0x200] * buffer[chn][bufPos + i + 0x200];\n f1 = f0 - w;\n f0 = f0 + w;\n f2 = window[i + 0x100] * buffer[chn][bufPos + i + 0x100];\n w = window[i + 0x300] * buffer[chn][bufPos + i + 0x300];\n f3 = f2 - w;\n f2 = f2 + w;\n\n x -= 4;\n y[x + 0] = f0 + f2;\n y[x + 2] = f0 - f2;\n y[x + 1] = f1 + f3;\n y[x + 3] = f1 - f3;\n\n f0 = window[i + 0x001] * buffer[chn][bufPos + i + 0x001];\n w = window[i + 0x201] * buffer[chn][bufPos + i + 0x201];\n f1 = f0 - w;\n f0 = f0 + w;\n f2 = window[i + 0x101] * buffer[chn][bufPos + i + 0x101];\n w = window[i + 0x301] * buffer[chn][bufPos + i + 0x301];\n f3 = f2 - w;\n f2 = f2 + w;\n\n y[x + Encoder.BLKSIZE / 2 + 0] = f0 + f2;\n y[x + Encoder.BLKSIZE / 2 + 2] = f0 - f2;\n y[x + Encoder.BLKSIZE / 2 + 1] = f1 + f3;\n y[x + Encoder.BLKSIZE / 2 + 3] = f1 - f3;\n } while (--jj >= 0);\n\n fht(y, x, Encoder.BLKSIZE / 2);\n /* BLKSIZE/2 because of 3DNow! ASM routine */\n }\n\n this.init_fft = function (gfc) {\n /* The type of window used here will make no real difference, but */\n /*\n * in the interest of merging nspsytune stuff - switch to blackman\n * window\n */\n for (var i = 0; i < Encoder.BLKSIZE; i++)\n /* blackman window */\n window[i] = (0.42 - 0.5 * Math.cos(2 * Math.PI * (i + .5)\n / Encoder.BLKSIZE) + 0.08 * Math.cos(4 * Math.PI * (i + .5)\n / Encoder.BLKSIZE));\n\n for (var i = 0; i < Encoder.BLKSIZE_s / 2; i++)\n window_s[i] = (0.5 * (1.0 - Math.cos(2.0 * Math.PI\n * (i + 0.5) / Encoder.BLKSIZE_s)));\n\n }\n\n}\n\nmodule.exports = FFT;\n","/*\n * psymodel.c\n *\n * Copyright (c) 1999-2000 Mark Taylor\n * Copyright (c) 2001-2002 Naoki Shibata\n * Copyright (c) 2000-2003 Takehiro Tominaga\n * Copyright (c) 2000-2008 Robert Hegemann\n * Copyright (c) 2000-2005 Gabriel Bouvigne\n * Copyright (c) 2000-2005 Alexander Leidinger\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Library General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the\n * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n * Boston, MA 02111-1307, USA.\n */\n\n/* $Id: PsyModel.java,v 1.27 2011/05/24 20:48:06 kenchis Exp $ */\n\n\n/*\n PSYCHO ACOUSTICS\n\n\n This routine computes the psycho acoustics, delayed by one granule.\n\n Input: buffer of PCM data (1024 samples).\n\n This window should be centered over the 576 sample granule window.\n The routine will compute the psycho acoustics for\n this granule, but return the psycho acoustics computed\n for the *previous* granule. This is because the block\n type of the previous granule can only be determined\n after we have computed the psycho acoustics for the following\n granule.\n\n Output: maskings and energies for each scalefactor band.\n block type, PE, and some correlation measures.\n The PE is used by CBR modes to determine if extra bits\n from the bit reservoir should be used. The correlation\n measures are used to determine mid/side or regular stereo.\n */\n/*\n Notation:\n\n barks: a non-linear frequency scale. Mapping from frequency to\n barks is given by freq2bark()\n\n scalefactor bands: The spectrum (frequencies) are broken into\n SBMAX \"scalefactor bands\". Thes bands\n are determined by the MPEG ISO spec. In\n the noise shaping/quantization code, we allocate\n bits among the partition bands to achieve the\n best possible quality\n\n partition bands: The spectrum is also broken into about\n 64 \"partition bands\". Each partition\n band is about .34 barks wide. There are about 2-5\n partition bands for each scalefactor band.\n\n LAME computes all psycho acoustic information for each partition\n band. Then at the end of the computations, this information\n is mapped to scalefactor bands. The energy in each scalefactor\n band is taken as the sum of the energy in all partition bands\n which overlap the scalefactor band. The maskings can be computed\n in the same way (and thus represent the average masking in that band)\n or by taking the minmum value multiplied by the number of\n partition bands used (which represents a minimum masking in that band).\n */\n/*\n The general outline is as follows:\n\n 1. compute the energy in each partition band\n 2. compute the tonality in each partition band\n 3. compute the strength of each partion band \"masker\"\n 4. compute the masking (via the spreading function applied to each masker)\n 5. Modifications for mid/side masking.\n\n Each partition band is considiered a \"masker\". The strength\n of the i'th masker in band j is given by:\n\n s3(bark(i)-bark(j))*strength(i)\n\n The strength of the masker is a function of the energy and tonality.\n The more tonal, the less masking. LAME uses a simple linear formula\n (controlled by NMT and TMN) which says the strength is given by the\n energy divided by a linear function of the tonality.\n */\n/*\n s3() is the \"spreading function\". It is given by a formula\n determined via listening tests.\n\n The total masking in the j'th partition band is the sum over\n all maskings i. It is thus given by the convolution of\n the strength with s3(), the \"spreading function.\"\n\n masking(j) = sum_over_i s3(i-j)*strength(i) = s3 o strength\n\n where \"o\" = convolution operator. s3 is given by a formula determined\n via listening tests. It is normalized so that s3 o 1 = 1.\n\n Note: instead of a simple convolution, LAME also has the\n option of using \"additive masking\"\n\n The most critical part is step 2, computing the tonality of each\n partition band. LAME has two tonality estimators. The first\n is based on the ISO spec, and measures how predictiable the\n signal is over time. The more predictable, the more tonal.\n The second measure is based on looking at the spectrum of\n a single granule. The more peaky the spectrum, the more\n tonal. By most indications, the latter approach is better.\n\n Finally, in step 5, the maskings for the mid and side\n channel are possibly increased. Under certain circumstances,\n noise in the mid & side channels is assumed to also\n be masked by strong maskers in the L or R channels.\n\n\n Other data computed by the psy-model:\n\n ms_ratio side-channel / mid-channel masking ratio (for previous granule)\n ms_ratio_next side-channel / mid-channel masking ratio for this granule\n\n percep_entropy[2] L and R values (prev granule) of PE - A measure of how\n much pre-echo is in the previous granule\n percep_entropy_MS[2] mid and side channel values (prev granule) of percep_entropy\n energy[4] L,R,M,S energy in each channel, prev granule\n blocktype_d[2] block type to use for previous granule\n */\n//package mp3;\n\n//import java.util.Arrays;\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar FFT = require(\"./FFT.js\");\nvar Encoder = require(\"./Encoder.js\");\n\nfunction PsyModel() {\n\n var fft = new FFT();\n\n var LOG10 = 2.30258509299404568402;\n\n var rpelev = 2;\n var rpelev2 = 16;\n var rpelev_s = 2;\n var rpelev2_s = 16;\n\n /* size of each partition band, in barks: */\n var DELBARK = .34;\n\n /* tuned for output level (sensitive to energy scale) */\n var VO_SCALE = (1. / (14752 * 14752) / (Encoder.BLKSIZE / 2));\n\n var temporalmask_sustain_sec = 0.01;\n\n var NS_PREECHO_ATT0 = 0.8;\n var NS_PREECHO_ATT1 = 0.6;\n var NS_PREECHO_ATT2 = 0.3;\n\n var NS_MSFIX = 3.5;\n\n var NSATTACKTHRE = 4.4;\n var NSATTACKTHRE_S = 25;\n\n var NSFIRLEN = 21;\n\n /* size of each partition band, in barks: */\n var LN_TO_LOG10 = 0.2302585093;\n\n function NON_LINEAR_SCALE_ENERGY(x) {\n return x;\n }\n\n /**\n *
\n * L3psycho_anal. Compute psycho acoustics.\n *\n * Data returned to the calling program must be delayed by one\n * granule.\n *\n * This is done in two places.\n * If we do not need to know the blocktype, the copying\n * can be done here at the top of the program: we copy the data for\n * the last granule (computed during the last call) before it is\n * overwritten with the new data. It looks like this:\n *\n * 0. static psymodel_data\n * 1. calling_program_data = psymodel_data\n * 2. compute psymodel_data\n *\n * For data which needs to know the blocktype, the copying must be\n * done at the end of this loop, and the old values must be saved:\n *\n * 0. static psymodel_data_old\n * 1. compute psymodel_data\n * 2. compute possible block type of this granule\n * 3. compute final block type of previous granule based on #2.\n * 4. calling_program_data = psymodel_data_old\n * 5. psymodel_data_old = psymodel_data\n * psycho_loudness_approx\n * jd - 2001 mar 12\n * in: energy - BLKSIZE/2 elements of frequency magnitudes ^ 2\n * gfp - uses out_samplerate, ATHtype (also needed for ATHformula)\n * returns: loudness^2 approximation, a positive value roughly tuned for a value\n * of 1.0 for signals near clipping.\n * notes: When calibrated, feeding this function binary white noise at sample\n * values +32767 or -32768 should return values that approach 3.\n * ATHformula is used to approximate an equal loudness curve.\n * future: Data indicates that the shape of the equal loudness curve varies\n * with intensity. This function might be improved by using an equal\n * loudness curve shaped for typical playback levels (instead of the\n * ATH, that is shaped for the threshold). A flexible realization might\n * simply bend the existing ATH curve to achieve the desired shape.\n * However, the potential gain may not be enough to justify an effort.\n *\n */\n function psycho_loudness_approx(energy, gfc) {\n var loudness_power = 0.0;\n /* apply weights to power in freq. bands */\n for (var i = 0; i < Encoder.BLKSIZE / 2; ++i)\n loudness_power += energy[i] * gfc.ATH.eql_w[i];\n loudness_power *= VO_SCALE;\n\n return loudness_power;\n }\n\n function compute_ffts(gfp, fftenergy, fftenergy_s, wsamp_l, wsamp_lPos, wsamp_s, wsamp_sPos, gr_out, chn, buffer, bufPos) {\n var gfc = gfp.internal_flags;\n if (chn < 2) {\n fft.fft_long(gfc, wsamp_l[wsamp_lPos], chn, buffer, bufPos);\n fft.fft_short(gfc, wsamp_s[wsamp_sPos], chn, buffer, bufPos);\n }\n /* FFT data for mid and side channel is derived from L & R */\n else if (chn == 2) {\n for (var j = Encoder.BLKSIZE - 1; j >= 0; --j) {\n var l = wsamp_l[wsamp_lPos + 0][j];\n var r = wsamp_l[wsamp_lPos + 1][j];\n wsamp_l[wsamp_lPos + 0][j] = (l + r) * Util.SQRT2 * 0.5;\n wsamp_l[wsamp_lPos + 1][j] = (l - r) * Util.SQRT2 * 0.5;\n }\n for (var b = 2; b >= 0; --b) {\n for (var j = Encoder.BLKSIZE_s - 1; j >= 0; --j) {\n var l = wsamp_s[wsamp_sPos + 0][b][j];\n var r = wsamp_s[wsamp_sPos + 1][b][j];\n wsamp_s[wsamp_sPos + 0][b][j] = (l + r) * Util.SQRT2 * 0.5;\n wsamp_s[wsamp_sPos + 1][b][j] = (l - r) * Util.SQRT2 * 0.5;\n }\n }\n }\n\n /*********************************************************************\n * compute energies\n *********************************************************************/\n fftenergy[0] = NON_LINEAR_SCALE_ENERGY(wsamp_l[wsamp_lPos + 0][0]);\n fftenergy[0] *= fftenergy[0];\n\n for (var j = Encoder.BLKSIZE / 2 - 1; j >= 0; --j) {\n var re = (wsamp_l[wsamp_lPos + 0])[Encoder.BLKSIZE / 2 - j];\n var im = (wsamp_l[wsamp_lPos + 0])[Encoder.BLKSIZE / 2 + j];\n fftenergy[Encoder.BLKSIZE / 2 - j] = NON_LINEAR_SCALE_ENERGY((re\n * re + im * im) * 0.5);\n }\n for (var b = 2; b >= 0; --b) {\n fftenergy_s[b][0] = (wsamp_s[wsamp_sPos + 0])[b][0];\n fftenergy_s[b][0] *= fftenergy_s[b][0];\n for (var j = Encoder.BLKSIZE_s / 2 - 1; j >= 0; --j) {\n var re = (wsamp_s[wsamp_sPos + 0])[b][Encoder.BLKSIZE_s\n / 2 - j];\n var im = (wsamp_s[wsamp_sPos + 0])[b][Encoder.BLKSIZE_s\n / 2 + j];\n fftenergy_s[b][Encoder.BLKSIZE_s / 2 - j] = NON_LINEAR_SCALE_ENERGY((re\n * re + im * im) * 0.5);\n }\n }\n /* total energy */\n {\n var totalenergy = 0.0;\n for (var j = 11; j < Encoder.HBLKSIZE; j++)\n totalenergy += fftenergy[j];\n\n gfc.tot_ener[chn] = totalenergy;\n }\n\n if (gfp.analysis) {\n for (var j = 0; j < Encoder.HBLKSIZE; j++) {\n gfc.pinfo.energy[gr_out][chn][j] = gfc.pinfo.energy_save[chn][j];\n gfc.pinfo.energy_save[chn][j] = fftenergy[j];\n }\n gfc.pinfo.pe[gr_out][chn] = gfc.pe[chn];\n }\n\n /*********************************************************************\n * compute loudness approximation (used for ATH auto-level adjustment)\n *********************************************************************/\n if (gfp.athaa_loudapprox == 2 && chn < 2) {\n // no loudness for mid/side ch\n gfc.loudness_sq[gr_out][chn] = gfc.loudness_sq_save[chn];\n gfc.loudness_sq_save[chn] = psycho_loudness_approx(fftenergy, gfc);\n }\n }\n\n /* mask_add optimization */\n /* init the limit values used to avoid computing log in mask_add when it is not necessary */\n\n /**\n *
\n * For example, with i = 10*log10(m2/m1)/10*16 (= log10(m2/m1)*16)\n *\n * abs(i)>8 is equivalent (as i is an integer) to\n * abs(i)>=9\n * i>=9 || i<=-9\n * equivalent to (as i is the biggest integer smaller than log10(m2/m1)*16\n * or the smallest integer bigger than log10(m2/m1)*16 depending on the sign of log10(m2/m1)*16)\n * log10(m2/m1)>=9/16 || log10(m2/m1)<=-9/16\n * exp10 is strictly increasing thus this is equivalent to\n * m2/m1 >= 10^(9/16) || m2/m1<=10^(-9/16) which are comparisons to constants\n *\n */\n\n /**\n * as in if(i>8)\n */\n var I1LIMIT = 8;\n /**\n * as in if(i>24) . changed 23\n */\n var I2LIMIT = 23;\n /**\n * as in if(m<15)\n */\n var MLIMIT = 15;\n\n var ma_max_i1;\n var ma_max_i2;\n var ma_max_m;\n\n /**\n * This is the masking table:
\n * m<15 equ log10((m1+m2)/gfc.ATH.cb[k])<1.5\n * equ (m1+m2)/gfc.ATH.cb[k]<10^1.5\n * equ (m1+m2)<10^1.5 * gfc.ATH.cb[k]\n *\n */\n var i = 0 | Util.FAST_LOG10_X(ratio, 16.0);\n if (shortblock != 0) {\n m2 = gfc.ATH.cb_s[kk] * gfc.ATH.adjust;\n } else {\n m2 = gfc.ATH.cb_l[kk] * gfc.ATH.adjust;\n }\n assert(m2 >= 0);\n if (m1 < ma_max_m * m2) {\n /* 3% of the total */\n /* Originally if (m > 0) { */\n if (m1 > m2) {\n var f, r;\n\n f = 1.0;\n if (i <= 13)\n f = table3[i];\n\n r = Util.FAST_LOG10_X(m1 / m2, 10.0 / 15.0);\n return m1 * ((table1[i] - f) * r + f);\n }\n\n if (i > 13)\n return m1;\n\n return m1 * table3[i];\n }\n\n /* 10% of total */\n return m1 * table1[i];\n }\n\n var table2_ = [1.33352 * 1.33352,\n 1.35879 * 1.35879, 1.38454 * 1.38454, 1.39497 * 1.39497,\n 1.40548 * 1.40548, 1.3537 * 1.3537, 1.30382 * 1.30382,\n 1.22321 * 1.22321, 1.14758 * 1.14758, 1];\n\n /**\n * addition of simultaneous masking Naoki Shibata 2000/7\n */\n function vbrpsy_mask_add(m1, m2, b) {\n var ratio;\n\n if (m1 < 0) {\n m1 = 0;\n }\n if (m2 < 0) {\n m2 = 0;\n }\n if (m1 <= 0) {\n return m2;\n }\n if (m2 <= 0) {\n return m1;\n }\n if (m2 > m1) {\n ratio = m2 / m1;\n } else {\n ratio = m1 / m2;\n }\n if (-2 <= b && b <= 2) {\n /* approximately, 1 bark = 3 partitions */\n /* originally 'if(i > 8)' */\n if (ratio >= ma_max_i1) {\n return m1 + m2;\n } else {\n var i = 0 | (Util.FAST_LOG10_X(ratio, 16.0));\n return (m1 + m2) * table2_[i];\n }\n }\n if (ratio < ma_max_i2) {\n return m1 + m2;\n }\n if (m1 < m2) {\n m1 = m2;\n }\n return m1;\n }\n\n /**\n * compute interchannel masking effects\n */\n function calc_interchannel_masking(gfp, ratio) {\n var gfc = gfp.internal_flags;\n if (gfc.channels_out > 1) {\n for (var sb = 0; sb < Encoder.SBMAX_l; sb++) {\n var l = gfc.thm[0].l[sb];\n var r = gfc.thm[1].l[sb];\n gfc.thm[0].l[sb] += r * ratio;\n gfc.thm[1].l[sb] += l * ratio;\n }\n for (var sb = 0; sb < Encoder.SBMAX_s; sb++) {\n for (var sblock = 0; sblock < 3; sblock++) {\n var l = gfc.thm[0].s[sb][sblock];\n var r = gfc.thm[1].s[sb][sblock];\n gfc.thm[0].s[sb][sblock] += r * ratio;\n gfc.thm[1].s[sb][sblock] += l * ratio;\n }\n }\n }\n }\n\n /**\n * compute M/S thresholds from Johnston & Ferreira 1992 ICASSP paper\n */\n function msfix1(gfc) {\n for (var sb = 0; sb < Encoder.SBMAX_l; sb++) {\n /* use this fix if L & R masking differs by 2db or less */\n /* if db = 10*log10(x2/x1) < 2 */\n /* if (x2 < 1.58*x1) { */\n if (gfc.thm[0].l[sb] > 1.58 * gfc.thm[1].l[sb]\n || gfc.thm[1].l[sb] > 1.58 * gfc.thm[0].l[sb])\n continue;\n var mld = gfc.mld_l[sb] * gfc.en[3].l[sb];\n var rmid = Math.max(gfc.thm[2].l[sb],\n Math.min(gfc.thm[3].l[sb], mld));\n\n mld = gfc.mld_l[sb] * gfc.en[2].l[sb];\n var rside = Math.max(gfc.thm[3].l[sb],\n Math.min(gfc.thm[2].l[sb], mld));\n gfc.thm[2].l[sb] = rmid;\n gfc.thm[3].l[sb] = rside;\n }\n\n for (var sb = 0; sb < Encoder.SBMAX_s; sb++) {\n for (var sblock = 0; sblock < 3; sblock++) {\n if (gfc.thm[0].s[sb][sblock] > 1.58 * gfc.thm[1].s[sb][sblock]\n || gfc.thm[1].s[sb][sblock] > 1.58 * gfc.thm[0].s[sb][sblock])\n continue;\n var mld = gfc.mld_s[sb] * gfc.en[3].s[sb][sblock];\n var rmid = Math.max(gfc.thm[2].s[sb][sblock],\n Math.min(gfc.thm[3].s[sb][sblock], mld));\n\n mld = gfc.mld_s[sb] * gfc.en[2].s[sb][sblock];\n var rside = Math.max(gfc.thm[3].s[sb][sblock],\n Math.min(gfc.thm[2].s[sb][sblock], mld));\n\n gfc.thm[2].s[sb][sblock] = rmid;\n gfc.thm[3].s[sb][sblock] = rside;\n }\n }\n }\n\n /**\n * Adjust M/S maskings if user set \"msfix\"\n *\n * Naoki Shibata 2000\n */\n function ns_msfix(gfc, msfix, athadjust) {\n var msfix2 = msfix;\n var athlower = Math.pow(10, athadjust);\n\n msfix *= 2.0;\n msfix2 *= 2.0;\n for (var sb = 0; sb < Encoder.SBMAX_l; sb++) {\n var thmLR, thmM, thmS, ath;\n ath = (gfc.ATH.cb_l[gfc.bm_l[sb]]) * athlower;\n thmLR = Math.min(Math.max(gfc.thm[0].l[sb], ath),\n Math.max(gfc.thm[1].l[sb], ath));\n thmM = Math.max(gfc.thm[2].l[sb], ath);\n thmS = Math.max(gfc.thm[3].l[sb], ath);\n if (thmLR * msfix < thmM + thmS) {\n var f = thmLR * msfix2 / (thmM + thmS);\n thmM *= f;\n thmS *= f;\n assert(thmM + thmS > 0);\n }\n gfc.thm[2].l[sb] = Math.min(thmM, gfc.thm[2].l[sb]);\n gfc.thm[3].l[sb] = Math.min(thmS, gfc.thm[3].l[sb]);\n }\n\n athlower *= ( Encoder.BLKSIZE_s / Encoder.BLKSIZE);\n for (var sb = 0; sb < Encoder.SBMAX_s; sb++) {\n for (var sblock = 0; sblock < 3; sblock++) {\n var thmLR, thmM, thmS, ath;\n ath = (gfc.ATH.cb_s[gfc.bm_s[sb]]) * athlower;\n thmLR = Math.min(Math.max(gfc.thm[0].s[sb][sblock], ath),\n Math.max(gfc.thm[1].s[sb][sblock], ath));\n thmM = Math.max(gfc.thm[2].s[sb][sblock], ath);\n thmS = Math.max(gfc.thm[3].s[sb][sblock], ath);\n\n if (thmLR * msfix < thmM + thmS) {\n var f = thmLR * msfix / (thmM + thmS);\n thmM *= f;\n thmS *= f;\n assert(thmM + thmS > 0);\n }\n gfc.thm[2].s[sb][sblock] = Math.min(gfc.thm[2].s[sb][sblock],\n thmM);\n gfc.thm[3].s[sb][sblock] = Math.min(gfc.thm[3].s[sb][sblock],\n thmS);\n }\n }\n }\n\n /**\n * short block threshold calculation (part 2)\n *\n * partition band bo_s[sfb] is at the transition from scalefactor band sfb\n * to the next one sfb+1; enn and thmm have to be split between them\n */\n function convert_partition2scalefac_s(gfc, eb, thr, chn, sblock) {\n var sb, b;\n var enn = 0.0;\n var thmm = 0.0;\n for (sb = b = 0; sb < Encoder.SBMAX_s; ++b, ++sb) {\n var bo_s_sb = gfc.bo_s[sb];\n var npart_s = gfc.npart_s;\n var b_lim = bo_s_sb < npart_s ? bo_s_sb : npart_s;\n while (b < b_lim) {\n assert(eb[b] >= 0);\n // iff failed, it may indicate some index error elsewhere\n assert(thr[b] >= 0);\n enn += eb[b];\n thmm += thr[b];\n b++;\n }\n gfc.en[chn].s[sb][sblock] = enn;\n gfc.thm[chn].s[sb][sblock] = thmm;\n\n if (b >= npart_s) {\n ++sb;\n break;\n }\n assert(eb[b] >= 0);\n // iff failed, it may indicate some index error elsewhere\n assert(thr[b] >= 0);\n {\n /* at transition sfb . sfb+1 */\n var w_curr = gfc.PSY.bo_s_weight[sb];\n var w_next = 1.0 - w_curr;\n enn = w_curr * eb[b];\n thmm = w_curr * thr[b];\n gfc.en[chn].s[sb][sblock] += enn;\n gfc.thm[chn].s[sb][sblock] += thmm;\n enn = w_next * eb[b];\n thmm = w_next * thr[b];\n }\n }\n /* zero initialize the rest */\n for (; sb < Encoder.SBMAX_s; ++sb) {\n gfc.en[chn].s[sb][sblock] = 0;\n gfc.thm[chn].s[sb][sblock] = 0;\n }\n }\n\n /**\n * longblock threshold calculation (part 2)\n */\n function convert_partition2scalefac_l(gfc, eb, thr, chn) {\n var sb, b;\n var enn = 0.0;\n var thmm = 0.0;\n for (sb = b = 0; sb < Encoder.SBMAX_l; ++b, ++sb) {\n var bo_l_sb = gfc.bo_l[sb];\n var npart_l = gfc.npart_l;\n var b_lim = bo_l_sb < npart_l ? bo_l_sb : npart_l;\n while (b < b_lim) {\n assert(eb[b] >= 0);\n // iff failed, it may indicate some index error elsewhere\n assert(thr[b] >= 0);\n enn += eb[b];\n thmm += thr[b];\n b++;\n }\n gfc.en[chn].l[sb] = enn;\n gfc.thm[chn].l[sb] = thmm;\n\n if (b >= npart_l) {\n ++sb;\n break;\n }\n assert(eb[b] >= 0);\n assert(thr[b] >= 0);\n {\n /* at transition sfb . sfb+1 */\n var w_curr = gfc.PSY.bo_l_weight[sb];\n var w_next = 1.0 - w_curr;\n enn = w_curr * eb[b];\n thmm = w_curr * thr[b];\n gfc.en[chn].l[sb] += enn;\n gfc.thm[chn].l[sb] += thmm;\n enn = w_next * eb[b];\n thmm = w_next * thr[b];\n }\n }\n /* zero initialize the rest */\n for (; sb < Encoder.SBMAX_l; ++sb) {\n gfc.en[chn].l[sb] = 0;\n gfc.thm[chn].l[sb] = 0;\n }\n }\n\n function compute_masking_s(gfp, fftenergy_s, eb, thr, chn, sblock) {\n var gfc = gfp.internal_flags;\n var j, b;\n\n for (b = j = 0; b < gfc.npart_s; ++b) {\n var ebb = 0, m = 0;\n var n = gfc.numlines_s[b];\n for (var i = 0; i < n; ++i, ++j) {\n var el = fftenergy_s[sblock][j];\n ebb += el;\n if (m < el)\n m = el;\n }\n eb[b] = ebb;\n }\n assert(b == gfc.npart_s);\n assert(j == 129);\n for (j = b = 0; b < gfc.npart_s; b++) {\n var kk = gfc.s3ind_s[b][0];\n var ecb = gfc.s3_ss[j++] * eb[kk];\n ++kk;\n while (kk <= gfc.s3ind_s[b][1]) {\n ecb += gfc.s3_ss[j] * eb[kk];\n ++j;\n ++kk;\n }\n\n { /* limit calculated threshold by previous granule */\n var x = rpelev_s * gfc.nb_s1[chn][b];\n thr[b] = Math.min(ecb, x);\n }\n if (gfc.blocktype_old[chn & 1] == Encoder.SHORT_TYPE) {\n /* limit calculated threshold by even older granule */\n var x = rpelev2_s * gfc.nb_s2[chn][b];\n var y = thr[b];\n thr[b] = Math.min(x, y);\n }\n\n gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b];\n gfc.nb_s1[chn][b] = ecb;\n assert(thr[b] >= 0);\n }\n for (; b <= Encoder.CBANDS; ++b) {\n eb[b] = 0;\n thr[b] = 0;\n }\n }\n\n function block_type_set(gfp, uselongblock, blocktype_d, blocktype) {\n var gfc = gfp.internal_flags;\n\n if (gfp.short_blocks == ShortBlock.short_block_coupled\n /* force both channels to use the same block type */\n /* this is necessary if the frame is to be encoded in ms_stereo. */\n /* But even without ms_stereo, FhG does this */\n && !(uselongblock[0] != 0 && uselongblock[1] != 0))\n uselongblock[0] = uselongblock[1] = 0;\n\n /*\n * update the blocktype of the previous granule, since it depends on\n * what happend in this granule\n */\n for (var chn = 0; chn < gfc.channels_out; chn++) {\n blocktype[chn] = Encoder.NORM_TYPE;\n /* disable short blocks */\n if (gfp.short_blocks == ShortBlock.short_block_dispensed)\n uselongblock[chn] = 1;\n if (gfp.short_blocks == ShortBlock.short_block_forced)\n uselongblock[chn] = 0;\n\n if (uselongblock[chn] != 0) {\n /* no attack : use long blocks */\n assert(gfc.blocktype_old[chn] != Encoder.START_TYPE);\n if (gfc.blocktype_old[chn] == Encoder.SHORT_TYPE)\n blocktype[chn] = Encoder.STOP_TYPE;\n } else {\n /* attack : use short blocks */\n blocktype[chn] = Encoder.SHORT_TYPE;\n if (gfc.blocktype_old[chn] == Encoder.NORM_TYPE) {\n gfc.blocktype_old[chn] = Encoder.START_TYPE;\n }\n if (gfc.blocktype_old[chn] == Encoder.STOP_TYPE)\n gfc.blocktype_old[chn] = Encoder.SHORT_TYPE;\n }\n\n blocktype_d[chn] = gfc.blocktype_old[chn];\n // value returned to calling program\n gfc.blocktype_old[chn] = blocktype[chn];\n // save for next call to l3psy_anal\n }\n }\n\n function NS_INTERP(x, y, r) {\n /* was pow((x),(r))*pow((y),1-(r)) */\n if (r >= 1.0) {\n /* 99.7% of the time */\n return x;\n }\n if (r <= 0.0)\n return y;\n if (y > 0.0) {\n /* rest of the time */\n return (Math.pow(x / y, r) * y);\n }\n /* never happens */\n return 0.0;\n }\n\n /**\n * these values are tuned only for 44.1kHz...\n */\n var regcoef_s = [11.8, 13.6, 17.2, 32, 46.5,\n 51.3, 57.5, 67.1, 71.5, 84.6, 97.6, 130,\n /* 255.8 */\n ];\n\n function pecalc_s(mr, masking_lower) {\n var pe_s = 1236.28 / 4;\n for (var sb = 0; sb < Encoder.SBMAX_s - 1; sb++) {\n for (var sblock = 0; sblock < 3; sblock++) {\n var thm = mr.thm.s[sb][sblock];\n assert(sb < regcoef_s.length);\n if (thm > 0.0) {\n var x = thm * masking_lower;\n var en = mr.en.s[sb][sblock];\n if (en > x) {\n if (en > x * 1e10) {\n pe_s += regcoef_s[sb] * (10.0 * LOG10);\n } else {\n assert(x > 0);\n pe_s += regcoef_s[sb] * Util.FAST_LOG10(en / x);\n }\n }\n }\n }\n }\n\n return pe_s;\n }\n\n /**\n * these values are tuned only for 44.1kHz...\n */\n var regcoef_l = [6.8, 5.8, 5.8, 6.4, 6.5, 9.9,\n 12.1, 14.4, 15, 18.9, 21.6, 26.9, 34.2, 40.2, 46.8, 56.5,\n 60.7, 73.9, 85.7, 93.4, 126.1,\n /* 241.3 */\n ];\n\n function pecalc_l(mr, masking_lower) {\n var pe_l = 1124.23 / 4;\n for (var sb = 0; sb < Encoder.SBMAX_l - 1; sb++) {\n var thm = mr.thm.l[sb];\n assert(sb < regcoef_l.length);\n if (thm > 0.0) {\n var x = thm * masking_lower;\n var en = mr.en.l[sb];\n if (en > x) {\n if (en > x * 1e10) {\n pe_l += regcoef_l[sb] * (10.0 * LOG10);\n } else {\n assert(x > 0);\n pe_l += regcoef_l[sb] * Util.FAST_LOG10(en / x);\n }\n }\n }\n }\n return pe_l;\n }\n\n function calc_energy(gfc, fftenergy, eb, max, avg) {\n var b, j;\n\n for (b = j = 0; b < gfc.npart_l; ++b) {\n var ebb = 0, m = 0;\n var i;\n for (i = 0; i < gfc.numlines_l[b]; ++i, ++j) {\n var el = fftenergy[j];\n assert(el >= 0);\n ebb += el;\n if (m < el)\n m = el;\n }\n eb[b] = ebb;\n max[b] = m;\n avg[b] = ebb * gfc.rnumlines_l[b];\n assert(gfc.rnumlines_l[b] >= 0);\n assert(ebb >= 0);\n assert(eb[b] >= 0);\n assert(max[b] >= 0);\n assert(avg[b] >= 0);\n }\n }\n\n function calc_mask_index_l(gfc, max, avg, mask_idx) {\n var last_tab_entry = tab.length - 1;\n var b = 0;\n var a = avg[b] + avg[b + 1];\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b];\n if (m < max[b + 1])\n m = max[b + 1];\n assert((gfc.numlines_l[b] + gfc.numlines_l[b + 1] - 1) > 0);\n a = 20.0 * (m * 2.0 - a)\n / (a * (gfc.numlines_l[b] + gfc.numlines_l[b + 1] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n\n for (b = 1; b < gfc.npart_l - 1; b++) {\n a = avg[b - 1] + avg[b] + avg[b + 1];\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b - 1];\n if (m < max[b])\n m = max[b];\n if (m < max[b + 1])\n m = max[b + 1];\n assert((gfc.numlines_l[b - 1] + gfc.numlines_l[b] + gfc.numlines_l[b + 1] - 1) > 0);\n a = 20.0\n * (m * 3.0 - a)\n / (a * (gfc.numlines_l[b - 1] + gfc.numlines_l[b]\n + gfc.numlines_l[b + 1] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n }\n assert(b > 0);\n assert(b == gfc.npart_l - 1);\n\n a = avg[b - 1] + avg[b];\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b - 1];\n if (m < max[b])\n m = max[b];\n assert((gfc.numlines_l[b - 1] + gfc.numlines_l[b] - 1) > 0);\n a = 20.0 * (m * 2.0 - a)\n / (a * (gfc.numlines_l[b - 1] + gfc.numlines_l[b] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n assert(b == (gfc.npart_l - 1));\n }\n\n var fircoef = [\n -8.65163e-18 * 2, -0.00851586 * 2, -6.74764e-18 * 2, 0.0209036 * 2,\n -3.36639e-17 * 2, -0.0438162 * 2, -1.54175e-17 * 2, 0.0931738 * 2,\n -5.52212e-17 * 2, -0.313819 * 2\n ];\n\n this.L3psycho_anal_ns = function (gfp, buffer, bufPos, gr_out, masking_ratio, masking_MS_ratio, percep_entropy, percep_MS_entropy, energy, blocktype_d) {\n /*\n * to get a good cache performance, one has to think about the sequence,\n * in which the variables are used.\n */\n var gfc = gfp.internal_flags;\n\n /* fft and energy calculation */\n var wsamp_L = new_float_n([2, Encoder.BLKSIZE]);\n var wsamp_S = new_float_n([2, 3, Encoder.BLKSIZE_s]);\n\n /* convolution */\n var eb_l = new_float(Encoder.CBANDS + 1);\n var eb_s = new_float(Encoder.CBANDS + 1);\n var thr = new_float(Encoder.CBANDS + 2);\n\n /* block type */\n var blocktype = new_int(2), uselongblock = new_int(2);\n\n /* usual variables like loop indices, etc.. */\n var numchn, chn;\n var b, i, j, k;\n var sb, sblock;\n\n /* variables used for --nspsytune */\n var ns_hpfsmpl = new_float_n([2, 576]);\n var pcfact;\n var mask_idx_l = new_int(Encoder.CBANDS + 2), mask_idx_s = new_int(Encoder.CBANDS + 2);\n\n Arrays.fill(mask_idx_s, 0);\n\n numchn = gfc.channels_out;\n /* chn=2 and 3 = Mid and Side channels */\n if (gfp.mode == MPEGMode.JOINT_STEREO)\n numchn = 4;\n\n if (gfp.VBR == VbrMode.vbr_off)\n pcfact = gfc.ResvMax == 0 ? 0 : ( gfc.ResvSize)\n / gfc.ResvMax * 0.5;\n else if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh\n || gfp.VBR == VbrMode.vbr_mt) {\n pcfact = 0.6;\n } else\n pcfact = 1.0;\n\n /**********************************************************************\n * Apply HPF of fs/4 to the input signal. This is used for attack\n * detection / handling.\n **********************************************************************/\n /* Don't copy the input buffer into a temporary buffer */\n /* unroll the loop 2 times */\n for (chn = 0; chn < gfc.channels_out; chn++) {\n /* apply high pass filter of fs/4 */\n var firbuf = buffer[chn];\n var firbufPos = bufPos + 576 - 350 - NSFIRLEN + 192;\n assert(fircoef.length == ((NSFIRLEN - 1) / 2));\n for (i = 0; i < 576; i++) {\n var sum1, sum2;\n sum1 = firbuf[firbufPos + i + 10];\n sum2 = 0.0;\n for (j = 0; j < ((NSFIRLEN - 1) / 2) - 1; j += 2) {\n sum1 += fircoef[j]\n * (firbuf[firbufPos + i + j] + firbuf[firbufPos + i\n + NSFIRLEN - j]);\n sum2 += fircoef[j + 1]\n * (firbuf[firbufPos + i + j + 1] + firbuf[firbufPos\n + i + NSFIRLEN - j - 1]);\n }\n ns_hpfsmpl[chn][i] = sum1 + sum2;\n }\n masking_ratio[gr_out][chn].en.assign(gfc.en[chn]);\n masking_ratio[gr_out][chn].thm.assign(gfc.thm[chn]);\n if (numchn > 2) {\n /* MS maskings */\n /* percep_MS_entropy [chn-2] = gfc . pe [chn]; */\n masking_MS_ratio[gr_out][chn].en.assign(gfc.en[chn + 2]);\n masking_MS_ratio[gr_out][chn].thm.assign(gfc.thm[chn + 2]);\n }\n }\n\n for (chn = 0; chn < numchn; chn++) {\n var wsamp_l;\n var wsamp_s;\n var en_subshort = new_float(12);\n var en_short = [0, 0, 0, 0];\n var attack_intensity = new_float(12);\n var ns_uselongblock = 1;\n var attackThreshold;\n var max = new_float(Encoder.CBANDS), avg = new_float(Encoder.CBANDS);\n var ns_attacks = [0, 0, 0, 0];\n var fftenergy = new_float(Encoder.HBLKSIZE);\n var fftenergy_s = new_float_n([3, Encoder.HBLKSIZE_s]);\n\n /*\n * rh 20040301: the following loops do access one off the limits so\n * I increase the array dimensions by one and initialize the\n * accessed values to zero\n */\n assert(gfc.npart_s <= Encoder.CBANDS);\n assert(gfc.npart_l <= Encoder.CBANDS);\n\n /***************************************************************\n * determine the block type (window type)\n ***************************************************************/\n /* calculate energies of each sub-shortblocks */\n for (i = 0; i < 3; i++) {\n en_subshort[i] = gfc.nsPsy.last_en_subshort[chn][i + 6];\n assert(gfc.nsPsy.last_en_subshort[chn][i + 4] > 0);\n attack_intensity[i] = en_subshort[i]\n / gfc.nsPsy.last_en_subshort[chn][i + 4];\n en_short[0] += en_subshort[i];\n }\n\n if (chn == 2) {\n for (i = 0; i < 576; i++) {\n var l, r;\n l = ns_hpfsmpl[0][i];\n r = ns_hpfsmpl[1][i];\n ns_hpfsmpl[0][i] = l + r;\n ns_hpfsmpl[1][i] = l - r;\n }\n }\n {\n var pf = ns_hpfsmpl[chn & 1];\n var pfPos = 0;\n for (i = 0; i < 9; i++) {\n var pfe = pfPos + 576 / 9;\n var p = 1.;\n for (; pfPos < pfe; pfPos++)\n if (p < Math.abs(pf[pfPos]))\n p = Math.abs(pf[pfPos]);\n\n gfc.nsPsy.last_en_subshort[chn][i] = en_subshort[i + 3] = p;\n en_short[1 + i / 3] += p;\n if (p > en_subshort[i + 3 - 2]) {\n assert(en_subshort[i + 3 - 2] > 0);\n p = p / en_subshort[i + 3 - 2];\n } else if (en_subshort[i + 3 - 2] > p * 10.0) {\n assert(p > 0);\n p = en_subshort[i + 3 - 2] / (p * 10.0);\n } else\n p = 0.0;\n attack_intensity[i + 3] = p;\n }\n }\n\n if (gfp.analysis) {\n var x = attack_intensity[0];\n for (i = 1; i < 12; i++)\n if (x < attack_intensity[i])\n x = attack_intensity[i];\n gfc.pinfo.ers[gr_out][chn] = gfc.pinfo.ers_save[chn];\n gfc.pinfo.ers_save[chn] = x;\n }\n\n /* compare energies between sub-shortblocks */\n attackThreshold = (chn == 3) ? gfc.nsPsy.attackthre_s\n : gfc.nsPsy.attackthre;\n for (i = 0; i < 12; i++)\n if (0 == ns_attacks[i / 3]\n && attack_intensity[i] > attackThreshold)\n ns_attacks[i / 3] = (i % 3) + 1;\n\n /*\n * should have energy change between short blocks, in order to avoid\n * periodic signals\n */\n for (i = 1; i < 4; i++) {\n var ratio;\n if (en_short[i - 1] > en_short[i]) {\n assert(en_short[i] > 0);\n ratio = en_short[i - 1] / en_short[i];\n } else {\n assert(en_short[i - 1] > 0);\n ratio = en_short[i] / en_short[i - 1];\n }\n if (ratio < 1.7) {\n ns_attacks[i] = 0;\n if (i == 1)\n ns_attacks[0] = 0;\n }\n }\n\n if (ns_attacks[0] != 0 && gfc.nsPsy.lastAttacks[chn] != 0)\n ns_attacks[0] = 0;\n\n if (gfc.nsPsy.lastAttacks[chn] == 3\n || (ns_attacks[0] + ns_attacks[1] + ns_attacks[2] + ns_attacks[3]) != 0) {\n ns_uselongblock = 0;\n\n if (ns_attacks[1] != 0 && ns_attacks[0] != 0)\n ns_attacks[1] = 0;\n if (ns_attacks[2] != 0 && ns_attacks[1] != 0)\n ns_attacks[2] = 0;\n if (ns_attacks[3] != 0 && ns_attacks[2] != 0)\n ns_attacks[3] = 0;\n }\n\n if (chn < 2) {\n uselongblock[chn] = ns_uselongblock;\n } else {\n if (ns_uselongblock == 0) {\n uselongblock[0] = uselongblock[1] = 0;\n }\n }\n\n /*\n * there is a one granule delay. Copy maskings computed last call\n * into masking_ratio to return to calling program.\n */\n energy[chn] = gfc.tot_ener[chn];\n\n /*********************************************************************\n * compute FFTs\n *********************************************************************/\n wsamp_s = wsamp_S;\n wsamp_l = wsamp_L;\n compute_ffts(gfp, fftenergy, fftenergy_s, wsamp_l, (chn & 1),\n wsamp_s, (chn & 1), gr_out, chn, buffer, bufPos);\n\n /*********************************************************************\n * Calculate the energy and the tonality of each partition.\n *********************************************************************/\n calc_energy(gfc, fftenergy, eb_l, max, avg);\n calc_mask_index_l(gfc, max, avg, mask_idx_l);\n /* compute masking thresholds for short blocks */\n for (sblock = 0; sblock < 3; sblock++) {\n var enn, thmm;\n compute_masking_s(gfp, fftenergy_s, eb_s, thr, chn, sblock);\n convert_partition2scalefac_s(gfc, eb_s, thr, chn, sblock);\n /**** short block pre-echo control ****/\n for (sb = 0; sb < Encoder.SBMAX_s; sb++) {\n thmm = gfc.thm[chn].s[sb][sblock];\n\n thmm *= NS_PREECHO_ATT0;\n if (ns_attacks[sblock] >= 2 || ns_attacks[sblock + 1] == 1) {\n var idx = (sblock != 0) ? sblock - 1 : 2;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT1 * pcfact);\n thmm = Math.min(thmm, p);\n }\n\n if (ns_attacks[sblock] == 1) {\n var idx = (sblock != 0) ? sblock - 1 : 2;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT2 * pcfact);\n thmm = Math.min(thmm, p);\n } else if ((sblock != 0 && ns_attacks[sblock - 1] == 3)\n || (sblock == 0 && gfc.nsPsy.lastAttacks[chn] == 3)) {\n var idx = (sblock != 2) ? sblock + 1 : 0;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT2 * pcfact);\n thmm = Math.min(thmm, p);\n }\n\n /* pulse like signal detection for fatboy.wav and so on */\n enn = en_subshort[sblock * 3 + 3]\n + en_subshort[sblock * 3 + 4]\n + en_subshort[sblock * 3 + 5];\n if (en_subshort[sblock * 3 + 5] * 6 < enn) {\n thmm *= 0.5;\n if (en_subshort[sblock * 3 + 4] * 6 < enn)\n thmm *= 0.5;\n }\n\n gfc.thm[chn].s[sb][sblock] = thmm;\n }\n }\n gfc.nsPsy.lastAttacks[chn] = ns_attacks[2];\n\n /*********************************************************************\n * convolve the partitioned energy and unpredictability with the\n * spreading function, s3_l[b][k]\n ********************************************************************/\n k = 0;\n {\n for (b = 0; b < gfc.npart_l; b++) {\n /*\n * convolve the partitioned energy with the spreading\n * function\n */\n var kk = gfc.s3ind[b][0];\n var eb2 = eb_l[kk] * tab[mask_idx_l[kk]];\n var ecb = gfc.s3_ll[k++] * eb2;\n while (++kk <= gfc.s3ind[b][1]) {\n eb2 = eb_l[kk] * tab[mask_idx_l[kk]];\n ecb = mask_add(ecb, gfc.s3_ll[k++] * eb2, kk, kk - b,\n gfc, 0);\n }\n ecb *= 0.158489319246111;\n /* pow(10,-0.8) */\n\n /**** long block pre-echo control ****/\n /**\n *
\n * dont use long block pre-echo control if previous granule was\n * a short block. This is to avoid the situation:\n * frame0: quiet (very low masking)\n * frame1: surge (triggers short blocks)\n * frame2: regular frame. looks like pre-echo when compared to\n * frame0, but all pre-echo was in frame1.\n *\n */\n /*\n * chn=0,1 L and R channels\n *\n * chn=2,3 S and M channels.\n */\n\n if (gfc.blocktype_old[chn & 1] == Encoder.SHORT_TYPE)\n thr[b] = ecb;\n else\n thr[b] = NS_INTERP(\n Math.min(ecb, Math.min(rpelev\n * gfc.nb_1[chn][b], rpelev2\n * gfc.nb_2[chn][b])), ecb, pcfact);\n\n gfc.nb_2[chn][b] = gfc.nb_1[chn][b];\n gfc.nb_1[chn][b] = ecb;\n }\n }\n for (; b <= Encoder.CBANDS; ++b) {\n eb_l[b] = 0;\n thr[b] = 0;\n }\n /* compute masking thresholds for long blocks */\n convert_partition2scalefac_l(gfc, eb_l, thr, chn);\n }\n /* end loop over chn */\n\n if (gfp.mode == MPEGMode.STEREO || gfp.mode == MPEGMode.JOINT_STEREO) {\n if (gfp.interChRatio > 0.0) {\n calc_interchannel_masking(gfp, gfp.interChRatio);\n }\n }\n\n if (gfp.mode == MPEGMode.JOINT_STEREO) {\n var msfix;\n msfix1(gfc);\n msfix = gfp.msfix;\n if (Math.abs(msfix) > 0.0)\n ns_msfix(gfc, msfix, gfp.ATHlower * gfc.ATH.adjust);\n }\n\n /***************************************************************\n * determine final block type\n ***************************************************************/\n block_type_set(gfp, uselongblock, blocktype_d, blocktype);\n\n /*********************************************************************\n * compute the value of PE to return ... no delay and advance\n *********************************************************************/\n for (chn = 0; chn < numchn; chn++) {\n var ppe;\n var ppePos = 0;\n var type;\n var mr;\n\n if (chn > 1) {\n ppe = percep_MS_entropy;\n ppePos = -2;\n type = Encoder.NORM_TYPE;\n if (blocktype_d[0] == Encoder.SHORT_TYPE\n || blocktype_d[1] == Encoder.SHORT_TYPE)\n type = Encoder.SHORT_TYPE;\n mr = masking_MS_ratio[gr_out][chn - 2];\n } else {\n ppe = percep_entropy;\n ppePos = 0;\n type = blocktype_d[chn];\n mr = masking_ratio[gr_out][chn];\n }\n\n if (type == Encoder.SHORT_TYPE)\n ppe[ppePos + chn] = pecalc_s(mr, gfc.masking_lower);\n else\n ppe[ppePos + chn] = pecalc_l(mr, gfc.masking_lower);\n\n if (gfp.analysis)\n gfc.pinfo.pe[gr_out][chn] = ppe[ppePos + chn];\n\n }\n return 0;\n }\n\n function vbrpsy_compute_fft_l(gfp, buffer, bufPos, chn, gr_out, fftenergy, wsamp_l, wsamp_lPos) {\n var gfc = gfp.internal_flags;\n if (chn < 2) {\n fft.fft_long(gfc, wsamp_l[wsamp_lPos], chn, buffer, bufPos);\n } else if (chn == 2) {\n /* FFT data for mid and side channel is derived from L & R */\n for (var j = Encoder.BLKSIZE - 1; j >= 0; --j) {\n var l = wsamp_l[wsamp_lPos + 0][j];\n var r = wsamp_l[wsamp_lPos + 1][j];\n wsamp_l[wsamp_lPos + 0][j] = (l + r) * Util.SQRT2 * 0.5;\n wsamp_l[wsamp_lPos + 1][j] = (l - r) * Util.SQRT2 * 0.5;\n }\n }\n\n /*********************************************************************\n * compute energies\n *********************************************************************/\n fftenergy[0] = NON_LINEAR_SCALE_ENERGY(wsamp_l[wsamp_lPos + 0][0]);\n fftenergy[0] *= fftenergy[0];\n\n for (var j = Encoder.BLKSIZE / 2 - 1; j >= 0; --j) {\n var re = wsamp_l[wsamp_lPos + 0][Encoder.BLKSIZE / 2 - j];\n var im = wsamp_l[wsamp_lPos + 0][Encoder.BLKSIZE / 2 + j];\n fftenergy[Encoder.BLKSIZE / 2 - j] = NON_LINEAR_SCALE_ENERGY((re\n * re + im * im) * 0.5);\n }\n /* total energy */\n {\n var totalenergy = 0.0;\n for (var j = 11; j < Encoder.HBLKSIZE; j++)\n totalenergy += fftenergy[j];\n\n gfc.tot_ener[chn] = totalenergy;\n }\n\n if (gfp.analysis) {\n for (var j = 0; j < Encoder.HBLKSIZE; j++) {\n gfc.pinfo.energy[gr_out][chn][j] = gfc.pinfo.energy_save[chn][j];\n gfc.pinfo.energy_save[chn][j] = fftenergy[j];\n }\n gfc.pinfo.pe[gr_out][chn] = gfc.pe[chn];\n }\n }\n\n function vbrpsy_compute_fft_s(gfp, buffer, bufPos, chn, sblock, fftenergy_s, wsamp_s, wsamp_sPos) {\n var gfc = gfp.internal_flags;\n\n if (sblock == 0 && chn < 2) {\n fft.fft_short(gfc, wsamp_s[wsamp_sPos], chn, buffer, bufPos);\n }\n if (chn == 2) {\n /* FFT data for mid and side channel is derived from L & R */\n for (var j = Encoder.BLKSIZE_s - 1; j >= 0; --j) {\n var l = wsamp_s[wsamp_sPos + 0][sblock][j];\n var r = wsamp_s[wsamp_sPos + 1][sblock][j];\n wsamp_s[wsamp_sPos + 0][sblock][j] = (l + r) * Util.SQRT2 * 0.5;\n wsamp_s[wsamp_sPos + 1][sblock][j] = (l - r) * Util.SQRT2 * 0.5;\n }\n }\n\n /*********************************************************************\n * compute energies\n *********************************************************************/\n fftenergy_s[sblock][0] = wsamp_s[wsamp_sPos + 0][sblock][0];\n fftenergy_s[sblock][0] *= fftenergy_s[sblock][0];\n for (var j = Encoder.BLKSIZE_s / 2 - 1; j >= 0; --j) {\n var re = wsamp_s[wsamp_sPos + 0][sblock][Encoder.BLKSIZE_s / 2 - j];\n var im = wsamp_s[wsamp_sPos + 0][sblock][Encoder.BLKSIZE_s / 2 + j];\n fftenergy_s[sblock][Encoder.BLKSIZE_s / 2 - j] = NON_LINEAR_SCALE_ENERGY((re\n * re + im * im) * 0.5);\n }\n }\n\n /**\n * compute loudness approximation (used for ATH auto-level adjustment)\n */\n function vbrpsy_compute_loudness_approximation_l(gfp, gr_out, chn, fftenergy) {\n var gfc = gfp.internal_flags;\n if (gfp.athaa_loudapprox == 2 && chn < 2) {\n // no loudness for mid/side ch\n gfc.loudness_sq[gr_out][chn] = gfc.loudness_sq_save[chn];\n gfc.loudness_sq_save[chn] = psycho_loudness_approx(fftenergy, gfc);\n }\n }\n\n var fircoef_ = [-8.65163e-18 * 2,\n -0.00851586 * 2, -6.74764e-18 * 2, 0.0209036 * 2,\n -3.36639e-17 * 2, -0.0438162 * 2, -1.54175e-17 * 2,\n 0.0931738 * 2, -5.52212e-17 * 2, -0.313819 * 2];\n\n /**\n * Apply HPF of fs/4 to the input signal. This is used for attack detection\n * / handling.\n */\n function vbrpsy_attack_detection(gfp, buffer, bufPos, gr_out, masking_ratio, masking_MS_ratio, energy, sub_short_factor, ns_attacks, uselongblock) {\n var ns_hpfsmpl = new_float_n([2, 576]);\n var gfc = gfp.internal_flags;\n var n_chn_out = gfc.channels_out;\n /* chn=2 and 3 = Mid and Side channels */\n var n_chn_psy = (gfp.mode == MPEGMode.JOINT_STEREO) ? 4 : n_chn_out;\n /* Don't copy the input buffer into a temporary buffer */\n /* unroll the loop 2 times */\n for (var chn = 0; chn < n_chn_out; chn++) {\n /* apply high pass filter of fs/4 */\n firbuf = buffer[chn];\n var firbufPos = bufPos + 576 - 350 - NSFIRLEN + 192;\n assert(fircoef_.length == ((NSFIRLEN - 1) / 2));\n for (var i = 0; i < 576; i++) {\n var sum1, sum2;\n sum1 = firbuf[firbufPos + i + 10];\n sum2 = 0.0;\n for (var j = 0; j < ((NSFIRLEN - 1) / 2) - 1; j += 2) {\n sum1 += fircoef_[j]\n * (firbuf[firbufPos + i + j] + firbuf[firbufPos + i\n + NSFIRLEN - j]);\n sum2 += fircoef_[j + 1]\n * (firbuf[firbufPos + i + j + 1] + firbuf[firbufPos\n + i + NSFIRLEN - j - 1]);\n }\n ns_hpfsmpl[chn][i] = sum1 + sum2;\n }\n masking_ratio[gr_out][chn].en.assign(gfc.en[chn]);\n masking_ratio[gr_out][chn].thm.assign(gfc.thm[chn]);\n if (n_chn_psy > 2) {\n /* MS maskings */\n /* percep_MS_entropy [chn-2] = gfc . pe [chn]; */\n masking_MS_ratio[gr_out][chn].en.assign(gfc.en[chn + 2]);\n masking_MS_ratio[gr_out][chn].thm.assign(gfc.thm[chn + 2]);\n }\n }\n for (var chn = 0; chn < n_chn_psy; chn++) {\n var attack_intensity = new_float(12);\n var en_subshort = new_float(12);\n var en_short = [0, 0, 0, 0];\n var pf = ns_hpfsmpl[chn & 1];\n var pfPos = 0;\n var attackThreshold = (chn == 3) ? gfc.nsPsy.attackthre_s\n : gfc.nsPsy.attackthre;\n var ns_uselongblock = 1;\n\n if (chn == 2) {\n for (var i = 0, j = 576; j > 0; ++i, --j) {\n var l = ns_hpfsmpl[0][i];\n var r = ns_hpfsmpl[1][i];\n ns_hpfsmpl[0][i] = l + r;\n ns_hpfsmpl[1][i] = l - r;\n }\n }\n /***************************************************************\n * determine the block type (window type)\n ***************************************************************/\n /* calculate energies of each sub-shortblocks */\n for (var i = 0; i < 3; i++) {\n en_subshort[i] = gfc.nsPsy.last_en_subshort[chn][i + 6];\n assert(gfc.nsPsy.last_en_subshort[chn][i + 4] > 0);\n attack_intensity[i] = en_subshort[i]\n / gfc.nsPsy.last_en_subshort[chn][i + 4];\n en_short[0] += en_subshort[i];\n }\n\n for (var i = 0; i < 9; i++) {\n var pfe = pfPos + 576 / 9;\n var p = 1.;\n for (; pfPos < pfe; pfPos++)\n if (p < Math.abs(pf[pfPos]))\n p = Math.abs(pf[pfPos]);\n\n gfc.nsPsy.last_en_subshort[chn][i] = en_subshort[i + 3] = p;\n en_short[1 + i / 3] += p;\n if (p > en_subshort[i + 3 - 2]) {\n assert(en_subshort[i + 3 - 2] > 0);\n p = p / en_subshort[i + 3 - 2];\n } else if (en_subshort[i + 3 - 2] > p * 10.0) {\n assert(p > 0);\n p = en_subshort[i + 3 - 2] / (p * 10.0);\n } else {\n p = 0.0;\n }\n attack_intensity[i + 3] = p;\n }\n /* pulse like signal detection for fatboy.wav and so on */\n for (var i = 0; i < 3; ++i) {\n var enn = en_subshort[i * 3 + 3]\n + en_subshort[i * 3 + 4] + en_subshort[i * 3 + 5];\n var factor = 1.;\n if (en_subshort[i * 3 + 5] * 6 < enn) {\n factor *= 0.5;\n if (en_subshort[i * 3 + 4] * 6 < enn) {\n factor *= 0.5;\n }\n }\n sub_short_factor[chn][i] = factor;\n }\n\n if (gfp.analysis) {\n var x = attack_intensity[0];\n for (var i = 1; i < 12; i++) {\n if (x < attack_intensity[i]) {\n x = attack_intensity[i];\n }\n }\n gfc.pinfo.ers[gr_out][chn] = gfc.pinfo.ers_save[chn];\n gfc.pinfo.ers_save[chn] = x;\n }\n\n /* compare energies between sub-shortblocks */\n for (var i = 0; i < 12; i++) {\n if (0 == ns_attacks[chn][i / 3]\n && attack_intensity[i] > attackThreshold) {\n ns_attacks[chn][i / 3] = (i % 3) + 1;\n }\n }\n\n /*\n * should have energy change between short blocks, in order to avoid\n * periodic signals\n */\n /* Good samples to show the effect are Trumpet test songs */\n /*\n * GB: tuned (1) to avoid too many short blocks for test sample\n * TRUMPET\n */\n /*\n * RH: tuned (2) to let enough short blocks through for test sample\n * FSOL and SNAPS\n */\n for (var i = 1; i < 4; i++) {\n var u = en_short[i - 1];\n var v = en_short[i];\n var m = Math.max(u, v);\n if (m < 40000) { /* (2) */\n if (u < 1.7 * v && v < 1.7 * u) { /* (1) */\n if (i == 1 && ns_attacks[chn][0] <= ns_attacks[chn][i]) {\n ns_attacks[chn][0] = 0;\n }\n ns_attacks[chn][i] = 0;\n }\n }\n }\n\n if (ns_attacks[chn][0] <= gfc.nsPsy.lastAttacks[chn]) {\n ns_attacks[chn][0] = 0;\n }\n\n if (gfc.nsPsy.lastAttacks[chn] == 3\n || (ns_attacks[chn][0] + ns_attacks[chn][1]\n + ns_attacks[chn][2] + ns_attacks[chn][3]) != 0) {\n ns_uselongblock = 0;\n\n if (ns_attacks[chn][1] != 0 && ns_attacks[chn][0] != 0) {\n ns_attacks[chn][1] = 0;\n }\n if (ns_attacks[chn][2] != 0 && ns_attacks[chn][1] != 0) {\n ns_attacks[chn][2] = 0;\n }\n if (ns_attacks[chn][3] != 0 && ns_attacks[chn][2] != 0) {\n ns_attacks[chn][3] = 0;\n }\n }\n if (chn < 2) {\n uselongblock[chn] = ns_uselongblock;\n } else {\n if (ns_uselongblock == 0) {\n uselongblock[0] = uselongblock[1] = 0;\n }\n }\n\n /*\n * there is a one granule delay. Copy maskings computed last call\n * into masking_ratio to return to calling program.\n */\n energy[chn] = gfc.tot_ener[chn];\n }\n }\n\n function vbrpsy_skip_masking_s(gfc, chn, sblock) {\n if (sblock == 0) {\n for (var b = 0; b < gfc.npart_s; b++) {\n gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b];\n gfc.nb_s1[chn][b] = 0;\n }\n }\n }\n\n function vbrpsy_skip_masking_l(gfc, chn) {\n for (var b = 0; b < gfc.npart_l; b++) {\n gfc.nb_2[chn][b] = gfc.nb_1[chn][b];\n gfc.nb_1[chn][b] = 0;\n }\n }\n\n function psyvbr_calc_mask_index_s(gfc, max, avg, mask_idx) {\n var last_tab_entry = tab.length - 1;\n var b = 0;\n var a = avg[b] + avg[b + 1];\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b];\n if (m < max[b + 1])\n m = max[b + 1];\n assert((gfc.numlines_s[b] + gfc.numlines_s[b + 1] - 1) > 0);\n a = 20.0 * (m * 2.0 - a)\n / (a * (gfc.numlines_s[b] + gfc.numlines_s[b + 1] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n\n for (b = 1; b < gfc.npart_s - 1; b++) {\n a = avg[b - 1] + avg[b] + avg[b + 1];\n assert(b + 1 < gfc.npart_s);\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b - 1];\n if (m < max[b])\n m = max[b];\n if (m < max[b + 1])\n m = max[b + 1];\n assert((gfc.numlines_s[b - 1] + gfc.numlines_s[b] + gfc.numlines_s[b + 1] - 1) > 0);\n a = 20.0\n * (m * 3.0 - a)\n / (a * (gfc.numlines_s[b - 1] + gfc.numlines_s[b]\n + gfc.numlines_s[b + 1] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n }\n assert(b > 0);\n assert(b == gfc.npart_s - 1);\n\n a = avg[b - 1] + avg[b];\n assert(a >= 0);\n if (a > 0.0) {\n var m = max[b - 1];\n if (m < max[b])\n m = max[b];\n assert((gfc.numlines_s[b - 1] + gfc.numlines_s[b] - 1) > 0);\n a = 20.0 * (m * 2.0 - a)\n / (a * (gfc.numlines_s[b - 1] + gfc.numlines_s[b] - 1));\n var k = 0 | a;\n if (k > last_tab_entry)\n k = last_tab_entry;\n mask_idx[b] = k;\n } else {\n mask_idx[b] = 0;\n }\n assert(b == (gfc.npart_s - 1));\n }\n\n function vbrpsy_compute_masking_s(gfp, fftenergy_s, eb, thr, chn, sblock) {\n var gfc = gfp.internal_flags;\n var max = new float[Encoder.CBANDS], avg = new_float(Encoder.CBANDS);\n var i, j, b;\n var mask_idx_s = new int[Encoder.CBANDS];\n\n for (b = j = 0; b < gfc.npart_s; ++b) {\n var ebb = 0, m = 0;\n var n = gfc.numlines_s[b];\n for (i = 0; i < n; ++i, ++j) {\n var el = fftenergy_s[sblock][j];\n ebb += el;\n if (m < el)\n m = el;\n }\n eb[b] = ebb;\n assert(ebb >= 0);\n max[b] = m;\n assert(n > 0);\n avg[b] = ebb / n;\n assert(avg[b] >= 0);\n }\n assert(b == gfc.npart_s);\n assert(j == 129);\n for (; b < Encoder.CBANDS; ++b) {\n max[b] = 0;\n avg[b] = 0;\n }\n psyvbr_calc_mask_index_s(gfc, max, avg, mask_idx_s);\n for (j = b = 0; b < gfc.npart_s; b++) {\n var kk = gfc.s3ind_s[b][0];\n var last = gfc.s3ind_s[b][1];\n var dd, dd_n;\n var x, ecb, avg_mask;\n dd = mask_idx_s[kk];\n dd_n = 1;\n ecb = gfc.s3_ss[j] * eb[kk] * tab[mask_idx_s[kk]];\n ++j;\n ++kk;\n while (kk <= last) {\n dd += mask_idx_s[kk];\n dd_n += 1;\n x = gfc.s3_ss[j] * eb[kk] * tab[mask_idx_s[kk]];\n ecb = vbrpsy_mask_add(ecb, x, kk - b);\n ++j;\n ++kk;\n }\n dd = (1 + 2 * dd) / (2 * dd_n);\n avg_mask = tab[dd] * 0.5;\n ecb *= avg_mask;\n thr[b] = ecb;\n gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b];\n gfc.nb_s1[chn][b] = ecb;\n {\n /*\n * if THR exceeds EB, the quantization routines will take the\n * difference from other bands. in case of strong tonal samples\n * (tonaltest.wav) this leads to heavy distortions. that's why\n * we limit THR here.\n */\n x = max[b];\n x *= gfc.minval_s[b];\n x *= avg_mask;\n if (thr[b] > x) {\n thr[b] = x;\n }\n }\n if (gfc.masking_lower > 1) {\n thr[b] *= gfc.masking_lower;\n }\n if (thr[b] > eb[b]) {\n thr[b] = eb[b];\n }\n if (gfc.masking_lower < 1) {\n thr[b] *= gfc.masking_lower;\n }\n\n assert(thr[b] >= 0);\n }\n for (; b < Encoder.CBANDS; ++b) {\n eb[b] = 0;\n thr[b] = 0;\n }\n }\n\n function vbrpsy_compute_masking_l(gfc, fftenergy, eb_l, thr, chn) {\n var max = new_float(Encoder.CBANDS), avg = new_float(Encoder.CBANDS);\n var mask_idx_l = new_int(Encoder.CBANDS + 2);\n var b;\n\n /*********************************************************************\n * Calculate the energy and the tonality of each partition.\n *********************************************************************/\n calc_energy(gfc, fftenergy, eb_l, max, avg);\n calc_mask_index_l(gfc, max, avg, mask_idx_l);\n\n /*********************************************************************\n * convolve the partitioned energy and unpredictability with the\n * spreading function, s3_l[b][k]\n ********************************************************************/\n var k = 0;\n for (b = 0; b < gfc.npart_l; b++) {\n var x, ecb, avg_mask, t;\n /* convolve the partitioned energy with the spreading function */\n var kk = gfc.s3ind[b][0];\n var last = gfc.s3ind[b][1];\n var dd = 0, dd_n = 0;\n dd = mask_idx_l[kk];\n dd_n += 1;\n ecb = gfc.s3_ll[k] * eb_l[kk] * tab[mask_idx_l[kk]];\n ++k;\n ++kk;\n while (kk <= last) {\n dd += mask_idx_l[kk];\n dd_n += 1;\n x = gfc.s3_ll[k] * eb_l[kk] * tab[mask_idx_l[kk]];\n t = vbrpsy_mask_add(ecb, x, kk - b);\n ecb = t;\n ++k;\n ++kk;\n }\n dd = (1 + 2 * dd) / (2 * dd_n);\n avg_mask = tab[dd] * 0.5;\n ecb *= avg_mask;\n\n /**** long block pre-echo control ****/\n /**\n *
\n * dont use long block pre-echo control if previous granule was\n * a short block. This is to avoid the situation:\n * frame0: quiet (very low masking)\n * frame1: surge (triggers short blocks)\n * frame2: regular frame. looks like pre-echo when compared to\n * frame0, but all pre-echo was in frame1.\n *\n */\n /*\n * chn=0,1 L and R channels chn=2,3 S and M channels.\n */\n if (gfc.blocktype_old[chn & 0x01] == Encoder.SHORT_TYPE) {\n var ecb_limit = rpelev * gfc.nb_1[chn][b];\n if (ecb_limit > 0) {\n thr[b] = Math.min(ecb, ecb_limit);\n } else {\n /**\n *
\n * Robert 071209:\n * Because we don't calculate long block psy when we know a granule\n * should be of short blocks, we don't have any clue how the granule\n * before would have looked like as a long block. So we have to guess\n * a little bit for this END_TYPE block.\n * Most of the time we get away with this sloppyness. (fingers crossed :)\n * The speed increase is worth it.\n *\n */\n thr[b] = Math.min(ecb, eb_l[b] * NS_PREECHO_ATT2);\n }\n } else {\n var ecb_limit_2 = rpelev2 * gfc.nb_2[chn][b];\n var ecb_limit_1 = rpelev * gfc.nb_1[chn][b];\n var ecb_limit;\n if (ecb_limit_2 <= 0) {\n ecb_limit_2 = ecb;\n }\n if (ecb_limit_1 <= 0) {\n ecb_limit_1 = ecb;\n }\n if (gfc.blocktype_old[chn & 0x01] == Encoder.NORM_TYPE) {\n ecb_limit = Math.min(ecb_limit_1, ecb_limit_2);\n } else {\n ecb_limit = ecb_limit_1;\n }\n thr[b] = Math.min(ecb, ecb_limit);\n }\n gfc.nb_2[chn][b] = gfc.nb_1[chn][b];\n gfc.nb_1[chn][b] = ecb;\n {\n /*\n * if THR exceeds EB, the quantization routines will take the\n * difference from other bands. in case of strong tonal samples\n * (tonaltest.wav) this leads to heavy distortions. that's why\n * we limit THR here.\n */\n x = max[b];\n x *= gfc.minval_l[b];\n x *= avg_mask;\n if (thr[b] > x) {\n thr[b] = x;\n }\n }\n if (gfc.masking_lower > 1) {\n thr[b] *= gfc.masking_lower;\n }\n if (thr[b] > eb_l[b]) {\n thr[b] = eb_l[b];\n }\n if (gfc.masking_lower < 1) {\n thr[b] *= gfc.masking_lower;\n }\n assert(thr[b] >= 0);\n }\n for (; b < Encoder.CBANDS; ++b) {\n eb_l[b] = 0;\n thr[b] = 0;\n }\n }\n\n function vbrpsy_compute_block_type(gfp, uselongblock) {\n var gfc = gfp.internal_flags;\n\n if (gfp.short_blocks == ShortBlock.short_block_coupled\n /* force both channels to use the same block type */\n /* this is necessary if the frame is to be encoded in ms_stereo. */\n /* But even without ms_stereo, FhG does this */\n && !(uselongblock[0] != 0 && uselongblock[1] != 0))\n uselongblock[0] = uselongblock[1] = 0;\n\n for (var chn = 0; chn < gfc.channels_out; chn++) {\n /* disable short blocks */\n if (gfp.short_blocks == ShortBlock.short_block_dispensed) {\n uselongblock[chn] = 1;\n }\n if (gfp.short_blocks == ShortBlock.short_block_forced) {\n uselongblock[chn] = 0;\n }\n }\n }\n\n function vbrpsy_apply_block_type(gfp, uselongblock, blocktype_d) {\n var gfc = gfp.internal_flags;\n\n /*\n * update the blocktype of the previous granule, since it depends on\n * what happend in this granule\n */\n for (var chn = 0; chn < gfc.channels_out; chn++) {\n var blocktype = Encoder.NORM_TYPE;\n /* disable short blocks */\n\n if (uselongblock[chn] != 0) {\n /* no attack : use long blocks */\n assert(gfc.blocktype_old[chn] != Encoder.START_TYPE);\n if (gfc.blocktype_old[chn] == Encoder.SHORT_TYPE)\n blocktype = Encoder.STOP_TYPE;\n } else {\n /* attack : use short blocks */\n blocktype = Encoder.SHORT_TYPE;\n if (gfc.blocktype_old[chn] == Encoder.NORM_TYPE) {\n gfc.blocktype_old[chn] = Encoder.START_TYPE;\n }\n if (gfc.blocktype_old[chn] == Encoder.STOP_TYPE)\n gfc.blocktype_old[chn] = Encoder.SHORT_TYPE;\n }\n\n blocktype_d[chn] = gfc.blocktype_old[chn];\n // value returned to calling program\n gfc.blocktype_old[chn] = blocktype;\n // save for next call to l3psy_anal\n }\n }\n\n /**\n * compute M/S thresholds from Johnston & Ferreira 1992 ICASSP paper\n */\n function vbrpsy_compute_MS_thresholds(eb, thr, cb_mld, ath_cb, athadjust, msfix, n) {\n var msfix2 = msfix * 2;\n var athlower = msfix > 0 ? Math.pow(10, athadjust) : 1;\n var rside, rmid;\n for (var b = 0; b < n; ++b) {\n var ebM = eb[2][b];\n var ebS = eb[3][b];\n var thmL = thr[0][b];\n var thmR = thr[1][b];\n var thmM = thr[2][b];\n var thmS = thr[3][b];\n\n /* use this fix if L & R masking differs by 2db or less */\n if (thmL <= 1.58 * thmR && thmR <= 1.58 * thmL) {\n var mld_m = cb_mld[b] * ebS;\n var mld_s = cb_mld[b] * ebM;\n rmid = Math.max(thmM, Math.min(thmS, mld_m));\n rside = Math.max(thmS, Math.min(thmM, mld_s));\n } else {\n rmid = thmM;\n rside = thmS;\n }\n if (msfix > 0) {\n /***************************************************************/\n /* Adjust M/S maskings if user set \"msfix\" */\n /***************************************************************/\n /* Naoki Shibata 2000 */\n var thmLR, thmMS;\n var ath = ath_cb[b] * athlower;\n thmLR = Math.min(Math.max(thmL, ath), Math.max(thmR, ath));\n thmM = Math.max(rmid, ath);\n thmS = Math.max(rside, ath);\n thmMS = thmM + thmS;\n if (thmMS > 0 && (thmLR * msfix2) < thmMS) {\n var f = thmLR * msfix2 / thmMS;\n thmM *= f;\n thmS *= f;\n assert(thmMS > 0);\n }\n rmid = Math.min(thmM, rmid);\n rside = Math.min(thmS, rside);\n }\n if (rmid > ebM) {\n rmid = ebM;\n }\n if (rside > ebS) {\n rside = ebS;\n }\n thr[2][b] = rmid;\n thr[3][b] = rside;\n }\n }\n\n this.L3psycho_anal_vbr = function (gfp, buffer, bufPos, gr_out, masking_ratio, masking_MS_ratio, percep_entropy, percep_MS_entropy, energy, blocktype_d) {\n var gfc = gfp.internal_flags;\n\n /* fft and energy calculation */\n var wsamp_l;\n var wsamp_s;\n var fftenergy = new_float(Encoder.HBLKSIZE);\n var fftenergy_s = new_float_n([3, Encoder.HBLKSIZE_s]);\n var wsamp_L = new_float_n([2, Encoder.BLKSIZE]);\n var wsamp_S = new_float_n([2, 3, Encoder.BLKSIZE_s]);\n var eb = new_float_n([4, Encoder.CBANDS]), thr = new_float_n([4, Encoder.CBANDS]);\n var sub_short_factor = new_float_n([4, 3]);\n var pcfact = 0.6;\n\n /* block type */\n var ns_attacks = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0],\n [0, 0, 0, 0]];\n var uselongblock = new_int(2);\n\n /* usual variables like loop indices, etc.. */\n\n /* chn=2 and 3 = Mid and Side channels */\n var n_chn_psy = (gfp.mode == MPEGMode.JOINT_STEREO) ? 4\n : gfc.channels_out;\n\n vbrpsy_attack_detection(gfp, buffer, bufPos, gr_out, masking_ratio,\n masking_MS_ratio, energy, sub_short_factor, ns_attacks,\n uselongblock);\n\n vbrpsy_compute_block_type(gfp, uselongblock);\n\n /* LONG BLOCK CASE */\n {\n for (var chn = 0; chn < n_chn_psy; chn++) {\n var ch01 = chn & 0x01;\n wsamp_l = wsamp_L;\n vbrpsy_compute_fft_l(gfp, buffer, bufPos, chn, gr_out,\n fftenergy, wsamp_l, ch01);\n\n vbrpsy_compute_loudness_approximation_l(gfp, gr_out, chn,\n fftenergy);\n\n if (uselongblock[ch01] != 0) {\n vbrpsy_compute_masking_l(gfc, fftenergy, eb[chn], thr[chn],\n chn);\n } else {\n vbrpsy_skip_masking_l(gfc, chn);\n }\n }\n if ((uselongblock[0] + uselongblock[1]) == 2) {\n /* M/S channel */\n if (gfp.mode == MPEGMode.JOINT_STEREO) {\n vbrpsy_compute_MS_thresholds(eb, thr, gfc.mld_cb_l,\n gfc.ATH.cb_l, gfp.ATHlower * gfc.ATH.adjust,\n gfp.msfix, gfc.npart_l);\n }\n }\n /* TODO: apply adaptive ATH masking here ?? */\n for (var chn = 0; chn < n_chn_psy; chn++) {\n var ch01 = chn & 0x01;\n if (uselongblock[ch01] != 0) {\n convert_partition2scalefac_l(gfc, eb[chn], thr[chn], chn);\n }\n }\n }\n\n /* SHORT BLOCKS CASE */\n {\n for (var sblock = 0; sblock < 3; sblock++) {\n for (var chn = 0; chn < n_chn_psy; ++chn) {\n var ch01 = chn & 0x01;\n\n if (uselongblock[ch01] != 0) {\n vbrpsy_skip_masking_s(gfc, chn, sblock);\n } else {\n /* compute masking thresholds for short blocks */\n wsamp_s = wsamp_S;\n vbrpsy_compute_fft_s(gfp, buffer, bufPos, chn, sblock,\n fftenergy_s, wsamp_s, ch01);\n vbrpsy_compute_masking_s(gfp, fftenergy_s, eb[chn],\n thr[chn], chn, sblock);\n }\n }\n if ((uselongblock[0] + uselongblock[1]) == 0) {\n /* M/S channel */\n if (gfp.mode == MPEGMode.JOINT_STEREO) {\n vbrpsy_compute_MS_thresholds(eb, thr, gfc.mld_cb_s,\n gfc.ATH.cb_s, gfp.ATHlower * gfc.ATH.adjust,\n gfp.msfix, gfc.npart_s);\n }\n /* L/R channel */\n }\n /* TODO: apply adaptive ATH masking here ?? */\n for (var chn = 0; chn < n_chn_psy; ++chn) {\n var ch01 = chn & 0x01;\n if (0 == uselongblock[ch01]) {\n convert_partition2scalefac_s(gfc, eb[chn], thr[chn],\n chn, sblock);\n }\n }\n }\n\n /**** short block pre-echo control ****/\n for (var chn = 0; chn < n_chn_psy; chn++) {\n var ch01 = chn & 0x01;\n\n if (uselongblock[ch01] != 0) {\n continue;\n }\n for (var sb = 0; sb < Encoder.SBMAX_s; sb++) {\n var new_thmm = new_float(3);\n for (var sblock = 0; sblock < 3; sblock++) {\n var thmm = gfc.thm[chn].s[sb][sblock];\n thmm *= NS_PREECHO_ATT0;\n\n if (ns_attacks[chn][sblock] >= 2\n || ns_attacks[chn][sblock + 1] == 1) {\n var idx = (sblock != 0) ? sblock - 1 : 2;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT1 * pcfact);\n thmm = Math.min(thmm, p);\n } else if (ns_attacks[chn][sblock] == 1) {\n var idx = (sblock != 0) ? sblock - 1 : 2;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT2 * pcfact);\n thmm = Math.min(thmm, p);\n } else if ((sblock != 0 && ns_attacks[chn][sblock - 1] == 3)\n || (sblock == 0 && gfc.nsPsy.lastAttacks[chn] == 3)) {\n var idx = (sblock != 2) ? sblock + 1 : 0;\n var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm,\n NS_PREECHO_ATT2 * pcfact);\n thmm = Math.min(thmm, p);\n }\n\n /* pulse like signal detection for fatboy.wav and so on */\n thmm *= sub_short_factor[chn][sblock];\n\n new_thmm[sblock] = thmm;\n }\n for (var sblock = 0; sblock < 3; sblock++) {\n gfc.thm[chn].s[sb][sblock] = new_thmm[sblock];\n }\n }\n }\n }\n for (var chn = 0; chn < n_chn_psy; chn++) {\n gfc.nsPsy.lastAttacks[chn] = ns_attacks[chn][2];\n }\n\n /***************************************************************\n * determine final block type\n ***************************************************************/\n vbrpsy_apply_block_type(gfp, uselongblock, blocktype_d);\n\n /*********************************************************************\n * compute the value of PE to return ... no delay and advance\n *********************************************************************/\n for (var chn = 0; chn < n_chn_psy; chn++) {\n var ppe;\n var ppePos;\n var type;\n var mr;\n\n if (chn > 1) {\n ppe = percep_MS_entropy;\n ppePos = -2;\n type = Encoder.NORM_TYPE;\n if (blocktype_d[0] == Encoder.SHORT_TYPE\n || blocktype_d[1] == Encoder.SHORT_TYPE)\n type = Encoder.SHORT_TYPE;\n mr = masking_MS_ratio[gr_out][chn - 2];\n } else {\n ppe = percep_entropy;\n ppePos = 0;\n type = blocktype_d[chn];\n mr = masking_ratio[gr_out][chn];\n }\n\n if (type == Encoder.SHORT_TYPE) {\n ppe[ppePos + chn] = pecalc_s(mr, gfc.masking_lower);\n } else {\n ppe[ppePos + chn] = pecalc_l(mr, gfc.masking_lower);\n }\n\n if (gfp.analysis) {\n gfc.pinfo.pe[gr_out][chn] = ppe[ppePos + chn];\n }\n }\n return 0;\n }\n\n function s3_func_x(bark, hf_slope) {\n var tempx = bark, tempy;\n\n if (tempx >= 0) {\n tempy = -tempx * 27;\n } else {\n tempy = tempx * hf_slope;\n }\n if (tempy <= -72.0) {\n return 0;\n }\n return Math.exp(tempy * LN_TO_LOG10);\n }\n\n function norm_s3_func_x(hf_slope) {\n var lim_a = 0, lim_b = 0;\n {\n var x = 0, l, h;\n for (x = 0; s3_func_x(x, hf_slope) > 1e-20; x -= 1)\n ;\n l = x;\n h = 0;\n while (Math.abs(h - l) > 1e-12) {\n x = (h + l) / 2;\n if (s3_func_x(x, hf_slope) > 0) {\n h = x;\n } else {\n l = x;\n }\n }\n lim_a = l;\n }\n {\n var x = 0, l, h;\n for (x = 0; s3_func_x(x, hf_slope) > 1e-20; x += 1)\n ;\n l = 0;\n h = x;\n while (Math.abs(h - l) > 1e-12) {\n x = (h + l) / 2;\n if (s3_func_x(x, hf_slope) > 0) {\n l = x;\n } else {\n h = x;\n }\n }\n lim_b = h;\n }\n {\n var sum = 0;\n var m = 1000;\n var i;\n for (i = 0; i <= m; ++i) {\n var x = lim_a + i * (lim_b - lim_a) / m;\n var y = s3_func_x(x, hf_slope);\n sum += y;\n }\n {\n var norm = (m + 1) / (sum * (lim_b - lim_a));\n /* printf( \"norm = %lf\\n\",norm); */\n return norm;\n }\n }\n }\n\n /**\n * The spreading function. Values returned in units of energy\n */\n function s3_func(bark) {\n var tempx, x, tempy, temp;\n tempx = bark;\n if (tempx >= 0)\n tempx *= 3;\n else\n tempx *= 1.5;\n\n if (tempx >= 0.5 && tempx <= 2.5) {\n temp = tempx - 0.5;\n x = 8.0 * (temp * temp - 2.0 * temp);\n } else\n x = 0.0;\n tempx += 0.474;\n tempy = 15.811389 + 7.5 * tempx - 17.5\n * Math.sqrt(1.0 + tempx * tempx);\n\n if (tempy <= -60.0)\n return 0.0;\n\n tempx = Math.exp((x + tempy) * LN_TO_LOG10);\n\n /**\n *
\n * Normalization. The spreading function should be normalized so that:\n * +inf\n * /\n * | s3 [ bark ] d(bark) = 1\n * /\n * -inf\n *\n */\n tempx /= .6609193;\n return tempx;\n }\n\n /**\n * see for example \"Zwicker: Psychoakustik, 1982; ISBN 3-540-11401-7\n */\n function freq2bark(freq) {\n /* input: freq in hz output: barks */\n if (freq < 0)\n freq = 0;\n freq = freq * 0.001;\n return 13.0 * Math.atan(.76 * freq) + 3.5\n * Math.atan(freq * freq / (7.5 * 7.5));\n }\n\n function init_numline(numlines, bo, bm, bval, bval_width, mld, bo_w, sfreq, blksize, scalepos, deltafreq, sbmax) {\n var b_frq = new_float(Encoder.CBANDS + 1);\n var sample_freq_frac = sfreq / (sbmax > 15 ? 2 * 576 : 2 * 192);\n var partition = new_int(Encoder.HBLKSIZE);\n var i;\n sfreq /= blksize;\n var j = 0;\n var ni = 0;\n /* compute numlines, the number of spectral lines in each partition band */\n /* each partition band should be about DELBARK wide. */\n for (i = 0; i < Encoder.CBANDS; i++) {\n var bark1;\n var j2;\n bark1 = freq2bark(sfreq * j);\n\n b_frq[i] = sfreq * j;\n\n for (j2 = j; freq2bark(sfreq * j2) - bark1 < DELBARK\n && j2 <= blksize / 2; j2++)\n ;\n\n numlines[i] = j2 - j;\n ni = i + 1;\n\n while (j < j2) {\n assert(j < Encoder.HBLKSIZE);\n partition[j++] = i;\n }\n if (j > blksize / 2) {\n j = blksize / 2;\n ++i;\n break;\n }\n }\n assert(i < Encoder.CBANDS);\n b_frq[i] = sfreq * j;\n\n for (var sfb = 0; sfb < sbmax; sfb++) {\n var i1, i2, start, end;\n var arg;\n start = scalepos[sfb];\n end = scalepos[sfb + 1];\n\n i1 = 0 | Math.floor(.5 + deltafreq * (start - .5));\n if (i1 < 0)\n i1 = 0;\n i2 = 0 | Math.floor(.5 + deltafreq * (end - .5));\n\n if (i2 > blksize / 2)\n i2 = blksize / 2;\n\n bm[sfb] = (partition[i1] + partition[i2]) / 2;\n bo[sfb] = partition[i2];\n var f_tmp = sample_freq_frac * end;\n /*\n * calculate how much of this band belongs to current scalefactor\n * band\n */\n bo_w[sfb] = (f_tmp - b_frq[bo[sfb]])\n / (b_frq[bo[sfb] + 1] - b_frq[bo[sfb]]);\n if (bo_w[sfb] < 0) {\n bo_w[sfb] = 0;\n } else {\n if (bo_w[sfb] > 1) {\n bo_w[sfb] = 1;\n }\n }\n /* setup stereo demasking thresholds */\n /* formula reverse enginerred from plot in paper */\n arg = freq2bark(sfreq * scalepos[sfb] * deltafreq);\n arg = ( Math.min(arg, 15.5) / 15.5);\n\n mld[sfb] = Math.pow(10.0,\n 1.25 * (1 - Math.cos(Math.PI * arg)) - 2.5);\n }\n\n /* compute bark values of each critical band */\n j = 0;\n for (var k = 0; k < ni; k++) {\n var w = numlines[k];\n var bark1, bark2;\n\n bark1 = freq2bark(sfreq * (j));\n bark2 = freq2bark(sfreq * (j + w - 1));\n bval[k] = .5 * (bark1 + bark2);\n\n bark1 = freq2bark(sfreq * (j - .5));\n bark2 = freq2bark(sfreq * (j + w - .5));\n bval_width[k] = bark2 - bark1;\n j += w;\n }\n\n return ni;\n }\n\n function init_s3_values(s3ind, npart, bval, bval_width, norm, use_old_s3) {\n var s3 = new_float_n([Encoder.CBANDS, Encoder.CBANDS]);\n /*\n * The s3 array is not linear in the bark scale.\n *\n * bval[x] should be used to get the bark value.\n */\n var j;\n var numberOfNoneZero = 0;\n\n /**\n *
\n * s[i][j], the value of the spreading function,\n * centered at band j (masker), for band i (maskee)\n *\n * i.e.: sum over j to spread into signal barkval=i\n * NOTE: i and j are used opposite as in the ISO docs\n *\n */\n if (use_old_s3) {\n for (var i = 0; i < npart; i++) {\n for (j = 0; j < npart; j++) {\n var v = s3_func(bval[i] - bval[j]) * bval_width[j];\n s3[i][j] = v * norm[i];\n }\n }\n } else {\n for (j = 0; j < npart; j++) {\n var hf_slope = 15 + Math.min(21 / bval[j], 12);\n var s3_x_norm = norm_s3_func_x(hf_slope);\n for (var i = 0; i < npart; i++) {\n var v = s3_x_norm\n * s3_func_x(bval[i] - bval[j], hf_slope)\n * bval_width[j];\n s3[i][j] = v * norm[i];\n }\n }\n }\n for (var i = 0; i < npart; i++) {\n for (j = 0; j < npart; j++) {\n if (s3[i][j] > 0.0)\n break;\n }\n s3ind[i][0] = j;\n\n for (j = npart - 1; j > 0; j--) {\n if (s3[i][j] > 0.0)\n break;\n }\n s3ind[i][1] = j;\n numberOfNoneZero += (s3ind[i][1] - s3ind[i][0] + 1);\n }\n\n var p = new_float(numberOfNoneZero);\n var k = 0;\n for (var i = 0; i < npart; i++)\n for (j = s3ind[i][0]; j <= s3ind[i][1]; j++)\n p[k++] = s3[i][j];\n\n return p;\n }\n\n function stereo_demask(f) {\n /* setup stereo demasking thresholds */\n /* formula reverse enginerred from plot in paper */\n var arg = freq2bark(f);\n arg = (Math.min(arg, 15.5) / 15.5);\n\n return Math.pow(10.0,\n 1.25 * (1 - Math.cos(Math.PI * arg)) - 2.5);\n }\n\n /**\n * NOTE: the bitrate reduction from the inter-channel masking effect is low\n * compared to the chance of getting annyoing artefacts. L3psycho_anal_vbr\n * does not use this feature. (Robert 071216)\n */\n this.psymodel_init = function (gfp) {\n var gfc = gfp.internal_flags;\n var i;\n var useOldS3 = true;\n var bvl_a = 13, bvl_b = 24;\n var snr_l_a = 0, snr_l_b = 0;\n var snr_s_a = -8.25, snr_s_b = -4.5;\n var bval = new_float(Encoder.CBANDS);\n var bval_width = new_float(Encoder.CBANDS);\n var norm = new_float(Encoder.CBANDS);\n var sfreq = gfp.out_samplerate;\n\n switch (gfp.experimentalZ) {\n default:\n case 0:\n useOldS3 = true;\n break;\n case 1:\n useOldS3 = (gfp.VBR == VbrMode.vbr_mtrh || gfp.VBR == VbrMode.vbr_mt) ? false\n : true;\n break;\n case 2:\n useOldS3 = false;\n break;\n case 3:\n bvl_a = 8;\n snr_l_a = -1.75;\n snr_l_b = -0.0125;\n snr_s_a = -8.25;\n snr_s_b = -2.25;\n break;\n }\n gfc.ms_ener_ratio_old = .25;\n gfc.blocktype_old[0] = gfc.blocktype_old[1] = Encoder.NORM_TYPE;\n // the vbr header is long blocks\n\n for (i = 0; i < 4; ++i) {\n for (var j = 0; j < Encoder.CBANDS; ++j) {\n gfc.nb_1[i][j] = 1e20;\n gfc.nb_2[i][j] = 1e20;\n gfc.nb_s1[i][j] = gfc.nb_s2[i][j] = 1.0;\n }\n for (var sb = 0; sb < Encoder.SBMAX_l; sb++) {\n gfc.en[i].l[sb] = 1e20;\n gfc.thm[i].l[sb] = 1e20;\n }\n for (var j = 0; j < 3; ++j) {\n for (var sb = 0; sb < Encoder.SBMAX_s; sb++) {\n gfc.en[i].s[sb][j] = 1e20;\n gfc.thm[i].s[sb][j] = 1e20;\n }\n gfc.nsPsy.lastAttacks[i] = 0;\n }\n for (var j = 0; j < 9; j++)\n gfc.nsPsy.last_en_subshort[i][j] = 10.;\n }\n\n /* init. for loudness approx. -jd 2001 mar 27 */\n gfc.loudness_sq_save[0] = gfc.loudness_sq_save[1] = 0.0;\n\n /*************************************************************************\n * now compute the psychoacoustic model specific constants\n ************************************************************************/\n /* compute numlines, bo, bm, bval, bval_width, mld */\n\n gfc.npart_l = init_numline(gfc.numlines_l, gfc.bo_l, gfc.bm_l, bval,\n bval_width, gfc.mld_l, gfc.PSY.bo_l_weight, sfreq,\n Encoder.BLKSIZE, gfc.scalefac_band.l, Encoder.BLKSIZE\n / (2.0 * 576), Encoder.SBMAX_l);\n assert(gfc.npart_l < Encoder.CBANDS);\n /* compute the spreading function */\n for (i = 0; i < gfc.npart_l; i++) {\n var snr = snr_l_a;\n if (bval[i] >= bvl_a) {\n snr = snr_l_b * (bval[i] - bvl_a) / (bvl_b - bvl_a) + snr_l_a\n * (bvl_b - bval[i]) / (bvl_b - bvl_a);\n }\n norm[i] = Math.pow(10.0, snr / 10.0);\n if (gfc.numlines_l[i] > 0) {\n gfc.rnumlines_l[i] = 1.0 / gfc.numlines_l[i];\n } else {\n gfc.rnumlines_l[i] = 0;\n }\n }\n gfc.s3_ll = init_s3_values(gfc.s3ind, gfc.npart_l, bval, bval_width,\n norm, useOldS3);\n\n /* compute long block specific values, ATH and MINVAL */\n var j = 0;\n for (i = 0; i < gfc.npart_l; i++) {\n var x;\n\n /* ATH */\n x = Float.MAX_VALUE;\n for (var k = 0; k < gfc.numlines_l[i]; k++, j++) {\n var freq = sfreq * j / (1000.0 * Encoder.BLKSIZE);\n var level;\n /*\n * ATH below 100 Hz constant, not further climbing\n */\n level = this.ATHformula(freq * 1000, gfp) - 20;\n // scale to FFT units; returned value is in dB\n level = Math.pow(10., 0.1 * level);\n // convert from dB . energy\n level *= gfc.numlines_l[i];\n if (x > level)\n x = level;\n }\n gfc.ATH.cb_l[i] = x;\n\n /*\n * MINVAL. For low freq, the strength of the masking is limited by\n * minval this is an ISO MPEG1 thing, dont know if it is really\n * needed\n */\n /*\n * FIXME: it does work to reduce low-freq problems in S53-Wind-Sax\n * and lead-voice samples, but introduces some 3 kbps bit bloat too.\n * TODO: Further refinement of the shape of this hack.\n */\n x = -20 + bval[i] * 20 / 10;\n if (x > 6) {\n x = 100;\n }\n if (x < -15) {\n x = -15;\n }\n x -= 8.;\n gfc.minval_l[i] = (Math.pow(10.0, x / 10.) * gfc.numlines_l[i]);\n }\n\n /************************************************************************\n * do the same things for short blocks\n ************************************************************************/\n gfc.npart_s = init_numline(gfc.numlines_s, gfc.bo_s, gfc.bm_s, bval,\n bval_width, gfc.mld_s, gfc.PSY.bo_s_weight, sfreq,\n Encoder.BLKSIZE_s, gfc.scalefac_band.s, Encoder.BLKSIZE_s\n / (2.0 * 192), Encoder.SBMAX_s);\n assert(gfc.npart_s < Encoder.CBANDS);\n\n /* SNR formula. short block is normalized by SNR. is it still right ? */\n j = 0;\n for (i = 0; i < gfc.npart_s; i++) {\n var x;\n var snr = snr_s_a;\n if (bval[i] >= bvl_a) {\n snr = snr_s_b * (bval[i] - bvl_a) / (bvl_b - bvl_a) + snr_s_a\n * (bvl_b - bval[i]) / (bvl_b - bvl_a);\n }\n norm[i] = Math.pow(10.0, snr / 10.0);\n\n /* ATH */\n x = Float.MAX_VALUE;\n for (var k = 0; k < gfc.numlines_s[i]; k++, j++) {\n var freq = sfreq * j / (1000.0 * Encoder.BLKSIZE_s);\n var level;\n /* freq = Min(.1,freq); */\n /*\n * ATH below 100 Hz constant, not\n * further climbing\n */\n level = this.ATHformula(freq * 1000, gfp) - 20;\n // scale to FFT units; returned value is in dB\n level = Math.pow(10., 0.1 * level);\n // convert from dB . energy\n level *= gfc.numlines_s[i];\n if (x > level)\n x = level;\n }\n gfc.ATH.cb_s[i] = x;\n\n /*\n * MINVAL. For low freq, the strength of the masking is limited by\n * minval this is an ISO MPEG1 thing, dont know if it is really\n * needed\n */\n x = (-7.0 + bval[i] * 7.0 / 12.0);\n if (bval[i] > 12) {\n x *= 1 + Math.log(1 + x) * 3.1;\n }\n if (bval[i] < 12) {\n x *= 1 + Math.log(1 - x) * 2.3;\n }\n if (x < -15) {\n x = -15;\n }\n x -= 8;\n gfc.minval_s[i] = Math.pow(10.0, x / 10)\n * gfc.numlines_s[i];\n }\n\n gfc.s3_ss = init_s3_values(gfc.s3ind_s, gfc.npart_s, bval, bval_width,\n norm, useOldS3);\n\n init_mask_add_max_values();\n fft.init_fft(gfc);\n\n /* setup temporal masking */\n gfc.decay = Math.exp(-1.0 * LOG10\n / (temporalmask_sustain_sec * sfreq / 192.0));\n\n {\n var msfix;\n msfix = NS_MSFIX;\n if ((gfp.exp_nspsytune & 2) != 0)\n msfix = 1.0;\n if (Math.abs(gfp.msfix) > 0.0)\n msfix = gfp.msfix;\n gfp.msfix = msfix;\n\n /*\n * spread only from npart_l bands. Normally, we use the spreading\n * function to convolve from npart_l down to npart_l bands\n */\n for (var b = 0; b < gfc.npart_l; b++)\n if (gfc.s3ind[b][1] > gfc.npart_l - 1)\n gfc.s3ind[b][1] = gfc.npart_l - 1;\n }\n\n /*\n * prepare for ATH auto adjustment: we want to decrease the ATH by 12 dB\n * per second\n */\n var frame_duration = (576. * gfc.mode_gr / sfreq);\n gfc.ATH.decay = Math.pow(10., -12. / 10. * frame_duration);\n gfc.ATH.adjust = 0.01;\n /* minimum, for leading low loudness */\n gfc.ATH.adjustLimit = 1.0;\n /* on lead, allow adjust up to maximum */\n\n assert(gfc.bo_l[Encoder.SBMAX_l - 1] <= gfc.npart_l);\n assert(gfc.bo_s[Encoder.SBMAX_s - 1] <= gfc.npart_s);\n\n if (gfp.ATHtype != -1) {\n /* compute equal loudness weights (eql_w) */\n var freq;\n var freq_inc = gfp.out_samplerate\n / (Encoder.BLKSIZE);\n var eql_balance = 0.0;\n freq = 0.0;\n for (i = 0; i < Encoder.BLKSIZE / 2; ++i) {\n /* convert ATH dB to relative power (not dB) */\n /* to determine eql_w */\n freq += freq_inc;\n gfc.ATH.eql_w[i] = 1. / Math.pow(10, this.ATHformula(freq, gfp) / 10);\n eql_balance += gfc.ATH.eql_w[i];\n }\n eql_balance = 1.0 / eql_balance;\n for (i = Encoder.BLKSIZE / 2; --i >= 0;) { /* scale weights */\n gfc.ATH.eql_w[i] *= eql_balance;\n }\n }\n {\n for (var b = j = 0; b < gfc.npart_s; ++b) {\n for (i = 0; i < gfc.numlines_s[b]; ++i) {\n ++j;\n }\n }\n assert(j == 129);\n for (var b = j = 0; b < gfc.npart_l; ++b) {\n for (i = 0; i < gfc.numlines_l[b]; ++i) {\n ++j;\n }\n }\n assert(j == 513);\n }\n j = 0;\n for (i = 0; i < gfc.npart_l; i++) {\n var freq = sfreq * (j + gfc.numlines_l[i] / 2) / (1.0 * Encoder.BLKSIZE);\n gfc.mld_cb_l[i] = stereo_demask(freq);\n j += gfc.numlines_l[i];\n }\n for (; i < Encoder.CBANDS; ++i) {\n gfc.mld_cb_l[i] = 1;\n }\n j = 0;\n for (i = 0; i < gfc.npart_s; i++) {\n var freq = sfreq * (j + gfc.numlines_s[i] / 2) / (1.0 * Encoder.BLKSIZE_s);\n gfc.mld_cb_s[i] = stereo_demask(freq);\n j += gfc.numlines_s[i];\n }\n for (; i < Encoder.CBANDS; ++i) {\n gfc.mld_cb_s[i] = 1;\n }\n return 0;\n }\n\n /**\n * Those ATH formulas are returning their minimum value for input = -1\n */\n function ATHformula_GB(f, value) {\n /**\n *
\n * from Painter & Spanias\n * modified by Gabriel Bouvigne to better fit the reality\n * ath = 3.640 * pow(f,-0.8)\n * - 6.800 * exp(-0.6*pow(f-3.4,2.0))\n * + 6.000 * exp(-0.15*pow(f-8.7,2.0))\n * + 0.6* 0.001 * pow(f,4.0);\n *\n *\n * In the past LAME was using the Painter &Spanias formula.\n * But we had some recurrent problems with HF content.\n * We measured real ATH values, and found the older formula\n * to be inaccurate in the higher part. So we made this new\n * formula and this solved most of HF problematic test cases.\n * The tradeoff is that in VBR mode it increases a lot the\n * bitrate.\n *\n */\n\n /*\n * This curve can be adjusted according to the VBR scale: it adjusts\n * from something close to Painter & Spanias on V9 up to Bouvigne's\n * formula for V0. This way the VBR bitrate is more balanced according\n * to the -V value.\n */\n\n // the following Hack allows to ask for the lowest value\n if (f < -.3)\n f = 3410;\n\n // convert to khz\n f /= 1000;\n f = Math.max(0.1, f);\n var ath = 3.640 * Math.pow(f, -0.8) - 6.800\n * Math.exp(-0.6 * Math.pow(f - 3.4, 2.0)) + 6.000\n * Math.exp(-0.15 * Math.pow(f - 8.7, 2.0))\n + (0.6 + 0.04 * value) * 0.001 * Math.pow(f, 4.0);\n return ath;\n }\n\n this.ATHformula = function (f, gfp) {\n var ath;\n switch (gfp.ATHtype) {\n case 0:\n ath = ATHformula_GB(f, 9);\n break;\n case 1:\n // over sensitive, should probably be removed\n ath = ATHformula_GB(f, -1);\n break;\n case 2:\n ath = ATHformula_GB(f, 0);\n break;\n case 3:\n // modification of GB formula by Roel\n ath = ATHformula_GB(f, 1) + 6;\n break;\n case 4:\n ath = ATHformula_GB(f, gfp.ATHcurve);\n break;\n default:\n ath = ATHformula_GB(f, 0);\n break;\n }\n return ath;\n }\n\n}\n\nmodule.exports = PsyModel;\n","//package mp3;\n\n/* MPEG modes */\nfunction MPEGMode(ordinal) {\n var _ordinal = ordinal;\n this.ordinal = function () {\n return _ordinal;\n }\n}\n\nMPEGMode.STEREO = new MPEGMode(0);\nMPEGMode.JOINT_STEREO = new MPEGMode(1);\nMPEGMode.DUAL_CHANNEL = new MPEGMode(2);\nMPEGMode.MONO = new MPEGMode(3);\nMPEGMode.NOT_SET = new MPEGMode(4);\n\nmodule.exports = MPEGMode;\n","var MPEGMode = require('./MPEGMode.js');\n\nfunction LameGlobalFlags() {\n\n this.class_id = 0;\n\n /* input description */\n\n /**\n * number of samples. default=-1\n */\n this.num_samples = 0;\n /**\n * input number of channels. default=2\n */\n this.num_channels = 0;\n /**\n * input_samp_rate in Hz. default=44.1 kHz\n */\n this.in_samplerate = 0;\n /**\n * output_samp_rate. default: LAME picks best value at least not used for\n * MP3 decoding: Remember 44.1 kHz MP3s and AC97\n */\n this.out_samplerate = 0;\n /**\n * scale input by this amount before encoding at least not used for MP3\n * decoding\n */\n this.scale = 0.;\n /**\n * scale input of channel 0 (left) by this amount before encoding\n */\n this.scale_left = 0.;\n /**\n * scale input of channel 1 (right) by this amount before encoding\n */\n this.scale_right = 0.;\n\n /* general control params */\n /**\n * collect data for a MP3 frame analyzer?\n */\n this.analysis = false;\n /**\n * add Xing VBR tag?\n */\n this.bWriteVbrTag = false;\n\n /**\n * use lame/mpglib to convert mp3 to wav\n */\n this.decode_only = false;\n /**\n * quality setting 0=best, 9=worst default=5\n */\n this.quality = 0;\n /**\n * see enum default = LAME picks best value\n */\n this.mode = MPEGMode.STEREO;\n /**\n * force M/S mode. requires mode=1\n */\n this.force_ms = false;\n /**\n * use free format? default=0\n */\n this.free_format = false;\n /**\n * find the RG value? default=0\n */\n this.findReplayGain = false;\n /**\n * decode on the fly? default=0\n */\n this.decode_on_the_fly = false;\n /**\n * 1 (default) writes ID3 tags, 0 not\n */\n this.write_id3tag_automatic = false;\n\n /*\n * set either brate>0 or compression_ratio>0, LAME will compute the value of\n * the variable not set. Default is compression_ratio = 11.025\n */\n /**\n * bitrate\n */\n this.brate = 0;\n /**\n * sizeof(wav file)/sizeof(mp3 file)\n */\n this.compression_ratio = 0.;\n\n /* frame params */\n /**\n * mark as copyright. default=0\n */\n this.copyright = 0;\n /**\n * mark as original. default=1\n */\n this.original = 0;\n /**\n * the MP3 'private extension' bit. Meaningless\n */\n this.extension = 0;\n /**\n * Input PCM is emphased PCM (for instance from one of the rarely emphased\n * CDs), it is STRONGLY not recommended to use this, because psycho does not\n * take it into account, and last but not least many decoders don't care\n * about these bits\n */\n this.emphasis = 0;\n /**\n * use 2 bytes per frame for a CRC checksum. default=0\n */\n this.error_protection = 0;\n /**\n * enforce ISO spec as much as possible\n */\n this.strict_ISO = false;\n\n /**\n * use bit reservoir?\n */\n this.disable_reservoir = false;\n\n /* quantization/noise shaping */\n this.quant_comp = 0;\n this.quant_comp_short = 0;\n this.experimentalY = false;\n this.experimentalZ = 0;\n this.exp_nspsytune = 0;\n\n this.preset = 0;\n\n /* VBR control */\n this.VBR = null;\n /**\n * Range [0,...,1[\n */\n this.VBR_q_frac = 0.;\n /**\n * Range [0,...,9]\n */\n this.VBR_q = 0;\n this.VBR_mean_bitrate_kbps = 0;\n this.VBR_min_bitrate_kbps = 0;\n this.VBR_max_bitrate_kbps = 0;\n /**\n * strictly enforce VBR_min_bitrate normaly, it will be violated for analog\n * silence\n */\n this.VBR_hard_min = 0;\n\n /* resampling and filtering */\n\n /**\n * freq in Hz. 0=lame choses. -1=no filter\n */\n this.lowpassfreq = 0;\n /**\n * freq in Hz. 0=lame choses. -1=no filter\n */\n this.highpassfreq = 0;\n /**\n * freq width of filter, in Hz (default=15%)\n */\n this.lowpasswidth = 0;\n /**\n * freq width of filter, in Hz (default=15%)\n */\n this.highpasswidth = 0;\n\n /*\n * psycho acoustics and other arguments which you should not change unless\n * you know what you are doing\n */\n\n this.maskingadjust = 0.;\n this.maskingadjust_short = 0.;\n /**\n * only use ATH\n */\n this.ATHonly = false;\n /**\n * only use ATH for short blocks\n */\n this.ATHshort = false;\n /**\n * disable ATH\n */\n this.noATH = false;\n /**\n * select ATH formula\n */\n this.ATHtype = 0;\n /**\n * change ATH formula 4 shape\n */\n this.ATHcurve = 0.;\n /**\n * lower ATH by this many db\n */\n this.ATHlower = 0.;\n /**\n * select ATH auto-adjust scheme\n */\n this.athaa_type = 0;\n /**\n * select ATH auto-adjust loudness calc\n */\n this.athaa_loudapprox = 0;\n /**\n * dB, tune active region of auto-level\n */\n this.athaa_sensitivity = 0.;\n this.short_blocks = null;\n /**\n * use temporal masking effect\n */\n this.useTemporal = false;\n this.interChRatio = 0.;\n /**\n * Naoki's adjustment of Mid/Side maskings\n */\n this.msfix = 0.;\n\n /**\n * 0 off, 1 on\n */\n this.tune = false;\n /**\n * used to pass values for debugging and stuff\n */\n this.tune_value_a = 0.;\n\n /************************************************************************/\n /* internal variables, do not set... */\n /* provided because they may be of use to calling application */\n /************************************************************************/\n\n /**\n * 0=MPEG-2/2.5 1=MPEG-1\n */\n this.version = 0;\n this.encoder_delay = 0;\n /**\n * number of samples of padding appended to input\n */\n this.encoder_padding = 0;\n this.framesize = 0;\n /**\n * number of frames encoded\n */\n this.frameNum = 0;\n /**\n * is this struct owned by calling program or lame?\n */\n this.lame_allocated_gfp = 0;\n /**************************************************************************/\n /* more internal variables are stored in this structure: */\n /**************************************************************************/\n this.internal_flags = null;\n}\n\nmodule.exports = LameGlobalFlags;\n","var Encoder = require('./Encoder.js');\n\nvar L3Side = {};\n\n\n\t/**\n\t * max scalefactor band, max(SBMAX_l, SBMAX_s*3, (SBMAX_s-3)*3+8)\n\t */\nL3Side.SFBMAX = (Encoder.SBMAX_s * 3);\n\nmodule.exports = L3Side;\n","//package mp3;\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar L3Side = require('./L3Side.js');\n\nfunction GrInfo() {\n //float xr[] = new float[576];\n this.xr = new_float(576);\n //int l3_enc[] = new int[576];\n this.l3_enc = new_int(576);\n //int scalefac[] = new int[L3Side.SFBMAX];\n this.scalefac = new_int(L3Side.SFBMAX);\n this.xrpow_max = 0.;\n\n this.part2_3_length = 0;\n this.big_values = 0;\n this.count1 = 0;\n this.global_gain = 0;\n this.scalefac_compress = 0;\n this.block_type = 0;\n this.mixed_block_flag = 0;\n this.table_select = new_int(3);\n this.subblock_gain = new_int(3 + 1);\n this.region0_count = 0;\n this.region1_count = 0;\n this.preflag = 0;\n this.scalefac_scale = 0;\n this.count1table_select = 0;\n\n this.part2_length = 0;\n this.sfb_lmax = 0;\n this.sfb_smin = 0;\n this.psy_lmax = 0;\n this.sfbmax = 0;\n this.psymax = 0;\n this.sfbdivide = 0;\n this.width = new_int(L3Side.SFBMAX);\n this.window = new_int(L3Side.SFBMAX);\n this.count1bits = 0;\n /**\n * added for LSF\n */\n this.sfb_partition_table = null;\n this.slen = new_int(4);\n\n this.max_nonzero_coeff = 0;\n\n var self = this;\n function clone_int(array) {\n return new Int32Array(array);\n }\n function clone_float(array) {\n return new Float32Array(array);\n }\n this.assign = function (other) {\n self.xr = clone_float(other.xr); //.slice(0); //clone();\n self.l3_enc = clone_int(other.l3_enc); //.slice(0); //clone();\n self.scalefac = clone_int(other.scalefac);//.slice(0); //clone();\n self.xrpow_max = other.xrpow_max;\n\n self.part2_3_length = other.part2_3_length;\n self.big_values = other.big_values;\n self.count1 = other.count1;\n self.global_gain = other.global_gain;\n self.scalefac_compress = other.scalefac_compress;\n self.block_type = other.block_type;\n self.mixed_block_flag = other.mixed_block_flag;\n self.table_select = clone_int(other.table_select);//.slice(0); //clone();\n self.subblock_gain = clone_int(other.subblock_gain); //.slice(0); //.clone();\n self.region0_count = other.region0_count;\n self.region1_count = other.region1_count;\n self.preflag = other.preflag;\n self.scalefac_scale = other.scalefac_scale;\n self.count1table_select = other.count1table_select;\n\n self.part2_length = other.part2_length;\n self.sfb_lmax = other.sfb_lmax;\n self.sfb_smin = other.sfb_smin;\n self.psy_lmax = other.psy_lmax;\n self.sfbmax = other.sfbmax;\n self.psymax = other.psymax;\n self.sfbdivide = other.sfbdivide;\n self.width = clone_int(other.width); //.slice(0); //.clone();\n self.window = clone_int(other.window); //.slice(0); //.clone();\n self.count1bits = other.count1bits;\n\n self.sfb_partition_table = other.sfb_partition_table.slice(0); //.clone();\n self.slen = clone_int(other.slen); //.slice(0); //.clone();\n self.max_nonzero_coeff = other.max_nonzero_coeff;\n }\n}\n\nmodule.exports = GrInfo;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar GrInfo = require('./GrInfo.js');\n\nfunction IIISideInfo() {\n this.tt = [[null, null], [null, null]];\n this.main_data_begin = 0;\n this.private_bits = 0;\n this.resvDrain_pre = 0;\n this.resvDrain_post = 0;\n this.scfsi = [new_int(4), new_int(4)];\n\n for (var gr = 0; gr < 2; gr++) {\n for (var ch = 0; ch < 2; ch++) {\n this.tt[gr][ch] = new GrInfo();\n }\n }\n}\n\nmodule.exports = IIISideInfo;\n","//package mp3;\n\n/**\n * Layer III side information.\n *\n * @author Ken\n *\n */\n\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\n\nfunction ScaleFac(arrL, arrS, arr21, arr12) {\n\n this.l = new_int(1 + Encoder.SBMAX_l);\n this.s = new_int(1 + Encoder.SBMAX_s);\n this.psfb21 = new_int(1 + Encoder.PSFB21);\n this.psfb12 = new_int(1 + Encoder.PSFB12);\n var l = this.l;\n var s = this.s;\n\n if (arguments.length == 4) {\n //public ScaleFac(final int[] arrL, final int[] arrS, final int[] arr21,\n // final int[] arr12) {\n this.arrL = arguments[0];\n this.arrS = arguments[1];\n this.arr21 = arguments[2];\n this.arr12 = arguments[3];\n\n System.arraycopy(this.arrL, 0, l, 0, Math.min(this.arrL.length, this.l.length));\n System.arraycopy(this.arrS, 0, s, 0, Math.min(this.arrS.length, this.s.length));\n System.arraycopy(this.arr21, 0, this.psfb21, 0, Math.min(this.arr21.length, this.psfb21.length));\n System.arraycopy(this.arr12, 0, this.psfb12, 0, Math.min(this.arr12.length, this.psfb12.length));\n }\n}\n\nmodule.exports = ScaleFac;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\n\n//package mp3;\n\n/**\n * Variables used for --nspsytune\n *\n * @author Ken\n *\n */\nfunction NsPsy() {\n this.last_en_subshort = new_float_n([4, 9]);\n this.lastAttacks = new_int(4);\n this.pefirbuf = new_float(19);\n this.longfact = new_float(Encoder.SBMAX_l);\n this.shortfact = new_float(Encoder.SBMAX_s);\n\n /**\n * short block tuning\n */\n this.attackthre = 0.;\n this.attackthre_s = 0.;\n}\n\nmodule.exports = NsPsy;\n","//package mp3;\n\nfunction VBRSeekInfo() {\n /**\n * What we have seen so far.\n */\n this.sum = 0;\n /**\n * How many frames we have seen in this chunk.\n */\n this.seen = 0;\n /**\n * How many frames we want to collect into one chunk.\n */\n this.want = 0;\n /**\n * Actual position in our bag.\n */\n this.pos = 0;\n /**\n * Size of our bag.\n */\n this.size = 0;\n /**\n * Pointer to our bag.\n */\n this.bag = null;\n this.nVbrNumFrames = 0;\n this.nBytesWritten = 0;\n /* VBR tag data */\n this.TotalFrameSize = 0;\n}\n\nmodule.exports = VBRSeekInfo;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar IIISideInfo = require('./IIISideInfo.js');\nvar ScaleFac = require('./ScaleFac.js');\nvar NsPsy = require('./NsPsy.js');\nvar VBRSeekInfo = require('./VBRSeekInfo.js');\nvar III_psy_xmin = require('./III_psy_xmin.js');\nvar Encoder = require('./Encoder.js');\nvar L3Side = require('./L3Side.js');\n\n\nLameInternalFlags.MFSIZE = (3 * 1152 + Encoder.ENCDELAY - Encoder.MDCTDELAY);\nLameInternalFlags.MAX_HEADER_BUF = 256;\nLameInternalFlags.MAX_BITS_PER_CHANNEL = 4095;\nLameInternalFlags.MAX_BITS_PER_GRANULE = 7680;\nLameInternalFlags.BPC = 320;\n\nfunction LameInternalFlags() {\n var MAX_HEADER_LEN = 40;\n\n\n /********************************************************************\n * internal variables NOT set by calling program, and should not be *\n * modified by the calling program *\n ********************************************************************/\n\n /**\n * Some remarks to the Class_ID field: The Class ID is an Identifier for a\n * pointer to this struct. It is very unlikely that a pointer to\n * lame_global_flags has the same 32 bits in it's structure (large and other\n * special properties, for instance prime).\n *\n * To test that the structure is right and initialized, use: if ( gfc .\n * Class_ID == LAME_ID ) ... Other remark: If you set a flag to 0 for uninit\n * data and 1 for init data, the right test should be \"if (flag == 1)\" and\n * NOT \"if (flag)\". Unintended modification of this element will be\n * otherwise misinterpreted as an init.\n */\n this.Class_ID = 0;\n\n this.lame_encode_frame_init = 0;\n this.iteration_init_init = 0;\n this.fill_buffer_resample_init = 0;\n\n //public float mfbuf[][] = new float[2][MFSIZE];\n this.mfbuf = new_float_n([2, LameInternalFlags.MFSIZE]);\n\n /**\n * granules per frame\n */\n this.mode_gr = 0;\n /**\n * number of channels in the input data stream (PCM or decoded PCM)\n */\n this.channels_in = 0;\n /**\n * number of channels in the output data stream (not used for decoding)\n */\n this.channels_out = 0;\n /**\n * input_samp_rate/output_samp_rate\n */\n //public double resample_ratio;\n this.resample_ratio = 0.;\n\n this.mf_samples_to_encode = 0;\n this.mf_size = 0;\n /**\n * min bitrate index\n */\n this.VBR_min_bitrate = 0;\n /**\n * max bitrate index\n */\n this.VBR_max_bitrate = 0;\n this.bitrate_index = 0;\n this.samplerate_index = 0;\n this.mode_ext = 0;\n\n /* lowpass and highpass filter control */\n /**\n * normalized frequency bounds of passband\n */\n this.lowpass1 = 0.;\n this.lowpass2 = 0.;\n /**\n * normalized frequency bounds of passband\n */\n this.highpass1 = 0.;\n this.highpass2 = 0.;\n\n /**\n * 0 = none 1 = ISO AAC model 2 = allow scalefac_select=1\n */\n this.noise_shaping = 0;\n\n /**\n * 0 = ISO model: amplify all distorted bands
\n * mpeg1: buffer=511 bytes smallest frame: 96-38(sideinfo)=58\n * max number of frames in reservoir: 8\n * mpeg2: buffer=255 bytes. smallest frame: 24-23bytes=1\n * with VBR, if you are encoding all silence, it is possible to\n * have 8kbs/24khz frames with 1byte of data each, which means we need\n * to buffer up to 255 headers!\n *\n */\n /**\n * also, max_header_buf has to be a power of two\n */\n /**\n * max size of header is 38\n */\n\n function Header() {\n this.write_timing = 0;\n this.ptr = 0;\n //public byte buf[] = new byte[MAX_HEADER_LEN];\n this.buf = new_byte(MAX_HEADER_LEN);\n }\n\n this.header = new Array(LameInternalFlags.MAX_HEADER_BUF);\n\n this.h_ptr = 0;\n this.w_ptr = 0;\n this.ancillary_flag = 0;\n\n /* variables for Reservoir */\n /**\n * in bits\n */\n this.ResvSize = 0;\n /**\n * in bits\n */\n this.ResvMax = 0;\n\n //public ScaleFac scalefac_band = new ScaleFac();\n this.scalefac_band = new ScaleFac();\n\n /* daa from PsyModel */\n /* The static variables \"r\", \"phi_sav\", \"new\", \"old\" and \"oldest\" have */\n /* to be remembered for the unpredictability measure. For \"r\" and */\n /* \"phi_sav\", the first index from the left is the channel select and */\n /* the second index is the \"age\" of the data. */\n this.minval_l = new_float(Encoder.CBANDS);\n this.minval_s = new_float(Encoder.CBANDS);\n this.nb_1 = new_float_n([4, Encoder.CBANDS]);\n this.nb_2 = new_float_n([4, Encoder.CBANDS]);\n this.nb_s1 = new_float_n([4, Encoder.CBANDS]);\n this.nb_s2 = new_float_n([4, Encoder.CBANDS]);\n this.s3_ss = null;\n this.s3_ll = null;\n this.decay = 0.;\n\n //public III_psy_xmin[] thm = new III_psy_xmin[4];\n //public III_psy_xmin[] en = new III_psy_xmin[4];\n this.thm = new Array(4);\n this.en = new Array(4);\n\n /**\n * fft and energy calculation\n */\n this.tot_ener = new_float(4);\n\n /* loudness calculation (for adaptive threshold of hearing) */\n /**\n * loudness^2 approx. per granule and channel\n */\n this.loudness_sq = new_float_n([2, 2]);\n /**\n * account for granule delay of L3psycho_anal\n */\n this.loudness_sq_save = new_float(2);\n\n /**\n * Scale Factor Bands\n */\n this.mld_l = new_float(Encoder.SBMAX_l);\n this.mld_s = new_float(Encoder.SBMAX_s);\n this.bm_l = new_int(Encoder.SBMAX_l);\n this.bo_l = new_int(Encoder.SBMAX_l);\n this.bm_s = new_int(Encoder.SBMAX_s);\n this.bo_s = new_int(Encoder.SBMAX_s);\n this.npart_l = 0;\n this.npart_s = 0;\n\n this.s3ind = new_int_n([Encoder.CBANDS, 2]);\n this.s3ind_s = new_int_n([Encoder.CBANDS, 2]);\n\n this.numlines_s = new_int(Encoder.CBANDS);\n this.numlines_l = new_int(Encoder.CBANDS);\n this.rnumlines_l = new_float(Encoder.CBANDS);\n this.mld_cb_l = new_float(Encoder.CBANDS);\n this.mld_cb_s = new_float(Encoder.CBANDS);\n this.numlines_s_num1 = 0;\n this.numlines_l_num1 = 0;\n\n /* ratios */\n this.pe = new_float(4);\n this.ms_ratio_s_old = 0.;\n this.ms_ratio_l_old = 0.;\n this.ms_ener_ratio_old = 0.;\n\n /**\n * block type\n */\n this.blocktype_old = new_int(2);\n\n /**\n * variables used for --nspsytune\n */\n this.nsPsy = new NsPsy();\n\n /**\n * used for Xing VBR header\n */\n this.VBR_seek_table = new VBRSeekInfo();\n\n /**\n * all ATH related stuff\n */\n //public ATH ATH;\n this.ATH = null;\n\n this.PSY = null;\n\n this.nogap_total = 0;\n this.nogap_current = 0;\n\n /* ReplayGain */\n this.decode_on_the_fly = true;\n this.findReplayGain = true;\n this.findPeakSample = true;\n this.PeakSample = 0.;\n this.RadioGain = 0;\n this.AudiophileGain = 0;\n //public ReplayGain rgdata;\n this.rgdata = null;\n\n /**\n * gain change required for preventing clipping\n */\n this.noclipGainChange = 0;\n /**\n * user-specified scale factor required for preventing clipping\n */\n this.noclipScale = 0.;\n\n /* simple statistics */\n this.bitrate_stereoMode_Hist = new_int_n([16, 4 + 1]);\n /**\n * norm/start/short/stop/mixed(short)/sum\n */\n this.bitrate_blockType_Hist = new_int_n([16, 4 + 1 + 1]);\n\n //public PlottingData pinfo;\n //public MPGLib.mpstr_tag hip;\n this.pinfo = null;\n this.hip = null;\n\n this.in_buffer_nsamples = 0;\n //public float[] in_buffer_0;\n //public float[] in_buffer_1;\n this.in_buffer_0 = null;\n this.in_buffer_1 = null;\n\n //public IIterationLoop iteration_loop;\n this.iteration_loop = null;\n\n for (var i = 0; i < this.en.length; i++) {\n this.en[i] = new III_psy_xmin();\n }\n for (var i = 0; i < this.thm.length; i++) {\n this.thm[i] = new III_psy_xmin();\n }\n for (var i = 0; i < this.header.length; i++) {\n this.header[i] = new Header();\n }\n\n}\n\nmodule.exports = LameInternalFlags;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\n\n/**\n * ATH related stuff, if something new ATH related has to be added, please plug\n * it here into the ATH.\n */\nfunction ATH() {\n /**\n * Method for the auto adjustment.\n */\n this.useAdjust = 0;\n /**\n * factor for tuning the (sample power) point below which adaptive threshold\n * of hearing adjustment occurs\n */\n this.aaSensitivityP = 0.;\n /**\n * Lowering based on peak volume, 1 = no lowering.\n */\n this.adjust = 0.;\n /**\n * Limit for dynamic ATH adjust.\n */\n this.adjustLimit = 0.;\n /**\n * Determined to lower x dB each second.\n */\n this.decay = 0.;\n /**\n * Lowest ATH value.\n */\n this.floor = 0.;\n /**\n * ATH for sfbs in long blocks.\n */\n this.l = new_float(Encoder.SBMAX_l);\n /**\n * ATH for sfbs in short blocks.\n */\n this.s = new_float(Encoder.SBMAX_s);\n /**\n * ATH for partitioned sfb21 in long blocks.\n */\n this.psfb21 = new_float(Encoder.PSFB21);\n /**\n * ATH for partitioned sfb12 in short blocks.\n */\n this.psfb12 = new_float(Encoder.PSFB12);\n /**\n * ATH for long block convolution bands.\n */\n this.cb_l = new_float(Encoder.CBANDS);\n /**\n * ATH for short block convolution bands.\n */\n this.cb_s = new_float(Encoder.CBANDS);\n /**\n * Equal loudness weights (based on ATH).\n */\n this.eql_w = new_float(Encoder.BLKSIZE / 2);\n}\n\nmodule.exports = ATH;\n","/*\n * ReplayGainAnalysis - analyzes input samples and give the recommended dB change\n * Copyright (C) 2001 David Robinson and Glen Sawyer\n * Improvements and optimizations added by Frank Klemm, and by Marcel Muller \n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n *\n * concept and filter values by David Robinson (David@Robinson.org)\n * -- blame him if you think the idea is flawed\n * original coding by Glen Sawyer (mp3gain@hotmail.com)\n * -- blame him if you think this runs too slowly, or the coding is otherwise flawed\n *\n * lots of code improvements by Frank Klemm ( http://www.uni-jena.de/~pfk/mpp/ )\n * -- credit him for all the _good_ programming ;)\n *\n *\n * For an explanation of the concepts and the basic algorithms involved, go to:\n * http://www.replaygain.org/\n */\n\n/*\n * Here's the deal. Call\n *\n * InitGainAnalysis ( long samplefreq );\n *\n * to initialize everything. Call\n *\n * AnalyzeSamples ( var Float_t* left_samples,\n * var Float_t* right_samples,\n * size_t num_samples,\n * int num_channels );\n *\n * as many times as you want, with as many or as few samples as you want.\n * If mono, pass the sample buffer in through left_samples, leave\n * right_samples NULL, and make sure num_channels = 1.\n *\n * GetTitleGain()\n *\n * will return the recommended dB level change for all samples analyzed\n * SINCE THE LAST TIME you called GetTitleGain() OR InitGainAnalysis().\n *\n * GetAlbumGain()\n *\n * will return the recommended dB level change for all samples analyzed\n * since InitGainAnalysis() was called and finalized with GetTitleGain().\n *\n * Pseudo-code to process an album:\n *\n * Float_t l_samples [4096];\n * Float_t r_samples [4096];\n * size_t num_samples;\n * unsigned int num_songs;\n * unsigned int i;\n *\n * InitGainAnalysis ( 44100 );\n * for ( i = 1; i <= num_songs; i++ ) {\n * while ( ( num_samples = getSongSamples ( song[i], left_samples, right_samples ) ) > 0 )\n * AnalyzeSamples ( left_samples, right_samples, num_samples, 2 );\n * fprintf (\"Recommended dB change for song %2d: %+6.2 dB\\n\", i, GetTitleGain() );\n * }\n * fprintf (\"Recommended dB change for whole album: %+6.2 dB\\n\", GetAlbumGain() );\n */\n\n/*\n * So here's the main source of potential code confusion:\n *\n * The filters applied to the incoming samples are IIR filters,\n * meaning they rely on up to
\n * for (i = 0; i < 16*16; i++) [\n * largetbl[i] = ((ht[16].hlen[i]) << 16) + ht[24].hlen[i];\n * ]\n *
\n *\n */\nTables.largetbl = [\n 0x010004, 0x050005, 0x070007, 0x090008, 0x0a0009, 0x0a000a, 0x0b000a, 0x0b000b,\n 0x0c000b, 0x0c000c, 0x0c000c, 0x0d000c, 0x0d000c, 0x0d000c, 0x0e000d, 0x0a000a,\n 0x040005, 0x060006, 0x080007, 0x090008, 0x0a0009, 0x0b000a, 0x0b000a, 0x0b000b,\n 0x0c000b, 0x0c000b, 0x0c000c, 0x0d000c, 0x0e000c, 0x0d000c, 0x0e000c, 0x0a000a,\n 0x070007, 0x080007, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000b,\n 0x0d000b, 0x0c000b, 0x0d000b, 0x0d000c, 0x0d000c, 0x0e000c, 0x0e000d, 0x0b0009,\n 0x090008, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0c000b,\n 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0c0009,\n 0x0a0009, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000a, 0x0d000b,\n 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000d, 0x0b0009,\n 0x0a000a, 0x0a0009, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0e000b,\n 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0c0009,\n 0x0b000a, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0d000b, 0x0d000b,\n 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000d, 0x0c0009,\n 0x0b000b, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b,\n 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x11000d, 0x11000d, 0x0c000a,\n 0x0b000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b,\n 0x0f000b, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000d, 0x10000d, 0x0c000a,\n 0x0c000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b, 0x0f000c,\n 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0f000d, 0x10000d, 0x0f000d, 0x0d000a,\n 0x0c000c, 0x0d000b, 0x0c000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c,\n 0x0f000c, 0x10000c, 0x10000c, 0x10000d, 0x11000d, 0x11000d, 0x10000d, 0x0c000a,\n 0x0d000c, 0x0d000c, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x10000c,\n 0x10000c, 0x10000c, 0x10000c, 0x10000d, 0x10000d, 0x0f000d, 0x10000d, 0x0d000a,\n 0x0d000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c,\n 0x0f000c, 0x11000c, 0x10000d, 0x10000d, 0x10000d, 0x10000d, 0x12000d, 0x0d000a,\n 0x0f000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000c,\n 0x10000d, 0x12000d, 0x11000d, 0x11000d, 0x11000d, 0x13000d, 0x11000d, 0x0d000a,\n 0x0e000d, 0x0f000c, 0x0d000c, 0x0e000c, 0x10000c, 0x10000c, 0x0f000c, 0x10000d,\n 0x10000d, 0x11000d, 0x12000d, 0x11000d, 0x13000d, 0x11000d, 0x10000d, 0x0d000a,\n 0x0a0009, 0x0a0009, 0x0a0009, 0x0b0009, 0x0b0009, 0x0c0009, 0x0c0009, 0x0c0009,\n 0x0d0009, 0x0d0009, 0x0d0009, 0x0d000a, 0x0d000a, 0x0d000a, 0x0d000a, 0x0a0006\n];\n/**\n * \n * for (i = 0; i < 3*3; i++) [\n * table23[i] = ((ht[2].hlen[i]) << 16) + ht[3].hlen[i];\n * ]\n *
\n *\n */\nTables.table23 = [\n 0x010002, 0x040003, 0x070007,\n 0x040004, 0x050004, 0x070007,\n 0x060006, 0x070007, 0x080008\n];\n\n/**\n * \n * for (i = 0; i < 4*4; i++) [\n * table56[i] = ((ht[5].hlen[i]) << 16) + ht[6].hlen[i];\n * ]\n *
\n *\n */\nTables.table56 = [\n 0x010003, 0x040004, 0x070006, 0x080008, 0x040004, 0x050004, 0x080006, 0x090007,\n 0x070005, 0x080006, 0x090007, 0x0a0008, 0x080007, 0x080007, 0x090008, 0x0a0009\n];\n\nTables.bitrate_table = [\n [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, -1], /* MPEG 2 */\n [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1], /* MPEG 1 */\n [0, 8, 16, 24, 32, 40, 48, 56, 64, -1, -1, -1, -1, -1, -1, -1], /* MPEG 2.5 */\n];\n\n/**\n * MPEG 2, MPEG 1, MPEG 2.5.\n */\nTables.samplerate_table = [\n [22050, 24000, 16000, -1],\n [44100, 48000, 32000, -1],\n [11025, 12000, 8000, -1],\n];\n\n/**\n * This is the scfsi_band table from 2.4.2.7 of the IS.\n */\nTables.scfsi_band = [0, 6, 11, 16, 21];\n\nmodule.exports = Tables;\n","/*\n * quantize_pvt source file\n *\n * Copyright (c) 1999-2002 Takehiro Tominaga\n * Copyright (c) 2000-2002 Robert Hegemann\n * Copyright (c) 2001 Naoki Shibata\n * Copyright (c) 2002-2005 Gabriel Bouvigne\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Library General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the\n * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n * Boston, MA 02111-1307, USA.\n */\n\n/* $Id: QuantizePVT.java,v 1.24 2011/05/24 20:48:06 kenchis Exp $ */\nvar ScaleFac = require('./ScaleFac.js');\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\nvar MeanBits = require('./MeanBits.js');\nvar LameInternalFlags = require('./LameInternalFlags.js');\n\nQuantizePVT.Q_MAX = (256 + 1);\nQuantizePVT.Q_MAX2 = 116;\nQuantizePVT.LARGE_BITS = 100000;\nQuantizePVT.IXMAX_VAL = 8206;\n\nfunction QuantizePVT() {\n\n var tak = null;\n var rv = null;\n var psy = null;\n\n this.setModules = function (_tk, _rv, _psy) {\n tak = _tk;\n rv = _rv;\n psy = _psy;\n };\n\n function POW20(x) {\n assert(0 <= (x + QuantizePVT.Q_MAX2) && x < QuantizePVT.Q_MAX);\n return pow20[x + QuantizePVT.Q_MAX2];\n }\n\n this.IPOW20 = function (x) {\n assert(0 <= x && x < QuantizePVT.Q_MAX);\n return ipow20[x];\n }\n\n /**\n * smallest such that 1.0+DBL_EPSILON != 1.0\n */\n var DBL_EPSILON = 2.2204460492503131e-016;\n\n /**\n * ix always <= 8191+15. see count_bits()\n */\n var IXMAX_VAL = QuantizePVT.IXMAX_VAL;\n\n var PRECALC_SIZE = (IXMAX_VAL + 2);\n\n var Q_MAX = QuantizePVT.Q_MAX;\n\n\n /**\n * \n * minimum possible number of\n * -cod_info.global_gain + ((scalefac[] + (cod_info.preflag ? pretab[sfb] : 0))\n * << (cod_info.scalefac_scale + 1)) + cod_info.subblock_gain[cod_info.window[sfb]] * 8;\n *\n * for long block, 0+((15+3)<<2) = 18*4 = 72\n * for short block, 0+(15<<2)+7*8 = 15*4+56 = 116\n *
\n */\n var Q_MAX2 = QuantizePVT.Q_MAX2;\n\n var LARGE_BITS = QuantizePVT.LARGE_BITS;\n\n\n /**\n * Assuming dynamic range=96dB, this value should be 92\n */\n var NSATHSCALE = 100;\n\n /**\n * The following table is used to implement the scalefactor partitioning for\n * MPEG2 as described in section 2.4.3.2 of the IS. The indexing corresponds\n * to the way the tables are presented in the IS:\n *\n * [table_number][row_in_table][column of nr_of_sfb]\n */\n this.nr_of_sfb_block = [\n [[6, 5, 5, 5], [9, 9, 9, 9], [6, 9, 9, 9]],\n [[6, 5, 7, 3], [9, 9, 12, 6], [6, 9, 12, 6]],\n [[11, 10, 0, 0], [18, 18, 0, 0], [15, 18, 0, 0]],\n [[7, 7, 7, 0], [12, 12, 12, 0], [6, 15, 12, 0]],\n [[6, 6, 6, 3], [12, 9, 9, 6], [6, 12, 9, 6]],\n [[8, 8, 5, 0], [15, 12, 9, 0], [6, 18, 9, 0]]];\n\n /**\n * Table B.6: layer3 preemphasis\n */\n var pretab = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,\n 2, 2, 3, 3, 3, 2, 0];\n this.pretab = pretab;\n\n /**\n * Here are MPEG1 Table B.8 and MPEG2 Table B.1 -- Layer III scalefactor\n * bands. \n * compute the ATH for each scalefactor band cd range: 0..96db\n *\n * Input: 3.3kHz signal 32767 amplitude (3.3kHz is where ATH is smallest =\n * -5db) longblocks: sfb=12 en0/bw=-11db max_en0 = 1.3db shortblocks: sfb=5\n * -9db 0db\n *\n * Input: 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 (repeated) longblocks: amp=1\n * sfb=12 en0/bw=-103 db max_en0 = -92db amp=32767 sfb=12 -12 db -1.4db\n *\n * Input: 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 (repeated) shortblocks: amp=1\n * sfb=5 en0/bw= -99 -86 amp=32767 sfb=5 -9 db 4db\n *\n *\n * MAX energy of largest wave at 3.3kHz = 1db AVE energy of largest wave at\n * 3.3kHz = -11db Let's take AVE: -11db = maximum signal in sfb=12. Dynamic\n * range of CD: 96db. Therefor energy of smallest audible wave in sfb=12 =\n * -11 - 96 = -107db = ATH at 3.3kHz.\n *\n * ATH formula for this wave: -5db. To adjust to LAME scaling, we need ATH =\n * ATH_formula - 103 (db) ATH = ATH * 2.5e-10 (ener)\n *\n */\n function ATHmdct(gfp, f) {\n var ath = psy.ATHformula(f, gfp);\n\n ath -= NSATHSCALE;\n\n /* modify the MDCT scaling for the ATH and convert to energy */\n ath = Math.pow(10.0, ath / 10.0 + gfp.ATHlower);\n return ath;\n }\n\n function compute_ath(gfp) {\n var ATH_l = gfp.internal_flags.ATH.l;\n var ATH_psfb21 = gfp.internal_flags.ATH.psfb21;\n var ATH_s = gfp.internal_flags.ATH.s;\n var ATH_psfb12 = gfp.internal_flags.ATH.psfb12;\n var gfc = gfp.internal_flags;\n var samp_freq = gfp.out_samplerate;\n\n for (var sfb = 0; sfb < Encoder.SBMAX_l; sfb++) {\n var start = gfc.scalefac_band.l[sfb];\n var end = gfc.scalefac_band.l[sfb + 1];\n ATH_l[sfb] = Float.MAX_VALUE;\n for (var i = start; i < end; i++) {\n var freq = i * samp_freq / (2 * 576);\n var ATH_f = ATHmdct(gfp, freq);\n /* freq in kHz */\n ATH_l[sfb] = Math.min(ATH_l[sfb], ATH_f);\n }\n }\n\n for (var sfb = 0; sfb < Encoder.PSFB21; sfb++) {\n var start = gfc.scalefac_band.psfb21[sfb];\n var end = gfc.scalefac_band.psfb21[sfb + 1];\n ATH_psfb21[sfb] = Float.MAX_VALUE;\n for (var i = start; i < end; i++) {\n var freq = i * samp_freq / (2 * 576);\n var ATH_f = ATHmdct(gfp, freq);\n /* freq in kHz */\n ATH_psfb21[sfb] = Math.min(ATH_psfb21[sfb], ATH_f);\n }\n }\n\n for (var sfb = 0; sfb < Encoder.SBMAX_s; sfb++) {\n var start = gfc.scalefac_band.s[sfb];\n var end = gfc.scalefac_band.s[sfb + 1];\n ATH_s[sfb] = Float.MAX_VALUE;\n for (var i = start; i < end; i++) {\n var freq = i * samp_freq / (2 * 192);\n var ATH_f = ATHmdct(gfp, freq);\n /* freq in kHz */\n ATH_s[sfb] = Math.min(ATH_s[sfb], ATH_f);\n }\n ATH_s[sfb] *= (gfc.scalefac_band.s[sfb + 1] - gfc.scalefac_band.s[sfb]);\n }\n\n for (var sfb = 0; sfb < Encoder.PSFB12; sfb++) {\n var start = gfc.scalefac_band.psfb12[sfb];\n var end = gfc.scalefac_band.psfb12[sfb + 1];\n ATH_psfb12[sfb] = Float.MAX_VALUE;\n for (var i = start; i < end; i++) {\n var freq = i * samp_freq / (2 * 192);\n var ATH_f = ATHmdct(gfp, freq);\n /* freq in kHz */\n ATH_psfb12[sfb] = Math.min(ATH_psfb12[sfb], ATH_f);\n }\n /* not sure about the following */\n ATH_psfb12[sfb] *= (gfc.scalefac_band.s[13] - gfc.scalefac_band.s[12]);\n }\n\n /*\n * no-ATH mode: reduce ATH to -200 dB\n */\n if (gfp.noATH) {\n for (var sfb = 0; sfb < Encoder.SBMAX_l; sfb++) {\n ATH_l[sfb] = 1E-20;\n }\n for (var sfb = 0; sfb < Encoder.PSFB21; sfb++) {\n ATH_psfb21[sfb] = 1E-20;\n }\n for (var sfb = 0; sfb < Encoder.SBMAX_s; sfb++) {\n ATH_s[sfb] = 1E-20;\n }\n for (var sfb = 0; sfb < Encoder.PSFB12; sfb++) {\n ATH_psfb12[sfb] = 1E-20;\n }\n }\n\n /*\n * work in progress, don't rely on it too much\n */\n gfc.ATH.floor = 10. * Math.log10(ATHmdct(gfp, -1.));\n }\n\n /**\n * initialization for iteration_loop\n */\n this.iteration_init = function (gfp) {\n var gfc = gfp.internal_flags;\n var l3_side = gfc.l3_side;\n var i;\n\n if (gfc.iteration_init_init == 0) {\n gfc.iteration_init_init = 1;\n\n l3_side.main_data_begin = 0;\n compute_ath(gfp);\n\n pow43[0] = 0.0;\n for (i = 1; i < PRECALC_SIZE; i++)\n pow43[i] = Math.pow(i, 4.0 / 3.0);\n\n for (i = 0; i < PRECALC_SIZE - 1; i++)\n adj43[i] = ((i + 1) - Math.pow(\n 0.5 * (pow43[i] + pow43[i + 1]), 0.75));\n adj43[i] = 0.5;\n\n for (i = 0; i < Q_MAX; i++)\n ipow20[i] = Math.pow(2.0, (i - 210) * -0.1875);\n for (i = 0; i <= Q_MAX + Q_MAX2; i++)\n pow20[i] = Math.pow(2.0, (i - 210 - Q_MAX2) * 0.25);\n\n tak.huffman_init(gfc);\n\n {\n var bass, alto, treble, sfb21;\n\n i = (gfp.exp_nspsytune >> 2) & 63;\n if (i >= 32)\n i -= 64;\n bass = Math.pow(10, i / 4.0 / 10.0);\n\n i = (gfp.exp_nspsytune >> 8) & 63;\n if (i >= 32)\n i -= 64;\n alto = Math.pow(10, i / 4.0 / 10.0);\n\n i = (gfp.exp_nspsytune >> 14) & 63;\n if (i >= 32)\n i -= 64;\n treble = Math.pow(10, i / 4.0 / 10.0);\n\n /*\n * to be compatible with Naoki's original code, the next 6 bits\n * define only the amount of changing treble for sfb21\n */\n i = (gfp.exp_nspsytune >> 20) & 63;\n if (i >= 32)\n i -= 64;\n sfb21 = treble * Math.pow(10, i / 4.0 / 10.0);\n for (i = 0; i < Encoder.SBMAX_l; i++) {\n var f;\n if (i <= 6)\n f = bass;\n else if (i <= 13)\n f = alto;\n else if (i <= 20)\n f = treble;\n else\n f = sfb21;\n\n gfc.nsPsy.longfact[i] = f;\n }\n for (i = 0; i < Encoder.SBMAX_s; i++) {\n var f;\n if (i <= 5)\n f = bass;\n else if (i <= 10)\n f = alto;\n else if (i <= 11)\n f = treble;\n else\n f = sfb21;\n\n gfc.nsPsy.shortfact[i] = f;\n }\n }\n }\n }\n\n /**\n * allocate bits among 2 channels based on PE
\n * -oo dB => -1.00\n * - 6 dB => -0.97\n * - 3 dB => -0.80\n * - 2 dB => -0.64\n * - 1 dB => -0.38\n * 0 dB => 0.00\n * + 1 dB => +0.49\n * + 2 dB => +1.06\n * + 3 dB => +1.68\n * + 6 dB => +3.69\n * +10 dB => +6.45\n *\n */\n this.calc_noise = function (cod_info, l3_xmin, distort, res, prev_noise) {\n var distortPos = 0;\n var l3_xminPos = 0;\n var sfb, l, over = 0;\n var over_noise_db = 0;\n /* 0 dB relative to masking */\n var tot_noise_db = 0;\n /* -200 dB relative to masking */\n var max_noise = -20.0;\n var j = 0;\n var scalefac = cod_info.scalefac;\n var scalefacPos = 0;\n\n res.over_SSD = 0;\n\n for (sfb = 0; sfb < cod_info.psymax; sfb++) {\n var s = cod_info.global_gain\n - (((scalefac[scalefacPos++]) + (cod_info.preflag != 0 ? pretab[sfb]\n : 0)) << (cod_info.scalefac_scale + 1))\n - cod_info.subblock_gain[cod_info.window[sfb]] * 8;\n var noise = 0.0;\n\n if (prev_noise != null && (prev_noise.step[sfb] == s)) {\n\n /* use previously computed values */\n noise = prev_noise.noise[sfb];\n j += cod_info.width[sfb];\n distort[distortPos++] = noise / l3_xmin[l3_xminPos++];\n\n noise = prev_noise.noise_log[sfb];\n\n } else {\n var step = POW20(s);\n l = cod_info.width[sfb] >> 1;\n\n if ((j + cod_info.width[sfb]) > cod_info.max_nonzero_coeff) {\n var usefullsize;\n usefullsize = cod_info.max_nonzero_coeff - j + 1;\n\n if (usefullsize > 0)\n l = usefullsize >> 1;\n else\n l = 0;\n }\n\n var sl = new StartLine(j);\n noise = this.calc_noise_core(cod_info, sl, l, step);\n j = sl.s;\n\n if (prev_noise != null) {\n /* save noise values */\n prev_noise.step[sfb] = s;\n prev_noise.noise[sfb] = noise;\n }\n\n noise = distort[distortPos++] = noise / l3_xmin[l3_xminPos++];\n\n /* multiplying here is adding in dB, but can overflow */\n noise = Util.FAST_LOG10(Math.max(noise, 1E-20));\n\n if (prev_noise != null) {\n /* save noise values */\n prev_noise.noise_log[sfb] = noise;\n }\n }\n\n if (prev_noise != null) {\n /* save noise values */\n prev_noise.global_gain = cod_info.global_gain;\n }\n\n tot_noise_db += noise;\n\n if (noise > 0.0) {\n var tmp;\n\n tmp = Math.max(0 | (noise * 10 + .5), 1);\n res.over_SSD += tmp * tmp;\n\n over++;\n /* multiplying here is adding in dB -but can overflow */\n /* over_noise *= noise; */\n over_noise_db += noise;\n }\n max_noise = Math.max(max_noise, noise);\n\n }\n\n res.over_count = over;\n res.tot_noise = tot_noise_db;\n res.over_noise = over_noise_db;\n res.max_noise = max_noise;\n\n return over;\n }\n\n /**\n * updates plotting data\n *\n * Mark Taylor 2000-??-??\n *\n * Robert Hegemann: moved noise/distortion calc into it\n */\n this.set_pinfo = function (gfp, cod_info, ratio, gr, ch) {\n var gfc = gfp.internal_flags;\n var sfb, sfb2;\n var l;\n var en0, en1;\n var ifqstep = (cod_info.scalefac_scale == 0) ? .5 : 1.0;\n var scalefac = cod_info.scalefac;\n\n var l3_xmin = new_float(L3Side.SFBMAX);\n var xfsf = new_float(L3Side.SFBMAX);\n var noise = new CalcNoiseResult();\n\n calc_xmin(gfp, ratio, cod_info, l3_xmin);\n calc_noise(cod_info, l3_xmin, xfsf, noise, null);\n\n var j = 0;\n sfb2 = cod_info.sfb_lmax;\n if (cod_info.block_type != Encoder.SHORT_TYPE\n && 0 == cod_info.mixed_block_flag)\n sfb2 = 22;\n for (sfb = 0; sfb < sfb2; sfb++) {\n var start = gfc.scalefac_band.l[sfb];\n var end = gfc.scalefac_band.l[sfb + 1];\n var bw = end - start;\n for (en0 = 0.0; j < end; j++)\n en0 += cod_info.xr[j] * cod_info.xr[j];\n en0 /= bw;\n /* convert to MDCT units */\n /* scaling so it shows up on FFT plot */\n en1 = 1e15;\n gfc.pinfo.en[gr][ch][sfb] = en1 * en0;\n gfc.pinfo.xfsf[gr][ch][sfb] = en1 * l3_xmin[sfb] * xfsf[sfb] / bw;\n\n if (ratio.en.l[sfb] > 0 && !gfp.ATHonly)\n en0 = en0 / ratio.en.l[sfb];\n else\n en0 = 0.0;\n\n gfc.pinfo.thr[gr][ch][sfb] = en1\n * Math.max(en0 * ratio.thm.l[sfb], gfc.ATH.l[sfb]);\n\n /* there is no scalefactor bands >= SBPSY_l */\n gfc.pinfo.LAMEsfb[gr][ch][sfb] = 0;\n if (cod_info.preflag != 0 && sfb >= 11)\n gfc.pinfo.LAMEsfb[gr][ch][sfb] = -ifqstep * pretab[sfb];\n\n if (sfb < Encoder.SBPSY_l) {\n /* scfsi should be decoded by caller side */\n assert(scalefac[sfb] >= 0);\n gfc.pinfo.LAMEsfb[gr][ch][sfb] -= ifqstep * scalefac[sfb];\n }\n }\n /* for sfb */\n\n if (cod_info.block_type == Encoder.SHORT_TYPE) {\n sfb2 = sfb;\n for (sfb = cod_info.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) {\n var start = gfc.scalefac_band.s[sfb];\n var end = gfc.scalefac_band.s[sfb + 1];\n var bw = end - start;\n for (var i = 0; i < 3; i++) {\n for (en0 = 0.0, l = start; l < end; l++) {\n en0 += cod_info.xr[j] * cod_info.xr[j];\n j++;\n }\n en0 = Math.max(en0 / bw, 1e-20);\n /* convert to MDCT units */\n /* scaling so it shows up on FFT plot */\n en1 = 1e15;\n\n gfc.pinfo.en_s[gr][ch][3 * sfb + i] = en1 * en0;\n gfc.pinfo.xfsf_s[gr][ch][3 * sfb + i] = en1 * l3_xmin[sfb2]\n * xfsf[sfb2] / bw;\n if (ratio.en.s[sfb][i] > 0)\n en0 = en0 / ratio.en.s[sfb][i];\n else\n en0 = 0.0;\n if (gfp.ATHonly || gfp.ATHshort)\n en0 = 0;\n\n gfc.pinfo.thr_s[gr][ch][3 * sfb + i] = en1\n * Math.max(en0 * ratio.thm.s[sfb][i],\n gfc.ATH.s[sfb]);\n\n /* there is no scalefactor bands >= SBPSY_s */\n gfc.pinfo.LAMEsfb_s[gr][ch][3 * sfb + i] = -2.0\n * cod_info.subblock_gain[i];\n if (sfb < Encoder.SBPSY_s) {\n gfc.pinfo.LAMEsfb_s[gr][ch][3 * sfb + i] -= ifqstep\n * scalefac[sfb2];\n }\n sfb2++;\n }\n }\n }\n /* block type short */\n gfc.pinfo.LAMEqss[gr][ch] = cod_info.global_gain;\n gfc.pinfo.LAMEmainbits[gr][ch] = cod_info.part2_3_length\n + cod_info.part2_length;\n gfc.pinfo.LAMEsfbits[gr][ch] = cod_info.part2_length;\n\n gfc.pinfo.over[gr][ch] = noise.over_count;\n gfc.pinfo.max_noise[gr][ch] = noise.max_noise * 10.0;\n gfc.pinfo.over_noise[gr][ch] = noise.over_noise * 10.0;\n gfc.pinfo.tot_noise[gr][ch] = noise.tot_noise * 10.0;\n gfc.pinfo.over_SSD[gr][ch] = noise.over_SSD;\n }\n\n /**\n * updates plotting data for a whole frame\n *\n * Robert Hegemann 2000-10-21\n */\n function set_frame_pinfo(gfp, ratio) {\n var gfc = gfp.internal_flags;\n\n gfc.masking_lower = 1.0;\n\n /*\n * for every granule and channel patch l3_enc and set info\n */\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n for (var ch = 0; ch < gfc.channels_out; ch++) {\n var cod_info = gfc.l3_side.tt[gr][ch];\n var scalefac_sav = new_int(L3Side.SFBMAX);\n System.arraycopy(cod_info.scalefac, 0, scalefac_sav, 0,\n scalefac_sav.length);\n\n /*\n * reconstruct the scalefactors in case SCFSI was used\n */\n if (gr == 1) {\n var sfb;\n for (sfb = 0; sfb < cod_info.sfb_lmax; sfb++) {\n if (cod_info.scalefac[sfb] < 0) /* scfsi */\n cod_info.scalefac[sfb] = gfc.l3_side.tt[0][ch].scalefac[sfb];\n }\n }\n\n set_pinfo(gfp, cod_info, ratio[gr][ch], gr, ch);\n System.arraycopy(scalefac_sav, 0, cod_info.scalefac, 0,\n scalefac_sav.length);\n }\n /* for ch */\n }\n /* for gr */\n }\n\n}\n\nmodule.exports = QuantizePVT;\n","/*\n *\tMP3 huffman table selecting and bit counting\n *\n *\tCopyright (c) 1999-2005 Takehiro TOMINAGA\n *\tCopyright (c) 2002-2005 Gabriel Bouvigne\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\t See the GNU\n * Library General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the\n * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n * Boston, MA 02111-1307, USA.\n */\n\n/* $Id: Takehiro.java,v 1.26 2011/05/24 20:48:06 kenchis Exp $ */\n\n//package mp3;\n\n//import java.util.Arrays;\nvar common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nvar Encoder = require('./Encoder.js');\nvar Tables = require('./Tables.js');\nvar GrInfo = require('./GrInfo.js');\nvar QuantizePVT = require('./QuantizePVT.js');\n\n\nfunction Takehiro() {\n\n var qupvt = null;\n this.qupvt = null;\n\n this.setModules = function (_qupvt) {\n this.qupvt = _qupvt;\n qupvt = _qupvt;\n }\n\n function Bits(b) {\n this.bits = 0 | b;\n }\n\n var subdv_table = [[0, 0], /* 0 bands */\n [0, 0], /* 1 bands */\n [0, 0], /* 2 bands */\n [0, 0], /* 3 bands */\n [0, 0], /* 4 bands */\n [0, 1], /* 5 bands */\n [1, 1], /* 6 bands */\n [1, 1], /* 7 bands */\n [1, 2], /* 8 bands */\n [2, 2], /* 9 bands */\n [2, 3], /* 10 bands */\n [2, 3], /* 11 bands */\n [3, 4], /* 12 bands */\n [3, 4], /* 13 bands */\n [3, 4], /* 14 bands */\n [4, 5], /* 15 bands */\n [4, 5], /* 16 bands */\n [4, 6], /* 17 bands */\n [5, 6], /* 18 bands */\n [5, 6], /* 19 bands */\n [5, 7], /* 20 bands */\n [6, 7], /* 21 bands */\n [6, 7], /* 22 bands */\n ];\n\n /**\n * nonlinear quantization of xr More accurate formula than the ISO formula.\n * Takes into account the fact that we are quantizing xr . ix, but we want\n * ix^4/3 to be as close as possible to x^4/3. (taking the nearest int would\n * mean ix is as close as possible to xr, which is different.)\n *\n * From Segher Boessenkool
\n * copy data out of the internal MP3 bit buffer into a user supplied\n * unsigned char buffer.\n *\n * mp3data=0 indicates data in buffer is an id3tags and VBR tags\n * mp3data=1 data is real mp3 frame data.\n *\n */\n this.copy_buffer = function (gfc, buffer, bufferPos, size, mp3data) {\n var minimum = bufByteIdx + 1;\n if (minimum <= 0)\n return 0;\n if (size != 0 && minimum > size) {\n /* buffer is too small */\n return -1;\n }\n System.arraycopy(buf, 0, buffer, bufferPos, minimum);\n bufByteIdx = -1;\n bufBitIdx = 0;\n\n if (mp3data != 0) {\n var crc = new_int(1);\n crc[0] = gfc.nMusicCRC;\n vbr.updateMusicCRC(crc, buffer, bufferPos, minimum);\n gfc.nMusicCRC = crc[0];\n\n /**\n * sum number of bytes belonging to the mp3 stream this info will be\n * written into the Xing/LAME header for seeking\n */\n if (minimum > 0) {\n gfc.VBR_seek_table.nBytesWritten += minimum;\n }\n\n if (gfc.decode_on_the_fly) { /* decode the frame */\n var pcm_buf = new_float_n([2, 1152]);\n var mp3_in = minimum;\n var samples_out = -1;\n var i;\n\n /* re-synthesis to pcm. Repeat until we get a samples_out=0 */\n while (samples_out != 0) {\n\n samples_out = mpg.hip_decode1_unclipped(gfc.hip, buffer,\n bufferPos, mp3_in, pcm_buf[0], pcm_buf[1]);\n /*\n * samples_out = 0: need more data to decode samples_out =\n * -1: error. Lets assume 0 pcm output samples_out = number\n * of samples output\n */\n\n /*\n * set the lenght of the mp3 input buffer to zero, so that\n * in the next iteration of the loop we will be querying\n * mpglib about buffered data\n */\n mp3_in = 0;\n\n if (samples_out == -1) {\n /*\n * error decoding. Not fatal, but might screw up the\n * ReplayGain tag. What should we do? Ignore for now\n */\n samples_out = 0;\n }\n if (samples_out > 0) {\n /* process the PCM data */\n\n /*\n * this should not be possible, and indicates we have\n * overflown the pcm_buf buffer\n */\n assert(samples_out <= 1152);\n\n if (gfc.findPeakSample) {\n for (i = 0; i < samples_out; i++) {\n if (pcm_buf[0][i] > gfc.PeakSample)\n gfc.PeakSample = pcm_buf[0][i];\n else if (-pcm_buf[0][i] > gfc.PeakSample)\n gfc.PeakSample = -pcm_buf[0][i];\n }\n if (gfc.channels_out > 1)\n for (i = 0; i < samples_out; i++) {\n if (pcm_buf[1][i] > gfc.PeakSample)\n gfc.PeakSample = pcm_buf[1][i];\n else if (-pcm_buf[1][i] > gfc.PeakSample)\n gfc.PeakSample = -pcm_buf[1][i];\n }\n }\n\n if (gfc.findReplayGain)\n if (ga.AnalyzeSamples(gfc.rgdata, pcm_buf[0], 0,\n pcm_buf[1], 0, samples_out,\n gfc.channels_out) == GainAnalysis.GAIN_ANALYSIS_ERROR)\n return -6;\n\n }\n /* if (samples_out>0) */\n }\n /* while (samples_out!=0) */\n }\n /* if (gfc.decode_on_the_fly) */\n\n }\n /* if (mp3data) */\n return minimum;\n };\n\n this.init_bit_stream_w = function (gfc) {\n buf = new_byte(Lame.LAME_MAXMP3BUFFER);\n\n gfc.h_ptr = gfc.w_ptr = 0;\n gfc.header[gfc.h_ptr].write_timing = 0;\n bufByteIdx = -1;\n bufBitIdx = 0;\n totbit = 0;\n };\n\n // From machine.h\n\n\n}\n\nmodule.exports = BitStream;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar new_short_n = common.new_short_n;\nvar assert = common.assert;\n\nvar PsyModel = require('./PsyModel.js');\nvar LameGlobalFlags = require('./LameGlobalFlags.js');\nvar LameInternalFlags = require('./LameInternalFlags.js');\nvar ATH = require('./ATH.js');\nvar ReplayGain = require('./ReplayGain.js');\nvar CBRNewIterationLoop = require('./CBRNewIterationLoop.js');\nvar BitStream = require('./BitStream.js');\nvar Tables = require('./Tables.js');\nvar Encoder = require('./Encoder.js');\n\nfunction Lame() {\n var self = this;\n var LAME_MAXALBUMART = (128 * 1024);\n\n Lame.V9 = 410;\n Lame.V8 = 420;\n Lame.V7 = 430;\n Lame.V6 = 440;\n Lame.V5 = 450;\n Lame.V4 = 460;\n Lame.V3 = 470;\n Lame.V2 = 480;\n Lame.V1 = 490;\n Lame.V0 = 500;\n\n /* still there for compatibility */\n\n Lame.R3MIX = 1000;\n Lame.STANDARD = 1001;\n Lame.EXTREME = 1002;\n Lame.INSANE = 1003;\n Lame.STANDARD_FAST = 1004;\n Lame.EXTREME_FAST = 1005;\n Lame.MEDIUM = 1006;\n Lame.MEDIUM_FAST = 1007;\n\n /**\n * maximum size of mp3buffer needed if you encode at most 1152 samples for\n * each call to lame_encode_buffer. see lame_encode_buffer() below\n * (LAME_MAXMP3BUFFER is now obsolete)\n */\n var LAME_MAXMP3BUFFER = (16384 + LAME_MAXALBUMART);\n Lame.LAME_MAXMP3BUFFER = LAME_MAXMP3BUFFER;\n\n var ga;\n var bs;\n var p;\n var qupvt;\n var qu;\n var psy = new PsyModel();\n var vbr;\n var ver;\n var id3;\n var mpglib;\n this.enc = new Encoder();\n\n this.setModules = function (_ga, _bs, _p, _qupvt, _qu, _vbr, _ver, _id3, _mpglib) {\n ga = _ga;\n bs = _bs;\n p = _p;\n qupvt = _qupvt;\n qu = _qu;\n vbr = _vbr;\n ver = _ver;\n id3 = _id3;\n mpglib = _mpglib;\n this.enc.setModules(bs, psy, qupvt, vbr);\n }\n\n /**\n * PSY Model related stuff\n */\n function PSY() {\n /**\n * The dbQ stuff.\n */\n this.mask_adjust = 0.;\n /**\n * The dbQ stuff.\n */\n this.mask_adjust_short = 0.;\n /* at transition from one scalefactor band to next */\n /**\n * Band weight long scalefactor bands.\n */\n this.bo_l_weight = new_float(Encoder.SBMAX_l);\n /**\n * Band weight short scalefactor bands.\n */\n this.bo_s_weight = new_float(Encoder.SBMAX_s);\n }\n\n function LowPassHighPass() {\n this.lowerlimit = 0.;\n }\n\n function BandPass(bitrate, lPass) {\n this.lowpass = lPass;\n }\n\n var LAME_ID = 0xFFF88E3B;\n\n function lame_init_old(gfp) {\n var gfc;\n\n gfp.class_id = LAME_ID;\n\n gfc = gfp.internal_flags = new LameInternalFlags();\n\n /* Global flags. set defaults here for non-zero values */\n /* see lame.h for description */\n /*\n * set integer values to -1 to mean that LAME will compute the best\n * value, UNLESS the calling program as set it (and the value is no\n * longer -1)\n */\n\n gfp.mode = MPEGMode.NOT_SET;\n gfp.original = 1;\n gfp.in_samplerate = 44100;\n gfp.num_channels = 2;\n gfp.num_samples = -1;\n\n gfp.bWriteVbrTag = true;\n gfp.quality = -1;\n gfp.short_blocks = null;\n gfc.subblock_gain = -1;\n\n gfp.lowpassfreq = 0;\n gfp.highpassfreq = 0;\n gfp.lowpasswidth = -1;\n gfp.highpasswidth = -1;\n\n gfp.VBR = VbrMode.vbr_off;\n gfp.VBR_q = 4;\n gfp.ATHcurve = -1;\n gfp.VBR_mean_bitrate_kbps = 128;\n gfp.VBR_min_bitrate_kbps = 0;\n gfp.VBR_max_bitrate_kbps = 0;\n gfp.VBR_hard_min = 0;\n gfc.VBR_min_bitrate = 1;\n /* not 0 ????? */\n gfc.VBR_max_bitrate = 13;\n /* not 14 ????? */\n\n gfp.quant_comp = -1;\n gfp.quant_comp_short = -1;\n\n gfp.msfix = -1;\n\n gfc.resample_ratio = 1;\n\n gfc.OldValue[0] = 180;\n gfc.OldValue[1] = 180;\n gfc.CurrentStep[0] = 4;\n gfc.CurrentStep[1] = 4;\n gfc.masking_lower = 1;\n gfc.nsPsy.attackthre = -1;\n gfc.nsPsy.attackthre_s = -1;\n\n gfp.scale = -1;\n\n gfp.athaa_type = -1;\n gfp.ATHtype = -1;\n /* default = -1 = set in lame_init_params */\n gfp.athaa_loudapprox = -1;\n /* 1 = flat loudness approx. (total energy) */\n /* 2 = equal loudness curve */\n gfp.athaa_sensitivity = 0.0;\n /* no offset */\n gfp.useTemporal = null;\n gfp.interChRatio = -1;\n\n /*\n * The reason for int mf_samples_to_encode = ENCDELAY + POSTDELAY;\n * ENCDELAY = internal encoder delay. And then we have to add\n * POSTDELAY=288 because of the 50% MDCT overlap. A 576 MDCT granule\n * decodes to 1152 samples. To synthesize the 576 samples centered under\n * this granule we need the previous granule for the first 288 samples\n * (no problem), and the next granule for the next 288 samples (not\n * possible if this is last granule). So we need to pad with 288 samples\n * to make sure we can encode the 576 samples we are interested in.\n */\n gfc.mf_samples_to_encode = Encoder.ENCDELAY + Encoder.POSTDELAY;\n gfp.encoder_padding = 0;\n gfc.mf_size = Encoder.ENCDELAY - Encoder.MDCTDELAY;\n /*\n * we pad input with this many 0's\n */\n\n gfp.findReplayGain = false;\n gfp.decode_on_the_fly = false;\n\n gfc.decode_on_the_fly = false;\n gfc.findReplayGain = false;\n gfc.findPeakSample = false;\n\n gfc.RadioGain = 0;\n gfc.AudiophileGain = 0;\n gfc.noclipGainChange = 0;\n gfc.noclipScale = -1.0;\n\n gfp.preset = 0;\n\n gfp.write_id3tag_automatic = true;\n return 0;\n }\n\n this.lame_init = function () {\n var gfp = new LameGlobalFlags();\n\n var ret = lame_init_old(gfp);\n if (ret != 0) {\n return null;\n }\n\n gfp.lame_allocated_gfp = 1;\n return gfp;\n }\n\n function filter_coef(x) {\n if (x > 1.0)\n return 0.0;\n if (x <= 0.0)\n return 1.0;\n\n return Math.cos(Math.PI / 2 * x);\n }\n\n this.nearestBitrateFullIndex = function (bitrate) {\n /* borrowed from DM abr presets */\n\n var full_bitrate_table = [8, 16, 24, 32, 40, 48, 56, 64, 80,\n 96, 112, 128, 160, 192, 224, 256, 320];\n\n var lower_range = 0, lower_range_kbps = 0, upper_range = 0, upper_range_kbps = 0;\n\n /* We assume specified bitrate will be 320kbps */\n upper_range_kbps = full_bitrate_table[16];\n upper_range = 16;\n lower_range_kbps = full_bitrate_table[16];\n lower_range = 16;\n\n /*\n * Determine which significant bitrates the value specified falls\n * between, if loop ends without breaking then we were correct above\n * that the value was 320\n */\n for (var b = 0; b < 16; b++) {\n if ((Math.max(bitrate, full_bitrate_table[b + 1])) != bitrate) {\n upper_range_kbps = full_bitrate_table[b + 1];\n upper_range = b + 1;\n lower_range_kbps = full_bitrate_table[b];\n lower_range = (b);\n break;\n /* We found upper range */\n }\n }\n\n /* Determine which range the value specified is closer to */\n if ((upper_range_kbps - bitrate) > (bitrate - lower_range_kbps)) {\n return lower_range;\n }\n return upper_range;\n }\n\n function optimum_samplefreq(lowpassfreq, input_samplefreq) {\n /*\n * Rules:\n *\n * - if possible, sfb21 should NOT be used\n */\n var suggested_samplefreq = 44100;\n\n if (input_samplefreq >= 48000)\n suggested_samplefreq = 48000;\n else if (input_samplefreq >= 44100)\n suggested_samplefreq = 44100;\n else if (input_samplefreq >= 32000)\n suggested_samplefreq = 32000;\n else if (input_samplefreq >= 24000)\n suggested_samplefreq = 24000;\n else if (input_samplefreq >= 22050)\n suggested_samplefreq = 22050;\n else if (input_samplefreq >= 16000)\n suggested_samplefreq = 16000;\n else if (input_samplefreq >= 12000)\n suggested_samplefreq = 12000;\n else if (input_samplefreq >= 11025)\n suggested_samplefreq = 11025;\n else if (input_samplefreq >= 8000)\n suggested_samplefreq = 8000;\n\n if (lowpassfreq == -1)\n return suggested_samplefreq;\n\n if (lowpassfreq <= 15960)\n suggested_samplefreq = 44100;\n if (lowpassfreq <= 15250)\n suggested_samplefreq = 32000;\n if (lowpassfreq <= 11220)\n suggested_samplefreq = 24000;\n if (lowpassfreq <= 9970)\n suggested_samplefreq = 22050;\n if (lowpassfreq <= 7230)\n suggested_samplefreq = 16000;\n if (lowpassfreq <= 5420)\n suggested_samplefreq = 12000;\n if (lowpassfreq <= 4510)\n suggested_samplefreq = 11025;\n if (lowpassfreq <= 3970)\n suggested_samplefreq = 8000;\n\n if (input_samplefreq < suggested_samplefreq) {\n /*\n * choose a valid MPEG sample frequency above the input sample\n * frequency to avoid SFB21/12 bitrate bloat rh 061115\n */\n if (input_samplefreq > 44100) {\n return 48000;\n }\n if (input_samplefreq > 32000) {\n return 44100;\n }\n if (input_samplefreq > 24000) {\n return 32000;\n }\n if (input_samplefreq > 22050) {\n return 24000;\n }\n if (input_samplefreq > 16000) {\n return 22050;\n }\n if (input_samplefreq > 12000) {\n return 16000;\n }\n if (input_samplefreq > 11025) {\n return 12000;\n }\n if (input_samplefreq > 8000) {\n return 11025;\n }\n return 8000;\n }\n return suggested_samplefreq;\n }\n\n /**\n * convert samp freq in Hz to index\n */\n function SmpFrqIndex(sample_freq, gpf) {\n switch (sample_freq) {\n case 44100:\n gpf.version = 1;\n return 0;\n case 48000:\n gpf.version = 1;\n return 1;\n case 32000:\n gpf.version = 1;\n return 2;\n case 22050:\n gpf.version = 0;\n return 0;\n case 24000:\n gpf.version = 0;\n return 1;\n case 16000:\n gpf.version = 0;\n return 2;\n case 11025:\n gpf.version = 0;\n return 0;\n case 12000:\n gpf.version = 0;\n return 1;\n case 8000:\n gpf.version = 0;\n return 2;\n default:\n gpf.version = 0;\n return -1;\n }\n }\n\n /**\n * @param bRate\n * legal rates from 8 to 320\n */\n function FindNearestBitrate(bRate, version, samplerate) {\n /* MPEG-1 or MPEG-2 LSF */\n if (samplerate < 16000)\n version = 2;\n\n var bitrate = Tables.bitrate_table[version][1];\n\n for (var i = 2; i <= 14; i++) {\n if (Tables.bitrate_table[version][i] > 0) {\n if (Math.abs(Tables.bitrate_table[version][i] - bRate) < Math\n .abs(bitrate - bRate))\n bitrate = Tables.bitrate_table[version][i];\n }\n }\n return bitrate;\n }\n\n /**\n * @param bRate\n * legal rates from 32 to 448 kbps\n * @param version\n * MPEG-1 or MPEG-2/2.5 LSF\n */\n function BitrateIndex(bRate, version, samplerate) {\n /* convert bitrate in kbps to index */\n if (samplerate < 16000)\n version = 2;\n for (var i = 0; i <= 14; i++) {\n if (Tables.bitrate_table[version][i] > 0) {\n if (Tables.bitrate_table[version][i] == bRate) {\n return i;\n }\n }\n }\n return -1;\n }\n\n function optimum_bandwidth(lh, bitrate) {\n /**\n *
\n * Input:\n * bitrate total bitrate in kbps\n *\n * Output:\n * lowerlimit: best lowpass frequency limit for input filter in Hz\n * upperlimit: best highpass frequency limit for input filter in Hz\n *\n */\n var freq_map = [new BandPass(8, 2000),\n new BandPass(16, 3700), new BandPass(24, 3900),\n new BandPass(32, 5500), new BandPass(40, 7000),\n new BandPass(48, 7500), new BandPass(56, 10000),\n new BandPass(64, 11000), new BandPass(80, 13500),\n new BandPass(96, 15100), new BandPass(112, 15600),\n new BandPass(128, 17000), new BandPass(160, 17500),\n new BandPass(192, 18600), new BandPass(224, 19400),\n new BandPass(256, 19700), new BandPass(320, 20500)];\n\n var table_index = self.nearestBitrateFullIndex(bitrate);\n lh.lowerlimit = freq_map[table_index].lowpass;\n }\n\n function lame_init_params_ppflt(gfp) {\n var gfc = gfp.internal_flags;\n /***************************************************************/\n /* compute info needed for polyphase filter (filter type==0, default) */\n /***************************************************************/\n\n var lowpass_band = 32;\n var highpass_band = -1;\n\n if (gfc.lowpass1 > 0) {\n var minband = 999;\n for (var band = 0; band <= 31; band++) {\n var freq = (band / 31.0);\n /* this band and above will be zeroed: */\n if (freq >= gfc.lowpass2) {\n lowpass_band = Math.min(lowpass_band, band);\n }\n if (gfc.lowpass1 < freq && freq < gfc.lowpass2) {\n minband = Math.min(minband, band);\n }\n }\n\n /*\n * compute the *actual* transition band implemented by the polyphase\n * filter\n */\n if (minband == 999) {\n gfc.lowpass1 = (lowpass_band - .75) / 31.0;\n } else {\n gfc.lowpass1 = (minband - .75) / 31.0;\n }\n gfc.lowpass2 = lowpass_band / 31.0;\n }\n\n /*\n * make sure highpass filter is within 90% of what the effective\n * highpass frequency will be\n */\n if (gfc.highpass2 > 0) {\n if (gfc.highpass2 < .9 * (.75 / 31.0)) {\n gfc.highpass1 = 0;\n gfc.highpass2 = 0;\n System.err.println(\"Warning: highpass filter disabled. \"\n + \"highpass frequency too small\\n\");\n }\n }\n\n if (gfc.highpass2 > 0) {\n var maxband = -1;\n for (var band = 0; band <= 31; band++) {\n var freq = band / 31.0;\n /* this band and below will be zereod */\n if (freq <= gfc.highpass1) {\n highpass_band = Math.max(highpass_band, band);\n }\n if (gfc.highpass1 < freq && freq < gfc.highpass2) {\n maxband = Math.max(maxband, band);\n }\n }\n /*\n * compute the *actual* transition band implemented by the polyphase\n * filter\n */\n gfc.highpass1 = highpass_band / 31.0;\n if (maxband == -1) {\n gfc.highpass2 = (highpass_band + .75) / 31.0;\n } else {\n gfc.highpass2 = (maxband + .75) / 31.0;\n }\n }\n\n for (var band = 0; band < 32; band++) {\n var fc1, fc2;\n var freq = band / 31.0;\n if (gfc.highpass2 > gfc.highpass1) {\n fc1 = filter_coef((gfc.highpass2 - freq)\n / (gfc.highpass2 - gfc.highpass1 + 1e-20));\n } else {\n fc1 = 1.0;\n }\n if (gfc.lowpass2 > gfc.lowpass1) {\n fc2 = filter_coef((freq - gfc.lowpass1)\n / (gfc.lowpass2 - gfc.lowpass1 + 1e-20));\n } else {\n fc2 = 1.0;\n }\n gfc.amp_filter[band] = (fc1 * fc2);\n }\n }\n\n function lame_init_qval(gfp) {\n var gfc = gfp.internal_flags;\n\n switch (gfp.quality) {\n default:\n case 9: /* no psymodel, no noise shaping */\n gfc.psymodel = 0;\n gfc.noise_shaping = 0;\n gfc.noise_shaping_amp = 0;\n gfc.noise_shaping_stop = 0;\n gfc.use_best_huffman = 0;\n gfc.full_outer_loop = 0;\n break;\n\n case 8:\n gfp.quality = 7;\n //$FALL-THROUGH$\n case 7:\n /*\n * use psymodel (for short block and m/s switching), but no noise\n * shapping\n */\n gfc.psymodel = 1;\n gfc.noise_shaping = 0;\n gfc.noise_shaping_amp = 0;\n gfc.noise_shaping_stop = 0;\n gfc.use_best_huffman = 0;\n gfc.full_outer_loop = 0;\n break;\n\n case 6:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n gfc.noise_shaping_amp = 0;\n gfc.noise_shaping_stop = 0;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 0;\n gfc.full_outer_loop = 0;\n break;\n\n case 5:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n gfc.noise_shaping_amp = 0;\n gfc.noise_shaping_stop = 0;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 0;\n gfc.full_outer_loop = 0;\n break;\n\n case 4:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n gfc.noise_shaping_amp = 0;\n gfc.noise_shaping_stop = 0;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 1;\n gfc.full_outer_loop = 0;\n break;\n\n case 3:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n gfc.noise_shaping_amp = 1;\n gfc.noise_shaping_stop = 1;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 1;\n gfc.full_outer_loop = 0;\n break;\n\n case 2:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n if (gfc.substep_shaping == 0)\n gfc.substep_shaping = 2;\n gfc.noise_shaping_amp = 1;\n gfc.noise_shaping_stop = 1;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 1;\n /* inner loop */\n gfc.full_outer_loop = 0;\n break;\n\n case 1:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n if (gfc.substep_shaping == 0)\n gfc.substep_shaping = 2;\n gfc.noise_shaping_amp = 2;\n gfc.noise_shaping_stop = 1;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 1;\n gfc.full_outer_loop = 0;\n break;\n\n case 0:\n gfc.psymodel = 1;\n if (gfc.noise_shaping == 0)\n gfc.noise_shaping = 1;\n if (gfc.substep_shaping == 0)\n gfc.substep_shaping = 2;\n gfc.noise_shaping_amp = 2;\n gfc.noise_shaping_stop = 1;\n if (gfc.subblock_gain == -1)\n gfc.subblock_gain = 1;\n gfc.use_best_huffman = 1;\n /*\n * type 2 disabled because of it slowness, in favor of full outer\n * loop search\n */\n gfc.full_outer_loop = 0;\n /*\n * full outer loop search disabled because of audible distortions it\n * may generate rh 060629\n */\n break;\n }\n\n }\n\n function lame_init_bitstream(gfp) {\n var gfc = gfp.internal_flags;\n gfp.frameNum = 0;\n\n if (gfp.write_id3tag_automatic) {\n id3.id3tag_write_v2(gfp);\n }\n /* initialize histogram data optionally used by frontend */\n\n gfc.bitrate_stereoMode_Hist = new_int_n([16, 4 + 1]);\n gfc.bitrate_blockType_Hist = new_int_n([16, 4 + 1 + 1]);\n\n gfc.PeakSample = 0.0;\n\n /* Write initial VBR Header to bitstream and init VBR data */\n if (gfp.bWriteVbrTag)\n vbr.InitVbrTag(gfp);\n }\n\n /********************************************************************\n * initialize internal params based on data in gf (globalflags struct filled\n * in by calling program)\n *\n * OUTLINE:\n *\n * We first have some complex code to determine bitrate, output samplerate\n * and mode. It is complicated by the fact that we allow the user to set\n * some or all of these parameters, and need to determine best possible\n * values for the rest of them:\n *\n * 1. set some CPU related flags 2. check if we are mono.mono, stereo.mono\n * or stereo.stereo 3. compute bitrate and output samplerate: user may have\n * set compression ratio user may have set a bitrate user may have set a\n * output samplerate 4. set some options which depend on output samplerate\n * 5. compute the actual compression ratio 6. set mode based on compression\n * ratio\n *\n * The remaining code is much simpler - it just sets options based on the\n * mode & compression ratio:\n *\n * set allow_diff_short based on mode select lowpass filter based on\n * compression ratio & mode set the bitrate index, and min/max bitrates for\n * VBR modes disable VBR tag if it is not appropriate initialize the\n * bitstream initialize scalefac_band data set sideinfo_len (based on\n * channels, CRC, out_samplerate) write an id3v2 tag into the bitstream\n * write VBR tag into the bitstream set mpeg1/2 flag estimate the number of\n * frames (based on a lot of data)\n *\n * now we set more flags: nspsytune: see code VBR modes see code CBR/ABR see\n * code\n *\n * Finally, we set the algorithm flags based on the gfp.quality value\n * lame_init_qval(gfp);\n *\n ********************************************************************/\n this.lame_init_params = function (gfp) {\n var gfc = gfp.internal_flags;\n\n gfc.Class_ID = 0;\n if (gfc.ATH == null)\n gfc.ATH = new ATH();\n if (gfc.PSY == null)\n gfc.PSY = new PSY();\n if (gfc.rgdata == null)\n gfc.rgdata = new ReplayGain();\n\n gfc.channels_in = gfp.num_channels;\n if (gfc.channels_in == 1)\n gfp.mode = MPEGMode.MONO;\n gfc.channels_out = (gfp.mode == MPEGMode.MONO) ? 1 : 2;\n gfc.mode_ext = Encoder.MPG_MD_MS_LR;\n if (gfp.mode == MPEGMode.MONO)\n gfp.force_ms = false;\n /*\n * don't allow forced mid/side stereo for mono output\n */\n\n if (gfp.VBR == VbrMode.vbr_off && gfp.VBR_mean_bitrate_kbps != 128\n && gfp.brate == 0)\n gfp.brate = gfp.VBR_mean_bitrate_kbps;\n\n if (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_mtrh\n || gfp.VBR == VbrMode.vbr_mt) {\n /* these modes can handle free format condition */\n } else {\n gfp.free_format = false;\n /* mode can't be mixed with free format */\n }\n\n if (gfp.VBR == VbrMode.vbr_off && gfp.brate == 0) {\n /* no bitrate or compression ratio specified, use 11.025 */\n if (BitStream.EQ(gfp.compression_ratio, 0))\n gfp.compression_ratio = 11.025;\n /*\n * rate to compress a CD down to exactly 128000 bps\n */\n }\n\n /* find bitrate if user specify a compression ratio */\n if (gfp.VBR == VbrMode.vbr_off && gfp.compression_ratio > 0) {\n\n if (gfp.out_samplerate == 0)\n gfp.out_samplerate = map2MP3Frequency((int)(0.97 * gfp.in_samplerate));\n /*\n * round up with a margin of 3 %\n */\n\n /*\n * choose a bitrate for the output samplerate which achieves\n * specified compression ratio\n */\n gfp.brate = 0 | (gfp.out_samplerate * 16 * gfc.channels_out / (1.e3 * gfp.compression_ratio));\n\n /* we need the version for the bitrate table look up */\n gfc.samplerate_index = SmpFrqIndex(gfp.out_samplerate, gfp);\n\n if (!gfp.free_format) /*\n * for non Free Format find the nearest allowed\n * bitrate\n */\n gfp.brate = FindNearestBitrate(gfp.brate, gfp.version,\n gfp.out_samplerate);\n }\n\n if (gfp.out_samplerate != 0) {\n if (gfp.out_samplerate < 16000) {\n gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps,\n 8);\n gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps,\n 64);\n } else if (gfp.out_samplerate < 32000) {\n gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps,\n 8);\n gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps,\n 160);\n } else {\n gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps,\n 32);\n gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps,\n 320);\n }\n }\n\n /****************************************************************/\n /* if a filter has not been enabled, see if we should add one: */\n /****************************************************************/\n if (gfp.lowpassfreq == 0) {\n var lowpass = 16000.;\n\n switch (gfp.VBR) {\n case VbrMode.vbr_off:\n {\n var lh = new LowPassHighPass();\n optimum_bandwidth(lh, gfp.brate);\n lowpass = lh.lowerlimit;\n break;\n }\n case VbrMode.vbr_abr:\n {\n var lh = new LowPassHighPass();\n optimum_bandwidth(lh, gfp.VBR_mean_bitrate_kbps);\n lowpass = lh.lowerlimit;\n break;\n }\n case VbrMode.vbr_rh:\n {\n var x = [19500, 19000, 18600, 18000, 17500, 16000,\n 15600, 14900, 12500, 10000, 3950];\n if (0 <= gfp.VBR_q && gfp.VBR_q <= 9) {\n var a = x[gfp.VBR_q], b = x[gfp.VBR_q + 1], m = gfp.VBR_q_frac;\n lowpass = linear_int(a, b, m);\n } else {\n lowpass = 19500;\n }\n break;\n }\n default:\n {\n var x = [19500, 19000, 18500, 18000, 17500, 16500,\n 15500, 14500, 12500, 9500, 3950];\n if (0 <= gfp.VBR_q && gfp.VBR_q <= 9) {\n var a = x[gfp.VBR_q], b = x[gfp.VBR_q + 1], m = gfp.VBR_q_frac;\n lowpass = linear_int(a, b, m);\n } else {\n lowpass = 19500;\n }\n }\n }\n if (gfp.mode == MPEGMode.MONO\n && (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_abr))\n lowpass *= 1.5;\n\n gfp.lowpassfreq = lowpass | 0;\n }\n\n if (gfp.out_samplerate == 0) {\n if (2 * gfp.lowpassfreq > gfp.in_samplerate) {\n gfp.lowpassfreq = gfp.in_samplerate / 2;\n }\n gfp.out_samplerate = optimum_samplefreq(gfp.lowpassfreq | 0,\n gfp.in_samplerate);\n }\n\n gfp.lowpassfreq = Math.min(20500, gfp.lowpassfreq);\n gfp.lowpassfreq = Math.min(gfp.out_samplerate / 2, gfp.lowpassfreq);\n\n if (gfp.VBR == VbrMode.vbr_off) {\n gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out\n / (1.e3 * gfp.brate);\n }\n if (gfp.VBR == VbrMode.vbr_abr) {\n gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out\n / (1.e3 * gfp.VBR_mean_bitrate_kbps);\n }\n\n /*\n * do not compute ReplayGain values and do not find the peak sample if\n * we can't store them\n */\n if (!gfp.bWriteVbrTag) {\n gfp.findReplayGain = false;\n gfp.decode_on_the_fly = false;\n gfc.findPeakSample = false;\n }\n gfc.findReplayGain = gfp.findReplayGain;\n gfc.decode_on_the_fly = gfp.decode_on_the_fly;\n\n if (gfc.decode_on_the_fly)\n gfc.findPeakSample = true;\n\n if (gfc.findReplayGain) {\n if (ga.InitGainAnalysis(gfc.rgdata, gfp.out_samplerate) == GainAnalysis.INIT_GAIN_ANALYSIS_ERROR) {\n gfp.internal_flags = null;\n return -6;\n }\n }\n\n if (gfc.decode_on_the_fly && !gfp.decode_only) {\n if (gfc.hip != null) {\n mpglib.hip_decode_exit(gfc.hip);\n }\n gfc.hip = mpglib.hip_decode_init();\n }\n\n gfc.mode_gr = gfp.out_samplerate <= 24000 ? 1 : 2;\n /*\n * Number of granules per frame\n */\n gfp.framesize = 576 * gfc.mode_gr;\n gfp.encoder_delay = Encoder.ENCDELAY;\n\n gfc.resample_ratio = gfp.in_samplerate / gfp.out_samplerate;\n\n /**\n *
\n * sample freq bitrate compression ratio\n * [kHz] [kbps/channel] for 16 bit input\n * 44.1 56 12.6\n * 44.1 64 11.025\n * 44.1 80 8.82\n * 22.05 24 14.7\n * 22.05 32 11.025\n * 22.05 40 8.82\n * 16 16 16.0\n * 16 24 10.667\n *\n */\n /**\n *
\n * For VBR, take a guess at the compression_ratio.\n * For example:\n *\n * VBR_q compression like\n * - 4.4 320 kbps/44 kHz\n * 0...1 5.5 256 kbps/44 kHz\n * 2 7.3 192 kbps/44 kHz\n * 4 8.8 160 kbps/44 kHz\n * 6 11 128 kbps/44 kHz\n * 9 14.7 96 kbps\n *\n * for lower bitrates, downsample with --resample\n *\n */\n switch (gfp.VBR) {\n case VbrMode.vbr_mt:\n case VbrMode.vbr_rh:\n case VbrMode.vbr_mtrh:\n {\n /* numbers are a bit strange, but they determine the lowpass value */\n var cmp = [5.7, 6.5, 7.3, 8.2, 10, 11.9, 13, 14,\n 15, 16.5];\n gfp.compression_ratio = cmp[gfp.VBR_q];\n }\n break;\n case VbrMode.vbr_abr:\n gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out\n / (1.e3 * gfp.VBR_mean_bitrate_kbps);\n break;\n default:\n gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out\n / (1.e3 * gfp.brate);\n break;\n }\n\n /*\n * mode = -1 (not set by user) or mode = MONO (because of only 1 input\n * channel). If mode has not been set, then select J-STEREO\n */\n if (gfp.mode == MPEGMode.NOT_SET) {\n gfp.mode = MPEGMode.JOINT_STEREO;\n }\n\n /* apply user driven high pass filter */\n if (gfp.highpassfreq > 0) {\n gfc.highpass1 = 2. * gfp.highpassfreq;\n\n if (gfp.highpasswidth >= 0)\n gfc.highpass2 = 2. * (gfp.highpassfreq + gfp.highpasswidth);\n else\n /* 0% above on default */\n gfc.highpass2 = (1 + 0.00) * 2. * gfp.highpassfreq;\n\n gfc.highpass1 /= gfp.out_samplerate;\n gfc.highpass2 /= gfp.out_samplerate;\n } else {\n gfc.highpass1 = 0;\n gfc.highpass2 = 0;\n }\n /* apply user driven low pass filter */\n if (gfp.lowpassfreq > 0) {\n gfc.lowpass2 = 2. * gfp.lowpassfreq;\n if (gfp.lowpasswidth >= 0) {\n gfc.lowpass1 = 2. * (gfp.lowpassfreq - gfp.lowpasswidth);\n if (gfc.lowpass1 < 0) /* has to be >= 0 */\n gfc.lowpass1 = 0;\n } else { /* 0% below on default */\n gfc.lowpass1 = (1 - 0.00) * 2. * gfp.lowpassfreq;\n }\n gfc.lowpass1 /= gfp.out_samplerate;\n gfc.lowpass2 /= gfp.out_samplerate;\n } else {\n gfc.lowpass1 = 0;\n gfc.lowpass2 = 0;\n }\n\n /**********************************************************************/\n /* compute info needed for polyphase filter (filter type==0, default) */\n /**********************************************************************/\n lame_init_params_ppflt(gfp);\n /*******************************************************\n * samplerate and bitrate index\n *******************************************************/\n gfc.samplerate_index = SmpFrqIndex(gfp.out_samplerate, gfp);\n if (gfc.samplerate_index < 0) {\n gfp.internal_flags = null;\n return -1;\n }\n\n if (gfp.VBR == VbrMode.vbr_off) {\n if (gfp.free_format) {\n gfc.bitrate_index = 0;\n } else {\n gfp.brate = FindNearestBitrate(gfp.brate, gfp.version,\n gfp.out_samplerate);\n gfc.bitrate_index = BitrateIndex(gfp.brate, gfp.version,\n gfp.out_samplerate);\n if (gfc.bitrate_index <= 0) {\n gfp.internal_flags = null;\n return -1;\n }\n }\n } else {\n gfc.bitrate_index = 1;\n }\n\n /* for CBR, we will write an \"info\" tag. */\n\n if (gfp.analysis)\n gfp.bWriteVbrTag = false;\n\n /* some file options not allowed if output is: not specified or stdout */\n if (gfc.pinfo != null)\n gfp.bWriteVbrTag = false;\n /* disable Xing VBR tag */\n\n bs.init_bit_stream_w(gfc);\n\n var j = gfc.samplerate_index + (3 * gfp.version) + 6\n * (gfp.out_samplerate < 16000 ? 1 : 0);\n for (var i = 0; i < Encoder.SBMAX_l + 1; i++)\n gfc.scalefac_band.l[i] = qupvt.sfBandIndex[j].l[i];\n\n for (var i = 0; i < Encoder.PSFB21 + 1; i++) {\n var size = (gfc.scalefac_band.l[22] - gfc.scalefac_band.l[21])\n / Encoder.PSFB21;\n var start = gfc.scalefac_band.l[21] + i * size;\n gfc.scalefac_band.psfb21[i] = start;\n }\n gfc.scalefac_band.psfb21[Encoder.PSFB21] = 576;\n\n for (var i = 0; i < Encoder.SBMAX_s + 1; i++)\n gfc.scalefac_band.s[i] = qupvt.sfBandIndex[j].s[i];\n\n for (var i = 0; i < Encoder.PSFB12 + 1; i++) {\n var size = (gfc.scalefac_band.s[13] - gfc.scalefac_band.s[12])\n / Encoder.PSFB12;\n var start = gfc.scalefac_band.s[12] + i * size;\n gfc.scalefac_band.psfb12[i] = start;\n }\n gfc.scalefac_band.psfb12[Encoder.PSFB12] = 192;\n /* determine the mean bitrate for main data */\n if (gfp.version == 1) /* MPEG 1 */\n gfc.sideinfo_len = (gfc.channels_out == 1) ? 4 + 17 : 4 + 32;\n else\n /* MPEG 2 */\n gfc.sideinfo_len = (gfc.channels_out == 1) ? 4 + 9 : 4 + 17;\n\n if (gfp.error_protection)\n gfc.sideinfo_len += 2;\n\n lame_init_bitstream(gfp);\n\n gfc.Class_ID = LAME_ID;\n\n {\n var k;\n\n for (k = 0; k < 19; k++)\n gfc.nsPsy.pefirbuf[k] = 700 * gfc.mode_gr * gfc.channels_out;\n\n if (gfp.ATHtype == -1)\n gfp.ATHtype = 4;\n }\n assert(gfp.VBR_q <= 9);\n assert(gfp.VBR_q >= 0);\n\n switch (gfp.VBR) {\n\n case VbrMode.vbr_mt:\n gfp.VBR = VbrMode.vbr_mtrh;\n //$FALL-THROUGH$\n case VbrMode.vbr_mtrh:\n {\n if (gfp.useTemporal == null) {\n gfp.useTemporal = false;\n /* off by default for this VBR mode */\n }\n\n p.apply_preset(gfp, 500 - (gfp.VBR_q * 10), 0);\n /**\n *
\n * The newer VBR code supports only a limited\n * subset of quality levels:\n * 9-5=5 are the same, uses x^3/4 quantization\n * 4-0=0 are the same 5 plus best huffman divide code\n *\n */\n if (gfp.quality < 0)\n gfp.quality = LAME_DEFAULT_QUALITY;\n if (gfp.quality < 5)\n gfp.quality = 0;\n if (gfp.quality > 5)\n gfp.quality = 5;\n\n gfc.PSY.mask_adjust = gfp.maskingadjust;\n gfc.PSY.mask_adjust_short = gfp.maskingadjust_short;\n\n /*\n * sfb21 extra only with MPEG-1 at higher sampling rates\n */\n if (gfp.experimentalY)\n gfc.sfb21_extra = false;\n else\n gfc.sfb21_extra = (gfp.out_samplerate > 44000);\n\n gfc.iteration_loop = new VBRNewIterationLoop(qu);\n break;\n\n }\n case VbrMode.vbr_rh:\n {\n\n p.apply_preset(gfp, 500 - (gfp.VBR_q * 10), 0);\n\n gfc.PSY.mask_adjust = gfp.maskingadjust;\n gfc.PSY.mask_adjust_short = gfp.maskingadjust_short;\n\n /*\n * sfb21 extra only with MPEG-1 at higher sampling rates\n */\n if (gfp.experimentalY)\n gfc.sfb21_extra = false;\n else\n gfc.sfb21_extra = (gfp.out_samplerate > 44000);\n\n /*\n * VBR needs at least the output of GPSYCHO, so we have to garantee\n * that by setting a minimum quality level, actually level 6 does\n * it. down to level 6\n */\n if (gfp.quality > 6)\n gfp.quality = 6;\n\n if (gfp.quality < 0)\n gfp.quality = LAME_DEFAULT_QUALITY;\n\n gfc.iteration_loop = new VBROldIterationLoop(qu);\n break;\n }\n\n default: /* cbr/abr */\n {\n var vbrmode;\n\n /*\n * no sfb21 extra with CBR code\n */\n gfc.sfb21_extra = false;\n\n if (gfp.quality < 0)\n gfp.quality = LAME_DEFAULT_QUALITY;\n\n vbrmode = gfp.VBR;\n if (vbrmode == VbrMode.vbr_off)\n gfp.VBR_mean_bitrate_kbps = gfp.brate;\n /* second, set parameters depending on bitrate */\n p.apply_preset(gfp, gfp.VBR_mean_bitrate_kbps, 0);\n gfp.VBR = vbrmode;\n\n gfc.PSY.mask_adjust = gfp.maskingadjust;\n gfc.PSY.mask_adjust_short = gfp.maskingadjust_short;\n\n if (vbrmode == VbrMode.vbr_off) {\n gfc.iteration_loop = new CBRNewIterationLoop(qu);\n } else {\n gfc.iteration_loop = new ABRIterationLoop(qu);\n }\n break;\n }\n }\n assert(gfp.scale >= 0);\n /* initialize default values common for all modes */\n\n if (gfp.VBR != VbrMode.vbr_off) { /* choose a min/max bitrate for VBR */\n /* if the user didn't specify VBR_max_bitrate: */\n gfc.VBR_min_bitrate = 1;\n /*\n * default: allow 8 kbps (MPEG-2) or 32 kbps (MPEG-1)\n */\n gfc.VBR_max_bitrate = 14;\n /*\n * default: allow 160 kbps (MPEG-2) or 320 kbps (MPEG-1)\n */\n if (gfp.out_samplerate < 16000)\n gfc.VBR_max_bitrate = 8;\n /* default: allow 64 kbps (MPEG-2.5) */\n if (gfp.VBR_min_bitrate_kbps != 0) {\n gfp.VBR_min_bitrate_kbps = FindNearestBitrate(\n gfp.VBR_min_bitrate_kbps, gfp.version,\n gfp.out_samplerate);\n gfc.VBR_min_bitrate = BitrateIndex(gfp.VBR_min_bitrate_kbps,\n gfp.version, gfp.out_samplerate);\n if (gfc.VBR_min_bitrate < 0)\n return -1;\n }\n if (gfp.VBR_max_bitrate_kbps != 0) {\n gfp.VBR_max_bitrate_kbps = FindNearestBitrate(\n gfp.VBR_max_bitrate_kbps, gfp.version,\n gfp.out_samplerate);\n gfc.VBR_max_bitrate = BitrateIndex(gfp.VBR_max_bitrate_kbps,\n gfp.version, gfp.out_samplerate);\n if (gfc.VBR_max_bitrate < 0)\n return -1;\n }\n gfp.VBR_min_bitrate_kbps = Tables.bitrate_table[gfp.version][gfc.VBR_min_bitrate];\n gfp.VBR_max_bitrate_kbps = Tables.bitrate_table[gfp.version][gfc.VBR_max_bitrate];\n gfp.VBR_mean_bitrate_kbps = Math.min(\n Tables.bitrate_table[gfp.version][gfc.VBR_max_bitrate],\n gfp.VBR_mean_bitrate_kbps);\n gfp.VBR_mean_bitrate_kbps = Math.max(\n Tables.bitrate_table[gfp.version][gfc.VBR_min_bitrate],\n gfp.VBR_mean_bitrate_kbps);\n }\n\n /* just another daily changing developer switch */\n if (gfp.tune) {\n gfc.PSY.mask_adjust += gfp.tune_value_a;\n gfc.PSY.mask_adjust_short += gfp.tune_value_a;\n }\n\n /* initialize internal qval settings */\n lame_init_qval(gfp);\n assert(gfp.scale >= 0);\n /*\n * automatic ATH adjustment on\n */\n if (gfp.athaa_type < 0)\n gfc.ATH.useAdjust = 3;\n else\n gfc.ATH.useAdjust = gfp.athaa_type;\n\n /* initialize internal adaptive ATH settings -jd */\n gfc.ATH.aaSensitivityP = Math.pow(10.0, gfp.athaa_sensitivity\n / -10.0);\n\n if (gfp.short_blocks == null) {\n gfp.short_blocks = ShortBlock.short_block_allowed;\n }\n\n /*\n * Note Jan/2003: Many hardware decoders cannot handle short blocks in\n * regular stereo mode unless they are coupled (same type in both\n * channels) it is a rare event (1 frame per min. or so) that LAME would\n * use uncoupled short blocks, so lets turn them off until we decide how\n * to handle this. No other encoders allow uncoupled short blocks, even\n * though it is in the standard.\n */\n /*\n * rh 20040217: coupling makes no sense for mono and dual-mono streams\n */\n if (gfp.short_blocks == ShortBlock.short_block_allowed\n && (gfp.mode == MPEGMode.JOINT_STEREO || gfp.mode == MPEGMode.STEREO)) {\n gfp.short_blocks = ShortBlock.short_block_coupled;\n }\n\n if (gfp.quant_comp < 0)\n gfp.quant_comp = 1;\n if (gfp.quant_comp_short < 0)\n gfp.quant_comp_short = 0;\n\n if (gfp.msfix < 0)\n gfp.msfix = 0;\n\n /* select psychoacoustic model */\n gfp.exp_nspsytune = gfp.exp_nspsytune | 1;\n\n if (gfp.internal_flags.nsPsy.attackthre < 0)\n gfp.internal_flags.nsPsy.attackthre = PsyModel.NSATTACKTHRE;\n if (gfp.internal_flags.nsPsy.attackthre_s < 0)\n gfp.internal_flags.nsPsy.attackthre_s = PsyModel.NSATTACKTHRE_S;\n\n assert(gfp.scale >= 0);\n\n if (gfp.scale < 0)\n gfp.scale = 1;\n\n if (gfp.ATHtype < 0)\n gfp.ATHtype = 4;\n\n if (gfp.ATHcurve < 0)\n gfp.ATHcurve = 4;\n\n if (gfp.athaa_loudapprox < 0)\n gfp.athaa_loudapprox = 2;\n\n if (gfp.interChRatio < 0)\n gfp.interChRatio = 0;\n\n if (gfp.useTemporal == null)\n gfp.useTemporal = true;\n /* on by default */\n\n /*\n * padding method as described in\n * \"MPEG-Layer3 / Bitstream Syntax and Decoding\" by Martin Sieler, Ralph\n * Sperschneider\n *\n * note: there is no padding for the very first frame\n *\n * Robert Hegemann 2000-06-22\n */\n gfc.slot_lag = gfc.frac_SpF = 0;\n if (gfp.VBR == VbrMode.vbr_off)\n gfc.slot_lag = gfc.frac_SpF = (((gfp.version + 1) * 72000 * gfp.brate) % gfp.out_samplerate) | 0;\n\n qupvt.iteration_init(gfp);\n psy.psymodel_init(gfp);\n assert(gfp.scale >= 0);\n return 0;\n }\n\n function update_inbuffer_size(gfc, nsamples) {\n if (gfc.in_buffer_0 == null || gfc.in_buffer_nsamples < nsamples) {\n gfc.in_buffer_0 = new_float(nsamples);\n gfc.in_buffer_1 = new_float(nsamples);\n gfc.in_buffer_nsamples = nsamples;\n }\n }\n\n this.lame_encode_flush = function (gfp, mp3buffer, mp3bufferPos, mp3buffer_size) {\n var gfc = gfp.internal_flags;\n var buffer = new_short_n([2, 1152]);\n var imp3 = 0, mp3count, mp3buffer_size_remaining;\n\n /*\n * we always add POSTDELAY=288 padding to make sure granule with real\n * data can be complety decoded (because of 50% overlap with next\n * granule\n */\n var end_padding;\n var frames_left;\n var samples_to_encode = gfc.mf_samples_to_encode - Encoder.POSTDELAY;\n var mf_needed = calcNeeded(gfp);\n\n /* Was flush already called? */\n if (gfc.mf_samples_to_encode < 1) {\n return 0;\n }\n mp3count = 0;\n\n if (gfp.in_samplerate != gfp.out_samplerate) {\n /*\n * delay due to resampling; needs to be fixed, if resampling code\n * gets changed\n */\n samples_to_encode += 16. * gfp.out_samplerate / gfp.in_samplerate;\n }\n end_padding = gfp.framesize - (samples_to_encode % gfp.framesize);\n if (end_padding < 576)\n end_padding += gfp.framesize;\n gfp.encoder_padding = end_padding;\n\n frames_left = (samples_to_encode + end_padding) / gfp.framesize;\n\n /*\n * send in a frame of 0 padding until all internal sample buffers are\n * flushed\n */\n while (frames_left > 0 && imp3 >= 0) {\n var bunch = mf_needed - gfc.mf_size;\n var frame_num = gfp.frameNum;\n\n bunch *= gfp.in_samplerate;\n bunch /= gfp.out_samplerate;\n if (bunch > 1152)\n bunch = 1152;\n if (bunch < 1)\n bunch = 1;\n\n mp3buffer_size_remaining = mp3buffer_size - mp3count;\n\n /* if user specifed buffer size = 0, dont check size */\n if (mp3buffer_size == 0)\n mp3buffer_size_remaining = 0;\n\n imp3 = this.lame_encode_buffer(gfp, buffer[0], buffer[1], bunch,\n mp3buffer, mp3bufferPos, mp3buffer_size_remaining);\n\n mp3bufferPos += imp3;\n mp3count += imp3;\n frames_left -= (frame_num != gfp.frameNum) ? 1 : 0;\n }\n /*\n * Set gfc.mf_samples_to_encode to 0, so we may detect and break loops\n * calling it more than once in a row.\n */\n gfc.mf_samples_to_encode = 0;\n\n if (imp3 < 0) {\n /* some type of fatal error */\n return imp3;\n }\n\n mp3buffer_size_remaining = mp3buffer_size - mp3count;\n /* if user specifed buffer size = 0, dont check size */\n if (mp3buffer_size == 0)\n mp3buffer_size_remaining = 0;\n\n /* mp3 related stuff. bit buffer might still contain some mp3 data */\n bs.flush_bitstream(gfp);\n imp3 = bs.copy_buffer(gfc, mp3buffer, mp3bufferPos,\n mp3buffer_size_remaining, 1);\n if (imp3 < 0) {\n /* some type of fatal error */\n return imp3;\n }\n mp3bufferPos += imp3;\n mp3count += imp3;\n mp3buffer_size_remaining = mp3buffer_size - mp3count;\n /* if user specifed buffer size = 0, dont check size */\n if (mp3buffer_size == 0)\n mp3buffer_size_remaining = 0;\n\n if (gfp.write_id3tag_automatic) {\n /* write a id3 tag to the bitstream */\n id3.id3tag_write_v1(gfp);\n\n imp3 = bs.copy_buffer(gfc, mp3buffer, mp3bufferPos,\n mp3buffer_size_remaining, 0);\n\n if (imp3 < 0) {\n return imp3;\n }\n mp3count += imp3;\n }\n return mp3count;\n };\n\n this.lame_encode_buffer = function (gfp, buffer_l, buffer_r, nsamples, mp3buf, mp3bufPos, mp3buf_size) {\n var gfc = gfp.internal_flags;\n var in_buffer = [null, null];\n\n if (gfc.Class_ID != LAME_ID)\n return -3;\n\n if (nsamples == 0)\n return 0;\n\n update_inbuffer_size(gfc, nsamples);\n\n in_buffer[0] = gfc.in_buffer_0;\n in_buffer[1] = gfc.in_buffer_1;\n\n /* make a copy of input buffer, changing type to sample_t */\n for (var i = 0; i < nsamples; i++) {\n in_buffer[0][i] = buffer_l[i];\n if (gfc.channels_in > 1)\n in_buffer[1][i] = buffer_r[i];\n }\n\n return lame_encode_buffer_sample(gfp, in_buffer[0], in_buffer[1],\n nsamples, mp3buf, mp3bufPos, mp3buf_size);\n }\n\n function calcNeeded(gfp) {\n var mf_needed = Encoder.BLKSIZE + gfp.framesize - Encoder.FFTOFFSET;\n /*\n * amount needed for FFT\n */\n mf_needed = Math.max(mf_needed, 512 + gfp.framesize - 32);\n assert(LameInternalFlags.MFSIZE >= mf_needed);\n\n return mf_needed;\n }\n\n function lame_encode_buffer_sample(gfp, buffer_l, buffer_r, nsamples, mp3buf, mp3bufPos, mp3buf_size) {\n var gfc = gfp.internal_flags;\n var mp3size = 0, ret, i, ch, mf_needed;\n var mp3out;\n var mfbuf = [null, null];\n var in_buffer = [null, null];\n\n if (gfc.Class_ID != LAME_ID)\n return -3;\n\n if (nsamples == 0)\n return 0;\n\n /* copy out any tags that may have been written into bitstream */\n mp3out = bs.copy_buffer(gfc, mp3buf, mp3bufPos, mp3buf_size, 0);\n if (mp3out < 0)\n return mp3out;\n /* not enough buffer space */\n mp3bufPos += mp3out;\n mp3size += mp3out;\n\n in_buffer[0] = buffer_l;\n in_buffer[1] = buffer_r;\n\n /* Apply user defined re-scaling */\n\n /* user selected scaling of the samples */\n if (BitStream.NEQ(gfp.scale, 0) && BitStream.NEQ(gfp.scale, 1.0)) {\n for (i = 0; i < nsamples; ++i) {\n in_buffer[0][i] *= gfp.scale;\n if (gfc.channels_out == 2)\n in_buffer[1][i] *= gfp.scale;\n }\n }\n\n /* user selected scaling of the channel 0 (left) samples */\n if (BitStream.NEQ(gfp.scale_left, 0)\n && BitStream.NEQ(gfp.scale_left, 1.0)) {\n for (i = 0; i < nsamples; ++i) {\n in_buffer[0][i] *= gfp.scale_left;\n }\n }\n\n /* user selected scaling of the channel 1 (right) samples */\n if (BitStream.NEQ(gfp.scale_right, 0)\n && BitStream.NEQ(gfp.scale_right, 1.0)) {\n for (i = 0; i < nsamples; ++i) {\n in_buffer[1][i] *= gfp.scale_right;\n }\n }\n\n /* Downsample to Mono if 2 channels in and 1 channel out */\n if (gfp.num_channels == 2 && gfc.channels_out == 1) {\n for (i = 0; i < nsamples; ++i) {\n in_buffer[0][i] = 0.5 * ( in_buffer[0][i] + in_buffer[1][i]);\n in_buffer[1][i] = 0.0;\n }\n }\n\n mf_needed = calcNeeded(gfp);\n\n mfbuf[0] = gfc.mfbuf[0];\n mfbuf[1] = gfc.mfbuf[1];\n\n var in_bufferPos = 0;\n while (nsamples > 0) {\n var in_buffer_ptr = [null, null];\n var n_in = 0;\n /* number of input samples processed with fill_buffer */\n var n_out = 0;\n /* number of samples output with fill_buffer */\n /* n_in <> n_out if we are resampling */\n\n in_buffer_ptr[0] = in_buffer[0];\n in_buffer_ptr[1] = in_buffer[1];\n /* copy in new samples into mfbuf, with resampling */\n var inOut = new InOut();\n fill_buffer(gfp, mfbuf, in_buffer_ptr, in_bufferPos, nsamples,\n inOut);\n n_in = inOut.n_in;\n n_out = inOut.n_out;\n\n /* compute ReplayGain of resampled input if requested */\n if (gfc.findReplayGain && !gfc.decode_on_the_fly)\n if (ga.AnalyzeSamples(gfc.rgdata, mfbuf[0], gfc.mf_size,\n mfbuf[1], gfc.mf_size, n_out, gfc.channels_out) == GainAnalysis.GAIN_ANALYSIS_ERROR)\n return -6;\n\n /* update in_buffer counters */\n nsamples -= n_in;\n in_bufferPos += n_in;\n if (gfc.channels_out == 2)\n ;// in_bufferPos += n_in;\n\n /* update mfbuf[] counters */\n gfc.mf_size += n_out;\n assert(gfc.mf_size <= LameInternalFlags.MFSIZE);\n\n /*\n * lame_encode_flush may have set gfc.mf_sample_to_encode to 0 so we\n * have to reinitialize it here when that happened.\n */\n if (gfc.mf_samples_to_encode < 1) {\n gfc.mf_samples_to_encode = Encoder.ENCDELAY + Encoder.POSTDELAY;\n }\n gfc.mf_samples_to_encode += n_out;\n\n if (gfc.mf_size >= mf_needed) {\n /* encode the frame. */\n /* mp3buf = pointer to current location in buffer */\n /* mp3buf_size = size of original mp3 output buffer */\n /* = 0 if we should not worry about the */\n /* buffer size because calling program is */\n /* to lazy to compute it */\n /* mp3size = size of data written to buffer so far */\n /* mp3buf_size-mp3size = amount of space avalable */\n\n var buf_size = mp3buf_size - mp3size;\n if (mp3buf_size == 0)\n buf_size = 0;\n\n ret = lame_encode_frame(gfp, mfbuf[0], mfbuf[1], mp3buf,\n mp3bufPos, buf_size);\n\n if (ret < 0)\n return ret;\n mp3bufPos += ret;\n mp3size += ret;\n\n /* shift out old samples */\n gfc.mf_size -= gfp.framesize;\n gfc.mf_samples_to_encode -= gfp.framesize;\n for (ch = 0; ch < gfc.channels_out; ch++)\n for (i = 0; i < gfc.mf_size; i++)\n mfbuf[ch][i] = mfbuf[ch][i + gfp.framesize];\n }\n }\n assert(nsamples == 0);\n\n return mp3size;\n }\n\n function lame_encode_frame(gfp, inbuf_l, inbuf_r, mp3buf, mp3bufPos, mp3buf_size) {\n var ret = self.enc.lame_encode_mp3_frame(gfp, inbuf_l, inbuf_r, mp3buf,\n mp3bufPos, mp3buf_size);\n gfp.frameNum++;\n return ret;\n }\n\n function InOut() {\n this.n_in = 0;\n this.n_out = 0;\n }\n\n\n function NumUsed() {\n this.num_used = 0;\n }\n\n /**\n * Greatest common divisor.\n *
\n * Joint work of Euclid and M. Hendry\n */\n function gcd(i, j) {\n return j != 0 ? gcd(j, i % j) : i;\n }\n\n /**\n * Resampling via FIR filter, blackman window.\n */\n function blackman(x, fcn, l) {\n /*\n * This algorithm from: SIGNAL PROCESSING ALGORITHMS IN FORTRAN AND C\n * S.D. Stearns and R.A. David, Prentice-Hall, 1992\n */\n var wcn = (Math.PI * fcn);\n\n x /= l;\n if (x < 0)\n x = 0;\n if (x > 1)\n x = 1;\n var x2 = x - .5;\n\n var bkwn = 0.42 - 0.5 * Math.cos(2 * x * Math.PI) + 0.08 * Math.cos(4 * x * Math.PI);\n if (Math.abs(x2) < 1e-9)\n return (wcn / Math.PI);\n else\n return (bkwn * Math.sin(l * wcn * x2) / (Math.PI * l * x2));\n }\n\n function fill_buffer_resample(gfp, outbuf, outbufPos, desired_len, inbuf, in_bufferPos, len, num_used, ch) {\n var gfc = gfp.internal_flags;\n var i, j = 0, k;\n /* number of convolution functions to pre-compute */\n var bpc = gfp.out_samplerate\n / gcd(gfp.out_samplerate, gfp.in_samplerate);\n if (bpc > LameInternalFlags.BPC)\n bpc = LameInternalFlags.BPC;\n\n var intratio = (Math.abs(gfc.resample_ratio\n - Math.floor(.5 + gfc.resample_ratio)) < .0001) ? 1 : 0;\n var fcn = 1.00 / gfc.resample_ratio;\n if (fcn > 1.00)\n fcn = 1.00;\n var filter_l = 31;\n if (0 == filter_l % 2)\n --filter_l;\n /* must be odd */\n filter_l += intratio;\n /* unless resample_ratio=int, it must be even */\n\n var BLACKSIZE = filter_l + 1;\n /* size of data needed for FIR */\n\n if (gfc.fill_buffer_resample_init == 0) {\n gfc.inbuf_old[0] = new_float(BLACKSIZE);\n gfc.inbuf_old[1] = new_float(BLACKSIZE);\n for (i = 0; i <= 2 * bpc; ++i)\n gfc.blackfilt[i] = new_float(BLACKSIZE);\n\n gfc.itime[0] = 0;\n gfc.itime[1] = 0;\n\n /* precompute blackman filter coefficients */\n for (j = 0; j <= 2 * bpc; j++) {\n var sum = 0.;\n var offset = (j - bpc) / (2. * bpc);\n for (i = 0; i <= filter_l; i++)\n sum += gfc.blackfilt[j][i] = blackman(i - offset, fcn,\n filter_l);\n for (i = 0; i <= filter_l; i++)\n gfc.blackfilt[j][i] /= sum;\n }\n gfc.fill_buffer_resample_init = 1;\n }\n\n var inbuf_old = gfc.inbuf_old[ch];\n\n /* time of j'th element in inbuf = itime + j/ifreq; */\n /* time of k'th element in outbuf = j/ofreq */\n for (k = 0; k < desired_len; k++) {\n var time0;\n var joff;\n\n time0 = k * gfc.resample_ratio;\n /* time of k'th output sample */\n j = 0 | Math.floor(time0 - gfc.itime[ch]);\n\n /* check if we need more input data */\n if ((filter_l + j - filter_l / 2) >= len)\n break;\n\n /* blackman filter. by default, window centered at j+.5(filter_l%2) */\n /* but we want a window centered at time0. */\n var offset = (time0 - gfc.itime[ch] - (j + .5 * (filter_l % 2)));\n assert(Math.abs(offset) <= .501);\n\n /* find the closest precomputed window for this offset: */\n joff = 0 | Math.floor((offset * 2 * bpc) + bpc + .5);\n var xvalue = 0.;\n for (i = 0; i <= filter_l; ++i) {\n var j2 = i + j - filter_l / 2;\n var y;\n assert(j2 < len);\n assert(j2 + BLACKSIZE >= 0);\n y = (j2 < 0) ? inbuf_old[BLACKSIZE + j2] : inbuf[in_bufferPos\n + j2];\n xvalue += y * gfc.blackfilt[joff][i];\n }\n outbuf[outbufPos + k] = xvalue;\n }\n\n /* k = number of samples added to outbuf */\n /* last k sample used data from [j-filter_l/2,j+filter_l-filter_l/2] */\n\n /* how many samples of input data were used: */\n num_used.num_used = Math.min(len, filter_l + j - filter_l / 2);\n\n /*\n * adjust our input time counter. Incriment by the number of samples\n * used, then normalize so that next output sample is at time 0, next\n * input buffer is at time itime[ch]\n */\n gfc.itime[ch] += num_used.num_used - k * gfc.resample_ratio;\n\n /* save the last BLACKSIZE samples into the inbuf_old buffer */\n if (num_used.num_used >= BLACKSIZE) {\n for (i = 0; i < BLACKSIZE; i++)\n inbuf_old[i] = inbuf[in_bufferPos + num_used.num_used + i\n - BLACKSIZE];\n } else {\n /* shift in num_used.num_used samples into inbuf_old */\n var n_shift = BLACKSIZE - num_used.num_used;\n /*\n * number of samples to\n * shift\n */\n\n /*\n * shift n_shift samples by num_used.num_used, to make room for the\n * num_used new samples\n */\n for (i = 0; i < n_shift; ++i)\n inbuf_old[i] = inbuf_old[i + num_used.num_used];\n\n /* shift in the num_used.num_used samples */\n for (j = 0; i < BLACKSIZE; ++i, ++j)\n inbuf_old[i] = inbuf[in_bufferPos + j];\n\n assert(j == num_used.num_used);\n }\n return k;\n /* return the number samples created at the new samplerate */\n }\n\n function fill_buffer(gfp, mfbuf, in_buffer, in_bufferPos, nsamples, io) {\n var gfc = gfp.internal_flags;\n\n /* copy in new samples into mfbuf, with resampling if necessary */\n if ((gfc.resample_ratio < .9999) || (gfc.resample_ratio > 1.0001)) {\n for (var ch = 0; ch < gfc.channels_out; ch++) {\n var numUsed = new NumUsed();\n io.n_out = fill_buffer_resample(gfp, mfbuf[ch], gfc.mf_size,\n gfp.framesize, in_buffer[ch], in_bufferPos, nsamples,\n numUsed, ch);\n io.n_in = numUsed.num_used;\n }\n } else {\n io.n_out = Math.min(gfp.framesize, nsamples);\n io.n_in = io.n_out;\n for (var i = 0; i < io.n_out; ++i) {\n mfbuf[0][gfc.mf_size + i] = in_buffer[0][in_bufferPos + i];\n if (gfc.channels_out == 2)\n mfbuf[1][gfc.mf_size + i] = in_buffer[1][in_bufferPos + i];\n }\n }\n }\n\n}\n\nmodule.exports = Lame;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nfunction Presets() {\n function VBRPresets(qual, comp, compS,\n y, shThreshold, shThresholdS,\n adj, adjShort, lower,\n curve, sens, inter,\n joint, mod, fix) {\n this.vbr_q = qual;\n this.quant_comp = comp;\n this.quant_comp_s = compS;\n this.expY = y;\n this.st_lrm = shThreshold;\n this.st_s = shThresholdS;\n this.masking_adj = adj;\n this.masking_adj_short = adjShort;\n this.ath_lower = lower;\n this.ath_curve = curve;\n this.ath_sensitivity = sens;\n this.interch = inter;\n this.safejoint = joint;\n this.sfb21mod = mod;\n this.msfix = fix;\n }\n\n function ABRPresets(kbps, comp, compS,\n joint, fix, shThreshold,\n shThresholdS, bass, sc,\n mask, lower, curve,\n interCh, sfScale) {\n this.quant_comp = comp;\n this.quant_comp_s = compS;\n this.safejoint = joint;\n this.nsmsfix = fix;\n this.st_lrm = shThreshold;\n this.st_s = shThresholdS;\n this.nsbass = bass;\n this.scale = sc;\n this.masking_adj = mask;\n this.ath_lower = lower;\n this.ath_curve = curve;\n this.interch = interCh;\n this.sfscale = sfScale;\n }\n\n var lame;\n\n this.setModules = function (_lame) {\n lame = _lame;\n };\n\n /**\n *
\n * Switch mappings for VBR mode VBR_RH\n * vbr_q qcomp_l qcomp_s expY st_lrm st_s mask adj_l adj_s ath_lower ath_curve ath_sens interChR safejoint sfb21mod msfix\n *\n */\n var vbr_old_switch_map = [\n new VBRPresets(0, 9, 9, 0, 5.20, 125.0, -4.2, -6.3, 4.8, 1, 0, 0, 2, 21, 0.97),\n new VBRPresets(1, 9, 9, 0, 5.30, 125.0, -3.6, -5.6, 4.5, 1.5, 0, 0, 2, 21, 1.35),\n new VBRPresets(2, 9, 9, 0, 5.60, 125.0, -2.2, -3.5, 2.8, 2, 0, 0, 2, 21, 1.49),\n new VBRPresets(3, 9, 9, 1, 5.80, 130.0, -1.8, -2.8, 2.6, 3, -4, 0, 2, 20, 1.64),\n new VBRPresets(4, 9, 9, 1, 6.00, 135.0, -0.7, -1.1, 1.1, 3.5, -8, 0, 2, 0, 1.79),\n new VBRPresets(5, 9, 9, 1, 6.40, 140.0, 0.5, 0.4, -7.5, 4, -12, 0.0002, 0, 0, 1.95),\n new VBRPresets(6, 9, 9, 1, 6.60, 145.0, 0.67, 0.65, -14.7, 6.5, -19, 0.0004, 0, 0, 2.30),\n new VBRPresets(7, 9, 9, 1, 6.60, 145.0, 0.8, 0.75, -19.7, 8, -22, 0.0006, 0, 0, 2.70),\n new VBRPresets(8, 9, 9, 1, 6.60, 145.0, 1.2, 1.15, -27.5, 10, -23, 0.0007, 0, 0, 0),\n new VBRPresets(9, 9, 9, 1, 6.60, 145.0, 1.6, 1.6, -36, 11, -25, 0.0008, 0, 0, 0),\n new VBRPresets(10, 9, 9, 1, 6.60, 145.0, 2.0, 2.0, -36, 12, -25, 0.0008, 0, 0, 0)\n ];\n\n /**\n *
\n * vbr_q qcomp_l qcomp_s expY st_lrm st_s mask adj_l adj_s ath_lower ath_curve ath_sens interChR safejoint sfb21mod msfix\n *\n */\n var vbr_psy_switch_map = [\n new VBRPresets(0, 9, 9, 0, 4.20, 25.0, -7.0, -4.0, 7.5, 1, 0, 0, 2, 26, 0.97),\n new VBRPresets(1, 9, 9, 0, 4.20, 25.0, -5.6, -3.6, 4.5, 1.5, 0, 0, 2, 21, 1.35),\n new VBRPresets(2, 9, 9, 0, 4.20, 25.0, -4.4, -1.8, 2, 2, 0, 0, 2, 18, 1.49),\n new VBRPresets(3, 9, 9, 1, 4.20, 25.0, -3.4, -1.25, 1.1, 3, -4, 0, 2, 15, 1.64),\n new VBRPresets(4, 9, 9, 1, 4.20, 25.0, -2.2, 0.1, 0, 3.5, -8, 0, 2, 0, 1.79),\n new VBRPresets(5, 9, 9, 1, 4.20, 25.0, -1.0, 1.65, -7.7, 4, -12, 0.0002, 0, 0, 1.95),\n new VBRPresets(6, 9, 9, 1, 4.20, 25.0, -0.0, 2.47, -7.7, 6.5, -19, 0.0004, 0, 0, 2),\n new VBRPresets(7, 9, 9, 1, 4.20, 25.0, 0.5, 2.0, -14.5, 8, -22, 0.0006, 0, 0, 2),\n new VBRPresets(8, 9, 9, 1, 4.20, 25.0, 1.0, 2.4, -22.0, 10, -23, 0.0007, 0, 0, 2),\n new VBRPresets(9, 9, 9, 1, 4.20, 25.0, 1.5, 2.95, -30.0, 11, -25, 0.0008, 0, 0, 2),\n new VBRPresets(10, 9, 9, 1, 4.20, 25.0, 2.0, 2.95, -36.0, 12, -30, 0.0008, 0, 0, 2)\n ];\n\n function apply_vbr_preset(gfp, a, enforce) {\n var vbr_preset = gfp.VBR == VbrMode.vbr_rh ? vbr_old_switch_map\n : vbr_psy_switch_map;\n\n var x = gfp.VBR_q_frac;\n var p = vbr_preset[a];\n var q = vbr_preset[a + 1];\n var set = p;\n\n // NOOP(vbr_q);\n // NOOP(quant_comp);\n // NOOP(quant_comp_s);\n // NOOP(expY);\n p.st_lrm = p.st_lrm + x * (q.st_lrm - p.st_lrm);\n // LERP(st_lrm);\n p.st_s = p.st_s + x * (q.st_s - p.st_s);\n // LERP(st_s);\n p.masking_adj = p.masking_adj + x * (q.masking_adj - p.masking_adj);\n // LERP(masking_adj);\n p.masking_adj_short = p.masking_adj_short + x\n * (q.masking_adj_short - p.masking_adj_short);\n // LERP(masking_adj_short);\n p.ath_lower = p.ath_lower + x * (q.ath_lower - p.ath_lower);\n // LERP(ath_lower);\n p.ath_curve = p.ath_curve + x * (q.ath_curve - p.ath_curve);\n // LERP(ath_curve);\n p.ath_sensitivity = p.ath_sensitivity + x\n * (q.ath_sensitivity - p.ath_sensitivity);\n // LERP(ath_sensitivity);\n p.interch = p.interch + x * (q.interch - p.interch);\n // LERP(interch);\n // NOOP(safejoint);\n // NOOP(sfb21mod);\n p.msfix = p.msfix + x * (q.msfix - p.msfix);\n // LERP(msfix);\n\n lame_set_VBR_q(gfp, set.vbr_q);\n\n if (enforce != 0)\n gfp.quant_comp = set.quant_comp;\n else if (!(Math.abs(gfp.quant_comp - -1) > 0))\n gfp.quant_comp = set.quant_comp;\n // SET_OPTION(quant_comp, set.quant_comp, -1);\n if (enforce != 0)\n gfp.quant_comp_short = set.quant_comp_s;\n else if (!(Math.abs(gfp.quant_comp_short - -1) > 0))\n gfp.quant_comp_short = set.quant_comp_s;\n // SET_OPTION(quant_comp_short, set.quant_comp_s, -1);\n if (set.expY != 0) {\n gfp.experimentalY = set.expY != 0;\n }\n if (enforce != 0)\n gfp.internal_flags.nsPsy.attackthre = set.st_lrm;\n else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre - -1) > 0))\n gfp.internal_flags.nsPsy.attackthre = set.st_lrm;\n // SET_OPTION(short_threshold_lrm, set.st_lrm, -1);\n if (enforce != 0)\n gfp.internal_flags.nsPsy.attackthre_s = set.st_s;\n else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre_s - -1) > 0))\n gfp.internal_flags.nsPsy.attackthre_s = set.st_s;\n // SET_OPTION(short_threshold_s, set.st_s, -1);\n if (enforce != 0)\n gfp.maskingadjust = set.masking_adj;\n else if (!(Math.abs(gfp.maskingadjust - 0) > 0))\n gfp.maskingadjust = set.masking_adj;\n // SET_OPTION(maskingadjust, set.masking_adj, 0);\n if (enforce != 0)\n gfp.maskingadjust_short = set.masking_adj_short;\n else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0))\n gfp.maskingadjust_short = set.masking_adj_short;\n // SET_OPTION(maskingadjust_short, set.masking_adj_short, 0);\n if (enforce != 0)\n gfp.ATHlower = -set.ath_lower / 10.0;\n else if (!(Math.abs((-gfp.ATHlower * 10.0) - 0) > 0))\n gfp.ATHlower = -set.ath_lower / 10.0;\n // SET_OPTION(ATHlower, set.ath_lower, 0);\n if (enforce != 0)\n gfp.ATHcurve = set.ath_curve;\n else if (!(Math.abs(gfp.ATHcurve - -1) > 0))\n gfp.ATHcurve = set.ath_curve;\n // SET_OPTION(ATHcurve, set.ath_curve, -1);\n if (enforce != 0)\n gfp.athaa_sensitivity = set.ath_sensitivity;\n else if (!(Math.abs(gfp.athaa_sensitivity - -1) > 0))\n gfp.athaa_sensitivity = set.ath_sensitivity;\n // SET_OPTION(athaa_sensitivity, set.ath_sensitivity, 0);\n if (set.interch > 0) {\n if (enforce != 0)\n gfp.interChRatio = set.interch;\n else if (!(Math.abs(gfp.interChRatio - -1) > 0))\n gfp.interChRatio = set.interch;\n // SET_OPTION(interChRatio, set.interch, -1);\n }\n\n /* parameters for which there is no proper set/get interface */\n if (set.safejoint > 0) {\n gfp.exp_nspsytune = gfp.exp_nspsytune | set.safejoint;\n }\n if (set.sfb21mod > 0) {\n gfp.exp_nspsytune = gfp.exp_nspsytune | (set.sfb21mod << 20);\n }\n if (enforce != 0)\n gfp.msfix = set.msfix;\n else if (!(Math.abs(gfp.msfix - -1) > 0))\n gfp.msfix = set.msfix;\n // SET_OPTION(msfix, set.msfix, -1);\n\n if (enforce == 0) {\n gfp.VBR_q = a;\n gfp.VBR_q_frac = x;\n }\n }\n\n /**\n *
\n * Switch mappings for ABR mode\n *\n * kbps quant q_s safejoint nsmsfix st_lrm st_s ns-bass scale msk ath_lwr ath_curve interch , sfscale\n *\n */\n var abr_switch_map = [\n new ABRPresets(8, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -30.0, 11, 0.0012, 1), /* 8, impossible to use in stereo */\n new ABRPresets(16, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -25.0, 11, 0.0010, 1), /* 16 */\n new ABRPresets(24, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -20.0, 11, 0.0010, 1), /* 24 */\n new ABRPresets(32, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -15.0, 11, 0.0010, 1), /* 32 */\n new ABRPresets(40, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -10.0, 11, 0.0009, 1), /* 40 */\n new ABRPresets(48, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -10.0, 11, 0.0009, 1), /* 48 */\n new ABRPresets(56, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -6.0, 11, 0.0008, 1), /* 56 */\n new ABRPresets(64, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -2.0, 11, 0.0008, 1), /* 64 */\n new ABRPresets(80, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, .0, 8, 0.0007, 1), /* 80 */\n new ABRPresets(96, 9, 9, 0, 2.50, 6.60, 145, 0, 0.95, 0, 1.0, 5.5, 0.0006, 1), /* 96 */\n new ABRPresets(112, 9, 9, 0, 2.25, 6.60, 145, 0, 0.95, 0, 2.0, 4.5, 0.0005, 1), /* 112 */\n new ABRPresets(128, 9, 9, 0, 1.95, 6.40, 140, 0, 0.95, 0, 3.0, 4, 0.0002, 1), /* 128 */\n new ABRPresets(160, 9, 9, 1, 1.79, 6.00, 135, 0, 0.95, -2, 5.0, 3.5, 0, 1), /* 160 */\n new ABRPresets(192, 9, 9, 1, 1.49, 5.60, 125, 0, 0.97, -4, 7.0, 3, 0, 0), /* 192 */\n new ABRPresets(224, 9, 9, 1, 1.25, 5.20, 125, 0, 0.98, -6, 9.0, 2, 0, 0), /* 224 */\n new ABRPresets(256, 9, 9, 1, 0.97, 5.20, 125, 0, 1.00, -8, 10.0, 1, 0, 0), /* 256 */\n new ABRPresets(320, 9, 9, 1, 0.90, 5.20, 125, 0, 1.00, -10, 12.0, 0, 0, 0) /* 320 */\n ];\n\n function apply_abr_preset(gfp, preset, enforce) {\n /* Variables for the ABR stuff */\n var actual_bitrate = preset;\n\n var r = lame.nearestBitrateFullIndex(preset);\n\n gfp.VBR = VbrMode.vbr_abr;\n gfp.VBR_mean_bitrate_kbps = actual_bitrate;\n gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps, 320);\n gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps, 8);\n gfp.brate = gfp.VBR_mean_bitrate_kbps;\n if (gfp.VBR_mean_bitrate_kbps > 320) {\n gfp.disable_reservoir = true;\n }\n\n /* parameters for which there is no proper set/get interface */\n if (abr_switch_map[r].safejoint > 0)\n gfp.exp_nspsytune = gfp.exp_nspsytune | 2;\n /* safejoint */\n\n if (abr_switch_map[r].sfscale > 0) {\n gfp.internal_flags.noise_shaping = 2;\n }\n /* ns-bass tweaks */\n if (Math.abs(abr_switch_map[r].nsbass) > 0) {\n var k = (int)(abr_switch_map[r].nsbass * 4);\n if (k < 0)\n k += 64;\n gfp.exp_nspsytune = gfp.exp_nspsytune | (k << 2);\n }\n\n if (enforce != 0)\n gfp.quant_comp = abr_switch_map[r].quant_comp;\n else if (!(Math.abs(gfp.quant_comp - -1) > 0))\n gfp.quant_comp = abr_switch_map[r].quant_comp;\n // SET_OPTION(quant_comp, abr_switch_map[r].quant_comp, -1);\n if (enforce != 0)\n gfp.quant_comp_short = abr_switch_map[r].quant_comp_s;\n else if (!(Math.abs(gfp.quant_comp_short - -1) > 0))\n gfp.quant_comp_short = abr_switch_map[r].quant_comp_s;\n // SET_OPTION(quant_comp_short, abr_switch_map[r].quant_comp_s, -1);\n\n if (enforce != 0)\n gfp.msfix = abr_switch_map[r].nsmsfix;\n else if (!(Math.abs(gfp.msfix - -1) > 0))\n gfp.msfix = abr_switch_map[r].nsmsfix;\n // SET_OPTION(msfix, abr_switch_map[r].nsmsfix, -1);\n\n if (enforce != 0)\n gfp.internal_flags.nsPsy.attackthre = abr_switch_map[r].st_lrm;\n else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre - -1) > 0))\n gfp.internal_flags.nsPsy.attackthre = abr_switch_map[r].st_lrm;\n // SET_OPTION(short_threshold_lrm, abr_switch_map[r].st_lrm, -1);\n if (enforce != 0)\n gfp.internal_flags.nsPsy.attackthre_s = abr_switch_map[r].st_s;\n else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre_s - -1) > 0))\n gfp.internal_flags.nsPsy.attackthre_s = abr_switch_map[r].st_s;\n // SET_OPTION(short_threshold_s, abr_switch_map[r].st_s, -1);\n\n /*\n * ABR seems to have big problems with clipping, especially at low\n * bitrates\n */\n /*\n * so we compensate for that here by using a scale value depending on\n * bitrate\n */\n if (enforce != 0)\n gfp.scale = abr_switch_map[r].scale;\n else if (!(Math.abs(gfp.scale - -1) > 0))\n gfp.scale = abr_switch_map[r].scale;\n // SET_OPTION(scale, abr_switch_map[r].scale, -1);\n\n if (enforce != 0)\n gfp.maskingadjust = abr_switch_map[r].masking_adj;\n else if (!(Math.abs(gfp.maskingadjust - 0) > 0))\n gfp.maskingadjust = abr_switch_map[r].masking_adj;\n // SET_OPTION(maskingadjust, abr_switch_map[r].masking_adj, 0);\n if (abr_switch_map[r].masking_adj > 0) {\n if (enforce != 0)\n gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * .9);\n else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0))\n gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * .9);\n // SET_OPTION(maskingadjust_short, abr_switch_map[r].masking_adj *\n // .9, 0);\n } else {\n if (enforce != 0)\n gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * 1.1);\n else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0))\n gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * 1.1);\n // SET_OPTION(maskingadjust_short, abr_switch_map[r].masking_adj *\n // 1.1, 0);\n }\n\n if (enforce != 0)\n gfp.ATHlower = -abr_switch_map[r].ath_lower / 10.;\n else if (!(Math.abs((-gfp.ATHlower * 10.) - 0) > 0))\n gfp.ATHlower = -abr_switch_map[r].ath_lower / 10.;\n // SET_OPTION(ATHlower, abr_switch_map[r].ath_lower, 0);\n if (enforce != 0)\n gfp.ATHcurve = abr_switch_map[r].ath_curve;\n else if (!(Math.abs(gfp.ATHcurve - -1) > 0))\n gfp.ATHcurve = abr_switch_map[r].ath_curve;\n // SET_OPTION(ATHcurve, abr_switch_map[r].ath_curve, -1);\n\n if (enforce != 0)\n gfp.interChRatio = abr_switch_map[r].interch;\n else if (!(Math.abs(gfp.interChRatio - -1) > 0))\n gfp.interChRatio = abr_switch_map[r].interch;\n // SET_OPTION(interChRatio, abr_switch_map[r].interch, -1);\n\n return preset;\n }\n\n this.apply_preset = function(gfp, preset, enforce) {\n /* translate legacy presets */\n switch (preset) {\n case Lame.R3MIX:\n {\n preset = Lame.V3;\n gfp.VBR = VbrMode.vbr_mtrh;\n break;\n }\n case Lame.MEDIUM:\n {\n preset = Lame.V4;\n gfp.VBR = VbrMode.vbr_rh;\n break;\n }\n case Lame.MEDIUM_FAST:\n {\n preset = Lame.V4;\n gfp.VBR = VbrMode.vbr_mtrh;\n break;\n }\n case Lame.STANDARD:\n {\n preset = Lame.V2;\n gfp.VBR = VbrMode.vbr_rh;\n break;\n }\n case Lame.STANDARD_FAST:\n {\n preset = Lame.V2;\n gfp.VBR = VbrMode.vbr_mtrh;\n break;\n }\n case Lame.EXTREME:\n {\n preset = Lame.V0;\n gfp.VBR = VbrMode.vbr_rh;\n break;\n }\n case Lame.EXTREME_FAST:\n {\n preset = Lame.V0;\n gfp.VBR = VbrMode.vbr_mtrh;\n break;\n }\n case Lame.INSANE:\n {\n preset = 320;\n gfp.preset = preset;\n apply_abr_preset(gfp, preset, enforce);\n gfp.VBR = VbrMode.vbr_off;\n return preset;\n }\n }\n\n gfp.preset = preset;\n {\n switch (preset) {\n case Lame.V9:\n apply_vbr_preset(gfp, 9, enforce);\n return preset;\n case Lame.V8:\n apply_vbr_preset(gfp, 8, enforce);\n return preset;\n case Lame.V7:\n apply_vbr_preset(gfp, 7, enforce);\n return preset;\n case Lame.V6:\n apply_vbr_preset(gfp, 6, enforce);\n return preset;\n case Lame.V5:\n apply_vbr_preset(gfp, 5, enforce);\n return preset;\n case Lame.V4:\n apply_vbr_preset(gfp, 4, enforce);\n return preset;\n case Lame.V3:\n apply_vbr_preset(gfp, 3, enforce);\n return preset;\n case Lame.V2:\n apply_vbr_preset(gfp, 2, enforce);\n return preset;\n case Lame.V1:\n apply_vbr_preset(gfp, 1, enforce);\n return preset;\n case Lame.V0:\n apply_vbr_preset(gfp, 0, enforce);\n return preset;\n default:\n break;\n }\n }\n if (8 <= preset && preset <= 320) {\n return apply_abr_preset(gfp, preset, enforce);\n }\n\n /* no corresponding preset found */\n gfp.preset = 0;\n return preset;\n }\n\n // Rest from getset.c:\n\n /**\n * VBR quality level.
\n * Amplify the scalefactor bands that violate the masking threshold.\n * See ISO 11172-3 Section C.1.5.4.3.5\n *\n * distort[] = noise/masking\n * distort[] > 1 ==> noise is not masked\n * distort[] < 1 ==> noise is masked\n * max_dist = maximum value of distort[]\n *\n * Three algorithms:\n * noise_shaping_amp\n * 0 Amplify all bands with distort[]>1.\n *\n * 1 Amplify all bands with distort[] >= max_dist^(.5);\n * ( 50% in the db scale)\n *\n * 2 Amplify first band with distort[] >= max_dist;\n *\n *\n * For algorithms 0 and 1, if max_dist < 1, then amplify all bands\n * with distort[] >= .95*max_dist. This is to make sure we always\n * amplify at least one band.\n *\n */\n function amp_scalefac_bands(gfp, cod_info, distort, xrpow, bRefine) {\n var gfc = gfp.internal_flags;\n var ifqstep34;\n\n if (cod_info.scalefac_scale == 0) {\n ifqstep34 = 1.29683955465100964055;\n /* 2**(.75*.5) */\n } else {\n ifqstep34 = 1.68179283050742922612;\n /* 2**(.75*1) */\n }\n\n /* compute maximum value of distort[] */\n var trigger = 0;\n for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) {\n if (trigger < distort[sfb])\n trigger = distort[sfb];\n }\n\n var noise_shaping_amp = gfc.noise_shaping_amp;\n if (noise_shaping_amp == 3) {\n if (bRefine)\n noise_shaping_amp = 2;\n else\n noise_shaping_amp = 1;\n }\n switch (noise_shaping_amp) {\n case 2:\n /* amplify exactly 1 band */\n break;\n\n case 1:\n /* amplify bands within 50% of max (on db scale) */\n if (trigger > 1.0)\n trigger = Math.pow(trigger, .5);\n else\n trigger *= .95;\n break;\n\n case 0:\n default:\n /* ISO algorithm. amplify all bands with distort>1 */\n if (trigger > 1.0)\n trigger = 1.0;\n else\n trigger *= .95;\n break;\n }\n\n var j = 0;\n for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) {\n var width = cod_info.width[sfb];\n var l;\n j += width;\n if (distort[sfb] < trigger)\n continue;\n\n if ((gfc.substep_shaping & 2) != 0) {\n gfc.pseudohalf[sfb] = (0 == gfc.pseudohalf[sfb]) ? 1 : 0;\n if (0 == gfc.pseudohalf[sfb] && gfc.noise_shaping_amp == 2)\n return;\n }\n cod_info.scalefac[sfb]++;\n for (l = -width; l < 0; l++) {\n xrpow[j + l] *= ifqstep34;\n if (xrpow[j + l] > cod_info.xrpow_max)\n cod_info.xrpow_max = xrpow[j + l];\n }\n\n if (gfc.noise_shaping_amp == 2)\n return;\n }\n }\n\n /**\n * Takehiro Tominaga 2000-xx-xx\n *\n * turns on scalefac scale and adjusts scalefactors\n */\n function inc_scalefac_scale(cod_info, xrpow) {\n var ifqstep34 = 1.29683955465100964055;\n\n var j = 0;\n for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) {\n var width = cod_info.width[sfb];\n var s = cod_info.scalefac[sfb];\n if (cod_info.preflag != 0)\n s += qupvt.pretab[sfb];\n j += width;\n if ((s & 1) != 0) {\n s++;\n for (var l = -width; l < 0; l++) {\n xrpow[j + l] *= ifqstep34;\n if (xrpow[j + l] > cod_info.xrpow_max)\n cod_info.xrpow_max = xrpow[j + l];\n }\n }\n cod_info.scalefac[sfb] = s >> 1;\n }\n cod_info.preflag = 0;\n cod_info.scalefac_scale = 1;\n }\n\n /**\n * Takehiro Tominaga 2000-xx-xx\n *\n * increases the subblock gain and adjusts scalefactors\n */\n function inc_subblock_gain(gfc, cod_info, xrpow) {\n var sfb;\n var scalefac = cod_info.scalefac;\n\n /* subbloc_gain can't do anything in the long block region */\n for (sfb = 0; sfb < cod_info.sfb_lmax; sfb++) {\n if (scalefac[sfb] >= 16)\n return true;\n }\n\n for (var window = 0; window < 3; window++) {\n var s1 = 0;\n var s2 = 0;\n\n for (sfb = cod_info.sfb_lmax + window; sfb < cod_info.sfbdivide; sfb += 3) {\n if (s1 < scalefac[sfb])\n s1 = scalefac[sfb];\n }\n for (; sfb < cod_info.sfbmax; sfb += 3) {\n if (s2 < scalefac[sfb])\n s2 = scalefac[sfb];\n }\n\n if (s1 < 16 && s2 < 8)\n continue;\n\n if (cod_info.subblock_gain[window] >= 7)\n return true;\n\n /*\n * even though there is no scalefactor for sfb12 subblock gain\n * affects upper frequencies too, that's why we have to go up to\n * SBMAX_s\n */\n cod_info.subblock_gain[window]++;\n var j = gfc.scalefac_band.l[cod_info.sfb_lmax];\n for (sfb = cod_info.sfb_lmax + window; sfb < cod_info.sfbmax; sfb += 3) {\n var amp;\n var width = cod_info.width[sfb];\n var s = scalefac[sfb];\n assert(s >= 0);\n s = s - (4 >> cod_info.scalefac_scale);\n if (s >= 0) {\n scalefac[sfb] = s;\n j += width * 3;\n continue;\n }\n\n scalefac[sfb] = 0;\n {\n var gain = 210 + (s << (cod_info.scalefac_scale + 1));\n amp = qupvt.IPOW20(gain);\n }\n j += width * (window + 1);\n for (var l = -width; l < 0; l++) {\n xrpow[j + l] *= amp;\n if (xrpow[j + l] > cod_info.xrpow_max)\n cod_info.xrpow_max = xrpow[j + l];\n }\n j += width * (3 - window - 1);\n }\n\n {\n var amp = qupvt.IPOW20(202);\n j += cod_info.width[sfb] * (window + 1);\n for (var l = -cod_info.width[sfb]; l < 0; l++) {\n xrpow[j + l] *= amp;\n if (xrpow[j + l] > cod_info.xrpow_max)\n cod_info.xrpow_max = xrpow[j + l];\n }\n }\n }\n return false;\n }\n\n /**\n *
\n * Takehiro Tominaga /date??\n * Robert Hegemann 2000-09-06: made a function of it\n *\n * amplifies scalefactor bands,\n * - if all are already amplified returns 0\n * - if some bands are amplified too much:\n * * try to increase scalefac_scale\n * * if already scalefac_scale was set\n * try on short blocks to increase subblock gain\n *\n */\n function balance_noise(gfp, cod_info, distort, xrpow, bRefine) {\n var gfc = gfp.internal_flags;\n\n amp_scalefac_bands(gfp, cod_info, distort, xrpow, bRefine);\n\n /*\n * check to make sure we have not amplified too much loop_break returns\n * 0 if there is an unamplified scalefac scale_bitcount returns 0 if no\n * scalefactors are too large\n */\n\n var status = loop_break(cod_info);\n\n if (status)\n return false;\n /* all bands amplified */\n\n /*\n * not all scalefactors have been amplified. so these scalefacs are\n * possibly valid. encode them:\n */\n if (gfc.mode_gr == 2)\n status = tk.scale_bitcount(cod_info);\n else\n status = tk.scale_bitcount_lsf(gfc, cod_info);\n\n if (!status)\n return true;\n /* amplified some bands not exceeding limits */\n\n /*\n * some scalefactors are too large. lets try setting scalefac_scale=1\n */\n if (gfc.noise_shaping > 1) {\n Arrays.fill(gfc.pseudohalf, 0);\n if (0 == cod_info.scalefac_scale) {\n inc_scalefac_scale(cod_info, xrpow);\n status = false;\n } else {\n if (cod_info.block_type == Encoder.SHORT_TYPE\n && gfc.subblock_gain > 0) {\n status = (inc_subblock_gain(gfc, cod_info, xrpow) || loop_break(cod_info));\n }\n }\n }\n\n if (!status) {\n if (gfc.mode_gr == 2)\n status = tk.scale_bitcount(cod_info);\n else\n status = tk.scale_bitcount_lsf(gfc, cod_info);\n }\n return !status;\n }\n\n /**\n *
\n * Function: The outer iteration loop controls the masking conditions\n * of all scalefactorbands. It computes the best scalefac and\n * global gain. This module calls the inner iteration loop\n *\n * mt 5/99 completely rewritten to allow for bit reservoir control,\n * mid/side channels with L/R or mid/side masking thresholds,\n * and chooses best quantization instead of last quantization when\n * no distortion free quantization can be found.\n *\n * added VBR support mt 5/99\n *\n * some code shuffle rh 9/00\n *\n *\n * @param l3_xmin\n * allowed distortion\n * @param xrpow\n * coloured magnitudes of spectral\n * @param targ_bits\n * maximum allowed bits\n */\n this.outer_loop = function (gfp, cod_info, l3_xmin, xrpow, ch, targ_bits) {\n var gfc = gfp.internal_flags;\n var cod_info_w = new GrInfo();\n var save_xrpow = new_float(576);\n var distort = new_float(L3Side.SFBMAX);\n var best_noise_info = new CalcNoiseResult();\n var better;\n var prev_noise = new CalcNoiseData();\n var best_part2_3_length = 9999999;\n var bEndOfSearch = false;\n var bRefine = false;\n var best_ggain_pass1 = 0;\n\n bin_search_StepSize(gfc, cod_info, targ_bits, ch, xrpow);\n\n if (0 == gfc.noise_shaping)\n /* fast mode, no noise shaping, we are ready */\n return 100;\n /* default noise_info.over_count */\n\n /* compute the distortion in this quantization */\n /* coefficients and thresholds both l/r (or both mid/side) */\n qupvt.calc_noise(cod_info, l3_xmin, distort, best_noise_info,\n prev_noise);\n best_noise_info.bits = cod_info.part2_3_length;\n\n cod_info_w.assign(cod_info);\n var age = 0;\n System.arraycopy(xrpow, 0, save_xrpow, 0, 576);\n\n while (!bEndOfSearch) {\n /* BEGIN MAIN LOOP */\n do {\n var noise_info = new CalcNoiseResult();\n var search_limit;\n var maxggain = 255;\n\n /*\n * When quantization with no distorted bands is found, allow up\n * to X new unsuccesful tries in serial. This gives us more\n * possibilities for different quant_compare modes. Much more\n * than 3 makes not a big difference, it is only slower.\n */\n\n if ((gfc.substep_shaping & 2) != 0) {\n search_limit = 20;\n } else {\n search_limit = 3;\n }\n\n /*\n * Check if the last scalefactor band is distorted. in VBR mode\n * we can't get rid of the distortion, so quit now and VBR mode\n * will try again with more bits. (makes a 10% speed increase,\n * the files I tested were binary identical, 2000/05/20 Robert\n * Hegemann) distort[] > 1 means noise > allowed noise\n */\n if (gfc.sfb21_extra) {\n if (distort[cod_info_w.sfbmax] > 1.0)\n break;\n if (cod_info_w.block_type == Encoder.SHORT_TYPE\n && (distort[cod_info_w.sfbmax + 1] > 1.0 || distort[cod_info_w.sfbmax + 2] > 1.0))\n break;\n }\n\n /* try a new scalefactor conbination on cod_info_w */\n if (!balance_noise(gfp, cod_info_w, distort, xrpow, bRefine))\n break;\n if (cod_info_w.scalefac_scale != 0)\n maxggain = 254;\n\n /*\n * inner_loop starts with the initial quantization step computed\n * above and slowly increases until the bits < huff_bits. Thus\n * it is important not to start with too large of an inital\n * quantization step. Too small is ok, but inner_loop will take\n * longer\n */\n var huff_bits = targ_bits - cod_info_w.part2_length;\n if (huff_bits <= 0)\n break;\n\n /*\n * increase quantizer stepsize until needed bits are below\n * maximum\n */\n while ((cod_info_w.part2_3_length = tk.count_bits(gfc, xrpow,\n cod_info_w, prev_noise)) > huff_bits\n && cod_info_w.global_gain <= maxggain)\n cod_info_w.global_gain++;\n\n if (cod_info_w.global_gain > maxggain)\n break;\n\n if (best_noise_info.over_count == 0) {\n\n while ((cod_info_w.part2_3_length = tk.count_bits(gfc,\n xrpow, cod_info_w, prev_noise)) > best_part2_3_length\n && cod_info_w.global_gain <= maxggain)\n cod_info_w.global_gain++;\n\n if (cod_info_w.global_gain > maxggain)\n break;\n }\n\n /* compute the distortion in this quantization */\n qupvt.calc_noise(cod_info_w, l3_xmin, distort, noise_info,\n prev_noise);\n noise_info.bits = cod_info_w.part2_3_length;\n\n /*\n * check if this quantization is better than our saved\n * quantization\n */\n if (cod_info.block_type != Encoder.SHORT_TYPE) {\n // NORM, START or STOP type\n better = gfp.quant_comp;\n } else\n better = gfp.quant_comp_short;\n\n better = quant_compare(better, best_noise_info, noise_info,\n cod_info_w, distort) ? 1 : 0;\n\n /* save data so we can restore this quantization later */\n if (better != 0) {\n best_part2_3_length = cod_info.part2_3_length;\n best_noise_info = noise_info;\n cod_info.assign(cod_info_w);\n age = 0;\n /* save data so we can restore this quantization later */\n /* store for later reuse */\n System.arraycopy(xrpow, 0, save_xrpow, 0, 576);\n } else {\n /* early stop? */\n if (gfc.full_outer_loop == 0) {\n if (++age > search_limit\n && best_noise_info.over_count == 0)\n break;\n if ((gfc.noise_shaping_amp == 3) && bRefine && age > 30)\n break;\n if ((gfc.noise_shaping_amp == 3)\n && bRefine\n && (cod_info_w.global_gain - best_ggain_pass1) > 15)\n break;\n }\n }\n } while ((cod_info_w.global_gain + cod_info_w.scalefac_scale) < 255);\n\n if (gfc.noise_shaping_amp == 3) {\n if (!bRefine) {\n /* refine search */\n cod_info_w.assign(cod_info);\n System.arraycopy(save_xrpow, 0, xrpow, 0, 576);\n age = 0;\n best_ggain_pass1 = cod_info_w.global_gain;\n\n bRefine = true;\n } else {\n /* search already refined, stop */\n bEndOfSearch = true;\n }\n\n } else {\n bEndOfSearch = true;\n }\n }\n\n assert((cod_info.global_gain + cod_info.scalefac_scale) <= 255);\n /*\n * finish up\n */\n if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh)\n /* restore for reuse on next try */\n System.arraycopy(save_xrpow, 0, xrpow, 0, 576);\n /*\n * do the 'substep shaping'\n */\n else if ((gfc.substep_shaping & 1) != 0)\n trancate_smallspectrums(gfc, cod_info, l3_xmin, xrpow);\n\n return best_noise_info.over_count;\n }\n\n /**\n * Robert Hegemann 2000-09-06\n *\n * update reservoir status after FINAL quantization/bitrate\n */\n this.iteration_finish_one = function (gfc, gr, ch) {\n var l3_side = gfc.l3_side;\n var cod_info = l3_side.tt[gr][ch];\n\n /*\n * try some better scalefac storage\n */\n tk.best_scalefac_store(gfc, gr, ch, l3_side);\n\n /*\n * best huffman_divide may save some bits too\n */\n if (gfc.use_best_huffman == 1)\n tk.best_huffman_divide(gfc, cod_info);\n\n /*\n * update reservoir status after FINAL quantization/bitrate\n */\n rv.ResvAdjust(gfc, cod_info);\n };\n\n /**\n *\n * 2000-09-04 Robert Hegemann\n *\n * @param l3_xmin\n * allowed distortion of the scalefactor\n * @param xrpow\n * coloured magnitudes of spectral values\n */\n this.VBR_encode_granule = function (gfp, cod_info, l3_xmin, xrpow, ch, min_bits, max_bits) {\n var gfc = gfp.internal_flags;\n var bst_cod_info = new GrInfo();\n var bst_xrpow = new_float(576);\n var Max_bits = max_bits;\n var real_bits = max_bits + 1;\n var this_bits = (max_bits + min_bits) / 2;\n var dbits, over, found = 0;\n var sfb21_extra = gfc.sfb21_extra;\n\n assert(Max_bits <= LameInternalFlags.MAX_BITS_PER_CHANNEL);\n Arrays.fill(bst_cod_info.l3_enc, 0);\n\n /*\n * search within round about 40 bits of optimal\n */\n do {\n assert(this_bits >= min_bits);\n assert(this_bits <= max_bits);\n assert(min_bits <= max_bits);\n\n if (this_bits > Max_bits - 42)\n gfc.sfb21_extra = false;\n else\n gfc.sfb21_extra = sfb21_extra;\n\n over = outer_loop(gfp, cod_info, l3_xmin, xrpow, ch, this_bits);\n\n /*\n * is quantization as good as we are looking for ? in this case: is\n * no scalefactor band distorted?\n */\n if (over <= 0) {\n found = 1;\n /*\n * now we know it can be done with \"real_bits\" and maybe we can\n * skip some iterations\n */\n real_bits = cod_info.part2_3_length;\n\n /*\n * store best quantization so far\n */\n bst_cod_info.assign(cod_info);\n System.arraycopy(xrpow, 0, bst_xrpow, 0, 576);\n\n /*\n * try with fewer bits\n */\n max_bits = real_bits - 32;\n dbits = max_bits - min_bits;\n this_bits = (max_bits + min_bits) / 2;\n } else {\n /*\n * try with more bits\n */\n min_bits = this_bits + 32;\n dbits = max_bits - min_bits;\n this_bits = (max_bits + min_bits) / 2;\n\n if (found != 0) {\n found = 2;\n /*\n * start again with best quantization so far\n */\n cod_info.assign(bst_cod_info);\n System.arraycopy(bst_xrpow, 0, xrpow, 0, 576);\n }\n }\n } while (dbits > 12);\n\n gfc.sfb21_extra = sfb21_extra;\n\n /*\n * found=0 => nothing found, use last one found=1 => we just found the\n * best and left the loop found=2 => we restored a good one and have now\n * l3_enc to restore too\n */\n if (found == 2) {\n System.arraycopy(bst_cod_info.l3_enc, 0, cod_info.l3_enc, 0, 576);\n }\n assert(cod_info.part2_3_length <= Max_bits);\n }\n\n /**\n * Robert Hegemann 2000-09-05\n *\n * calculates * how many bits are available for analog silent granules * how\n * many bits to use for the lowest allowed bitrate * how many bits each\n * bitrate would provide\n */\n this.get_framebits = function (gfp, frameBits) {\n var gfc = gfp.internal_flags;\n\n /*\n * always use at least this many bits per granule per channel unless we\n * detect analog silence, see below\n */\n gfc.bitrate_index = gfc.VBR_min_bitrate;\n var bitsPerFrame = bs.getframebits(gfp);\n\n /*\n * bits for analog silence\n */\n gfc.bitrate_index = 1;\n bitsPerFrame = bs.getframebits(gfp);\n\n for (var i = 1; i <= gfc.VBR_max_bitrate; i++) {\n gfc.bitrate_index = i;\n var mb = new MeanBits(bitsPerFrame);\n frameBits[i] = rv.ResvFrameBegin(gfp, mb);\n bitsPerFrame = mb.bits;\n }\n };\n\n /* RH: this one needs to be overhauled sometime */\n\n /**\n *
\n * 2000-09-04 Robert Hegemann\n *\n * * converts LR to MS coding when necessary\n * * calculates allowed/adjusted quantization noise amounts\n * * detects analog silent frames\n *\n * some remarks:\n * - lower masking depending on Quality setting\n * - quality control together with adjusted ATH MDCT scaling\n * on lower quality setting allocate more noise from\n * ATH masking, and on higher quality setting allocate\n * less noise from ATH masking.\n * - experiments show that going more than 2dB over GPSYCHO's\n * limits ends up in very annoying artefacts\n *\n */\n this.VBR_old_prepare = function (gfp, pe, ms_ener_ratio, ratio, l3_xmin, frameBits, min_bits,\n max_bits, bands) {\n var gfc = gfp.internal_flags;\n\n var masking_lower_db, adjust = 0.0;\n var analog_silence = 1;\n var bits = 0;\n\n gfc.bitrate_index = gfc.VBR_max_bitrate;\n var avg = rv.ResvFrameBegin(gfp, new MeanBits(0)) / gfc.mode_gr;\n\n get_framebits(gfp, frameBits);\n\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n var mxb = qupvt.on_pe(gfp, pe, max_bits[gr], avg, gr, 0);\n if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) {\n ms_convert(gfc.l3_side, gr);\n qupvt.reduce_side(max_bits[gr], ms_ener_ratio[gr], avg, mxb);\n }\n for (var ch = 0; ch < gfc.channels_out; ++ch) {\n var cod_info = gfc.l3_side.tt[gr][ch];\n\n if (cod_info.block_type != Encoder.SHORT_TYPE) {\n // NORM, START or STOP type\n adjust = 1.28 / (1 + Math\n .exp(3.5 - pe[gr][ch] / 300.)) - 0.05;\n masking_lower_db = gfc.PSY.mask_adjust - adjust;\n } else {\n adjust = 2.56 / (1 + Math\n .exp(3.5 - pe[gr][ch] / 300.)) - 0.14;\n masking_lower_db = gfc.PSY.mask_adjust_short - adjust;\n }\n gfc.masking_lower = Math.pow(10.0,\n masking_lower_db * 0.1);\n\n init_outer_loop(gfc, cod_info);\n bands[gr][ch] = qupvt.calc_xmin(gfp, ratio[gr][ch], cod_info,\n l3_xmin[gr][ch]);\n if (bands[gr][ch] != 0)\n analog_silence = 0;\n\n min_bits[gr][ch] = 126;\n\n bits += max_bits[gr][ch];\n }\n }\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n for (var ch = 0; ch < gfc.channels_out; ch++) {\n if (bits > frameBits[gfc.VBR_max_bitrate]) {\n max_bits[gr][ch] *= frameBits[gfc.VBR_max_bitrate];\n max_bits[gr][ch] /= bits;\n }\n if (min_bits[gr][ch] > max_bits[gr][ch])\n min_bits[gr][ch] = max_bits[gr][ch];\n\n }\n /* for ch */\n }\n /* for gr */\n\n return analog_silence;\n };\n\n this.bitpressure_strategy = function (gfc, l3_xmin, min_bits, max_bits) {\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n for (var ch = 0; ch < gfc.channels_out; ch++) {\n var gi = gfc.l3_side.tt[gr][ch];\n var pxmin = l3_xmin[gr][ch];\n var pxminPos = 0;\n for (var sfb = 0; sfb < gi.psy_lmax; sfb++)\n pxmin[pxminPos++] *= 1. + .029 * sfb * sfb\n / Encoder.SBMAX_l / Encoder.SBMAX_l;\n\n if (gi.block_type == Encoder.SHORT_TYPE) {\n for (var sfb = gi.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) {\n pxmin[pxminPos++] *= 1. + .029 * sfb * sfb\n / Encoder.SBMAX_s / Encoder.SBMAX_s;\n pxmin[pxminPos++] *= 1. + .029 * sfb * sfb\n / Encoder.SBMAX_s / Encoder.SBMAX_s;\n pxmin[pxminPos++] *= 1. + .029 * sfb * sfb\n / Encoder.SBMAX_s / Encoder.SBMAX_s;\n }\n }\n max_bits[gr][ch] = 0 | Math.max(min_bits[gr][ch],\n 0.9 * max_bits[gr][ch]);\n }\n }\n };\n\n this.VBR_new_prepare = function (gfp, pe, ratio, l3_xmin, frameBits, max_bits) {\n var gfc = gfp.internal_flags;\n\n var analog_silence = 1;\n var avg = 0, bits = 0;\n var maximum_framebits;\n\n if (!gfp.free_format) {\n gfc.bitrate_index = gfc.VBR_max_bitrate;\n\n var mb = new MeanBits(avg);\n rv.ResvFrameBegin(gfp, mb);\n avg = mb.bits;\n\n get_framebits(gfp, frameBits);\n maximum_framebits = frameBits[gfc.VBR_max_bitrate];\n } else {\n gfc.bitrate_index = 0;\n var mb = new MeanBits(avg);\n maximum_framebits = rv.ResvFrameBegin(gfp, mb);\n avg = mb.bits;\n frameBits[0] = maximum_framebits;\n }\n\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n qupvt.on_pe(gfp, pe, max_bits[gr], avg, gr, 0);\n if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) {\n ms_convert(gfc.l3_side, gr);\n }\n for (var ch = 0; ch < gfc.channels_out; ++ch) {\n var cod_info = gfc.l3_side.tt[gr][ch];\n\n gfc.masking_lower = Math.pow(10.0,\n gfc.PSY.mask_adjust * 0.1);\n\n init_outer_loop(gfc, cod_info);\n if (0 != qupvt.calc_xmin(gfp, ratio[gr][ch], cod_info,\n l3_xmin[gr][ch]))\n analog_silence = 0;\n\n bits += max_bits[gr][ch];\n }\n }\n for (var gr = 0; gr < gfc.mode_gr; gr++) {\n for (var ch = 0; ch < gfc.channels_out; ch++) {\n if (bits > maximum_framebits) {\n max_bits[gr][ch] *= maximum_framebits;\n max_bits[gr][ch] /= bits;\n }\n\n }\n /* for ch */\n }\n /* for gr */\n\n return analog_silence;\n };\n\n /**\n * calculates target bits for ABR encoding\n *\n * mt 2000/05/31\n */\n this.calc_target_bits = function (gfp, pe, ms_ener_ratio, targ_bits, analog_silence_bits, max_frame_bits) {\n var gfc = gfp.internal_flags;\n var l3_side = gfc.l3_side;\n var res_factor;\n var gr, ch, totbits, mean_bits = 0;\n\n gfc.bitrate_index = gfc.VBR_max_bitrate;\n var mb = new MeanBits(mean_bits);\n max_frame_bits[0] = rv.ResvFrameBegin(gfp, mb);\n mean_bits = mb.bits;\n\n gfc.bitrate_index = 1;\n mean_bits = bs.getframebits(gfp) - gfc.sideinfo_len * 8;\n analog_silence_bits[0] = mean_bits / (gfc.mode_gr * gfc.channels_out);\n\n mean_bits = gfp.VBR_mean_bitrate_kbps * gfp.framesize * 1000;\n if ((gfc.substep_shaping & 1) != 0)\n mean_bits *= 1.09;\n mean_bits /= gfp.out_samplerate;\n mean_bits -= gfc.sideinfo_len * 8;\n mean_bits /= (gfc.mode_gr * gfc.channels_out);\n\n /**\n *
\n * res_factor is the percentage of the target bitrate that should\n * be used on average. the remaining bits are added to the\n * bitreservoir and used for difficult to encode frames.\n *\n * Since we are tracking the average bitrate, we should adjust\n * res_factor \"on the fly\", increasing it if the average bitrate\n * is greater than the requested bitrate, and decreasing it\n * otherwise. Reasonable ranges are from .9 to 1.0\n *\n * Until we get the above suggestion working, we use the following\n * tuning:\n * compression ratio res_factor\n * 5.5 (256kbps) 1.0 no need for bitreservoir\n * 11 (128kbps) .93 7% held for reservoir\n *\n * with linear interpolation for other values.\n *\n */\n res_factor = .93 + .07 * (11.0 - gfp.compression_ratio)\n / (11.0 - 5.5);\n if (res_factor < .90)\n res_factor = .90;\n if (res_factor > 1.00)\n res_factor = 1.00;\n\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n var sum = 0;\n for (ch = 0; ch < gfc.channels_out; ch++) {\n targ_bits[gr][ch] = (int)(res_factor * mean_bits);\n\n if (pe[gr][ch] > 700) {\n var add_bits = (int)((pe[gr][ch] - 700) / 1.4);\n\n var cod_info = l3_side.tt[gr][ch];\n targ_bits[gr][ch] = (int)(res_factor * mean_bits);\n\n /* short blocks use a little extra, no matter what the pe */\n if (cod_info.block_type == Encoder.SHORT_TYPE) {\n if (add_bits < mean_bits / 2)\n add_bits = mean_bits / 2;\n }\n /* at most increase bits by 1.5*average */\n if (add_bits > mean_bits * 3 / 2)\n add_bits = mean_bits * 3 / 2;\n else if (add_bits < 0)\n add_bits = 0;\n\n targ_bits[gr][ch] += add_bits;\n }\n if (targ_bits[gr][ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL) {\n targ_bits[gr][ch] = LameInternalFlags.MAX_BITS_PER_CHANNEL;\n }\n sum += targ_bits[gr][ch];\n }\n /* for ch */\n if (sum > LameInternalFlags.MAX_BITS_PER_GRANULE) {\n for (ch = 0; ch < gfc.channels_out; ++ch) {\n targ_bits[gr][ch] *= LameInternalFlags.MAX_BITS_PER_GRANULE;\n targ_bits[gr][ch] /= sum;\n }\n }\n }\n /* for gr */\n\n if (gfc.mode_ext == Encoder.MPG_MD_MS_LR)\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n qupvt.reduce_side(targ_bits[gr], ms_ener_ratio[gr], mean_bits\n * gfc.channels_out,\n LameInternalFlags.MAX_BITS_PER_GRANULE);\n }\n\n /*\n * sum target bits\n */\n totbits = 0;\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n if (targ_bits[gr][ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL)\n targ_bits[gr][ch] = LameInternalFlags.MAX_BITS_PER_CHANNEL;\n totbits += targ_bits[gr][ch];\n }\n }\n\n /*\n * repartion target bits if needed\n */\n if (totbits > max_frame_bits[0]) {\n for (gr = 0; gr < gfc.mode_gr; gr++) {\n for (ch = 0; ch < gfc.channels_out; ch++) {\n targ_bits[gr][ch] *= max_frame_bits[0];\n targ_bits[gr][ch] /= totbits;\n }\n }\n }\n }\n\n}\n\nmodule.exports = Quantize;\n","/*\n * bit reservoir source file\n *\n * Copyright (c) 1999-2000 Mark Taylor\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n * Library General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the\n * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n * Boston, MA 02111-1307, USA.\n */\n\n/* $Id: Reservoir.java,v 1.9 2011/05/24 20:48:06 kenchis Exp $ */\n\n//package mp3;\n\n/**\n * ResvFrameBegin:
\n * 1. The following rule can be used to calculate the maximum\n * number of bits used for one granule [^W frame]:\n */\n\nvar common = require('./common.js');\nvar assert = common.assert;\n\nfunction Reservoir() {\n\tvar bs;\n\n\tthis.setModules = function(_bs) {\n\t\tbs = _bs;\n\t}\n\n\tthis.ResvFrameBegin = function(gfp, mean_bits) {\n\t\tvar gfc = gfp.internal_flags;\n\t\tvar maxmp3buf;\n\t\tvar l3_side = gfc.l3_side;\n\n\t\tvar frameLength = bs.getframebits(gfp);\n\t\tmean_bits.bits = (frameLength - gfc.sideinfo_len * 8) / gfc.mode_gr;\n\n\t\t/**\n\t\t *
\n * At the highest possible bitrate of Layer III (320 kbps\n * per stereo signal [^W^W^W], 48 kHz) the frames must be of\n * [^W^W^W are designed to have] constant length, i.e.\n * one buffer [^W^W the frame] length is:
\n * \n * 320 kbps * 1152/48 kHz = 7680 bit = 960 byte\n * \n * This value is used as the maximum buffer per channel [^W^W] at\n * lower bitrates [than 320 kbps]. At 64 kbps mono or 128 kbps\n * stereo the main granule length is 64 kbps * 576/48 kHz = 768 bit\n * [per granule and channel] at 48 kHz sampling frequency.\n * This means that there is a maximum deviation (short time buffer\n * [= reservoir]) of 7680 - 2*2*768 = 4608 bits is allowed at 64 kbps.\n * The actual deviation is equal to the number of bytes [with the\n * meaning of octets] denoted by the main_data_end offset pointer.\n * The actual maximum deviation is (2^9-1)*8 bit = 4088 bits\n * [for MPEG-1 and (2^8-1)*8 bit for MPEG-2, both are hard limits].\n * ... The xchange of buffer bits between the left and right channel\n * is allowed without restrictions [exception: dual channel].\n * Because of the [constructed] constraint on the buffer size\n * main_data_end is always set to 0 in the case of bit_rate_index==14,\n * i.e. data rate 320 kbps per stereo signal [^W^W^W]. In this case\n * all data are allocated between adjacent header [^W sync] words\n * [, i.e. there is no buffering at all].\n *
\n\t\t * Meaning of the variables:\n\t\t * resvLimit: (0, 8, ..., 8*255 (MPEG-2), 8*511 (MPEG-1))\n\t\t * Number of bits can be stored in previous frame(s) due to\n\t\t * counter size constaints\n\t\t * maxmp3buf: ( ??? ... 8*1951 (MPEG-1 and 2), 8*2047 (MPEG-2.5))\n\t\t * Number of bits allowed to encode one frame (you can take 8*511 bit\n\t\t * from the bit reservoir and at most 8*1440 bit from the current\n\t\t * frame (320 kbps, 32 kHz), so 8*1951 bit is the largest possible\n\t\t * value for MPEG-1 and -2)\n\t\t * \n\t\t * maximum allowed granule/channel size times 4 = 8*2047 bits.,\n\t\t * so this is the absolute maximum supported by the format.\n\t\t * \n\t\t * \n\t\t * fullFrameBits: maximum number of bits available for encoding\n\t\t * the current frame.\n\t\t * \n\t\t * mean_bits: target number of bits per granule.\n\t\t * \n\t\t * frameLength:\n\t\t * \n\t\t * gfc.ResvMax: maximum allowed reservoir\n\t\t * \n\t\t * gfc.ResvSize: current reservoir size\n\t\t * \n\t\t * l3_side.resvDrain_pre:\n\t\t * ancillary data to be added to previous frame:\n\t\t * (only usefull in VBR modes if it is possible to have\n\t\t * maxmp3buf < fullFrameBits)). Currently disabled,\n\t\t * see #define NEW_DRAIN\n\t\t * 2010-02-13: RH now enabled, it seems to be needed for CBR too,\n\t\t * as there exists one example, where the FhG decoder\n\t\t * can't decode a -b320 CBR file anymore.\n\t\t * \n\t\t * l3_side.resvDrain_post:\n\t\t * ancillary data to be added to this frame:\n\t\t * \n\t\t *\n\t\t */\n\n\t\t/* main_data_begin has 9 bits in MPEG-1, 8 bits MPEG-2 */\n\t\tvar resvLimit = (8 * 256) * gfc.mode_gr - 8;\n\n\t\t/*\n\t\t * maximum allowed frame size. dont use more than this number of bits,\n\t\t * even if the frame has the space for them:\n\t\t */\n\t\tif (gfp.brate > 320) {\n\t\t\t/* in freeformat the buffer is constant */\n\t\t\tmaxmp3buf = 8 * ((int) ((gfp.brate * 1000)\n\t\t\t\t\t/ (gfp.out_samplerate / 1152) / 8 + .5));\n\t\t} else {\n\t\t\t/*\n\t\t\t * all mp3 decoders should have enough buffer to handle this value:\n\t\t\t * size of a 320kbps 32kHz frame\n\t\t\t */\n\t\t\tmaxmp3buf = 8 * 1440;\n\n\t\t\t/*\n\t\t\t * Bouvigne suggests this more lax interpretation of the ISO doc\n\t\t\t * instead of using 8*960.\n\t\t\t */\n\n\t\t\tif (gfp.strict_ISO) {\n\t\t\t\tmaxmp3buf = 8 * ((int) (320000 / (gfp.out_samplerate / 1152) / 8 + .5));\n\t\t\t}\n\t\t}\n\n\t\tgfc.ResvMax = maxmp3buf - frameLength;\n\t\tif (gfc.ResvMax > resvLimit)\n\t\t\tgfc.ResvMax = resvLimit;\n\t\tif (gfc.ResvMax < 0 || gfp.disable_reservoir)\n\t\t\tgfc.ResvMax = 0;\n\n\t\tvar fullFrameBits = mean_bits.bits * gfc.mode_gr\n\t\t\t\t+ Math.min(gfc.ResvSize, gfc.ResvMax);\n\n\t\tif (fullFrameBits > maxmp3buf)\n\t\t\tfullFrameBits = maxmp3buf;\n\n\t\tassert (0 == gfc.ResvMax % 8);\n\t\tassert (gfc.ResvMax >= 0);\n\n\t\tl3_side.resvDrain_pre = 0;\n\n\t\t// frame analyzer code\n\t\tif (gfc.pinfo != null) {\n\t\t\t/*\n\t\t\t * expected bits per channel per granule [is this also right for\n\t\t\t * mono/stereo, MPEG-1/2 ?]\n\t\t\t */\n\t\t\tgfc.pinfo.mean_bits = mean_bits.bits / 2;\n\t\t\tgfc.pinfo.resvsize = gfc.ResvSize;\n\t\t}\n\n\t\treturn fullFrameBits;\n\t}\n\n\t/**\n\t * returns targ_bits: target number of bits to use for 1 granule
\n * 4 bytes for Header Tag\n * 4 bytes for Header Flags\n * 100 bytes for entry (toc)\n * 4 bytes for frame size\n * 4 bytes for stream size\n * 4 bytes for VBR scale. a VBR quality indicator: 0=best 100=worst\n * 20 bytes for LAME tag. for example, \"LAME3.12 (beta 6)\"\n * ___________\n * 140 bytes\n *\n */\n var VBRHEADERSIZE = (NUMTOCENTRIES + 4 + 4 + 4 + 4 + 4);\n\n var LAMEHEADERSIZE = (VBRHEADERSIZE + 9 + 1 + 1 + 8\n + 1 + 1 + 3 + 1 + 1 + 2 + 4 + 2 + 2);\n\n /**\n * The size of the Xing header MPEG-1, bit rate in kbps.\n */\n var XING_BITRATE1 = 128;\n /**\n * The size of the Xing header MPEG-2, bit rate in kbps.\n */\n var XING_BITRATE2 = 64;\n /**\n * The size of the Xing header MPEG-2.5, bit rate in kbps.\n */\n var XING_BITRATE25 = 32;\n\n /**\n * ISO-8859-1 charset for byte to string operations.\n */\n var ISO_8859_1 = null; //Charset.forName(\"ISO-8859-1\");\n\n /**\n * VBR header magic string.\n */\n var VBRTag0 = \"Xing\";\n /**\n * VBR header magic string (VBR == VBRMode.vbr_off).\n */\n var VBRTag1 = \"Info\";\n\n /**\n * Lookup table for fast CRC-16 computation. Uses the polynomial\n * x^16+x^15+x^2+1\n */\n var crc16Lookup = [0x0000, 0xC0C1, 0xC181, 0x0140,\n 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741,\n 0x0500, 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41,\n 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 0x0A00, 0xCAC1, 0xCB81, 0x0B40,\n 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801, 0x18C0, 0x1980, 0xD941,\n 0x1B00, 0xDBC1, 0xDA81, 0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40,\n 0xDD01, 0x1DC0, 0x1C80, 0xDC41, 0x1400, 0xD4C1, 0xD581, 0x1540,\n 0xD701, 0x17C0, 0x1680, 0xD641, 0xD201, 0x12C0, 0x1380, 0xD341,\n 0x1100, 0xD1C1, 0xD081, 0x1040, 0xF001, 0x30C0, 0x3180, 0xF141,\n 0x3300, 0xF3C1, 0xF281, 0x3240, 0x3600, 0xF6C1, 0xF781, 0x3740,\n 0xF501, 0x35C0, 0x3480, 0xF441, 0x3C00, 0xFCC1, 0xFD81, 0x3D40,\n 0xFF01, 0x3FC0, 0x3E80, 0xFE41, 0xFA01, 0x3AC0, 0x3B80, 0xFB41,\n 0x3900, 0xF9C1, 0xF881, 0x3840, 0x2800, 0xE8C1, 0xE981, 0x2940,\n 0xEB01, 0x2BC0, 0x2A80, 0xEA41, 0xEE01, 0x2EC0, 0x2F80, 0xEF41,\n 0x2D00, 0xEDC1, 0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541,\n 0x2700, 0xE7C1, 0xE681, 0x2640, 0x2200, 0xE2C1, 0xE381, 0x2340,\n 0xE101, 0x21C0, 0x2080, 0xE041, 0xA001, 0x60C0, 0x6180, 0xA141,\n 0x6300, 0xA3C1, 0xA281, 0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740,\n 0xA501, 0x65C0, 0x6480, 0xA441, 0x6C00, 0xACC1, 0xAD81, 0x6D40,\n 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01, 0x6AC0, 0x6B80, 0xAB41,\n 0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1, 0xB981, 0x7940,\n 0xBB01, 0x7BC0, 0x7A80, 0xBA41, 0xBE01, 0x7EC0, 0x7F80, 0xBF41,\n 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 0xB401, 0x74C0, 0x7580, 0xB541,\n 0x7700, 0xB7C1, 0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381, 0x7340,\n 0xB101, 0x71C0, 0x7080, 0xB041, 0x5000, 0x90C1, 0x9181, 0x5140,\n 0x9301, 0x53C0, 0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741,\n 0x5500, 0x95C1, 0x9481, 0x5440, 0x9C01, 0x5CC0, 0x5D80, 0x9D41,\n 0x5F00, 0x9FC1, 0x9E81, 0x5E40, 0x5A00, 0x9AC1, 0x9B81, 0x5B40,\n 0x9901, 0x59C0, 0x5880, 0x9841, 0x8801, 0x48C0, 0x4980, 0x8941,\n 0x4B00, 0x8BC1, 0x8A81, 0x4A40, 0x4E00, 0x8EC1, 0x8F81, 0x4F40,\n 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 0x4400, 0x84C1, 0x8581, 0x4540,\n 0x8701, 0x47C0, 0x4680, 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341,\n 0x4100, 0x81C1, 0x8081, 0x4040];\n\n /***********************************************************************\n * Robert Hegemann 2001-01-17\n ***********************************************************************/\n\n function addVbr(v, bitrate) {\n v.nVbrNumFrames++;\n v.sum += bitrate;\n v.seen++;\n\n if (v.seen < v.want) {\n return;\n }\n\n if (v.pos < v.size) {\n v.bag[v.pos] = v.sum;\n v.pos++;\n v.seen = 0;\n }\n if (v.pos == v.size) {\n for (var i = 1; i < v.size; i += 2) {\n v.bag[i / 2] = v.bag[i];\n }\n v.want *= 2;\n v.pos /= 2;\n }\n }\n\n function xingSeekTable(v, t) {\n if (v.pos <= 0)\n return;\n\n for (var i = 1; i < NUMTOCENTRIES; ++i) {\n var j = i / NUMTOCENTRIES, act, sum;\n var indx = 0 | (Math.floor(j * v.pos));\n if (indx > v.pos - 1)\n indx = v.pos - 1;\n act = v.bag[indx];\n sum = v.sum;\n var seek_point = 0 | (256. * act / sum);\n if (seek_point > 255)\n seek_point = 255;\n t[i] = 0xff & seek_point;\n }\n }\n\n /**\n * Add VBR entry, used to fill the VBR TOC entries.\n *\n * @param gfp\n * global flags\n */\n this.addVbrFrame = function (gfp) {\n var gfc = gfp.internal_flags;\n var kbps = Tables.bitrate_table[gfp.version][gfc.bitrate_index];\n assert(gfc.VBR_seek_table.bag != null);\n addVbr(gfc.VBR_seek_table, kbps);\n }\n\n /**\n * Read big endian integer (4-bytes) from header.\n *\n * @param buf\n * header containing the integer\n * @param bufPos\n * offset into the header\n * @return extracted integer\n */\n function extractInteger(buf, bufPos) {\n var x = buf[bufPos + 0] & 0xff;\n x <<= 8;\n x |= buf[bufPos + 1] & 0xff;\n x <<= 8;\n x |= buf[bufPos + 2] & 0xff;\n x <<= 8;\n x |= buf[bufPos + 3] & 0xff;\n return x;\n }\n\n /**\n * Write big endian integer (4-bytes) in the header.\n *\n * @param buf\n * header to write the integer into\n * @param bufPos\n * offset into the header\n * @param value\n * integer value to write\n */\n function createInteger(buf, bufPos, value) {\n buf[bufPos + 0] = 0xff & ((value >> 24) & 0xff);\n buf[bufPos + 1] = 0xff & ((value >> 16) & 0xff);\n buf[bufPos + 2] = 0xff & ((value >> 8) & 0xff);\n buf[bufPos + 3] = 0xff & (value & 0xff);\n }\n\n /**\n * Write big endian short (2-bytes) in the header.\n *\n * @param buf\n * header to write the integer into\n * @param bufPos\n * offset into the header\n * @param value\n * integer value to write\n */\n function createShort(buf, bufPos, value) {\n buf[bufPos + 0] = 0xff & ((value >> 8) & 0xff);\n buf[bufPos + 1] = 0xff & (value & 0xff);\n }\n\n /**\n * Check for magic strings (Xing/Info).\n *\n * @param buf\n * header to check\n * @param bufPos\n * header offset to check\n * @return magic string found\n */\n function isVbrTag(buf, bufPos) {\n return new String(buf, bufPos, VBRTag0.length(), ISO_8859_1)\n .equals(VBRTag0)\n || new String(buf, bufPos, VBRTag1.length(), ISO_8859_1)\n .equals(VBRTag1);\n }\n\n function shiftInBitsValue(x, n, v) {\n return 0xff & ((x << n) | (v & ~(-1 << n)));\n }\n\n /**\n * Construct the MP3 header using the settings of the global flags.\n *\n * \n *\n * @param gfp\n * global flags\n * @param buffer\n * header\n */\n function setLameTagFrameHeader(gfp, buffer) {\n var gfc = gfp.internal_flags;\n\n // MP3 Sync Word\n buffer[0] = shiftInBitsValue(buffer[0], 8, 0xff);\n\n buffer[1] = shiftInBitsValue(buffer[1], 3, 7);\n buffer[1] = shiftInBitsValue(buffer[1], 1,\n (gfp.out_samplerate < 16000) ? 0 : 1);\n // Version\n buffer[1] = shiftInBitsValue(buffer[1], 1, gfp.version);\n // 01 == Layer 3\n buffer[1] = shiftInBitsValue(buffer[1], 2, 4 - 3);\n // Error protection\n buffer[1] = shiftInBitsValue(buffer[1], 1, (!gfp.error_protection) ? 1\n : 0);\n\n // Bit rate\n buffer[2] = shiftInBitsValue(buffer[2], 4, gfc.bitrate_index);\n // Frequency\n buffer[2] = shiftInBitsValue(buffer[2], 2, gfc.samplerate_index);\n // Pad. Bit\n buffer[2] = shiftInBitsValue(buffer[2], 1, 0);\n // Priv. Bit\n buffer[2] = shiftInBitsValue(buffer[2], 1, gfp.extension);\n\n // Mode\n buffer[3] = shiftInBitsValue(buffer[3], 2, gfp.mode.ordinal());\n // Mode extension (Used with Joint Stereo)\n buffer[3] = shiftInBitsValue(buffer[3], 2, gfc.mode_ext);\n // Copy\n buffer[3] = shiftInBitsValue(buffer[3], 1, gfp.copyright);\n // Original\n buffer[3] = shiftInBitsValue(buffer[3], 1, gfp.original);\n // Emphasis\n buffer[3] = shiftInBitsValue(buffer[3], 2, gfp.emphasis);\n\n /* the default VBR header. 48 kbps layer III, no padding, no crc */\n /* but sampling freq, mode and copyright/copy protection taken */\n /* from first valid frame */\n buffer[0] = 0xff;\n var abyte = 0xff & (buffer[1] & 0xf1);\n var bitrate;\n if (1 == gfp.version) {\n bitrate = XING_BITRATE1;\n } else {\n if (gfp.out_samplerate < 16000)\n bitrate = XING_BITRATE25;\n else\n bitrate = XING_BITRATE2;\n }\n\n if (gfp.VBR == VbrMode.vbr_off)\n bitrate = gfp.brate;\n\n var bbyte;\n if (gfp.free_format)\n bbyte = 0x00;\n else\n bbyte = 0xff & (16 * lame.BitrateIndex(bitrate, gfp.version,\n gfp.out_samplerate));\n\n /*\n * Use as much of the info from the real frames in the Xing header:\n * samplerate, channels, crc, etc...\n */\n if (gfp.version == 1) {\n /* MPEG1 */\n buffer[1] = 0xff & (abyte | 0x0a);\n /* was 0x0b; */\n abyte = 0xff & (buffer[2] & 0x0d);\n /* AF keep also private bit */\n buffer[2] = 0xff & (bbyte | abyte);\n /* 64kbs MPEG1 frame */\n } else {\n /* MPEG2 */\n buffer[1] = 0xff & (abyte | 0x02);\n /* was 0x03; */\n abyte = 0xff & (buffer[2] & 0x0d);\n /* AF keep also private bit */\n buffer[2] = 0xff & (bbyte | abyte);\n /* 64kbs MPEG2 frame */\n }\n }\n\n /**\n * Get VBR tag information\n *\n * @param buf\n * header to analyze\n * @param bufPos\n * offset into the header\n * @return VBR tag data\n */\n this.getVbrTag = function (buf) {\n var pTagData = new VBRTagData();\n var bufPos = 0;\n\n /* get Vbr header data */\n pTagData.flags = 0;\n\n /* get selected MPEG header data */\n var hId = (buf[bufPos + 1] >> 3) & 1;\n var hSrIndex = (buf[bufPos + 2] >> 2) & 3;\n var hMode = (buf[bufPos + 3] >> 6) & 3;\n var hBitrate = ((buf[bufPos + 2] >> 4) & 0xf);\n hBitrate = Tables.bitrate_table[hId][hBitrate];\n\n /* check for FFE syncword */\n if ((buf[bufPos + 1] >> 4) == 0xE)\n pTagData.samprate = Tables.samplerate_table[2][hSrIndex];\n else\n pTagData.samprate = Tables.samplerate_table[hId][hSrIndex];\n\n /* determine offset of header */\n if (hId != 0) {\n /* mpeg1 */\n if (hMode != 3)\n bufPos += (32 + 4);\n else\n bufPos += (17 + 4);\n } else {\n /* mpeg2 */\n if (hMode != 3)\n bufPos += (17 + 4);\n else\n bufPos += (9 + 4);\n }\n\n if (!isVbrTag(buf, bufPos))\n return null;\n\n bufPos += 4;\n\n pTagData.hId = hId;\n\n /* get flags */\n var head_flags = pTagData.flags = extractInteger(buf, bufPos);\n bufPos += 4;\n\n if ((head_flags & FRAMES_FLAG) != 0) {\n pTagData.frames = extractInteger(buf, bufPos);\n bufPos += 4;\n }\n\n if ((head_flags & BYTES_FLAG) != 0) {\n pTagData.bytes = extractInteger(buf, bufPos);\n bufPos += 4;\n }\n\n if ((head_flags & TOC_FLAG) != 0) {\n if (pTagData.toc != null) {\n for (var i = 0; i < NUMTOCENTRIES; i++)\n pTagData.toc[i] = buf[bufPos + i];\n }\n bufPos += NUMTOCENTRIES;\n }\n\n pTagData.vbrScale = -1;\n\n if ((head_flags & VBR_SCALE_FLAG) != 0) {\n pTagData.vbrScale = extractInteger(buf, bufPos);\n bufPos += 4;\n }\n\n pTagData.headersize = ((hId + 1) * 72000 * hBitrate)\n / pTagData.samprate;\n\n bufPos += 21;\n var encDelay = buf[bufPos + 0] << 4;\n encDelay += buf[bufPos + 1] >> 4;\n var encPadding = (buf[bufPos + 1] & 0x0F) << 8;\n encPadding += buf[bufPos + 2] & 0xff;\n /* check for reasonable values (this may be an old Xing header, */\n /* not a INFO tag) */\n if (encDelay < 0 || encDelay > 3000)\n encDelay = -1;\n if (encPadding < 0 || encPadding > 3000)\n encPadding = -1;\n\n pTagData.encDelay = encDelay;\n pTagData.encPadding = encPadding;\n\n /* success */\n return pTagData;\n }\n\n /**\n * Initializes the header\n *\n * @param gfp\n * global flags\n */\n this.InitVbrTag = function (gfp) {\n var gfc = gfp.internal_flags;\n\n /**\n *
\n * Xing VBR pretends to be a 48kbs layer III frame. (at 44.1kHz).\n * (at 48kHz they use 56kbs since 48kbs frame not big enough for\n * table of contents)\n * let's always embed Xing header inside a 64kbs layer III frame.\n * this gives us enough room for a LAME version string too.\n * size determined by sampling frequency (MPEG1)\n * 32kHz: 216 bytes@48kbs 288bytes@ 64kbs\n * 44.1kHz: 156 bytes 208bytes@64kbs (+1 if padding = 1)\n * 48kHz: 144 bytes 192\n *\n * MPEG 2 values are the same since the framesize and samplerate\n * are each reduced by a factor of 2.\n *\n */\n var kbps_header;\n if (1 == gfp.version) {\n kbps_header = XING_BITRATE1;\n } else {\n if (gfp.out_samplerate < 16000)\n kbps_header = XING_BITRATE25;\n else\n kbps_header = XING_BITRATE2;\n }\n\n if (gfp.VBR == VbrMode.vbr_off)\n kbps_header = gfp.brate;\n\n // make sure LAME Header fits into Frame\n var totalFrameSize = ((gfp.version + 1) * 72000 * kbps_header)\n / gfp.out_samplerate;\n var headerSize = (gfc.sideinfo_len + LAMEHEADERSIZE);\n gfc.VBR_seek_table.TotalFrameSize = totalFrameSize;\n if (totalFrameSize < headerSize || totalFrameSize > MAXFRAMESIZE) {\n /* disable tag, it wont fit */\n gfp.bWriteVbrTag = false;\n return;\n }\n\n gfc.VBR_seek_table.nVbrNumFrames = 0;\n gfc.VBR_seek_table.nBytesWritten = 0;\n gfc.VBR_seek_table.sum = 0;\n\n gfc.VBR_seek_table.seen = 0;\n gfc.VBR_seek_table.want = 1;\n gfc.VBR_seek_table.pos = 0;\n\n if (gfc.VBR_seek_table.bag == null) {\n gfc.VBR_seek_table.bag = new int[400];\n gfc.VBR_seek_table.size = 400;\n }\n\n // write dummy VBR tag of all 0's into bitstream\n var buffer = new_byte(MAXFRAMESIZE);\n\n setLameTagFrameHeader(gfp, buffer);\n var n = gfc.VBR_seek_table.TotalFrameSize;\n for (var i = 0; i < n; ++i) {\n bs.add_dummy_byte(gfp, buffer[i] & 0xff, 1);\n }\n }\n\n /**\n * Fast CRC-16 computation (uses table crc16Lookup).\n *\n * @param value\n * @param crc\n * @return\n */\n function crcUpdateLookup(value, crc) {\n var tmp = crc ^ value;\n crc = (crc >> 8) ^ crc16Lookup[tmp & 0xff];\n return crc;\n }\n\n this.updateMusicCRC = function (crc, buffer, bufferPos, size) {\n for (var i = 0; i < size; ++i)\n crc[0] = crcUpdateLookup(buffer[bufferPos + i], crc[0]);\n }\n\n /**\n * Write LAME info: mini version + info on various switches used (Jonathan\n * Dee 2001/08/31).\n *\n * @param gfp\n * global flags\n * @param musicLength\n * music length\n * @param streamBuffer\n * pointer to output buffer\n * @param streamBufferPos\n * offset into the output buffer\n * @param crc\n * computation of CRC-16 of Lame Tag so far (starting at frame\n * sync)\n * @return number of bytes written to the stream\n */\n function putLameVBR(gfp, musicLength, streamBuffer, streamBufferPos, crc) {\n var gfc = gfp.internal_flags;\n var bytesWritten = 0;\n\n /* encoder delay */\n var encDelay = gfp.encoder_delay;\n /* encoder padding */\n var encPadding = gfp.encoder_padding;\n\n /* recall: gfp.VBR_q is for example set by the switch -V */\n /* gfp.quality by -q, -h, -f, etc */\n var quality = (100 - 10 * gfp.VBR_q - gfp.quality);\n\n var version = v.getLameVeryShortVersion();\n var vbr;\n var revision = 0x00;\n var revMethod;\n // numbering different in vbr_mode vs. Lame tag\n var vbrTypeTranslator = [1, 5, 3, 2, 4, 0, 3];\n var lowpass = 0 | (((gfp.lowpassfreq / 100.0) + .5) > 255 ? 255\n : (gfp.lowpassfreq / 100.0) + .5);\n var peakSignalAmplitude = 0;\n var radioReplayGain = 0;\n var audiophileReplayGain = 0;\n var noiseShaping = gfp.internal_flags.noise_shaping;\n var stereoMode = 0;\n var nonOptimal = 0;\n var sourceFreq = 0;\n var misc = 0;\n var musicCRC = 0;\n\n // psy model type: Gpsycho or NsPsytune\n var expNPsyTune = (gfp.exp_nspsytune & 1) != 0;\n var safeJoint = (gfp.exp_nspsytune & 2) != 0;\n var noGapMore = false;\n var noGapPrevious = false;\n var noGapCount = gfp.internal_flags.nogap_total;\n var noGapCurr = gfp.internal_flags.nogap_current;\n\n // 4 bits\n var athType = gfp.ATHtype;\n var flags = 0;\n\n // vbr modes\n var abrBitrate;\n switch (gfp.VBR) {\n case vbr_abr:\n abrBitrate = gfp.VBR_mean_bitrate_kbps;\n break;\n case vbr_off:\n abrBitrate = gfp.brate;\n break;\n default:\n abrBitrate = gfp.VBR_min_bitrate_kbps;\n }\n\n // revision and vbr method\n if (gfp.VBR.ordinal() < vbrTypeTranslator.length)\n vbr = vbrTypeTranslator[gfp.VBR.ordinal()];\n else\n vbr = 0x00; // unknown\n\n revMethod = 0x10 * revision + vbr;\n\n // ReplayGain\n if (gfc.findReplayGain) {\n if (gfc.RadioGain > 0x1FE)\n gfc.RadioGain = 0x1FE;\n if (gfc.RadioGain < -0x1FE)\n gfc.RadioGain = -0x1FE;\n\n // set name code\n radioReplayGain = 0x2000;\n // set originator code to `determined automatically'\n radioReplayGain |= 0xC00;\n\n if (gfc.RadioGain >= 0) {\n // set gain adjustment\n radioReplayGain |= gfc.RadioGain;\n } else {\n // set the sign bit\n radioReplayGain |= 0x200;\n // set gain adjustment\n radioReplayGain |= -gfc.RadioGain;\n }\n }\n\n // peak sample\n if (gfc.findPeakSample)\n peakSignalAmplitude = Math\n .abs(0 | ((( gfc.PeakSample) / 32767.0) * Math.pow(2, 23) + .5));\n\n // nogap\n if (noGapCount != -1) {\n if (noGapCurr > 0)\n noGapPrevious = true;\n\n if (noGapCurr < noGapCount - 1)\n noGapMore = true;\n }\n\n // flags\n flags = athType + ((expNPsyTune ? 1 : 0) << 4)\n + ((safeJoint ? 1 : 0) << 5) + ((noGapMore ? 1 : 0) << 6)\n + ((noGapPrevious ? 1 : 0) << 7);\n\n if (quality < 0)\n quality = 0;\n\n // stereo mode field (Intensity stereo is not implemented)\n switch (gfp.mode) {\n case MONO:\n stereoMode = 0;\n break;\n case STEREO:\n stereoMode = 1;\n break;\n case DUAL_CHANNEL:\n stereoMode = 2;\n break;\n case JOINT_STEREO:\n if (gfp.force_ms)\n stereoMode = 4;\n else\n stereoMode = 3;\n break;\n case NOT_SET:\n //$FALL-THROUGH$\n default:\n stereoMode = 7;\n break;\n }\n\n if (gfp.in_samplerate <= 32000)\n sourceFreq = 0x00;\n else if (gfp.in_samplerate == 48000)\n sourceFreq = 0x02;\n else if (gfp.in_samplerate > 48000)\n sourceFreq = 0x03;\n else {\n // default is 44100Hz\n sourceFreq = 0x01;\n }\n\n // Check if the user overrided the default LAME behavior with some\n // nasty options\n if (gfp.short_blocks == ShortBlock.short_block_forced\n || gfp.short_blocks == ShortBlock.short_block_dispensed\n || ((gfp.lowpassfreq == -1) && (gfp.highpassfreq == -1)) || /* \"-k\" */\n (gfp.scale_left < gfp.scale_right)\n || (gfp.scale_left > gfp.scale_right)\n || (gfp.disable_reservoir && gfp.brate < 320) || gfp.noATH\n || gfp.ATHonly || (athType == 0) || gfp.in_samplerate <= 32000)\n nonOptimal = 1;\n\n misc = noiseShaping + (stereoMode << 2) + (nonOptimal << 5)\n + (sourceFreq << 6);\n\n musicCRC = gfc.nMusicCRC;\n\n // Write all this information into the stream\n\n createInteger(streamBuffer, streamBufferPos + bytesWritten, quality);\n bytesWritten += 4;\n\n for (var j = 0; j < 9; j++) {\n streamBuffer[streamBufferPos + bytesWritten + j] = 0xff & version .charAt(j);\n }\n bytesWritten += 9;\n\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & revMethod;\n bytesWritten++;\n\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & lowpass;\n bytesWritten++;\n\n createInteger(streamBuffer, streamBufferPos + bytesWritten,\n peakSignalAmplitude);\n bytesWritten += 4;\n\n createShort(streamBuffer, streamBufferPos + bytesWritten,\n radioReplayGain);\n bytesWritten += 2;\n\n createShort(streamBuffer, streamBufferPos + bytesWritten,\n audiophileReplayGain);\n bytesWritten += 2;\n\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & flags;\n bytesWritten++;\n\n if (abrBitrate >= 255)\n streamBuffer[streamBufferPos + bytesWritten] = 0xFF;\n else\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & abrBitrate;\n bytesWritten++;\n\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & (encDelay >> 4);\n streamBuffer[streamBufferPos + bytesWritten + 1] = 0xff & ((encDelay << 4) + (encPadding >> 8));\n streamBuffer[streamBufferPos + bytesWritten + 2] = 0xff & encPadding;\n\n bytesWritten += 3;\n\n streamBuffer[streamBufferPos + bytesWritten] = 0xff & misc;\n bytesWritten++;\n\n // unused in rev0\n streamBuffer[streamBufferPos + bytesWritten++] = 0;\n\n createShort(streamBuffer, streamBufferPos + bytesWritten, gfp.preset);\n bytesWritten += 2;\n\n createInteger(streamBuffer, streamBufferPos + bytesWritten, musicLength);\n bytesWritten += 4;\n\n createShort(streamBuffer, streamBufferPos + bytesWritten, musicCRC);\n bytesWritten += 2;\n\n // Calculate tag CRC.... must be done here, since it includes previous\n // information\n\n for (var i = 0; i < bytesWritten; i++)\n crc = crcUpdateLookup(streamBuffer[streamBufferPos + i], crc);\n\n createShort(streamBuffer, streamBufferPos + bytesWritten, crc);\n bytesWritten += 2;\n\n return bytesWritten;\n }\n\n function skipId3v2(fpStream) {\n // seek to the beginning of the stream\n fpStream.seek(0);\n // read 10 bytes in case there's an ID3 version 2 header here\n var id3v2Header = new_byte(10);\n fpStream.readFully(id3v2Header);\n /* does the stream begin with the ID3 version 2 file identifier? */\n var id3v2TagSize;\n if (!new String(id3v2Header, \"ISO-8859-1\").startsWith(\"ID3\")) {\n /*\n * the tag size (minus the 10-byte header) is encoded into four\n * bytes where the most significant bit is clear in each byte\n */\n id3v2TagSize = (((id3v2Header[6] & 0x7f) << 21)\n | ((id3v2Header[7] & 0x7f) << 14)\n | ((id3v2Header[8] & 0x7f) << 7) | (id3v2Header[9] & 0x7f))\n + id3v2Header.length;\n } else {\n /* no ID3 version 2 tag in this stream */\n id3v2TagSize = 0;\n }\n return id3v2TagSize;\n }\n\n this.getLameTagFrame = function (gfp, buffer) {\n var gfc = gfp.internal_flags;\n\n if (!gfp.bWriteVbrTag) {\n return 0;\n }\n if (gfc.Class_ID != Lame.LAME_ID) {\n return 0;\n }\n if (gfc.VBR_seek_table.pos <= 0) {\n return 0;\n }\n if (buffer.length < gfc.VBR_seek_table.TotalFrameSize) {\n return gfc.VBR_seek_table.TotalFrameSize;\n }\n\n Arrays.fill(buffer, 0, gfc.VBR_seek_table.TotalFrameSize, 0);\n\n // 4 bytes frame header\n setLameTagFrameHeader(gfp, buffer);\n\n // Create TOC entries\n var toc = new_byte(NUMTOCENTRIES);\n\n if (gfp.free_format) {\n for (var i = 1; i < NUMTOCENTRIES; ++i)\n toc[i] = 0xff & (255 * i / 100);\n } else {\n xingSeekTable(gfc.VBR_seek_table, toc);\n }\n\n // Start writing the tag after the zero frame\n var streamIndex = gfc.sideinfo_len;\n /**\n * Note: Xing header specifies that Xing data goes in the ancillary data\n * with NO ERROR PROTECTION. If error protecton in enabled, the Xing\n * data still starts at the same offset, and now it is in sideinfo data\n * block, and thus will not decode correctly by non-Xing tag aware\n * players\n */\n if (gfp.error_protection)\n streamIndex -= 2;\n\n // Put Vbr tag\n if (gfp.VBR == VbrMode.vbr_off) {\n buffer[streamIndex++] = 0xff & VBRTag1.charAt(0);\n buffer[streamIndex++] = 0xff & VBRTag1.charAt(1);\n buffer[streamIndex++] = 0xff & VBRTag1.charAt(2);\n buffer[streamIndex++] = 0xff & VBRTag1.charAt(3);\n\n } else {\n buffer[streamIndex++] = 0xff & VBRTag0.charAt(0);\n buffer[streamIndex++] = 0xff & VBRTag0.charAt(1);\n buffer[streamIndex++] = 0xff & VBRTag0.charAt(2);\n buffer[streamIndex++] = 0xff & VBRTag0.charAt(3);\n }\n\n // Put header flags\n createInteger(buffer, streamIndex, FRAMES_FLAG + BYTES_FLAG + TOC_FLAG\n + VBR_SCALE_FLAG);\n streamIndex += 4;\n\n // Put Total Number of frames\n createInteger(buffer, streamIndex, gfc.VBR_seek_table.nVbrNumFrames);\n streamIndex += 4;\n\n // Put total audio stream size, including Xing/LAME Header\n var streamSize = (gfc.VBR_seek_table.nBytesWritten + gfc.VBR_seek_table.TotalFrameSize);\n createInteger(buffer, streamIndex, 0 | streamSize);\n streamIndex += 4;\n\n /* Put TOC */\n System.arraycopy(toc, 0, buffer, streamIndex, toc.length);\n streamIndex += toc.length;\n\n if (gfp.error_protection) {\n // (jo) error_protection: add crc16 information to header\n bs.CRC_writeheader(gfc, buffer);\n }\n\n // work out CRC so far: initially crc = 0\n var crc = 0x00;\n for (var i = 0; i < streamIndex; i++)\n crc = crcUpdateLookup(buffer[i], crc);\n // Put LAME VBR info\n streamIndex += putLameVBR(gfp, streamSize, buffer, streamIndex, crc);\n\n return gfc.VBR_seek_table.TotalFrameSize;\n }\n\n /**\n * Write final VBR tag to the file.\n *\n * @param gfp\n * global flags\n * @param stream\n * stream to add the VBR tag to\n * @return 0 (OK), -1 else\n * @throws IOException\n * I/O error\n */\n this.putVbrTag = function (gfp, stream) {\n var gfc = gfp.internal_flags;\n\n if (gfc.VBR_seek_table.pos <= 0)\n return -1;\n\n // Seek to end of file\n stream.seek(stream.length());\n\n // Get file size, abort if file has zero length.\n if (stream.length() == 0)\n return -1;\n\n // The VBR tag may NOT be located at the beginning of the stream. If an\n // ID3 version 2 tag was added, then it must be skipped to write the VBR\n // tag data.\n var id3v2TagSize = skipId3v2(stream);\n\n // Seek to the beginning of the stream\n stream.seek(id3v2TagSize);\n\n var buffer = new_byte(MAXFRAMESIZE);\n var bytes = getLameTagFrame(gfp, buffer);\n if (bytes > buffer.length) {\n return -1;\n }\n\n if (bytes < 1) {\n return 0;\n }\n\n // Put it all to disk again\n stream.write(buffer, 0, bytes);\n // success\n return 0;\n }\n\n}\n\nmodule.exports = VBRTag;\n","var common = require('./common.js');\nvar System = common.System;\nvar VbrMode = common.VbrMode;\nvar Float = common.Float;\nvar ShortBlock = common.ShortBlock;\nvar Util = common.Util;\nvar Arrays = common.Arrays;\nvar new_array_n = common.new_array_n;\nvar new_byte = common.new_byte;\nvar new_double = common.new_double;\nvar new_float = common.new_float;\nvar new_float_n = common.new_float_n;\nvar new_int = common.new_int;\nvar new_int_n = common.new_int_n;\nvar assert = common.assert;\n\nLame = require('./Lame.js');\nPresets = require('./Presets.js');\nGainAnalysis = require('./GainAnalysis.js');\nQuantizePVT = require('./QuantizePVT.js');\nQuantize = require('./Quantize.js');\nTakehiro = require('./Takehiro.js');\nReservoir = require('./Reservoir.js');\nMPEGMode = require('./MPEGMode.js');\nBitStream = require('./BitStream.js');\nvar Encoder = require('./Encoder.js');\nvar Version = require('./Version.js');\nvar VBRTag = require('./VBRTag.js');\n\nfunction GetAudio() {\n var parse;\n var mpg;\n\n this.setModules = function (parse2, mpg2) {\n parse = parse2;\n mpg = mpg2;\n }\n}\n\n\nfunction Parse() {\n var ver;\n var id3;\n var pre;\n\n this.setModules = function (ver2, id32, pre2) {\n ver = ver2;\n id3 = id32;\n pre = pre2;\n }\n}\n\nfunction MPGLib() {\n}\n\nfunction ID3Tag() {\n var bits;\n var ver;\n\n this.setModules = function (_bits, _ver) {\n bits = _bits;\n ver = _ver;\n }\n}\n\nfunction Mp3Encoder(channels, samplerate, kbps) {\n if (arguments.length != 3) {\n console.error('WARN: Mp3Encoder(channels, samplerate, kbps) not specified');\n channels = 1;\n samplerate = 44100;\n kbps = 128;\n }\n var lame = new Lame();\n var gaud = new GetAudio();\n var ga = new GainAnalysis();\n var bs = new BitStream();\n var p = new Presets();\n var qupvt = new QuantizePVT();\n var qu = new Quantize();\n var vbr = new VBRTag();\n var ver = new Version();\n var id3 = new ID3Tag();\n var rv = new Reservoir();\n var tak = new Takehiro();\n var parse = new Parse();\n var mpg = new MPGLib();\n\n lame.setModules(ga, bs, p, qupvt, qu, vbr, ver, id3, mpg);\n bs.setModules(ga, mpg, ver, vbr);\n id3.setModules(bs, ver);\n p.setModules(lame);\n qu.setModules(bs, rv, qupvt, tak);\n qupvt.setModules(tak, rv, lame.enc.psy);\n rv.setModules(bs);\n tak.setModules(qupvt);\n vbr.setModules(lame, bs, ver);\n gaud.setModules(parse, mpg);\n parse.setModules(ver, id3, p);\n\n var gfp = lame.lame_init();\n\n gfp.num_channels = channels;\n gfp.in_samplerate = samplerate;\n gfp.brate = kbps;\n gfp.mode = MPEGMode.STEREO;\n gfp.quality = 3;\n gfp.bWriteVbrTag = false;\n gfp.disable_reservoir = true;\n gfp.write_id3tag_automatic = false;\n\n var retcode = lame.lame_init_params(gfp);\n assert(0 == retcode);\n var maxSamples = 1152;\n var mp3buf_size = 0 | (1.25 * maxSamples + 7200);\n var mp3buf = new_byte(mp3buf_size);\n\n this.encodeBuffer = function (left, right) {\n if (channels == 1) {\n right = left;\n }\n assert(left.length == right.length);\n if (left.length > maxSamples) {\n maxSamples = left.length;\n mp3buf_size = 0 | (1.25 * maxSamples + 7200);\n mp3buf = new_byte(mp3buf_size);\n }\n\n var _sz = lame.lame_encode_buffer(gfp, left, right, left.length, mp3buf, 0, mp3buf_size);\n return new Int8Array(mp3buf.subarray(0, _sz));\n };\n\n this.flush = function () {\n var _sz = lame.lame_encode_flush(gfp, mp3buf, 0, mp3buf_size);\n return new Int8Array(mp3buf.subarray(0, _sz));\n };\n}\n\nfunction WavHeader() {\n this.dataOffset = 0;\n this.dataLen = 0;\n this.channels = 0;\n this.sampleRate = 0;\n}\n\nfunction fourccToInt(fourcc) {\n return fourcc.charCodeAt(0) << 24 | fourcc.charCodeAt(1) << 16 | fourcc.charCodeAt(2) << 8 | fourcc.charCodeAt(3);\n}\n\nWavHeader.RIFF = fourccToInt(\"RIFF\");\nWavHeader.WAVE = fourccToInt(\"WAVE\");\nWavHeader.fmt_ = fourccToInt(\"fmt \");\nWavHeader.data = fourccToInt(\"data\");\n\nWavHeader.readHeader = function (dataView) {\n var w = new WavHeader();\n\n var header = dataView.getUint32(0, false);\n if (WavHeader.RIFF != header) {\n return;\n }\n var fileLen = dataView.getUint32(4, true);\n if (WavHeader.WAVE != dataView.getUint32(8, false)) {\n return;\n }\n if (WavHeader.fmt_ != dataView.getUint32(12, false)) {\n return;\n }\n var fmtLen = dataView.getUint32(16, true);\n var pos = 16 + 4;\n switch (fmtLen) {\n case 16:\n case 18:\n w.channels = dataView.getUint16(pos + 2, true);\n w.sampleRate = dataView.getUint32(pos + 4, true);\n break;\n default:\n throw 'extended fmt chunk not implemented';\n }\n pos += fmtLen;\n var data = WavHeader.data;\n var len = 0;\n while (data != header) {\n header = dataView.getUint32(pos, false);\n len = dataView.getUint32(pos + 4, true);\n if (data == header) {\n break;\n }\n pos += (len + 8);\n }\n w.dataLen = len;\n w.dataOffset = pos + 8;\n return w;\n};\n\nmodule.exports.Mp3Encoder = Mp3Encoder;\nmodule.exports.WavHeader = WavHeader;\n","import { Mp3Encoder } from 'lamejs';\n\nclass Encoder {\n constructor(config) {\n this.config = {\n sampleRate: 44100,\n bitRate: 128\n };\n\n Object.assign(this.config, config);\n\n this.mp3Encoder = new Mp3Encoder(\n 1,\n this.config.sampleRate,\n this.config.bitRate\n );\n\n // Audio is processed by frames of 1152 samples per audio channel\n // http://lame.sourceforge.net/tech-FAQ.txt\n this.maxSamples = 1152;\n\n this.samplesMono = null;\n this.clearBuffer();\n }\n\n /**\n * Clear active buffer\n */\n clearBuffer() {\n this.dataBuffer = [];\n }\n\n /**\n * Append new audio buffer to current active buffer\n * @param {Buffer} buffer\n */\n appendToBuffer(buffer) {\n this.dataBuffer.push(new Int8Array(buffer));\n }\n\n /**\n * Float current data to 16 bits PCM\n * @param {Float32Array} input\n * @param {Int16Array} output\n */\n floatTo16BitPCM(input, output) {\n for (let i = 0; i < input.length; i++) {\n const s = Math.max(-1, Math.min(1, input[i]));\n output[i] = (s < 0 ? s * 0x8000 : s * 0x7FFF);\n }\n }\n\n /**\n * Convert buffer to proper format\n * @param {Array} arrayBuffer\n */\n convertBuffer(arrayBuffer) {\n const data = new Float32Array(arrayBuffer);\n const out = new Int16Array(arrayBuffer.length);\n this.floatTo16BitPCM(data, out);\n\n return out;\n }\n\n /**\n * Encode and append current buffer to dataBuffer\n * @param {Array} arrayBuffer\n */\n encode(arrayBuffer) {\n this.samplesMono = this.convertBuffer(arrayBuffer);\n let remaining = this.samplesMono.length;\n\n for (let i = 0; remaining >= 0; i += this.maxSamples) {\n const left = this.samplesMono.subarray(i, i + this.maxSamples);\n const mp3buffer = this.mp3Encoder.encodeBuffer(left);\n this.appendToBuffer(mp3buffer);\n remaining -= this.maxSamples;\n }\n }\n\n /**\n * Return full dataBuffer\n */\n finish() {\n this.appendToBuffer(this.mp3Encoder.flush());\n\n return this.dataBuffer;\n }\n}\n\nexport default Encoder;\n","import Encoder from './encoder';\n\nclass MicRecorder {\n constructor(config) {\n this.config = {\n // 128 or 160 kbit/s – mid-range bitrate quality\n bitRate: 128,\n\n deviceId: null,\n // Encode to mp3 after finish recording\n // Encoding during recording may result in distorted audio\n // This could be crucial on mobile devices\n encodeAfterRecord: true,\n // There is a known issue with some macOS machines, where the recording\n // will sometimes have a loud 'pop' or 'pop-click' sound. This flag\n // prevents getting audio from the microphone a few milliseconds after\n // the beginning of the recording. It also helps to remove the mouse\n // \"click\" sound from the output mp3 file.\n startRecordingAt: 300,\n };\n\n this.activeStream = null;\n this.context = null;\n this.microphone = null;\n this.processor = null;\n this.startTime = 0;\n this.rawChunksBuffer = null;\n\n Object.assign(this.config, config);\n }\n\n /**\n * Starts to listen for the microphone sound\n * @param {MediaStream} stream\n */\n addMicrophoneListener(stream) {\n this.activeStream = stream;\n\n // This prevents the weird noise once you start listening to the microphone\n this.timerToStart = setTimeout(() => {\n delete this.timerToStart;\n }, this.config.startRecordingAt);\n\n // Set up Web Audio API to process data from the media stream (microphone).\n this.microphone = this.context.createMediaStreamSource(stream);\n\n // Settings a bufferSize of 0 instructs the browser to choose the best bufferSize\n this.processor = this.context.createScriptProcessor(0, 1, 1);\n\n // Add all buffers from LAME into an array.\n this.processor.onaudioprocess = (event) => {\n if (this.timerToStart) {\n return;\n }\n\n const rawChunk = event.inputBuffer.getChannelData(0);\n\n if (this.config.encodeAfterRecord) {\n // Save copy of raw chunk for future encoding\n this.rawChunksBuffer.push( Object.assign([], rawChunk));\n } else {\n // Send microphone data to LAME for MP3 encoding while recording.\n this.lameEncoder.encode(rawChunk);\n }\n };\n\n this.connectMicrophone();\n };\n\n /**\n * Requests access to the microphone and starts recording\n * @return Promise\n */\n initialize() {\n const { deviceId, encodeAfterRecord } = this.config;\n const AudioContext = window.AudioContext || window.webkitAudioContext;\n this.context = new AudioContext();\n this.config.sampleRate = this.context.sampleRate;\n this.rawChunksBuffer = encodeAfterRecord ? [] : null;\n this.lameEncoder = new Encoder(this.config);\n this.i = 0;\n\n const audio = deviceId ? { deviceId: { exact: deviceId } } : true;\n\n return new Promise((resolve, reject) => {\n navigator.mediaDevices.getUserMedia({ audio })\n .then(stream => {\n this.addMicrophoneListener(stream);\n resolve(stream);\n }).catch(function(err) {\n reject(err);\n });\n })\n };\n\n /**\n * Initializes or resumes recording\n * @return Promise\n */\n start() {\n if (!this.processor || !this.microphone) {\n return this.initialize();\n } else {\n this.connectMicrophone();\n return Promise.resolve();\n }\n }\n\n /**\n * Pause recording\n * @return Promise\n */\n pause() {\n this.disconnectMicrophone();\n return Promise.resolve();\n };\n\n /**\n * Start retrieving microphone data\n */\n connectMicrophone() {\n if (this.processor && this.microphone) {\n this.microphone.connect(this.processor);\n this.processor.connect(this.context.destination);\n }\n }\n\n /**\n * Stop retrieving microphone data\n */\n disconnectMicrophone() {\n if (this.processor && this.microphone) {\n this.microphone.disconnect();\n this.processor.disconnect();\n }\n }\n\n /**\n * Disconnect microphone, processor and remove activeStream\n * @return MicRecorder\n */\n stop() {\n if (this.processor && this.microphone) {\n // Clean up the Web Audio API resources.\n this.disconnectMicrophone();\n\n // If all references using this.context are destroyed, context is closed\n // automatically. DOMException is fired when trying to close again\n if (this.context && this.context.state !== 'closed') {\n this.context.close();\n }\n\n this.processor.onaudioprocess = null;\n\n // Stop all audio tracks. Also, removes recording icon from chrome tab\n this.activeStream.getAudioTracks().forEach(track => track.stop());\n this.processor = null;\n this.microphone = null;\n }\n\n return this;\n };\n\n /**\n * Encodes raw audio chunks into mp3\n * @return Promise\n */\n encodeRawChunks() {\n return this.rawChunksBuffer.reduce((previousOperation, rawChunk) => {\n return previousOperation.then(() => {\n return new Promise((resolve) => {\n //this improve browser responsiveness during encoding process\n setTimeout(() => {\n this.lameEncoder.encode(rawChunk);\n resolve();\n });\n });\n });\n }, Promise.resolve());\n }\n\n /**\n * Finishes encoding process and returns prepared mp3 file as a result\n * @return Promise\n */\n finishEncoding() {\n const finalBuffer = this.lameEncoder.finish();\n this.rawChunksBuffer = null;\n\n return new Promise((resolve, reject) => {\n if (finalBuffer.length === 0) {\n reject(new Error('No buffer to send'));\n } else {\n resolve([finalBuffer, new Blob(finalBuffer, { type: 'audio/mp3' })]);\n this.lameEncoder.clearBuffer();\n }\n });\n }\n\n /**\n * Return Mp3 Buffer and Blob with type mp3\n * @return Promise\n */\n getMp3() {\n return (\n this.config.encodeAfterRecord\n ? this.encodeRawChunks()\n : Promise.resolve()\n ).then(() => this.finishEncoding());\n }\n}\n\nexport default MicRecorder;\n"],"names":["new_byte","new_int","new_float","new_double","new_float_n","new_int_n","new_array_n","Arrays","System","Util","ShortBlock","Float","VbrMode","assert","Encoder","III_psy_xmin","require$$0","require$$1","FFT","MPEGMode","L3Side","GrInfo","LameInternalFlags","IIISideInfo","ScaleFac","NsPsy","VBRSeekInfo","GainAnalysis","MeanBits","Tables","QuantizePVT","Takehiro","BitStream","new_short_n","Lame","PsyModel","LameGlobalFlags","ATH","ReplayGain","CBRNewIterationLoop","Presets","CalcNoiseResult","Quantize","VBRQuantize","CalcNoiseData","Reservoir","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","VBRTag","Version","config","assign","mp3Encoder","Mp3Encoder","sampleRate","bitRate","maxSamples","samplesMono","clearBuffer","dataBuffer","buffer","push","Int8Array","input","output","i","length","s","Math","max","min","arrayBuffer","data","Float32Array","out","Int16Array","floatTo16BitPCM","convertBuffer","remaining","left","subarray","mp3buffer","encodeBuffer","appendToBuffer","flush","MicRecorder","activeStream","context","microphone","processor","startTime","rawChunksBuffer","stream","timerToStart","setTimeout","startRecordingAt","createMediaStreamSource","createScriptProcessor","onaudioprocess","event","rawChunk","inputBuffer","getChannelData","encodeAfterRecord","Object","lameEncoder","encode","connectMicrophone","deviceId","AudioContext","window","webkitAudioContext","audio","exact","Promise","resolve","reject","mediaDevices","getUserMedia","then","addMicrophoneListener","catch","err","initialize","disconnectMicrophone","connect","destination","disconnect","state","close","getAudioTracks","forEach","track","stop","reduce","previousOperation","finalBuffer","finish","Error","Blob","type","encodeRawChunks","finishEncoding"],"mappings":"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AAC;GACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;GACf,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;GACV,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;GACf,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;GACV,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;GACf,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;GACV,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;GACf,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;GACV,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GAChB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;;GAEX,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;GACV,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;GACd,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;GACZ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;GACV,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;GACd,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;GACZ,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;GACX,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;GACf,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;GACZ,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;GACX,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;GACf,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;GACZ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;GACV,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;GACd,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;GACZ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;GACV,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;GACd,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;GACZ,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;GACX,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;GACd,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;GACX,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;GACd,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;GACX,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;GACV,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;GACd,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;G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C,EAAE,GAAG,EAAE,CAAC,CAAC;oBACxC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;oBACxC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACpB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACpB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACpB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;oBACxC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;oBACxC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;oBACrB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;oBACrB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;oBACrB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;oBACrB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;oBACtB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;oBACtB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACrB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACpB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACrB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC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AgB,EAAE,gBAAgB,EAAE,CAAC,gBAAgB;YACrD,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;QACzD,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACnD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACtD,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,gBAAgB;YACtD,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB;YACrD,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,gBAAgB;YACtD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACtD,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,gBAAgB,CAAC;QAC1D,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACnD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACtD,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,gBAAgB;YACrD,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB;YACrD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,gBAAgB;YACrD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACtD,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,gBAAgB,CAAC;QAC1D,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACnD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACtD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACtD,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,gBAAgB;YACtD,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,gBAAgB;YACtD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,gBAAgB;YACrD,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,gBAAgB,CAAC;QAC1D,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACnD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,gBAAgB;YACrD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,gBAAgB;YACtD,g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,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC/D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC/D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC5D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC5D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC1D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;CAC5D,CAAC;;AAEFA,QAAM,CAAC,KAAK,GAAG;IACX,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE;IACpE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC7D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC/D,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAChE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,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G,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACzE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC3E,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IAC7E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC9E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC9E,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;CAC1D,CAAC;;AAEFA,QAAM,CAAC,KAAK,GAAG;IACX,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAC1E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACxE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACxE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACzE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC3E,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC7E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC7E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC7E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC7E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC7E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC5E,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG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AE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CACjE,CAAC;;AAEFA,QAAM,CAAC,IAAI,GAAG;IACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC3D,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC7D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CACjE,CAAC;;AAEFA,QAAM,CAAC,MAAM,GAAG;IACZ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC3D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC5D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CACjE,CAAC;;AAEFA,QAAM,CAAC,IAAI,GAAG;IACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC3D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC5D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CACjE,CAAC;;AAEFA,QAAM,CAAC,IAAI,GAAG;IACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC1D,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC5D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC7D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC9D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,C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,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC9E,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,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EAAE,CAAC,CAAC;QAC1E,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,IAAI,UAAU,CAAC,EA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AE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QAC9D,MAAM,EA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"} \ No newline at end of file diff --git a/samples/index.html b/samples/index.html index ced9bc2..72de04c 100644 --- a/samples/index.html +++ b/samples/index.html @@ -12,7 +12,16 @@