smconv turns music written in a tracker — Impulse Tracker .it modules — into a SNESMOD soundbank: the packed music, samples, and effect data the SPC700 plays. It is how you get real, multi-channel music (and sound-effect banks) into a game, driven from C by a few spcLoad / spcPlay calls.
In: one or more .it files (each becomes a numbered module — songs and/or SFX banks).
Out (soundbank mode, -s):
| File | What it is | Used by |
|---|---|---|
| <base>.asm | the soundbank data (assembled into the ROM) | the build |
| <base>.h | C constants for each module and effect | your game code |
| <base>.brr | the BRR sample data | the soundbank |
Without -s, smconv instead writes a single standalone .spc you can play in an SPC player — handy for auditioning a module outside the SDK.
You almost never call smconv directly. Declare it in the example Makefile and the build runs it with the right OpenSNES conventions:
Under the hood that becomes:
Then, in C, load and play by module number (the .h gives you the names):
See Audio & Music Tutorial and SNES Sound Programming Guide for the runtime side.
| Flag | Meaning |
|---|---|
| -s | soundbank mode (the game path; default is standalone .spc) |
| -o FILE | output base name (required in soundbank mode) |
| -b N | ROM bank for the soundbank data — OpenSNES uses 1 (SNESMOD default is 5) |
| -n | skip the hdr.asm include — required in OpenSNES |
| -p NAME | symbol prefix (OpenSNES sets it to the output base) |
| -f | check .it sizes against the first file (for SFX banks) |
| -i | HiROM mapping · -V verbose (reports SPC RAM usage) |
For a single one-shot sample rather than a whole module, use wav2brr — WAV to BRR sound samples — it shares smconv's BRR encoder, so the samples sound identical.