Website banner. Features wordart of the name Rokon written in katakana, as well as four characters.

Visual Overhaul coming... probably never

MSU-1: A Kitsune's Guide

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.

Using MSU Packs with Rando

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.

Two cropped screenshots of Windows Explorer. The left screenshot displays four files as follows: monday.msu, msupcm.exe, tracks.json, readme.txt. The right screenshot shows a list of numbered files titled cadence-1.pcm through cadence-53.pcm, with most of the list cut off at the bottom. It also includes a file titled cadence.msu.

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.
A cropped screenshot of Windows Explorer, depicting a series of files. A red rectangle highlights that the .msu, .sfc, and .pcm files are all titled 'marioDS'.
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.

Listening to PCM files on their own

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.

Make your own MSU Pack

Getting Started

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.

Two cropped screenshots. The first is of MediaFire, captioned 'this can be shared.' The second is of Bandcamp, captioned 'this can't.'

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.

Tools of the Trade

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.

Using tracks.json

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.

A screenshot of Audacity, showing the various options for time measurement.

Bookkeeping Properties

* game
The game your pack is for (presumably A Link to the Past).
* pack
The name of your pack.
* url
Where you downloaded the originals from.
output_prefix
The filename for the generated PCMs.
sample_rate
The sample rate of the input files. Can be overridden on a per-track basis - in fact, all properties can.
normalization
Modifies the volume of output tracks.

The really important ones

track_number
The number of this track. Follows the list I linked earlier.
* title
The title of this track.
file
The file to use.
trim_start
The track will start playing here.
trim_end
Where the track loops (or doesn't).
loop
Where to restart playback when the track loops.

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.

A screenshot of Audacity, serving as a visual aid for the properties trim_start, trim_end, and loop.

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.

A screenshot of Audacity, illustrating the final sentence of the above paragraph.

Interesting ones that aren't really needed often

fade_in, fade_out
The track will gradually fade in for this long from the start or end.
cross_fade
Cross-fades the track into itself around the loop point for a smoother transition.
pad_start, pad_end
Adds silence at the start or end of the track.

Really interesting ones

sub_tracks
Lets you specify multiple tracks to play one after another. Useful for creating medleys or looping a short track for a credits theme.
sub_channels
Lets you specify multiple tracks to play simultaneously. Used to mix together the Freddie Merchantry version of my Cadence of Hyrule pack.

Cool ones that make your life easier

first_track, last_track
Only tracks with numbers between these two will be generated. All others will be ignored by the tool.
Beats removing tracks from the json by mutilating the filenames, that's for sure.

I have no idea what these ones do

Tracks that don't behave normally

1, 8, 10, 19, 29: misc. fanfares
Cut off after a set time, and do not loop.
I like to use a sound effect from the source material for track 8, but leaving it out is more than acceptable.
6: Title Screen Prologue
Abruptly cuts off after about 1:57. Oddly, this does loop.
15: Dark Woods
If not included, track 13 (Death Mountain) will play instead.
17, 22: General Dungeon Themes
Dungeon themes will default to one of these two depending on the dungeon's prize.
24: Cave Theme (Alt.)
Plays in certain caves instead of track 18. If not included, track 18 will play in all caves.
25: Zelda's Lullaby
Never heard in rando. Can safely be omitted.
26: A Sage's Rescue
Cuts off after about 7 seconds in rando, but loops normally in vanilla.
33, 34: Credits, Part One and Two
About 3:50 each. Can exceed this amount, but probably shouldn't. Do not loop - you might need to extend this one yourself.
35 through 46: Specific Dungeon Themes
Play in their respective dungeon. If not included, falls back to either track 17 or 22.
If I don't have enough music to cover all the dungeons, I like to at least give the Towers unique music.
47 through 58: Specific Boss Themes
Play in the boss rooms of the respective dungeon. Falls back to track 21.
I also try to give both Aganhim fights unique music wherever possible.
59: Final Ascent
Plays in all rooms past the Big Key Door in Ganon's Tower. Defaults to track 46 if it exists, or track 22 otherwise.
60, 61: I personally never use these
Replace tracks 2 and 9 respectively under certain circumstances.

Testing your pack

There's three major things you have to worry about before releasing your pack to the public:

  1. Are any tracks significantly louder or quieter than the normal music?
  2. Do all the fanfares and credits and stuff work properly?
  3. Do all the tracks actually loop like they're supposed to?

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.

Thanks for your time.

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