{"_id":"@audio/decode-eac3","name":"@audio/decode-eac3","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@audio/decode-eac3","version":"1.0.0","description":"Decode E-AC-3 (Dolby Digital Plus) and AC-3 with FFmpeg's eac3 decoder, WASM","type":"module","main":"decode-eac3.js","types":"decode-eac3.d.ts","exports":{".":"./decode-eac3.js","./audio":{"types":"./audio.d.ts","default":"./audio.js"},"./package.json":"./package.json"},"publishConfig":{"access":"public"},"scripts":{"build":"bash build.sh","prepack":"npm run build","test":"node test.js"},"devDependencies":{"tst":"^9.2.2"},"engines":{"node":">=18"},"keywords":["eac3","e-ac-3","ac3","ac-3","dolby digital plus","dolby","surround","5.1","7.1","audio","decode","decoder","wasm","ffmpeg","libavcodec"],"license":"LGPL-2.1-or-later","author":{"name":"audiojs"},"homepage":"https://github.com/audiojs/decode/tree/main/packages/decode-eac3","repository":{"type":"git","url":"git+https://github.com/audiojs/decode.git","directory":"packages/decode-eac3"},"bugs":{"url":"https://github.com/audiojs/decode/issues"},"audio":"./audio.js","sideEffects":false,"funding":"https://github.com/sponsors/audiojs","gitHead":"c227363046dc3a0308c95ee112f22795c0ac04ca","_id":"@audio/decode-eac3@1.0.0","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-2UFpJUhI6MBouhP7Dztby5xfTem38Ql1QYxDnqqJAINI65O6xjqGqlxQgpWIwH/oZ2imaRislsTu0X0IrPe3+A==","shasum":"40021ea8c8b12fdec2793634ec125946af1381da","tarball":"https://registry.npmjs.org/@audio/decode-eac3/-/decode-eac3-1.0.0.tgz","fileCount":9,"unpackedSize":481753,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDKd7PiJl0uagVHJcjviRmKrku4qwT8wI7Kp7tBmIYLnAiEA8Du51MB6SWprdsXrxJnNtaubR3huVb1UO1tVfaApbx8="}]},"_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"directories":{},"maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/decode-eac3_1.0.0_1787966885903_0.7923570191957694"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-29T01:28:05.729Z","1.0.0":"2026-08-29T01:28:06.036Z","modified":"2026-08-29T01:28:06.334Z"},"maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"description":"Decode E-AC-3 (Dolby Digital Plus) and AC-3 with FFmpeg's eac3 decoder, WASM","homepage":"https://github.com/audiojs/decode/tree/main/packages/decode-eac3","keywords":["eac3","e-ac-3","ac3","ac-3","dolby digital plus","dolby","surround","5.1","7.1","audio","decode","decoder","wasm","ffmpeg","libavcodec"],"repository":{"type":"git","url":"git+https://github.com/audiojs/decode.git","directory":"packages/decode-eac3"},"author":{"name":"audiojs"},"bugs":{"url":"https://github.com/audiojs/decode/issues"},"license":"LGPL-2.1-or-later","readme":"# @audio/decode-eac3\n\nDecode E-AC-3 (Dolby Digital Plus) — and plain AC-3 — to PCM float samples.<br>\nFFmpeg's `eac3` decoder — a slim LGPL-2.1-or-later `libavcodec`/`libavutil` build (no GPL components) — compiled to a single-file WASM ES module. No side files, loads from any CDN, Node, workers and AudioWorklets.\n\n[![npm install @audio/decode-eac3](https://nodei.co/npm/@audio/decode-eac3.png?mini=true)](https://npmjs.org/package/@audio/decode-eac3/)\n\n```js\nimport decode, { decoder } from '@audio/decode-eac3'\n\nlet { channelData, sampleRate } = await decode(eac3Bytes)\n\nlet dec = await decoder()\nlet head = dec.decode(chunk1)   // synchronous; partial frames carry over\nlet tail = dec.flush()\ndec.free()\n```\n\nE-AC-3 (Dolby Digital Plus) is specified in [ATSC A/52:2018 Annex E](https://www.atsc.org/atsc-documents/a522018-digital-audio-compression-ac-3-e-ac-3/). FFmpeg's `eac3` decoder shares its core with `ac3dec.c` and dispatches on the bitstream's own `bitstream_id` field (`bsid ≤ 10` → classic AC-3 syntax, `bsid = 16` → E-AC-3), so **this package decodes both** raw AC-3 and E-AC-3 sync-frame streams (`.ac3`, `.ec3`, `.eac3`) — container demuxers ([@audio/decode-mp4](../decode-mp4), [@audio/decode-webm](../decode-webm), [@audio/decode-avi](../decode-avi)) route their E-AC-3 tracks here. Sync frames (syncword `0x0B77`) are cut in JS using FFmpeg's own public `av_ac3_parse_header` for the frame length (`frmsiz` for E-AC-3, the `frmsizecod`/`fscod` table for classic AC-3) — same shape as [@audio/decode-ac3](../decode-ac3).\n\nUp to 5.1 (7.1 with dependent-substream channel maps FFmpeg supports), channels come out in WAV order already: FFmpeg's `ac3dec.c` builds a native (bitmask) `AVChannelLayout` for every decoded frame, and native layouts enumerate channels in ascending `AV_CH_*` bit order — which *is* WAV order (FL, FR, FC, LFE, BL, BR, …; FFmpeg labels AC-3/E-AC-3's rear pair `SIDE_LEFT`/`SIDE_RIGHT` rather than `BACK_LEFT`/`BACK_RIGHT`, but the bit position — and so the output slot — is the same). No downmix is requested, so the stream's own channel count is preserved.\n\nDynamic range compression (`drc_scale`) is forced to `0`, disabling it — FFmpeg's AC-3 decoder applies it by default (`drc_scale = 1.0`). `@audio/decode-ac3` (liba52) never applies dialnorm or DRC either; forcing it off here keeps output level comparable between the two packages for the same AC-3 input — verified in `test.js` (RMS within ±0.5 dB on `../decode-ac3/fixtures/stereo.ac3`, decoded by both). Neither package applies dialnorm — FFmpeg's `ac3dec.c` doesn't read or apply it at all, only DRC.\n\n## API\n\n### `decode(src: Uint8Array | ArrayBuffer): Promise<AudioData>`\n\nDecode a complete stream.\n\n### `decoder(): Promise<Eac3Decoder>`\n\nSynchronous streaming decoder: `decode(chunk)` returns the samples of every complete frame in the data so far, `flush()` drops a trailing partial frame, `free()` releases WASM memory. `errors` counts frames that failed to decode.\n\n### `AudioData`\n\n```ts\n{ channelData: Float32Array[], sampleRate: number }\n```\n\n**Use when:** you need to play or transcode E-AC-3 (Dolby Digital Plus) — or AC-3 — in the browser or Node.\n\n## License\n\n[ॐ](https://github.com/krishnized/license/) · [LGPL-2.1-or-later](./LICENSE), inherited from the bundled [FFmpeg](https://ffmpeg.org/legal.html) `eac3`/`ac3` decoder (built without `--enable-gpl` — see [`build.sh`](./build.sh) and [`LICENSE.ffmpeg`](./LICENSE.ffmpeg)). FFmpeg source: the shared [`lib/ffmpeg`](../../lib/ffmpeg) submodule (`release/7.1`), also used by [`@audio/decode-ape`](../decode-ape).\n","readmeFilename":"README.md","_rev":"1-ae0d257949fc230d7e519fe754e1041f"}