There is, but, unfortunately, progress is very slow. Unless someone coughs up a bit of dough to support development, it's going to be like this for a while.
Thought I'd give an update on this, but over the last few days I decided to try another crack at this to make at least some headway at this, and I managed to figure out the compression on the streamed audio aspect of this engine, and furthermore, implement a custom stream that the game willingly accepted and played:
It uses signed 8-bit PCM mono little-endian data, and the sample rate can vary, although the samples I had were at 12000 Hz and 8000 Hz. If you go to the gsf joshw page and look for "Crash Bandicoot - The Huge Adventure", there's an unused song in there (Called "Unused - Crash Bandy Kuu~!!.gsf") that makes use of these stream formats, and the song is actually split into two different streams - the intro portion, and the looping portion. The intro is 8000 Hz, the loop is 12000, but it is fully streamed. I'm working on finding all the switches and whatnot to make this work, and that tweet of mine shows this. I took the GSF and built it back into a ROM to do this research without all the garbage in the way, so hopefully if you want to look at it, that is a great start.
by RebeccaSugar at 7:56 PM EDT on September 10, 2016
Well, that is certainly something! Thank you for the input.
Props on the GBA Project! by Miles Quickster at 9:08 PM EDT on September 19, 2020
Just stopping by submit that I'm really interested to see how this project turns out. Unfortunately, I can't really do much to help, as I'm busy with university and my time is spread thin. I'm just eager to understand how sounds are programmed into GBA systems (and that's only 1 of many that have captured my interest).
While the state of soundfonts is pretty cool as it is right now, I still have yet to understand the way particular effects are generated; for instance the LFO effect that so far I've only seen Sonic Battle and Sonic Advance 3 (see Night Babylon from the SB OST and Special Stage from the SA3 OST, where in both tracks, the 8-bit instruments oscillate at particular points of the intro).
It's unfortunate that less popular games have seen interest in this kind of development, since we are still stuck with Sappy 2006 (which leaves MUCH to be desired) to tackle more obscure games, (where GBAMusRiper couldn't) like Sonic Battle and Yoshi's Island GBA. At least with Nitro Studio, (a tool made for parsing SDAT file systems in DS games) it actually tells you the settings configured on 8-bit channels, somewhat.
Anyway, it seems the Poké Community are still active, so that's quite promising. I'll leave this with you all. Thank you for the work and engagement you guys have committed so far.
edited 9:11 PM EDT September 19, 2020
GAX2 Research by Droolie at 9:55 AM EDT on October 22, 2020
Hey everyone,
I'm working on a map viewer for various Rayman games, and we recently added support for Rayman Raving Rabbids GBA. On the side I also made a function to export the music data... which uses the GAX2 engine.
I was able to export both the samples (as wav files) and create MIDI files for all of the songs (with the wrong tempo, as that doesn't seem to be part of the song data...)
The sequence data is in a fairly easy format and I would have put more work into exporting as XM/MOD/MIDI+SF2 if those formats were easy to write... but I tried looking into those and they were way too complicated (way more than the GAX data, haha!), so I gave up on being able to play these MIDI tracks with their proper soundfont.
However I will leave a link here to the structures I implemented, so that someone can create a better program for them: Ray1Map - GAX formats
If anyone wants to try this out, they need the Rayman Raving Rabbids GBA ROM of course and follow the tutorial on the main page of the repository to set up the project.
Oh, I should credit loveemu as they have created this gist with GAX research notes here, which I sadly discovered after I'd implemented it but used to give better names to some classes and fields: loveemu's GAX research notes
edited 9:57 AM EDT October 22, 2020
More GAX2 Research by Droolie at 11:29 AM EDT on October 24, 2020
Well, I ended up still working on this, but I'm officially defeated by the instrument pitch. I just cannot get that right.
Since listening to broken music all day was driving me insane, I'll just leave getting this right to the next person to look into the GAX engine. In the meantime, my code can be found here: Ray1Map - GAX formats Ray1Map - GAX to XM converter
edit > A bit off-topic for GAX, but I also did a bit of research on the MusyX engine for GBA. Two Rayman games use this (Rayman Advance and Rayman Hoodlums' Revenge), and this can read and export sample data for both. The song data is also read, but not parsed. Presumably, this is very similar to the MusyX song data on other platforms like Gamecube. I'll contact the creator of Amuse to check if they want to look into it.
Standalone GAX -> XM converter by Droolie at 1:58 AM EST on December 20, 2021
My GAX code was part of Ray1Map before, but I separated it from there now. You can find it in:
- BinarySerializer.GBA.Audio, a library for reading GBA audio structs (GAX & MusyX) using our serializer system.
- GaXM, my GAX -> XM converter. This standalone version of it is much improved and should support all versions of GAX. The XM conversions are far from perfect sometimes, and 100% accurate other times (e.g. most tracks in Rayman Raving Rabbids) :D
I hope people will use this work to create a fully accurate GAX player someday. I don't think I have it in me to go beyond XM conversions ^^'