Encode raw audio samples to any format.
JS / WASM – no ffmpeg, no native bindings, works in both node and browser.
Small API, minimal size, near-native performance, stream encoding.
import encode from 'audio-encode';
const buf = await encode.wav(channelData, { sampleRate: 44100 });| Format | Package | Engine |
|---|---|---|
| WAV | @audio/wav-encode | JS |
| MP3 | @audio/mp3-encode | WASM |
| OGG Vorbis | @audio/ogg-encode | WASM |
| Opus | @audio/opus-encode | WASM |
| FLAC | @audio/flac-encode | WASM |
| AIFF | @audio/aiff-encode | JS |
Specify the format as method name. Input is Float32Array[] (one per channel) or a single Float32Array (mono).
import encode from 'audio-encode';
const wav = await encode.wav(channelData, { sampleRate: 44100 });
const aiff = await encode.aiff(channelData, { sampleRate: 44100 });
const mp3 = await encode.mp3(channelData, { sampleRate: 44100, bitrate: 128 });
const ogg = await encode.ogg(channelData, { sampleRate: 44100, quality: 5 });
const flac = await encode.flac(channelData, { sampleRate: 44100 });
const opus = await encode.opus(channelData, { sampleRate: 48000, bitrate: 96 });For chunk-by-chunk encoding, use .stream():
import encode from 'audio-encode';
const encoder = await encode.mp3.stream({ sampleRate: 44100, bitrate: 128 });
const a = await encoder.encode(chunk1); // Uint8Array
const b = await encoder.encode(chunk2);
const c = await encoder.encode(); // end of stream — flush + free
// explicit methods
// encoder.flush(), encoder.free()| Option | Description | Applies to |
|---|---|---|
sampleRate |
Output sample rate (required) | all |
bitrate |
Target bitrate in kbps | mp3, opus |
quality |
Quality 0–10 (VBR) | ogg, mp3 |
channels |
Output channel count | all |
bitDepth |
Bit depth: 16 or 32 (wav), 16 or 24 (aiff, flac) | wav, aiff, flac |
compression |
FLAC compression level 0–8 | flac |
application |
'audio', 'voip', or 'lowdelay' |
opus |
The encode registry is extensible:
import encode from 'audio-encode';
encode.myformat = Object.assign(
async (data, opts) => { /* ... */ },
{ stream: async (opts) => ({ encode: chunk => ..., free() {} }) }
);- audio-decode – decode any audio format to raw samples.
- wasm-media-encoders – compact WASM MP3 & Vorbis encoders.
- AudioEncoder – native WebCodecs encoder API.
- ffmpeg.wasm – full encoding/decoding library.
