So, you're interested in making a SNES game play music that is very much not meant to be played on a SNES.
Perhaps you watched someone playing ALttPR with music from Cadence of Hyrule, Super Mario 3D World, or Mad Rat Dead, and you want to know how to do it yourself.
Hello World. My name is Rokon, I made all three of the packs I just mentioned, and I'm about to answer that question.
This guide is specifically about A Link to the Past. There are other games that support MSUPCM packs, and some of this will apply to those too.
If you're not already in the ALTTPR Discord, you should probably join it. Most of the information in this guide comes from there.
Step 1: Download your pack of choice from this spreadsheet. There's a lot to choose from, but I'll be using some of my own as examples throughout this guide.
Once unzipped, you should see something that looks like one of these two examples.
If it looks like the one on the left (containing a json and an exe), you will need to download the source material from the provided link. Once you have done so, simply drag the json file onto the exe file and wait until it looks like the one on the right.
If you're using SNES9X, all you need to do now is put your Rando file into the same folder and rename it to match the other files like so.
If you're not, you can find a more comprehensive guide here. I'm not going to go into much depth because that's not what you're here for.
This plugin is the easiest way to listen to generated PCM files without actually playing Link to the Past, which is helpful for mixing and matching packs (which is a thing you can do, by the way) or when you just want to listen to Lupus Nocte for 10 hours.
The first thing you'll need to do is find somewhere to download your source material from.
If it is available through an official source such as Bandcamp, make sure to write down the url!
You can only share the pcm files themselves if there's no official way to download the music. Otherwise, you'll need to publish tracks.json on its own. The Rando devs have enough lawsuits to avoid as it is.
Once you've done that, go through this list and decide what music should play where. Remember that you can leave certain tracks out if you just want the vanilla music to play there. Some tracks are optional - if you leave them out, other tracks will play in their place.
I recommend Ardour for all your audio editing needs - except this one. You should probably use Audacity.
Any text editor will work for editing tracks.json. I personally use Notepad++, but you could use VS Code, Vim, or even just plain Notepad.
I also recommend paint.net for all the same reasons I do Ardour.
This template contains all the other files you'll need to start turning your music into an MSU pack.
If you learn best by example, like I do, you can also just download an existing pack such as my Mad Rat Monday one and edit that.
There's a lot of different options you can use in tracks.json. Generally, you won't need to worry about most of them unless you're doing something complicated.
Properties marked with an asterisk are used for documentation only - you can type anything you want there. If you don't share tracks.json, only you will ever see them.
Most properties are measured in samples. This is essentially a very precise timecode. You will want to use Audacity to find these numbers as shown below.
Most of the time, you'll only need these six.
Be sure to set your trim_start, trim_end, and loop At Zero Crossings to avoid "clicks" when the track loops. You can press Z to have Audacity do this for you automatically, but unfortunately Ardour has no such option.
You may want to use a short cross_fade, fade_in, and/or fade_out to mask the transition instead, like Ardour does for you.
I like to approximate the loop point by sliding around a second copy of the file in another track, before zooming right in and tweaking it precisely to my liking. As a preliminary test, I'll generally copy-paste the part after the loop point from the second track into the first and listen for the transition. If I can't hear it, I've done the loop right.
I also usually use "Length and End of Selection" mode to measure both loop and trim_end at once.
There's three major things you have to worry about before releasing your pack to the public:
There's a specific msutest preset you can use in the discord to test all of those things properly, but if you're an impatient fox who happens to be bad at Link to the Past, you might want to use the yaml included in the template I provided earlier to make things a bit easier on yourself.
I generally just compare the volume of tracks to each other and in-game sound effects, and test all the loop points in foobar. Unfortunately, you do still need to play some of the game to test things like the Pedestal Track and the credits.
If there's anything I'm forgetting, let me know... wait, I don't have a guestbook or anything set up yet. Just message me on Discord: Rokon#9176