Removed link to Mid2AGB
Well first get two programs...
1.
Sappy 2006
2. Mid2AGB
After you've installed these, go to start, "run" and run whatever your command prompt is(For me it's cmd). When your command prompt is open, type "cd" then type in whatever directory mid2agb is in(For instance, I would type in"cd C:\Pokemon Fire Red + Leaf Green\Midi2GBA\"). Then make sure the midi you want to convert is in the same folder as Mid2AGB. Next, make sure you're in the Mid2AGB directory in command prompt and type "mid2agb.exe [midiname]". So say I wanted to convert "Cherrygrove.mid" I would type in "mid2agb.exe Cherrygrove.mid"(Minus the quotes) then hit enter and it'll convert it to a ".s" file.
Now open up Sappy and open the GBA POKeMON game you want to change music in(Remember, Sappy doesn't work on all games, but it does work for the GBA POKeMON games). Once the game is open, go to the song dropdown box to the right and select the song you want to replace. So say I wanted to replace "Battle 4" of FireRed and I would go down to that. Next, go to "Assemble" and browse for your ".S" filename we converted earlier, which should be in the same folder as "Mid2AGB". After you've selected your .S Filename, type in the offset you want the music to be stored at next to "Base definition offset". Before you press "Assemble that ugly thing!" make sure "MPlayDef.s" is in the same folder as your .s file. Then press "Assemble that ugly thing!" and it will start assembling it. Once that's done, it'll ask you "Do you want to set the proper entry in the Song Table?" and click "Yes". If it's successful, you should hear a GBA-ized version of your midi, but if it didn't work, don't worry, some midis just won't work. Now, just because it works in Sappy doesn't mean it'll play in-game and if it doesn't work in game, that probably means you'll have to adjust some pointers.