@sonata-sdk/decoder
v0.4.1
Published
Pure-WASM audio decoders (MP3, FLAC, AAC) for Node.js — no native dependencies
Maintainers
Readme
Pure-WASM audio decoders. No native addons, no FFmpeg, no external JS dependencies. Every decoder is a hand-compiled C library → WASM using Emscripten.
📥 Install
npm install @sonata-sdk/decoder🚀 Usage
import { detectFormat, decodeMP3, decodeFLAC } from '@sonata-sdk/decoder'
import { readFileSync } from 'fs'
const data = readFileSync('song.mp3')
const fmt = detectFormat(data) // 'mp3' | 'flac' | 'aac' | null
const { channelData, sampleRate, samplesDecoded } = fmt === 'mp3'
? await decodeMP3(data)
: await decodeFLAC(data)
// channelData[0] = Float32Array left
// channelData[1] = Float32Array rightStreaming
import { createMP3Decoder } from '@sonata-sdk/decoder'
const decoder = await createMP3Decoder()
for (const chunk of chunks) {
const { channelData, sampleRate } = await decoder.decode(chunk)
// process float PCM...
}
decoder.free()Subpath imports
import { createAACDecoder } from '@sonata-sdk/decoder/aac'
import { createMP3Decoder } from '@sonata-sdk/decoder/mp3'
import { createFLACDecoder } from '@sonata-sdk/decoder/flac'📦 What's inside
| Format | Decoder | WASM size | |--------|---------|-----------| | MP3 | mpg123 1.32.5 compiled to WASM | ~235 KB | | FLAC | libFLAC 1.4.3 compiled to WASM | ~59 KB | | AAC | FAAD2 compiled to WASM | ~276 KB |
All WASM binaries are compiled from source with Emscripten 3.1.56 and bundled in the package. Zero runtime dependencies — no @audio/decode-*, no mpg123-decoder, no @wasm-audio-decoders/.
The WASM uses a handle-based API so multiple decoders can run concurrently.
📦 Related
- Sonata — Lavalink-compatible audio server
- @sonata-sdk/voice — Discord voice connection
- @sonata-sdk/ws — Resumable WebSocket client
- sonata-sdk-packages — Monorepo
