MP3 encoder: third-party notices, source and replacement NumLM distributes lamejs 1.2.1, a JavaScript port of the LAME MP3 encoder by Alex Zhukov and contributors. lamejs declares the GNU Lesser General Public License v3 (LGPL-3.0) in its package.json; LAME is licensed under the GNU LGPL. The individual source files and the licence texts control. The software is provided WITHOUT WARRANTY, including implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This site uses LAME: https://lame.sourceforge.io/ (lame.sourceforge.net) lame.all.js is an unmodified copy of the file of the same name in the npm package lamejs@1.2.1 (https://registry.npmjs.org/lamejs/-/lamejs-1.2.1.tgz, shasum 0f92d38729213f106d4a19ded20821da7e89c8e4). It is byte-identical to lame.all.js at upstream Git tag 1.2.1, commit 32f6198fc9d7dc69894977152a08442607738c40. Its SHA-256 is: 026bd88846040f357a937cd85821a48492a362eff0812cda734f23fca55fea3b It is plain, unminified JavaScript with its comments retained. Copyright holders include the LAME project developers, Alex Zhukov and the contributors identified in the source files. All original copyright and licence notices remain in the source archive. Licence texts (relative to this notice): COPYING.LGPL-3.0.txt GNU Lesser General Public License v3 COPYING.GPL-3.0.txt GNU General Public License v3 (referenced by LGPL v3) LICENSE-lamejs.txt the LICENSE file shipped with lamejs (LAME licensing FAQ) Corresponding source, available without charge from this same directory: source/lamejs-1.2.1.tar.gz GitHub archive of tag 1.2.1, SHA-256 14a4e28a2c8d392f844175e6515e5aec7c52c798002b5bc1bd72cda53ebb71e5 Upstream: https://github.com/zhuker/lamejs/tree/1.2.1 Note: package.json inside the tag archive says version 1.2.0; the npm release 1.2.1 was published from this tag and its lame.all.js is identical. Building a modified lame.all.js: 1. Extract the source archive and edit the files under src/js. 2. Run makeall.sh from the archive root (needs a POSIX shell and browserify). It concatenates the lamejs modules into lame.all.js, wrapped in function lamejs() { ... } and followed by lamejs(); The Closure Compiler step in that script only produces lame.min.js, which NumLM does not use. Or edit lame.all.js directly: it is itself readable source. Using your replacement: The encoder is a separate runtime file at /vendor/lamejs/lame.all.js; it is not incorporated into NumLM's application JavaScript. NumLM's encoder worker downloads that file and evaluates it, then uses only lamejs.Mp3Encoder (channels, sampleRate, kbps), encodeBuffer(left, right) and flush(). Any file that defines a global function lamejs with a compatible Mp3Encoder works. Replace it at that URL in a local copy of the site or through your browser developer tools' local response overrides, then reload the page so a new worker loads it. There is no integrity hash or signature check that requires the original bytes. NumLM adds a LAME "Info" header to the encoder's output and ID3 tags itself; these steps do not modify lamejs. NumLM's terms do not prohibit modifying or replacing this LGPL component, or reverse engineering to debug such modifications, as permitted by the LGPL. MP3 patents: the Fraunhofer/Technicolor MP3 licensing programme ended in 2017. This notice records software licences only and does not grant or warrant any patent rights. Converting audio does not grant rights in third-party recordings.