Sick of having every channel in your port have a stupid amount of echo, making your drums sound stuttery and your instruments sound like they're inside a cave? Well you're in luck. With the magic of hex editing, and a little effort, you can fix it yourself!
This is just a quick and dirty solution, I'm working on new porting tools to replace the xml converter entirely which will let you assign your own reverb values instead of just assuming that you want a reverb value of 0x33 on every channel.
First off, there's three tools you're going to need for this:
- Frauber's m64 parser
. It's pretty outdated and incomplete but it does its job enough to let us identify which channel the reverb is being applied to. Just for the sake of convenience I recommend extracting it to the same folder the m64s you want to fix are in but you don't have to.
- A hex editor. Any hex editor will do, but if you don't already have a preferred hex editor HxD
is pretty good.
- A text editor. Again, use whichever one you want. We're not doing anything crazy with it so really notepad will suffice. We aren't actually doing any text editing, you just need some means of viewing and searching a text file.
First off, you're going to need to use the m64 parser to parse the m64 file you want to fix. For those of you who are command line savvy, run it with the filename of the m64 as the only argument and then pipe the output into a text file. For those of you who have no idea what I just said, download this batch script I wrote
and put it in the same folder as m64parser.exe. Just drag and drop your m64 file onto m64parser.bat and it'll make a text file for you with the name [your m64 file name].m64_parsed.txt
Open that text file you just made in your text editor of choice and use the find command (ctrl+f in notepad) to search for the following:
yes frauber couldnt figure out what the echo command did apparently.
Anyway each search result should be contained within a section that looks something like this:
TRACK 9 (CHANNEL 8) AT OFFSET 0x119
0x119: C4 --> Begin track
0x11a: 90 29 2c --> Load Music Track (Layer 0) from offset 0x292c
0x11d: D4 33 --> ?
0x11f: DD 3f --> Set Track Pan = 63
0x121: DF 7f --> Track Volume = 127
0x123: C1 07 --> Set Program = 7
0x125: D3 00 --> Pitch bend = 0x00
0x127: Unknown command = d8
0x128: Unknown command = 00
0x129: FD 90 00 --> Timestamp: Other (0x0)
--- END OF TRACK 9 AT 0x12c ---
As you probably guessed, the part at the top where it says (CHANNEL 8) shows you what channel you're looking at.
Now that we know which channel that specific echo command is on, we can get to changing the value. The hex value before the colon on the line with the D4 33 is the offset of the reverb command in the file. Open the m64 file in your hex editor and go to this offset. In HxD you can just use ctrl+g to open the goto window, make sure "offset relative to" is set to "begin", and type the offset in the box (in this case 11d). Once you're at the offset of that awful D4 33 you can finally fix the value. Replace 33 with a value of your choice from 00 to 7F. I recommend not going over 10 for drum tracks (maybe even 0A, at 10 it's already sounding kind of stuttery and much less crisp), but its up to you.
Anyway just keep hex editing new values into your m64 for every occurrence of "D4 33 -> ?" in your parser output and save the updated m64 when you're done. It'll probably take some trial and error to find the right echo values for each channel but it's worth the effort to have a port where only the things that are supposed to sound like they are at the bottom of a well sound like they are at the bottom of a well.