Convert PCM audio data between formats. Zero dependencies, ESM.
import convert, { parse, detect, stringify, sampleRate } from 'pcm-convert'
// dtype conversion
convert(new Float32Array([1, -1, 0.5]), 'int16')
// interleaved → planar, dtype change
convert(new Uint8Array([127, 200, 127, 200]), 'uint8 stereo interleaved', 'float32 planar')
// endianness swap
convert(new Float32Array([1, .5, -.5, -1]), 'le', 'be')
// planar channel arrays → interleaved (replaces pcm-encode)
convert([new Float32Array([1, 0, -1]), new Float32Array([0, 0.5, -0.5])], 'int16 interleaved')
// AudioBuffer input (auto-detected)
convert(audioBuffer, 'int16 interleaved')
// any format → AudioBuffer (browser-native; Node.js auto-discovers audio-buffer package if installed)
convert(new Int16Array([...]), { dtype: 'int16', channels: 2, interleaved: true, sampleRate: 44100 }, 'audiobuffer')
// write into existing buffer
convert(new Uint8Array([0, 255]), new Uint16Array(2))
// object format
convert(data, { dtype: 'float32', channels: 2, interleaved: false }, { dtype: 'int16', interleaved: true })
// format utilities
parse('float32 stereo planar 44100') // → { dtype: 'float32', channels: 2, interleaved: false, sampleRate: 44100 }
stringify({ dtype: 'float32', channels: 2, interleaved: false }) // → 'float32 stereo planar'
detect(new Int16Array(4)) // → { dtype: 'int16' }
detect([new Float32Array(4), new Float32Array(4)]) // → { dtype: 'float32', channels: 2, interleaved: false }Converts src from format from to format to. If from is omitted, it is detected from src. If dst is provided, result is written into it.
Source types: Float32Array, Float64Array, Int8/16/32Array, Uint8/16/32Array, Array (float -1..1), Float32Array[] (planar channels), AudioBuffer (Web Audio API), ArrayBuffer, Buffer (Node.js).
String ('float32 stereo planar 44100') or object ({ dtype, channels, interleaved, endianness, sampleRate, container }). Tokens in any order; commas, semicolons, underscores accepted as separators.
| Field | Tokens / values |
|---|---|
dtype |
float32, float64, float, int8, int16, int32, int, uint8, uint16, uint32, uint |
channels |
mono, stereo, quad, 2.1, 5.1, N-channel — or any number in object format |
interleaved |
interleaved, planar — or boolean in object format |
endianness |
le, be |
sampleRate |
8000 11025 16000 22050 44100 48000 88200 96000 176400 192000 352800 384000 — or any number in object format |
container |
array, arraybuffer, buffer (Node.js), audiobuffer |
In string format, bare numbers are matched against the sample rate whitelist. Use N-channel for arbitrary channel counts.
Object aliases: type → dtype, numberOfChannels → channels, rate → sampleRate.
- audio-format →
parse,detect,stringify - sample-rate →
sampleRate - pcm-encode →
convert([...channels], format)
MIT
