advgm
March 22, 2026 ยท View on GitHub
advgm is a DMG VGM music player for the Game Boy Advance.
Usage
-
Export the Gameboy VGM from furnace.

- Make sure the
Systemis set toGame Boy,
and theBase Tempois set to150(=Tick Rateis set to60). file > export...- Select
VGMtab. - Set the
format versionto1.61. - Click
Export.
- Make sure the
-
Run
tools/advgm_converter.pyto turn the exported VGM into the binary format.# Convert as a binary. python tools/advgm_converter.py --input my_music.vgm --output my_output.bin # Convert as a C array source. # # The identifier of the C array would be same as the output filename # (In this case, it would be `my_output`.) python tools/advgm_converter.py --input my_music.vgm --output my_output.c --c-array # You can also give a custom identifier to this C array. python tools/advgm_converter.py --input my_music.vgm --output my_output.c --c-array my_music_identifier -
Add the converted music binary/source to your project, and pass a pointer of it to the
advgm_play(). -
Call
advgm_update()every frame (for example, in VBlank ISR).
See include/advgm.h for the API.
Limitations
There are some limitations, mostly due to the hardware restrictions.
Instrument > Use software envelopdoesn't work.Base Tempomust be always150(=Tick Ratemust be60).- You can use
Virtual Tempoif you want different tempo, but note that it doesn't always evenly divide the rows, and the arpeggios might sound funky. - Obviously, effects that alters the tick rate is not supported either (
CxxxandF0xx).
- You can use
License
This project is licensed under the BSD Zero Clause License.
You can use this freely without attribution.
History
This project started as a fork of akkera102's VGM player (vgm2gba), but I've turned it into a seperate repository to properly manage it.