How do I find sequence data in N64 ROMs? by Tails19935 at 7:50 AM EDT on March 17, 2019
I've organized this as best I can but its still a bit of a read.
Hello all. I've browsed this site many times and have enjoyed it especially the thread that covers discovering the original samples of various games! Anyways... lets get down to business.
I've been trying so hard to figure out how to rip the MIDIs from Cruis'n USA for the N64. This is where I'm at...
What I've already tried: N64MidiTool can only get the sample data. The old VGMTrans that works with some N64 ROMs couldn't get them. Converting the Miniusf/usflib OST sequence data to MIDI doesn't seem to be possible from what I've researched. (Even though the source USF rip already has both the sample data and the sequence data in it? Shouldn't there be a way?)
What I've experimented with: I messed around a little with the N64MidiTool files that tell the program where sequence data is located in various ROMs by adding Cruis'n USA to the directory then taking stabs at trying to narrow down where its located in ROM but to no avail.
By using Bizhawk and its various debug features, I tried to see if I could find where the music was being loaded from by following various hex values that updated along with the music when I played music in the options menu of the game. I thought I found the spot but when I tried to edit or freeze the hex values in that spot then go back to the game and turn off the music or play a sound effect, no evident change was shown.
My next idea was to use the data from the miniusf/usflib OST rip and the original ROM to see if I could find the hex location by matching hex values with both of the files but of course N64 ROMs have swapped characters. (Is there a way to permanently swap the characters? Then maybe this method could work?)
So my last resort was to type in random amounts of hex locations-(Realistic amounts of course. Not something absurd like the whole ROM.) just to see if the N64MidiTool would somehow rip something, anything from the sequence data. But when I type in a location, it will display as a MIDI song and when I try to convert it to MIDI with the program, it crashes.
The only last bit of notable information I have is that there is some unused debugger messages in the game ROM and there is a section of it dedicated to audio. Maybe the name of the sound engine is SN64? https://tcrf.net/Cruis%27n_USA_(Nintendo_64)
Summary: How would I go about figuring out where music sequence data is stored in an N64 ROM so I could extract it and convert it to MIDI?
My reason for wanting to know how is because I would like to transcribe the music correctly so it could be remixed, remastered, covered/played or performed, or studied by other people. I've sequenced many video games songs and have put them on VGMusic with the correct tempo, instrumentation, and quantized notes so that it can be at least 99% accurate to the original songs. I could transcribe it by ear like I've had to do with a couple songs but if there is an option to rip the original MIDI then it definitely makes things easier.
Welp, if you have read all of this then thank you for bearing with me. Now I just hope I can get some sort of answer.
I have no insight into Cruisin' USA's sequences, though.
[edit] N64MidiTool ini has this info on Cruisin USA:
[Cruis'n USA (E)]:type=SSEQ 0072AE80,0074E378 [Cruis'n USA (U) (V1.0)]:type=SSEQ 0072AE80,0074E378 [Cruis'n USA (U) (V1.1)]:type=SSEQ 0072AD60,0074E258 [Cruis'n USA (U) (V1.2) (VC)]:type=SSEQ 0072AE80,0074E378 [Cruis'n USA (U) (V1.2)]:type=SSEQ 0072AD50,0074E248
I assume those offsets are sequence bank and sample bank, not sure which is which, the tables you find at those addresses should lead you to sequences somehow?
Cruisin' USA is supported by N64miditool, however we never did figure out how tempo worked. It never seemed to be part of the sequence if I am remembering correctly. Everything else about the sequence should be supported when converting to midi.
Then why is it not working? Hmm... let me try one more thing...
*suddenly works*
Oh my goodness are you kidding me? So get this... I think the ROM dump I had on my PC was apparently a very old and incorrect dump. Don't ask me how or where I got it because it was a long time ago. I just assumed it would work in the program because the game emulated just fine. Well, I guess the dump I had did kinda work but it could only get the sample data. Sorry to waste your guy's time. Of course it had to be something easy such as getting a new ROM.
True. Still, what a weird turn of events that was. I've never had a situation like that where I somehow downloaded a bad dump of a game yet it seemed to work perfectly normal.