Skip to main content

BeatBax CLI

The BeatBax CLI verifies, plays, exports, inspects, and converts songs.

Install

npm install -g @beatbax/cli
beatbax --help

Or run without a global install: npx @beatbax/cli --help.

From a cloned toolchain repo after build, use node bin/beatbax (or bin\beatbax on Windows) instead of relying on npm run for flags.

Commands

# Validate
beatbax verify songs/sample.bax

# Play (headless by default)
beatbax play songs/sample.bax
beatbax play songs/sample.bax --browser

# Built-in exports
beatbax export json songs/sample.bax output.json
beatbax export midi songs/sample.bax output.mid
beatbax export uge songs/sample.bax output.uge
beatbax export wav songs/sample.bax output.wav

# Chip-specific exporters (when available)
beatbax export famitracker-text songs/nes/song.bax output.txt
beatbax export vgm songs/sms/song.bax output.vgm
beatbax export arkos songs/spectrum-128/song.bax output.aks
beatbax export arkos songs/spectrum-128/song.bax --instruments # .aki bank only

# WAV → NES DMC sample
beatbax convert wav2dmc samples/wav/low_kick.wav --dmc-rate 15 --emit-inst

# Inspect
beatbax inspect songs/sample.bax
beatbax inspect output.uge --json

Play options

FlagDescription
--browser / -bOpen browser-based playback
--headlessForce Node.js headless playback (default)
--backend <name>auto (default), node-webaudio, browser
--sample-rate <hz> / -rPCM sample rate (default: 44100)
--buffer-frames <n>Offline render buffer size

Export options

FlagApplies toDescription
--out <path>allOutput file path
--duration <seconds>midi, wavOverride auto-calculated duration
--channels <list>midi, wavExport only listed channels (e.g. 1,3)
--instrumentsarkosWrite .aki instrument bank only
--verbose / --debuguge (and others)Extra export diagnostics

Export formats

FormatCommandTypical chip
JSON (ISM)export jsonany
MIDIexport midiany
WAVexport wavany
UGEexport ugeGame Boy
FamiTracker textexport famitracker-textNES
VGMexport vgmSMS / Game Gear
Arkos (experimental)export arkosSpectrum / CPC

Guides: WAV, UGE, FamiTracker text, VGM, Arkos.

NES DMC conversion

convert wav2dmc turns a 16-bit mono/stereo PCM WAV into a raw NES .dmc sample for type=dmc instruments:

beatbax convert wav2dmc samples/wav/low_kick.wav --dmc-rate 15 --emit-inst --play

With --emit-inst, the CLI prints a matching instrument line, for example:

inst kick type=dmc dmc_rate=15 dmc_loop=false dmc_sample="local:samples/wav/kick.dmc"
FlagDescription
--dmc-rate <0-15> / -qEncoding / preview rate (15 = fastest / highest quality)
--dmc-loopEmit dmc_loop=true and loop preview
--trim-silence <db> / --no-trim-silenceTrim quiet tails (often reduces hiss)
--tail-ms <ms>Keep audio after the last above-threshold sample
--fade-out-ms <ms>Fade before encoding
--max-duration-ms <ms>Cap source duration
--ntsc / --palDMC rate table (--ntsc default)

Invalid --dmc-rate values are rejected (not silently clamped).

Headless audio

Playback tries, in order:

  1. speaker (optional native module)
  2. play-sound (system players)
  3. OS command (PowerShell / afplay / aplay)