npm.io
1.6.0 • Published 4d ago

@audio/decode-webm

Licence
MIT
Version
1.6.0
Deps
0
Vulns
0
Weekly
0
Stars
208

@audio/decode-webm

Decode WebM and Matroska (MKV) audio to PCM float samples — the audio track of video files included (Opus, Vorbis, AAC, ALAC, MP3, FLAC, AC-3, DTS, PCM).

Install

npm i @audio/decode-webm

Usage

import decode, { decoder } from '@audio/decode-webm'

let { channelData, sampleRate } = await decode(webmBytes)

let dec = await decoder() // initialize Opus and Vorbis WASM
let result = dec.decode(chunk)
let tail = dec.flush()
dec.free()

Video tracks are skipped; the first audio track is decoded. Laced blocks (Xiph, EBML, fixed) are split into frames.

API

decode(src): Promise<AudioData>

Decode a complete Uint8Array or ArrayBuffer.

decoder(): Promise<WebmDecoder>

Initialize the codec runtimes and return a streaming decoder. For the WebM codecs (Opus, Vorbis) decode() and flush() are synchronous. For Matroska-only codecs the call that completes the track header returns a Promise while the codec package loads; later calls are synchronous. flush() ends the stream.

The factory prepares the Opus and Vorbis runtimes, then releases what the track does not need once the header is read.

Codecs

CodecID Decoded by
A_OPUS bundled libopus WASM core from @audio/decode-opus
A_VORBIS bundled @audio/decode-vorbis
A_AAC (all profiles) @audio/decode-aac, loaded on demand
A_ALAC @audio/decode-aac, loaded on demand
A_MPEG/L3 @audio/decode-mp3, loaded on demand
A_FLAC @audio/decode-flac, loaded on demand
A_PCM/INT/LIT, A_PCM/INT/BIG, A_PCM/FLOAT/IEEE built in
A_AC3 @audio/decode-ac3, loaded on demand
A_DTS (core of DTS-HD too) @audio/decode-dts, loaded on demand

E-AC-3, TrueHD, MPEG Layer I/II and A_MS/ACM tracks throw an error naming the codec. DiscardPadding on Opus blocks is honoured, so files from @audio/encode-webm decode sample-exact.

On-demand codec packages are imported dynamically, which is unavailable inside an AudioWorklet — Opus and Vorbis work there, the others need the main thread or a Worker.

License

· MIT. Bundled libopus is BSD 3-Clause.

Keywords