npm.io
1.1.0 • Published 4d ago

@audio/decode-avi

Licence
MIT
Version
1.1.0
Deps
4
Size
16 kB
Vulns
0
Weekly
0
Stars
208

@audio/decode-avi

Decode the audio stream of AVI files to PCM float samples.
A pure-JS RIFF/AVI demuxer (OpenDML AVIX extensions included) that skips the video stream and routes the audio to the matching codec package, loaded on demand.

npm install @audio/decode-avi

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

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

let dec = await decoder()
let head = await dec.decode(chunk1)   // Promise on the chunk that completes the stream headers
let more = dec.decode(chunk2)         // synchronous from then on
let tail = await dec.flush()
dec.free()

Codecs

wFormatTag Codec Decoded by
0x0001, 0x0003 (and WAVE_FORMAT_EXTENSIBLE) PCM 8–32 bit int, 32/64 bit float built in
0x0006, 0x0007 G.711 A-law, µ-law built in
0x0055 MP3 @audio/decode-mp3
0x00FF AAC @audio/decode-aac
0x2000 AC-3 @audio/decode-ac3
0x2001 DTS @audio/decode-dts

WMA and ADPCM streams throw an error naming the codec. The first auds stream is decoded.

Codec packages are imported dynamically, which is unavailable inside an AudioWorklet — decode in the main thread or a Worker.

API

decode(src: Uint8Array | ArrayBuffer): Promise<AudioData>

Decode a complete file.

decoder(): Promise<AVIDecoder>

Streaming decoder. decode(chunk) returns AudioData, or a Promise of it on the chunk that completes the stream headers while the codec module loads. flush() returns remaining samples and throws if no audio stream was found. free() releases codec resources.

AudioData
{ channelData: Float32Array[], sampleRate: number }

License

· MIT. Codec packages carry their own licenses.

Keywords