Hi! Even though this isn't new, I'm going to leave a post here to get some exposure.

https://github.com/AntonioND/gbt-player

GBT Player is my music player for GBA (old versions supported GB/GBC). It uses the PSG channels (1 to 4, the ones that come from the GB). This means that the music you can make with them is fairly limited, but it doesn't need to use any CPU for mixing audio. Other players, like Maxmod or Apex Audio System, target the DMA channels, which means the music can be as complex as desired, but by using a lot of CPU to mix audio.

With GBT Player, you use a mod tracker like OpenMPT, create a S3M file with your song, and convert it with a python script. It generates files with the converted song. Then, you pass this data to the music player library (which is very small), and that's it!

PSG music players like GBT Player can be very useful for games that need a lot of CPU for other tasks (like for 3D software rendering), or for multiboot games.

Also, there is always the option of using both systems at once! This is an example that combines Maxmod and GBT Player. The music composer has to create a S3M file in which the first 4 channels are special (they correspond to the PSG channels of the GBA), and the rest are free to use as needed. GBT Player includes an utility that will split this S3M file into two, so that you can use the PSG part with GBT Player, and the rest of the S3M file with any player you like!

https://github.com/AntonioND/gbt-player/tree/efd8e754c9ae0ca444d48fced58ca99f0510faaf/gba/examples/combined_maxmod

And it isn't needed to use devkitARM to use this library, it's self-contained, all you need is a C compiler to use it!

Feel free to leave suggestions and bug reports in the repository, and I'm happy to help here if there are doubts about how to use it!