There is software to extract gba music into mid format.
sappy and gba2midi-0.8.0
How to use sappy: (I forgot where I found it, I saw it a long time ago)
Preparation: First Get ready for the software sappy. The author of this software has not updated it for a long time. The latest version is 1.6. stos, an auxiliary software, developed by an unknown author...
In addition, it is best to prepare a hexadecimal editor. You can use it without it, but it will be a little troublesome.
1. Run sappy, click file-load rom, and load the rom. If you can start playing, all subsequent steps are unnecessary. Just click export song to .mid. Note that when exporting midi Stop playing, otherwise an error will occur. If it shows that the rom is not supported, you can continue with the following steps.
2. Take Metroid - Mission Zero as an example, run stos, load rom, click search, some numbers and letters will appear after a while. Then use a hexadecimal editor to open the sappy.lst file in the data folder in the sappy program directory. Haha, what did you see? Yes, all supported roms are here, what we have to do is add unsupported roms.
Take this line as an example
AGRE, ESPN Final Round Golf 2002 (U), sapphire, blank, blank, &H5C0B48, 0, 0
AGRE is The letters displayed on the first line after opening the rom in stos are the codes of the rom. Next is the name of the game. Don’t worry about the next "sapphire, blank, blank," just look at &H5C0B48. This is 5C0B48. One of those hexadecimal codes searched with stos. As for which one, you need to try it. Therefore, the Metroid code can be written like this:
BMXE, Metroid - Zero Mission (U), sapphire, blank, blank, &H8F2C8, &H0, 0
&H1 represents from The first song starts (it seems that the first music in some games is blank). The description of the format in the official help document is as follows: romheader, romname, romtype, songlist, instmap, tableoffset, songstart, songend. If you are interested in continuing to explore, you can take a good look at the official help document.
3. After adding the game support code to the sappy.lst file, you can try to open the rom with sappy and try to play it. If it fails, replace the data in the tableoffset segment until it can be played. But generally the first data can be played.
Click the plus or minus sign next to play to play the previous/next music. Select the music, stop playing it, and then click file-export song to .mid to export it to midi.
Note: Not all sappy games can support it.
Add rom support code format romheader, romname, romtype, songlist, instmap, tableoffset, songstart, songend Rough explanation:
The romheader section is AGRE, which is used to identify roms , make sure you are not wrong
The romname segment is the name of the game, you can use it casually
According to the official documentation, the romtype segment must be filled in sapphire
The songlist segment is to write the music list You can know the exact format by referring to several lst files such as advw.lst under the date folder. If you are too lazy to edit, just use blank
The instmap section is the most important place mentioned by gxb I haven't understood the tears yet, but now I have.
Regarding the timbre of the final file, if you are lazy, just use blank
The tableoffset section is the offset address searched by stos
The songstart and songend sections are the starting section of the music. But songend is completely useless