{"_id":"@humansignal/audio-file-decoder","_rev":"10-5eb01ced91327e2cb8dbb50eef6d4dee","name":"@humansignal/audio-file-decoder","dist-tags":{"rc":"1.0.0-rc.2","latest":"1.0.0-rc.4"},"versions":{"0.1.0":{"name":"@humansignal/audio-file-decoder","version":"0.1.0","keywords":["audio","decode","decoder","FFmpeg","wasm","WebAssembly","emscripten","flac","wav","mp3","aac","ogg","m4a"],"author":{"name":"Brandon Martel"},"license":"MIT","_id":"@humansignal/audio-file-decoder@0.1.0","maintainers":[{"name":"bmartel","email":"brandonmartel@gmail.com"},{"name":"nass600","email":"ivelazquez85@gmail.com"}],"homepage":"http://https//github.com/humansignal/audio-file-decoder#readme","bugs":{"url":"https://github.com/humansignal/audio-file-decoder/issues"},"dist":{"shasum":"a25b4deda8d24bf89321bdc2f11664c1c5087ed4","tarball":"https://registry.npmjs.org/@humansignal/audio-file-decoder/-/audio-file-decoder-0.1.0.tgz","fileCount":9,"integrity":"sha512-qmdwAuZP3uClLlIC42qQvs8HYAyi+mQfPtob2M2yjOCX9z+gFDYb28IleIw4IDcWX8he76tFJVkonlw3D2WcOg==","signatures":[{"sig":"MEYCIQCebVETCgNSmxvRXk1B3EP/w75bmdYP0ezpC5IzUmluFgIhANUr3RYY5QC7B4J2iJeTk53MXVrMFGeeS0gngZ2b4k5l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2721540},"main":"./dist/audio-file-decoder.js","types":"./dist/audio-file-decoder.d.ts","browser":"./dist/audio-file-decoder.js","exports":{".":{"types":"./dist/audio-file-decoder.d.ts","import":"./dist/audio-file-decoder.js","default":"./dist/audio-file-decoder.js"},"./package.json":"./package.json","./decode-audio.wasm":{"default":"./dist/decode-audio.wasm"},"./dist/decode-audio.wasm":{"default":"./dist/decode-audio.wasm"}},"gitHead":"d199a184e3104ed84d449212e084a8e204abe9b5","scripts":{"lint":"tsc --project tsconfig.types.json --noEmit && eslint . --ext .js --ext .ts","sync":"make sync","build":"npm run clean && npm run types && rollup -c","clean":"rm -rf ./dist && rm -rf ./decode-audio.wasm","types":"dts-bundle-generator --project tsconfig.types.json ./src/lib/audio-file-decoder.ts -o ./dist/audio-file-decoder.d.ts","unsync":"make unsync","build-deps":"make deps","build-wasm":"make clean && make","clean-deps":"make clean-deps","clean-wasm":"make clean"},"_npmUser":{"name":"bmartel","email":"brandonmartel@gmail.com"},"repository":{"url":"git+https://github.com/humansignal/audio-file-decoder.git","type":"git"},"_npmVersion":"10.8.2","description":"Decode audio files using FFmpeg and WebAssembly","directories":{},"_nodeVersion":"22.5.1","dependencies":{"@babel/runtime":"^7.13.10"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.21.0","rollup":"^2.41.0","typescript":"^4.2.3","@babel/core":"^7.13.10","@babel/preset-env":"^7.13.10","rollup-plugin-copy":"^3.4.0","@rollup/plugin-babel":"^5.3.0","dts-bundle-generator":"^5.7.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-filesize":"^9.1.1","@babel/preset-typescript":"^7.13.0","@typescript-eslint/parser":"^4.17.0","@rollup/plugin-node-resolve":"^11.2.0","@babel/plugin-transform-runtime":"^7.13.10","rollup-plugin-web-worker-loader":"^1.6.1","@typescript-eslint/eslint-plugin":"^4.17.0","@babel/plugin-proposal-class-properties":"^7.13.0"},"_npmOperationalInternal":{"tmp":"tmp/audio-file-decoder_0.1.0_1761065491483_0.6551314562541088","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@humansignal/audio-file-decoder","version":"0.1.1","keywords":["audio","decode","decoder","FFmpeg","wasm","WebAssembly","emscripten","flac","wav","mp3","aac","ogg","m4a"],"author":{"name":"Brandon Martel"},"license":"MIT","_id":"@humansignal/audio-file-decoder@0.1.1","maintainers":[{"name":"bmartel","email":"brandonmartel@gmail.com"},{"name":"nass600","email":"ivelazquez85@gmail.com"}],"homepage":"http://https//github.com/humansignal/audio-file-decoder#readme","bugs":{"url":"https://github.com/humansignal/audio-file-decoder/issues"},"dist":{"shasum":"e6040e16c4e68abb288eed0f56c53bd974d2b5f6","tarball":"https://registry.npmjs.org/@humansignal/audio-file-decoder/-/audio-file-decoder-0.1.1.tgz","fileCount":3,"integrity":"sha512-EdKXWls0+3pzROcA0jx5J5j/O8HyGQLKn4RGNudUCNMxorhFdS4uNKhdBWCu5fAK8sTv+5SCWI1W+1tb0w7dvw==","signatures":[{"sig":"MEQCIBZwrzJuOUSCGLoN/Kbl2vCyYuZRpBz/vYM2dPbMxNmOAiAugQPqfSd+amJkm0tRPisBQv5G7fHdXCgerqetv7gsSg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38166},"main":"./dist/audio-file-decoder.js","types":"./dist/audio-file-decoder.d.ts","browser":"./dist/audio-file-decoder.js","exports":{".":{"types":"./dist/audio-file-decoder.d.ts","import":"./dist/audio-file-decoder.js","default":"./dist/audio-file-decoder.js"},"./package.json":"./package.json","./decode-audio.wasm":{"default":"./dist/decode-audio.wasm"},"./dist/decode-audio.wasm":{"default":"./dist/decode-audio.wasm"}},"gitHead":"d199a184e3104ed84d449212e084a8e204abe9b5","scripts":{"lint":"tsc --project tsconfig.types.json --noEmit && eslint . --ext .js --ext .ts","sync":"make sync","build":"npm run clean && npm run types && rollup -c","clean":"rm -rf ./dist && rm -rf ./decode-audio.wasm","types":"dts-bundle-generator --project tsconfig.types.json ./src/lib/audio-file-decoder.ts -o ./dist/audio-file-decoder.d.ts","unsync":"make unsync","build-deps":"make deps","build-wasm":"make clean && make","clean-deps":"make clean-deps","clean-wasm":"make clean"},"_npmUser":{"name":"bmartel","email":"brandonmartel@gmail.com"},"repository":{"url":"git+https://github.com/humansignal/audio-file-decoder.git","type":"git"},"_npmVersion":"10.8.2","description":"Decode audio files using FFmpeg and WebAssembly","directories":{},"_nodeVersion":"22.5.1","dependencies":{"@babel/runtime":"^7.13.10"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.21.0","rollup":"^2.41.0","typescript":"^4.2.3","@babel/core":"^7.13.10","@babel/preset-env":"^7.13.10","rollup-plugin-copy":"^3.4.0","@rollup/plugin-babel":"^5.3.0","dts-bundle-generator":"^5.7.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-filesize":"^9.1.1","@babel/preset-typescript":"^7.13.0","@typescript-eslint/parser":"^4.17.0","@rollup/plugin-node-resolve":"^11.2.0","@babel/plugin-transform-runtime":"^7.13.10","rollup-plugin-web-worker-loader":"^1.6.1","@typescript-eslint/eslint-plugin":"^4.17.0","@babel/plugin-proposal-class-properties":"^7.13.0"},"_npmOperationalInternal":{"tmp":"tmp/audio-file-decoder_0.1.1_1761065569486_0.1192264464027859","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@humansignal/audio-file-decoder","version":"0.1.2","keywords":["audio","decode","decoder","FFmpeg","wasm","WebAssembly","emscripten","flac","wav","mp3","aac","ogg","m4a"],"author":{"name":"Brandon Martel"},"license":"MIT","_id":"@humansignal/audio-file-decoder@0.1.2","maintainers":[{"name":"bmartel","email":"brandonmartel@gmail.com"},{"name":"nass600","email":"ivelazquez85@gmail.com"}],"homepage":"http://https//github.com/humansignal/audio-file-decoder#readme","bugs":{"url":"https://github.com/humansignal/audio-file-decoder/issues"},"dist":{"shasum":"73ea7f52b26fe2a37bdabbaf4f10acb5d6e1223f","tarball":"https://registry.npmjs.org/@humansignal/audio-file-decoder/-/audio-file-decoder-0.1.2.tgz","fileCount":6,"integrity":"sha512-Ad4U71Y1usWquSKh13FfbULAxWYWzzgSvoqGd8QLhATh+yn9BJdu9UC3k/oHS1QjEZRfxvSzpDvma37bnnXGCg==","signatures":[{"sig":"MEYCIQC9hvcEfVSfFl4EgxFQqnlk5ISEDpU308iaWnQ9iTx00AIhAKbLWcR60jNSbJ+jD9ExLlz4KpdVgkyZft+MjPpmPvRf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1379853},"main":"./dist/audio-file-decoder.js","types":"./dist/audio-file-decoder.d.ts","browser":"./dist/audio-file-decoder.js","exports":{".":{"types":"./dist/audio-file-decoder.d.ts","import":"./dist/audio-file-decoder.js","default":"./dist/audio-file-decoder.js"},"./package.json":"./package.json","./decode-audio.wasm":{"default":"./dist/decode-audio.wasm"},"./dist/decode-audio.wasm":{"default":"./dist/decode-audio.wasm"}},"gitHead":"d199a184e3104ed84d449212e084a8e204abe9b5","scripts":{"lint":"tsc --project tsconfig.types.json --noEmit && eslint . --ext .js --ext .ts","sync":"make sync","build":"npm run clean && npm run types && rollup -c","clean":"rm -rf ./dist && rm -rf ./decode-audio.wasm","types":"dts-bundle-generator --project tsconfig.types.json ./src/lib/audio-file-decoder.ts -o ./dist/audio-file-decoder.d.ts","unsync":"make unsync","build-deps":"make deps","build-wasm":"make clean && make","clean-deps":"make clean-deps","clean-wasm":"make clean"},"_npmUser":{"name":"bmartel","email":"brandonmartel@gmail.com"},"repository":{"url":"git+https://github.com/humansignal/audio-file-decoder.git","type":"git"},"_npmVersion":"10.8.2","description":"Decode audio files using FFmpeg and WebAssembly","directories":{},"_nodeVersion":"22.5.1","dependencies":{"@babel/runtime":"^7.13.10"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.21.0","rollup":"^2.41.0","typescript":"^4.2.3","@babel/core":"^7.13.10","@babel/preset-env":"^7.13.10","rollup-plugin-copy":"^3.4.0","@rollup/plugin-babel":"^5.3.0","dts-bundle-generator":"^5.7.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-filesize":"^9.1.1","@babel/preset-typescript":"^7.13.0","@typescript-eslint/parser":"^4.17.0","@rollup/plugin-node-resolve":"^11.2.0","@babel/plugin-transform-runtime":"^7.13.10","rollup-plugin-web-worker-loader":"^1.6.1","@typescript-eslint/eslint-plugin":"^4.17.0","@babel/plugin-proposal-class-properties":"^7.13.0"},"_npmOperationalInternal":{"tmp":"tmp/audio-file-decoder_0.1.2_1761065669476_0.9412441513449918","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@humansignal/audio-file-decoder","version":"0.1.3","keywords":["audio","decode","decoder","FFmpeg","wasm","WebAssembly","emscripten","flac","wav","mp3","aac","ogg","m4a"],"author":{"name":"Brandon Martel"},"license":"MIT","_id":"@humansignal/audio-file-decoder@0.1.3","maintainers":[{"name":"bmartel","email":"brandonmartel@gmail.com"},{"name":"nass600","email":"ivelazquez85@gmail.com"}],"homepage":"http://https//github.com/humansignal/audio-file-decoder#readme","bugs":{"url":"https://github.com/humansignal/audio-file-decoder/issues"},"dist":{"shasum":"513e54eb2f012a7cc0908a6421ffa24937c37ad9","tarball":"https://registry.npmjs.org/@humansignal/audio-file-decoder/-/audio-file-decoder-0.1.3.tgz","fileCount":6,"integrity":"sha512-5zuRojU3kxkqLsDhmvVxLE49TOGuu1rjg7vAqxPkOYCAP1wKRCQq6D6BfkVb3URlhOnfIcG23JicX8T70BtM2Q==","signatures":[{"sig":"MEUCIQC5Xt5gDkhjbKpFTNU2Zo9O4fA9fquO2RZhgZ4slcDGYAIgGSTg6Cib7sh4Xdvgs5aYG9nRA3K9NCTadwytj6ycDy8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1380022},"main":"./dist/audio-file-decoder.js","types":"./dist/audio-file-decoder.d.ts","browser":"./dist/audio-file-decoder.js","exports":{".":{"types":"./dist/audio-file-decoder.d.ts","import":"./dist/audio-file-decoder.js","default":"./dist/audio-file-decoder.js"},"./package.json":"./package.json","./decode-audio.wasm":{"default":"./dist/decode-audio.wasm"},"./dist/decode-audio.wasm":{"default":"./dist/decode-audio.wasm"}},"gitHead":"823974eb8064082489f0c5bb8f84395457280625","scripts":{"lint":"tsc --project tsconfig.types.json --noEmit && eslint . --ext .js --ext .ts","sync":"make sync","build":"npm run clean && npm run types && rollup -c","clean":"rm -rf ./dist && rm -rf ./decode-audio.wasm","types":"dts-bundle-generator --project tsconfig.types.json ./src/lib/audio-file-decoder.ts -o ./dist/audio-file-decoder.d.ts","unsync":"make unsync","build-deps":"make deps","build-wasm":"make clean && make","clean-deps":"make clean-deps","clean-wasm":"make clean"},"_npmUser":{"name":"bmartel","email":"brandonmartel@gmail.com"},"repository":{"url":"git+https://github.com/humansignal/audio-file-decoder.git","type":"git"},"_npmVersion":"10.8.2","description":"Decode audio files using FFmpeg and WebAssembly","directories":{},"_nodeVersion":"22.5.1","dependencies":{"@babel/runtime":"^7.13.10"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.21.0","rollup":"^2.41.0","typescript":"^4.2.3","@babel/core":"^7.13.10","@babel/preset-env":"^7.13.10","rollup-plugin-copy":"^3.4.0","@rollup/plugin-babel":"^5.3.0","dts-bundle-generator":"^5.7.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-filesize":"^9.1.1","@babel/preset-typescript":"^7.13.0","@typescript-eslint/parser":"^4.17.0","@rollup/plugin-node-resolve":"^11.2.0","@babel/plugin-transform-runtime":"^7.13.10","rollup-plugin-web-worker-loader":"^1.6.1","@typescript-eslint/eslint-plugin":"^4.17.0","@babel/plugin-proposal-class-properties":"^7.13.0"},"_npmOperationalInternal":{"tmp":"tmp/audio-file-decoder_0.1.3_1761068240446_0.7309302287855783","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@humansignal/audio-file-decoder","version":"0.1.4","keywords":["audio","decode","decoder","FFmpeg","wasm","WebAssembly","emscripten","flac","wav","mp3","aac","ogg","m4a"],"author":{"name":"Brandon Martel"},"license":"LGPL-2.1-or-later","_id":"@humansignal/audio-file-decoder@0.1.4","maintainers":[{"name":"bmartel","email":"brandonmartel@gmail.com"},{"name":"nass600","email":"ivelazquez85@gmail.com"}],"homepage":"http://https//github.com/humansignal/audio-file-decoder#readme","bugs":{"url":"https://github.com/humansignal/audio-file-decoder/issues"},"dist":{"shasum":"b3fb890407fef6bb8c3e86a10273b9fbe8b242fc","tarball":"https://registry.npmjs.org/@humansignal/audio-file-decoder/-/audio-file-decoder-0.1.4.tgz","fileCount":7,"integrity":"sha512-UkHOjEdKDonQzi827IYicCn4eT68tDDsHpX/FeSXH9q7vveokHIIzy0ld+BTU0yBOk9orUE1CI+o+bA475B5Iw==","signatures":[{"sig":"MEUCIGgJm/RO+1I2TJEHPku77RLIbitdfLOoTNFFuHqiSx1XAiEAgASUN24mhBYdMOMTYV14PuMRolQ3WXc3zoOmmzUksAg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1363495},"main":"./dist/audio-file-decoder.js","types":"./dist/audio-file-decoder.d.ts","browser":"./dist/audio-file-decoder.js","exports":{".":{"types":"./dist/audio-file-decoder.d.ts","import":"./dist/audio-file-decoder.js","default":"./dist/audio-file-decoder.js"},"./package.json":"./package.json","./decode-audio.wasm":{"default":"./dist/decode-audio.wasm"},"./dist/decode-audio.wasm":{"default":"./dist/decode-audio.wasm"}},"gitHead":"cf5aa4906e9e48b0d102fe51ec27deb868f27fc9","scripts":{"lint":"tsc --project tsconfig.types.json --noEmit && eslint . --ext .js --ext .ts","sync":"make sync","build":"npm run clean && npm run types && rollup -c","clean":"rm -rf ./dist && rm -rf ./decode-audio.wasm","types":"dts-bundle-generator --project tsconfig.types.json ./src/lib/audio-file-decoder.ts -o ./dist/audio-file-decoder.d.ts","unsync":"make unsync","build-deps":"make deps","build-wasm":"make clean && make","clean-deps":"make clean-deps","clean-wasm":"make clean"},"_npmUser":{"name":"bmartel","email":"brandonmartel@gmail.com"},"repository":{"url":"git+https://github.com/humansignal/audio-file-decoder.git","type":"git"},"_npmVersion":"10.8.2","description":"Decode audio files using FFmpeg and WebAssembly","directories":{},"_nodeVersion":"22.5.1","dependencies":{"@babel/runtime":"^7.13.10"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.21.0","rollup":"^2.41.0","typescript":"^4.2.3","@babel/core":"^7.13.10","@babel/preset-env":"^7.13.10","rollup-plugin-copy":"^3.4.0","@rollup/plugin-babel":"^5.3.0","dts-bundle-generator":"^5.7.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-filesize":"^9.1.1","@babel/preset-typescript":"^7.13.0","@typescript-eslint/parser":"^4.17.0","@rollup/plugin-node-resolve":"^11.2.0","@babel/plugin-transform-runtime":"^7.13.10","rollup-plugin-web-worker-loader":"^1.6.1","@typescript-eslint/eslint-plugin":"^4.17.0","@babel/plugin-proposal-class-properties":"^7.13.0"},"_npmOperationalInternal":{"tmp":"tmp/audio-file-decoder_0.1.4_1761071117165_0.563040603101955","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@humansignal/audio-file-decoder","version":"0.1.5","keywords":["audio","decode","decoder","FFmpeg","wasm","WebAssembly","emscripten","flac","wav","mp3","aac","ogg","m4a"],"author":{"name":"Brandon Martel"},"license":"LGPL-2.1-or-later","_id":"@humansignal/audio-file-decoder@0.1.5","maintainers":[{"name":"bmartel","email":"brandonmartel@gmail.com"},{"name":"nass600","email":"ivelazquez85@gmail.com"}],"homepage":"http://https//github.com/humansignal/audio-file-decoder#readme","bugs":{"url":"https://github.com/humansignal/audio-file-decoder/issues"},"dist":{"shasum":"e9857f012402fe6b9d52de7bd0b6ec8712aef769","tarball":"https://registry.npmjs.org/@humansignal/audio-file-decoder/-/audio-file-decoder-0.1.5.tgz","fileCount":7,"integrity":"sha512-oQ46MWo/QdNvNEc9rP8tuivsCn1341tNpBMQVo9CuARWCNAveuisTDWBvkNhI4k+1L7/xdV0C45lSTZfhEe/gw==","signatures":[{"sig":"MEQCIA41IZ7GkvzGrPGEqKPaIHp6Epn5iTWohm9jVw+p1S4OAiAHS9EDT1JwsWWPVtmv/T8ybGkBSo2nW+DE291+C1MKmA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2626121},"main":"./dist/audio-file-decoder.js","types":"./dist/audio-file-decoder.d.ts","browser":"./dist/audio-file-decoder.js","gitHead":"45da0fd001e1489a52983f0b808d6e691cac412e","scripts":{"lint":"tsc --project tsconfig.types.json --noEmit && eslint . --ext .js --ext .ts","sync":"make sync","build":"npm run clean && npm run types && rollup -c","clean":"rm -rf ./dist && rm -rf ./decode-audio.wasm","types":"dts-bundle-generator --project tsconfig.types.json ./src/lib/audio-file-decoder.ts -o ./dist/audio-file-decoder.d.ts","unsync":"make unsync","build-deps":"make deps","build-wasm":"make clean && make","clean-deps":"make clean-deps","clean-wasm":"make clean"},"_npmUser":{"name":"bmartel","email":"brandonmartel@gmail.com"},"repository":{"url":"git+https://github.com/humansignal/audio-file-decoder.git","type":"git"},"_npmVersion":"10.8.2","description":"Decode audio files using FFmpeg and WebAssembly","directories":{},"_nodeVersion":"22.5.1","dependencies":{"@babel/runtime":"^7.13.10"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.21.0","rollup":"^2.41.0","typescript":"^4.2.3","@babel/core":"^7.13.10","@babel/preset-env":"^7.13.10","rollup-plugin-copy":"^3.4.0","@rollup/plugin-babel":"^5.3.0","dts-bundle-generator":"^5.7.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-filesize":"^9.1.1","@babel/preset-typescript":"^7.13.0","@typescript-eslint/parser":"^4.17.0","@rollup/plugin-node-resolve":"^11.2.0","@babel/plugin-transform-runtime":"^7.13.10","rollup-plugin-web-worker-loader":"^1.6.1","@typescript-eslint/eslint-plugin":"^4.17.0","@babel/plugin-proposal-class-properties":"^7.13.0"},"_npmOperationalInternal":{"tmp":"tmp/audio-file-decoder_0.1.5_1761751323690_0.8970569544519118","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc.1":{"name":"@humansignal/audio-file-decoder","version":"1.0.0-rc.1","keywords":["audio","decode","decoder","FFmpeg","wasm","WebAssembly","emscripten","flac","wav","mp3","aac","ogg","m4a"],"author":{"name":"Brandon Martel"},"license":"LGPL-2.1-or-later","_id":"@humansignal/audio-file-decoder@1.0.0-rc.1","maintainers":[{"name":"bmartel","email":"brandonmartel@gmail.com"},{"name":"nass600","email":"ivelazquez85@gmail.com"}],"homepage":"http://https//github.com/humansignal/audio-file-decoder#readme","bugs":{"url":"https://github.com/humansignal/audio-file-decoder/issues"},"dist":{"shasum":"e5008db11967650c84099cdd71be86292b0bbca0","tarball":"https://registry.npmjs.org/@humansignal/audio-file-decoder/-/audio-file-decoder-1.0.0-rc.1.tgz","fileCount":6,"integrity":"sha512-5QOyiiJFSyddY8P2OPD9VHnXcMDM1mOIl8mF/M+Ng5NQ3vlUBS8WJExH/hd4uF8l3ig1Vavzau2OaiL7BtHpeg==","signatures":[{"sig":"MEYCIQCwJgeunJmJTDQhxhXqEDAxri37mNJpYotJTiEZQx21WAIhAML8qbxCXyPRrYeCmJa82QnNoI9aKZp5/pu6eprJ0++q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1414862},"main":"./dist/audio-file-decoder.js","types":"./dist/audio-file-decoder.d.ts","browser":"./dist/audio-file-decoder.js","exports":{".":{"types":"./dist/audio-file-decoder.d.ts","import":"./dist/audio-file-decoder.js","default":"./dist/audio-file-decoder.js"},"./package.json":"./package.json","./decode-audio.wasm":{"default":"./dist/decode-audio.wasm"},"./dist/decode-audio.wasm":{"default":"./dist/decode-audio.wasm"}},"gitHead":"8cab1ae1b21ce963d2454e2d34bcebac021b1ee7","scripts":{"lint":"tsc --project tsconfig.types.json --noEmit && eslint . --ext .js --ext .ts","sync":"make sync","build":"npm run clean && npm run types && rollup -c","clean":"rm -rf ./dist && rm -rf ./decode-audio.wasm","types":"dts-bundle-generator --project tsconfig.types.json ./src/lib/audio-file-decoder.ts -o ./dist/audio-file-decoder.d.ts","unsync":"make unsync","build-deps":"make deps","build-wasm":"make clean && make","clean-deps":"make clean-deps","clean-wasm":"make clean"},"_npmUser":{"name":"bmartel","email":"brandonmartel@gmail.com"},"repository":{"url":"git+https://github.com/humansignal/audio-file-decoder.git","type":"git"},"_npmVersion":"10.9.2","description":"Decode audio files using FFmpeg and WebAssembly","directories":{},"_nodeVersion":"22.15.1","dependencies":{"@babel/runtime":"^7.13.10"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"^7.21.0","rollup":"^2.41.0","typescript":"^4.2.3","@babel/core":"^7.13.10","@babel/preset-env":"^7.13.10","rollup-plugin-copy":"^3.4.0","@rollup/plugin-babel":"^5.3.0","dts-bundle-generator":"^5.7.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-filesize":"^9.1.1","@babel/preset-typescript":"^7.13.0","@typescript-eslint/parser":"^4.17.0","@rollup/plugin-node-resolve":"^11.2.0","@babel/plugin-transform-runtime":"^7.13.10","rollup-plugin-web-worker-loader":"^1.6.1","@typescript-eslint/eslint-plugin":"^4.17.0","@babel/plugin-proposal-class-properties":"^7.13.0"},"_npmOperationalInternal":{"tmp":"tmp/audio-file-decoder_1.0.0-rc.1_1781871763260_0.5215104390430354","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc.2":{"name":"@humansignal/audio-file-decoder","version":"1.0.0-rc.2","keywords":["audio","decode","decoder","FFmpeg","wasm","WebAssembly","emscripten","flac","wav","mp3","aac","ogg","m4a"],"author":{"name":"Brandon Martel"},"license":"LGPL-2.1-or-later","_id":"@humansignal/audio-file-decoder@1.0.0-rc.2","maintainers":[{"name":"bmartel","email":"brandonmartel@gmail.com"},{"name":"nass600","email":"ivelazquez85@gmail.com"}],"homepage":"http://https//github.com/humansignal/audio-file-decoder#readme","bugs":{"url":"https://github.com/humansignal/audio-file-decoder/issues"},"dist":{"shasum":"fc4b6003da95ef3d3477e2bc8223210b6ada8a36","tarball":"https://registry.npmjs.org/@humansignal/audio-file-decoder/-/audio-file-decoder-1.0.0-rc.2.tgz","fileCount":6,"integrity":"sha512-6Jmbcym28XhXtCN5lXmTeXS1be/t2bXeqBgX72jDB3X9wk46Tfj23kU6KsnFipBQ7U0RNU5lsSh882D7h7f8Fw==","signatures":[{"sig":"MEUCIQCq8EnrXVl7jmQVZ1HC3ysJZN7NLUdGxnCDYCV27XeW+gIgLTqAv5Jitzo7TfWFdg0ROzQaeGkdeocGHvyRRXUMyEU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1413608},"main":"./dist/audio-file-decoder.js","types":"./dist/audio-file-decoder.d.ts","browser":"./dist/audio-file-decoder.js","exports":{".":{"types":"./dist/audio-file-decoder.d.ts","import":"./dist/audio-file-decoder.js","default":"./dist/audio-file-decoder.js"},"./package.json":"./package.json","./decode-audio.wasm":{"default":"./dist/decode-audio.wasm"},"./dist/decode-audio.wasm":{"default":"./dist/decode-audio.wasm"}},"gitHead":"0c48f1313721515ad2cf5ce00df876d1de30eac3","scripts":{"lint":"tsc --project tsconfig.types.json --noEmit && eslint . --ext .js --ext .ts","sync":"make sync","build":"npm run clean && npm run types && rollup -c","clean":"rm -rf ./dist && rm -rf ./decode-audio.wasm","types":"dts-bundle-generator --project tsconfig.types.json ./src/lib/audio-file-decoder.ts -o ./dist/audio-file-decoder.d.ts","unsync":"make unsync","build-deps":"make deps","build-wasm":"make clean && make","clean-deps":"make clean-deps","clean-wasm":"make clean"},"_npmUser":{"name":"bmartel","email":"brandonmartel@gmail.com"},"repository":{"url":"git+https://github.com/humansignal/audio-file-decoder.git","type":"git"},"_npmVersion":"10.9.2","description":"Decode audio files using FFmpeg and WebAssembly","directories":{},"_nodeVersion":"22.15.1","dependencies":{"@babel/runtime":"^7.13.10"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"eslint":"^7.21.0","rollup":"^2.41.0","typescript":"^4.2.3","@babel/core":"^7.13.10","@babel/preset-env":"^7.13.10","rollup-plugin-copy":"^3.4.0","@rollup/plugin-babel":"^5.3.0","dts-bundle-generator":"^5.7.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-filesize":"^9.1.1","@babel/preset-typescript":"^7.13.0","@typescript-eslint/parser":"^4.17.0","@rollup/plugin-node-resolve":"^11.2.0","@babel/plugin-transform-runtime":"^7.13.10","rollup-plugin-web-worker-loader":"^1.6.1","@typescript-eslint/eslint-plugin":"^4.17.0","@babel/plugin-proposal-class-properties":"^7.13.0"},"_npmOperationalInternal":{"tmp":"tmp/audio-file-decoder_1.0.0-rc.2_1781878651891_0.6822346436253821","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc.3":{"name":"@humansignal/audio-file-decoder","version":"1.0.0-rc.3","keywords":["audio","decode","decoder","FFmpeg","wasm","WebAssembly","emscripten","flac","wav","mp3","aac","ogg","m4a"],"author":{"name":"Brandon Martel"},"license":"LGPL-2.1-or-later","_id":"@humansignal/audio-file-decoder@1.0.0-rc.3","maintainers":[{"name":"bmartel","email":"brandonmartel@gmail.com"},{"name":"nass600","email":"ivelazquez85@gmail.com"}],"homepage":"http://https//github.com/humansignal/audio-file-decoder#readme","bugs":{"url":"https://github.com/humansignal/audio-file-decoder/issues"},"dist":{"shasum":"df28292d204d4381933df3a361aa5bb023cf9f20","tarball":"https://registry.npmjs.org/@humansignal/audio-file-decoder/-/audio-file-decoder-1.0.0-rc.3.tgz","fileCount":6,"integrity":"sha512-XV7WE6Ap6yD+xg+RlZFn+20Vpg1bSHW4MJ0WAQigA9mnvIriBrIaAtgQ3+z6fJguPBOCMP0U6icVnDzhiCMARg==","signatures":[{"sig":"MEUCIH+ZlEb3StwJmy1l8s8Ttop7NAlL3CPGT328b5GHFM40AiEAqgfvEmoVS7+6WP0tY7GRRPFYdoUIGe9Lhu+HB3SVZ/I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1413638},"main":"./dist/audio-file-decoder.js","types":"./dist/audio-file-decoder.d.ts","browser":"./dist/audio-file-decoder.js","exports":{".":{"types":"./dist/audio-file-decoder.d.ts","import":"./dist/audio-file-decoder.js","default":"./dist/audio-file-decoder.js"},"./package.json":"./package.json","./decode-audio.wasm":{"default":"./dist/decode-audio.wasm"},"./dist/decode-audio.wasm":{"default":"./dist/decode-audio.wasm"}},"gitHead":"6459449681dec3033d62f50adaf964a1741d22d3","scripts":{"lint":"tsc --project tsconfig.types.json --noEmit && eslint . --ext .js --ext .ts","sync":"make sync","build":"npm run clean && npm run types && rollup -c","clean":"rm -rf ./dist && rm -rf ./decode-audio.wasm","types":"dts-bundle-generator --project tsconfig.types.json ./src/lib/audio-file-decoder.ts -o ./dist/audio-file-decoder.d.ts","unsync":"make unsync","build-deps":"make deps","build-wasm":"make clean && make","clean-deps":"make clean-deps","clean-wasm":"make clean"},"_npmUser":{"name":"bmartel","email":"brandonmartel@gmail.com"},"repository":{"url":"git+https://github.com/humansignal/audio-file-decoder.git","type":"git"},"_npmVersion":"10.9.2","description":"Decode audio files using FFmpeg and WebAssembly","directories":{},"_nodeVersion":"22.15.1","dependencies":{"@babel/runtime":"^7.13.10"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.21.0","rollup":"^2.41.0","typescript":"^4.2.3","@babel/core":"^7.13.10","@babel/preset-env":"^7.13.10","rollup-plugin-copy":"^3.4.0","@rollup/plugin-babel":"^5.3.0","dts-bundle-generator":"^5.7.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-filesize":"^9.1.1","@babel/preset-typescript":"^7.13.0","@typescript-eslint/parser":"^4.17.0","@rollup/plugin-node-resolve":"^11.2.0","@babel/plugin-transform-runtime":"^7.13.10","rollup-plugin-web-worker-loader":"^1.6.1","@typescript-eslint/eslint-plugin":"^4.17.0","@babel/plugin-proposal-class-properties":"^7.13.0"},"_npmOperationalInternal":{"tmp":"tmp/audio-file-decoder_1.0.0-rc.3_1783351336355_0.5208122488500098","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc.4":{"name":"@humansignal/audio-file-decoder","version":"1.0.0-rc.4","description":"Decode audio files using FFmpeg and WebAssembly","license":"LGPL-2.1-or-later","keywords":["audio","decode","decoder","FFmpeg","wasm","WebAssembly","emscripten","flac","wav","mp3","aac","ogg","m4a"],"repository":{"type":"git","url":"git+https://github.com/humansignal/audio-file-decoder.git"},"homepage":"http://https//github.com/humansignal/audio-file-decoder#readme","bugs":{"url":"https://github.com/humansignal/audio-file-decoder/issues"},"author":{"name":"Brandon Martel"},"main":"./dist/audio-file-decoder.js","browser":"./dist/audio-file-decoder.js","types":"./dist/audio-file-decoder.d.ts","exports":{".":{"types":"./dist/audio-file-decoder.d.ts","import":"./dist/audio-file-decoder.js","default":"./dist/audio-file-decoder.js"},"./decode-audio.wasm":{"default":"./dist/decode-audio.wasm"},"./dist/decode-audio.wasm":{"default":"./dist/decode-audio.wasm"},"./package.json":"./package.json"},"scripts":{"sync":"make sync","unsync":"make unsync","build":"npm run clean && npm run types && rollup -c","build-deps":"make deps","build-wasm":"make clean && make","clean":"rm -rf ./dist && rm -rf ./decode-audio.wasm","clean-deps":"make clean-deps","clean-wasm":"make clean","types":"dts-bundle-generator --project tsconfig.types.json ./src/lib/audio-file-decoder.ts -o ./dist/audio-file-decoder.d.ts","lint":"tsc --project tsconfig.types.json --noEmit && eslint . --ext .js --ext .ts"},"devDependencies":{"@babel/core":"^7.13.10","@babel/plugin-proposal-class-properties":"^7.13.0","@babel/plugin-transform-runtime":"^7.13.10","@babel/preset-env":"^7.13.10","@babel/preset-typescript":"^7.13.0","@rollup/plugin-babel":"^5.3.0","@rollup/plugin-node-resolve":"^11.2.0","@typescript-eslint/eslint-plugin":"^4.17.0","@typescript-eslint/parser":"^4.17.0","dts-bundle-generator":"^5.7.0","eslint":"^7.21.0","rollup":"^2.41.0","rollup-plugin-copy":"^3.4.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-filesize":"^9.1.1","rollup-plugin-terser":"^7.0.2","rollup-plugin-web-worker-loader":"^1.6.1","typescript":"^4.2.3"},"dependencies":{"@babel/runtime":"^7.13.10"},"_id":"@humansignal/audio-file-decoder@1.0.0-rc.4","gitHead":"c93caf21635d9fb48856aa96a8738d4aa1b2d808","_nodeVersion":"22.15.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-jqzeBYDwgZRd+2qNDIqd1UAtnSILWRsd/GTmWzdf2IGC+Xok1DklkcvWM8w6k5nVPX8fVa2fKu//Fk/oTJvPqg==","shasum":"d057b902ce3ee4b372446fd3701885fb65f7fa91","tarball":"https://registry.npmjs.org/@humansignal/audio-file-decoder/-/audio-file-decoder-1.0.0-rc.4.tgz","fileCount":6,"unpackedSize":1413725,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQClyE4vyYoyx7DxCS4pKu5U5D/XGD8PSHVNF6ekJPQ2oAIhAKan8Z2wlflriHaUZZjQpzDVrpJNKJrPFDWsYeX5a+IB"}]},"_npmUser":{"name":"bmartel","email":"brandonmartel@gmail.com"},"directories":{},"maintainers":[{"name":"bmartel","email":"brandonmartel@gmail.com"},{"name":"nass600","email":"ivelazquez85@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/audio-file-decoder_1.0.0-rc.4_1783356496085_0.3398828654064563"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-21T16:51:31.381Z","modified":"2026-07-06T16:48:16.443Z","0.1.0":"2025-10-21T16:51:31.756Z","0.1.1":"2025-10-21T16:52:49.711Z","0.1.2":"2025-10-21T16:54:29.709Z","0.1.3":"2025-10-21T17:37:20.696Z","0.1.4":"2025-10-21T18:25:17.387Z","0.1.5":"2025-10-29T15:22:03.935Z","1.0.0-rc.1":"2026-06-19T12:22:43.476Z","1.0.0-rc.2":"2026-06-19T14:17:32.076Z","1.0.0-rc.3":"2026-07-06T15:22:16.957Z","1.0.0-rc.4":"2026-07-06T16:48:16.283Z"},"bugs":{"url":"https://github.com/humansignal/audio-file-decoder/issues"},"author":{"name":"Brandon Martel"},"license":"LGPL-2.1-or-later","homepage":"http://https//github.com/humansignal/audio-file-decoder#readme","keywords":["audio","decode","decoder","FFmpeg","wasm","WebAssembly","emscripten","flac","wav","mp3","aac","ogg","m4a"],"repository":{"type":"git","url":"git+https://github.com/humansignal/audio-file-decoder.git"},"description":"Decode audio files using FFmpeg and WebAssembly","maintainers":[{"name":"bmartel","email":"brandonmartel@gmail.com"},{"name":"nass600","email":"ivelazquez85@gmail.com"}],"readme":"# @humansignal/audio-file-decoder\n\n[![npm version](https://img.shields.io/npm/v/@humansignal/audio-file-decoder.svg)](https://npmjs.org/package/@humansignal/audio-file-decoder \"View this project on npm\")\n\nA high-performance library for decoding audio files and timestamp ranges in browser environments. Powered by FFmpeg and compiled to WebAssembly via Emscripten.\n\n---\n\n## Key Features\n\n- **Standard Decoding**: Decodes entire audio files or specific timestamp ranges synchronously or asynchronously (via Web Workers).\n- **Streaming Mode**: Built to handle extremely large audio files (e.g., >24 hours) by dynamically requesting byte ranges over the network without buffering the entire file in memory.\n- **2MB Range Cache**: Minimizes network overhead in streaming mode by batch-fetching 2MB chunks and satisfying subsequent decodes from memory.\n- **PTS-Aligned Sample Accuracy**: Leverages frame Presentation Timestamps (PTS) to guarantee sample-accurate waveform alignment, automatically padding gaps or discarding offsets.\n- **Multi-Channel Support**: Supports returning interleaved multi-channel samples or auto-downmixing to mono.\n- **Dynamic URL Refreshing**: Automatically handles expiring presigned URLs (e.g., AWS S3, GCS) by allowing hot-swapping of the stream URL in-flight without interrupting active decoders.\n- **Production Optimized**: Statically built with Emscripten `-O3` and `-DNDEBUG` optimizations to suppress debug prints and reduce the worker bundle size by **30%**.\n\n---\n\n## Supported Formats\n\n- **MP3** (via `libmp3lame`)\n- **WAV** (PCM 8/16/24/32-bit, Float 32-bit)\n- **FLAC**\n- **AAC / M4A**\n- **OGG / Vorbis / Opus** (via `libopus`)\n\n---\n\n## Installation\n\n```bash\nnpm install @humansignal/audio-file-decoder\n```\n\n---\n\n## Usage / API\n\n### 1. Standard Synchronous Decoder\nLoads the entire file array buffer into WebAssembly memory. Useful for quick synchronous operations on smaller files.\n\n```ts\nimport { getAudioDecoder } from '@humansignal/audio-file-decoder';\nimport decodeWasmUrl from '@humansignal/audio-file-decoder/decode-audio.wasm?url';\n\nconst fileOrArrayBuffer = await fetch('audio.mp3').then(r => r.arrayBuffer());\n\nconst decoder = await getAudioDecoder(decodeWasmUrl, fileOrArrayBuffer);\n\nconsole.log({\n  sampleRate: decoder.sampleRate,\n  channelCount: decoder.channelCount,\n  encoding: decoder.encoding,\n  duration: decoder.duration // In seconds\n});\n\n// Decode the first 10 seconds (returns interleaved Float32Array)\nconst samples = decoder.decodeAudioData(0, 10, { multiChannel: true });\n\n// Always dispose to free WASM heap resources\ndecoder.dispose();\n```\n\n---\n\n### 2. Asynchronous Worker Decoder (Standard)\nRuns the decoder inside a background Web Worker, keeping the main UI thread completely responsive.\n\n```ts\nimport { getAudioDecoderWorker } from '@humansignal/audio-file-decoder';\nimport decodeWasmUrl from '@humansignal/audio-file-decoder/decode-audio.wasm?url';\n\nconst worker = await getAudioDecoderWorker(decodeWasmUrl, audioFileBlob, { stream: false });\n\n// Decode a 30-second range asynchronously\nconst samples = await worker.decodeAudioData(60, 30, { multiChannel: false });\n\nworker.dispose();\n```\n\n---\n\n### 3. Asynchronous Worker Decoder (Streaming Mode)\nEnables streaming chunk retrieval for large files. Instead of loading the full file, it uses HTTP `Range` requests in the worker.\n\n```ts\nimport { getAudioDecoderWorker } from '@humansignal/audio-file-decoder';\nimport decodeWasmUrl from '@humansignal/audio-file-decoder/decode-audio.wasm?url';\n\n// Passes a URL instead of a file/buffer to automatically enable streaming\nconst worker = await getAudioDecoderWorker(decodeWasmUrl, 'https://example.com/long-podcast.mp3', {\n  stream: true\n});\n\n// Decodes a slice. The worker only downloads the bytes needed for this range.\nconst samples = await worker.decodeAudioData(3600, 10);\n```\n\n---\n\n### 4. Dynamic URL Refreshing (Presigned URL Expiration)\nWhen loading files from S3 or proxy redirectors, signed URLs expire. The worker will propagate an `HTTP_STATUS_403` or `HTTP_STATUS_401` error which can be caught in the main thread to refresh the URL dynamically.\n\n```ts\nimport { getAudioDecoderWorker } from '@humansignal/audio-file-decoder';\nimport decodeWasmUrl from '@humansignal/audio-file-decoder/decode-audio.wasm?url';\n\nconst originalUrl = '/api/media/redirect-to-s3';\n\nconst worker = await getAudioDecoderWorker(decodeWasmUrl, originalUrl, { stream: true });\n\nasync function safeDecode(start: number, duration: number) {\n  try {\n    return await worker.decodeAudioData(start, duration);\n  } catch (err: any) {\n    const isExpired = err?.message?.includes(\"HTTP_STATUS_403\") || err?.message?.includes(\"HTTP_STATUS_401\");\n    \n    if (isExpired) {\n      console.warn(\"Presigned URL expired. Refreshing...\");\n      \n      // Fetch the redirect URL again to get a fresh presigned URL (bypass cache and use Range: bytes=0-0 to avoid body transfer)\n      const response = await fetch(originalUrl, {\n        cache: \"no-store\",\n        headers: {\n          Range: \"bytes=0-0\",\n        },\n      });\n      if (response.body) {\n        response.body.cancel().catch(() => {});\n      }\n      const freshPresignedUrl = response.url;\n      \n      // Push the fresh URL to the worker in-place\n      worker.updateUrl(freshPresignedUrl);\n      \n      // Retry the decode request\n      return await worker.decodeAudioData(start, duration);\n    }\n    throw err;\n  }\n}\n```\n\n---\n\n## Configuration Options\n\n### `DecodeAudioOptions`\nPassed to `decodeAudioData`:\n```ts\ninterface DecodeAudioOptions {\n  // Whether to preserve multiple channels.\n  // - If true: returns interleaved samples: [L0, R0, L1, R1, ...]\n  // - If false (default): downmixes to mono by averaging all channel samples\n  multiChannel?: boolean;\n}\n```\n\n### `WasmAudioStreamConfig`\nCan be passed to `getAudioDecoderWorker` as the source parameter instead of a string to provide advanced details:\n```ts\ninterface WasmAudioStreamConfig {\n  url?: string;         // The stream URL\n  fileOrBlob?: Blob;    // Local file handle (falls back to local FileReaderSync streaming)\n  size: number;         // Total size of the file in bytes (avoids initial fetch)\n}\n```\n\n---\n\n## Bundler Integration\n\n### Vite\nImport the WASM file with the `?url` query suffix:\n```ts\nimport decodeWasmUrl from '@humansignal/audio-file-decoder/decode-audio.wasm?url';\n```\n\n### Webpack 5\nEnable WebAssembly experiments in your `webpack.config.js`:\n```js\nmodule.exports = {\n  experiments: {\n    asyncWebAssembly: true,\n  },\n  module: {\n    rules: [\n      {\n        test: /\\.wasm$/,\n        type: 'asset/resource',\n      }\n    ]\n  }\n};\n```\n\n---\n\n## Local Development & Contribution\n\n### 1. Build Requirements\n- Docker (recommended for containerized building)\n- Or, local Emscripten SDK (v2.0.1) and PKG_CONFIG dependencies.\n\n### 2. Building WASM & JS\nTo compile the C++ FFmpeg code and package the Javascript bundles:\n\n```bash\n# Build the WebAssembly binaries and JS bundles inside Docker (handles Emscripten)\n./docker-build.sh quick\n\n# Extract the compiled artifacts to the local ./dist folder\n./docker-build.sh artifacts\n```\n\n### 3. Local Development Integration (`bun link` / `npm link`)\nTo test edits instantly in a local consuming project (e.g. `hs-platform`) without manually copying files:\n\n1. Register this package globally:\n   ```bash\n   # Inside /code/audio-file-decoder\n   bun link\n   ```\n2. Link it in your consumer project:\n   ```bash\n   # Inside the web app folder of your project\n   bun link @humansignal/audio-file-decoder\n   ```\n3. Now, whenever you run `./docker-build.sh quick`, the changes will immediately reflect in the consumer app.\n\n### 4. Build Configuration (Debug vs. Release)\nBy default, builds compile in optimized **Release** mode (`-O3 -DNDEBUG`), removing debug symbols and removing console log overhead.\n\nIf you need to debug the C++ core or Web Worker:\n```bash\n# Compile a debug build with -g and -O0\nDEBUG=1 ./docker-build.sh quick\n```\n\n---\n\n## License\nLicensed under LGPL v2.1 or later. See the [LICENSE](./LICENSE) file for details.","readmeFilename":"README.md"}