Custom Instrument Set Creation - isghj5/mm-rando GitHub Wiki

So you wanted to convert or create a song, but it need a Banjo, but then you looked at the list of instruments available in vanilla instrument sets and realized banjo is only available in two small sets and you can't make your song work with them. Or Sitar. Or Steel drums. Or some other rarely used instrument in MM. You need to make your own custom instrument set for your song to use, which MMR can inject.

This guide will attempt to explain/summarize the process of making a custom instrument set for your songs to use in Majora's Mask Randomizer.

For clarity, I try to use "Instrument set" instead of "Bank" to describe these objects because they contain instrument meta data, but do not contain the actual sound files, and some people confuse "bank" with "soundbank" which stores the sound files themselves (officially called the Audiotable for Zelda64) but if I call them banks here, I'm referring to the same thing as the instrument set.

A lot of info regarding zSequence and bank creation can be gleaned from this instruction video from Hylian Modders: https://www.youtube.com/watch?v=_DwqyDw6kHk

The tool we use to convert MIDI to zSequence is seq64, a tool that lets us rip/inject sequence files from several N64 games, including Zelda64. seq64 also allows us to convert midi to zseq and visa versa, and the zseq files are usable by the randomizer.

seq64 found here: https://github.com/sauraen/seq64

We need a more updated Romdesc because it includes information about the instrument sets. /zel/ on the HM discord added most of them, I added banks 0x26-28 and some of 00 and 02, also fixed a few minor issues

darkychao#4609 on the MMR discord has updated my romdesc to have more sequence commands, use that instead of my old version until I update it

Updated RomDesc: https://mega.nz/folder/OWJnzAqK#zKVpGksSPyR0wfkjyYssFA

While a test rom is kinda optional for song creation that uses vanilla banks, you will NEED a test rom for custom instrument set creation, not just because its more likely to need tweaking, but because my script reads the bank data from a rom, you cannot save from seq64 itself. We do NOT have a way to convert the bank xml to binary outside of my script reading it from the rom.

To make a test rom, you need to decompress your regular majora rom (Seq64 doesn't come with a yaz0 decoder) to make a decompressed rom from your current rom download nDEC below. nDEC is a command line program, you need to run it as a command in a terminal with "./ndec.exe path to/your mm rom.z64 majora_decompressed.z64 \clean". Alternatively, you can move your rom to the same folder, rename it to "input.z64" and double click the bat file that comes with ndec.

nDEC: https://mega.nz/file/2CxVmJSJ#wOxj6oJs2UCMgZh-2UQnLVJXDbwJAUKM3QUboEehmC0

Assuming you have already made sure your song needs a custom instrument set and cannot use a vanilla set, The basic workflow for creating a song that requires custom instrument sets:

  1. Gather a list of instruments your song requires
  2. Look for a vanilla instrument set that is empty enough to add some instruments to meet your requirements
  3. Create this set in seq64, and inject into your test rom
  4. Modify your midi to use the instruments of your new bank
  5. Import your MIDI into seq64 and inject into a test rom
  6. test the rom to make sure everything sounds good
  7. Rip the sequence and bank data from the rom with my bank ripper script
  8. Make categories txt, Pack with bank and sequence into MMRS

Step 1: Gathering a list of instruments your song needs

Your song should NEVER need more than 16 instruments because it can only have 16 channels and each channel can only have 1 instrument in MM (I know SNES and Genesis used to swap instruments in a channel mid-song but this is much harder to do in MM, and so far every song I've found that needs that much instrument variety is too big to fit anyway)

Step 2: Looking for a good candidate replacement set

Vanilla Bank and Instrument reference here https://github.com/isghj5/mm-rando/wiki/MM-Vanilla-Instrument-Reference

NO LONGER REQUIRED: MMR 1.15 expands the audiobank table, we now have 0x80 banks to work with, enough for each and every sequence, stuffing is no longer required. You can just make any bank you want, call it bank 0x28, and you are good to go for MMR.

You can still stuff existing vanilla banks, you just don't have to. You can skip to step #3.

Seq64 lets us create custom instrument sets, although there is a restriction: Nobody has successfully managed to ADD instrument sets to Majora's mask. Instead we must stuff existing instrument sets with more instruments.

Fine Details: In order to increase the size of the instrument set count, we need to increase the size of the table that keeps track of them, the audiobank index table. This table points at each specific instrument set, and the size of the table is hard coded for the vanilla set. The table cannot grow where it sits on the rom, because the region is packed. My attempts to move the file to a different location all end in redline (crash) and I haven't figured out why and haven't found anyone else who has managed to do it successfully. For now, this is a dead-end.

So we can't increase the number of instrument sets, but the majority of Majora's Mask instrument sets are half empty or worse, the largest instrument set used by any song in the game only contains 15 instruments and 6 drums, most however don't even approach 10. This is good though, because we can add instruments to these skeleton sets and replace them with a slightly bigger set that DOES have the instruments we need.

images/audiobank_stuffing.jpg

General bank stuffing rules

  1. All banks must be designed in such a way that any song that used the original bank can keep using your stuffed version. This means no instrument removal or replacement, only add, and try not to tweak the instrument envelopes (if its a slot that barely gets used by one rare/shortly heard vanilla song this rule can be bent)

  2. Songs that only need one instrument can stuff an extra instrument into almost any bank, but songs that need +12 instruments can only use maybe 3 banks total. Therefore, songs that require few instruments should self restrict themselves to banks with fewer available slots to save the limited big banks for songs that need them.

  3. Songs that do not require percussion kits, only regular instruments, can go in any bank with enough free instrument slots (+30), but banks that require percussion kits are more limited (17). Therefore, songs that do not require percussion kits should self restrict themselves to banks that have less useful percussion sets first (or use one of the common orchestral kit sets).

  4. I avoid filling banks to the brim, all 15 instruments and a kit, because (while I have no evidence) I believe having each song and fanfare using different and full banks causes issues with the sound engine. In vanilla MM often the combat music and the BGM use the same instrument set, needing to load two separate sets might require more ram, and might be the cause of BGM death. (This is a soft rule, feel free to bend it)

Logically what follows from the above is that I never use 28 (to keep it free), which is the only completely empty slot with no percussion or instruments we need to worry about, because its unused by the game at all, left over from development. Likewise, 22 should be avoided unless you need > 13 instruments, as those are the only two banks that offer so many instruments, any song that needs those will be stuck with only those two slots, while your song probably has more options. I do focus too much on sets in the middle, sets that have 6-10 instruments available, so feel free to dip a bit higher from time to time Edit: MMR 1.15 lets us expand the table, we no longer need to care about this, just make the bank you want and call it bank 0x28

Stuff-able banks sorted by percussion and slot

Conga kit banks: (mostly used in zora hall)
0C: 9 slots + guitar + accordion + bass + t2
0B: 12 slots + guitar

Chimes and Gong kit bank: (Witches Potion shop chimes)
0E: 9 slots + string + flute + dulcimer

Tambourine and drum sets:
19: 1 slots (just no, don't bother)
05: 7 slots
04: 10 slots

The three kits above are the least useful as percussion kits: Tambourine is its own instrument, so is chimes and gong, and since I have separated the extra Conga kit samples, the percussion kit is no longer strictly required either.

Orchestra Kit:
03: FULL
21: FULL
25: 2 slots + flute + guitar + accordion + string + fchoir + harp
11: 2 slots + string + guitar + piano + t2 + accordion
06: 3 slots + string + harp + pizz + glock
23: 2 slots 09: 7 slots + string + pizz + glock + harp
0F: 8 slots + string + harp + trumpet + trombone
1B: 11 slots
0A: 10 slots + accordion + glock + flute
18: 14 slots

Drum kit with "acoustic bass drum":
24: 2 slots + flute + bass + trumpet + guitar + piano + accordion + string (overused)
20: 7 slots + bass + guitar + glock

Drum kit with "regular bass drum":
13: 2 slots + bass + guitar

Instrument Sets without a Percussion kit:
07: 5 slots + string
15: 5 slots + fchoir
17: 5 slots + piano
1E: 6 slots + flute + piano
16: 7 slots
08: 8 slots + bass + guitar
1C: 8 slots + string + flute + dulcimer + oboe
10: 9 slots + string + harp + oboe
14: 9 slots
27: 9 slots + accordion
1F: 9 spaces + accordion
1D: 10 spaces + strings + bass
26: 10 spaces
1A: 11 spaces
0D: 12 spaces + dulcimer
22: 14 slots + flute
28: 15 all open

Edit: I am too lazy to modify this list, but I have learned that YES, we can add instruments to the legacy percussion slot, so instrument sets can have 16+percussion.

Step 3) Creating a custom instrument set in seq64

Generally you either create a template with just percussion first, then add instruments back, or start with a set that has the percussion you want, load a working copy of it, and add more instruments.

Loading a bank into the working tab

To edit a bank, we load the bank from the ROM or a xml file into a workspace tab where we can modify it separate from the rom until its ready to be re-written.

To load a bank from an XML file, switch to the "Audiobank" tab on the center right side should be a "Load XML" button, pressing this and finding your xml bank file to load should populate the filelist to the upper right if the file loads correctly.

images/loading_xml_bank.png

The "Save XML" button will similarly save the contents of the Audiobank tab into the slot selected.

NOTE: We cannot load .zbank bank files into seq64 right now as they are binary files, you would have to make an injector to re-inject them into a ROM and open that ROM in seq64, however if you did this the instrument names for that bank would be wrong, as the names and metadata for instruments in a bank are determined by the romdesc file not the ROM file, so keep that in mind. Or you could make a binary->xml converter, which is a lot of work. In general, its better to save your new banks as XML for future re-use than to expect to reverse engineer them.

To load a bank from the vanilla game, after loading the romdesc/rom same as modifying a zseq, In the Files Tab, select "Audiobank Index" in the top left, scroll on the left to the bank you want, then hit "Load Bank" in the bottom left to load the bank into seq64's Audiobank tab. You can now edit the bank in the Audiobank tab.

images/load_bank_from_rom.jpg

(I call them instrument sets because that's what they are in a general vocabulary, but seq64 calls them banks, even though "bank" could refer to the soundbank or any "bank of data" and the overlap can be confusing)

Adding instruments to an Instrument set

In the Audiobank tab, in the bottom left corner is a instrument set library, these are instruments loaded from the game Instrument sets (unless we ovewrite them). Select a Instrument set that has the instrument you want in your new Custom Instrument Set (in the example below: Great bay coast). The List of Instruments to the right should populate with instrument names of the bank that you clicked.

To add one of these to your instrument set, select one with your mouse in the list under Instruments (in the example below: Electric Guitar) and hit the import button to the right, and all of the instruments samples, envelopes, and adpcm data should be transferred over automatically, We still need to assign instruments to the instlist which is the next step.

images/add_instrument_from_rom.jpg

If you don't see instrument names in the Instruments field, it's because your romdesc is out of date. /zel/ on the HM discord updated his romdesc and I updated it a bit more found here: https://mega.nz/folder/OWJnzAqK#zKVpGksSPyR0wfkjyYssFA Actually the discord should have an even more uptodate version with changes by darkychao.

Assigning instruments to Index slots

After adding an instrument to a bank the instrument still needs to be assigned a instrument channel slot in the instlist. When your song sequence says "This channel should use Piano" its really saying "This channel uses instrument number #3" which is assigned in a list of instruments, this list has to be set by us, new instruments are not automatically assigned a slot.

Instrument channel slots are modifiable in the Loaded bank file system in the upper right of the audiobank tab. Hit the Up button multiple times to exit the instruments folder until you hit the top "/". Navigate from the top to /abbank/ then /abbank/instlist/, there should be a list of instrument set slots here, although there can be as few as 1 at any time. If you need more slots use the Dupl button to the right to copy an existing slot.

Your newest instrument should be the last number in the list of instruments, to assign it to a slot, select the slot with your mouse and change the value in the "Index" box on the right.

If all slots are already populated, you will have to duplicate one with the duplicate button to make a new slot.

images/set_instrument_value.jpg

WARNING: Do NOT leave a slot pointed at an instrument that does not exist, if a slot needs to be empty set it to -1, not 0 and not randomly at nothing. You can point a unused slot at a real instrument redundantly, that is fine.

images/create_new_slots.jpg

WARNING:Do NOT fill more than 16 slots (higher than instlist[15]), it is not usable. It might be possible to expand in the future, but not right now.

WARNING: The Instrument names in this Audiobank Library are loaded from the RomDesc XML and are assumed vanilla, they are NOT checked for accuracy by seq64 in realtime, if you overwrote a bank these values will not update, don't accidentally use a modified bank's instruments they wont have the right name if the rom was saved and re-loaded.

Removing content from an Instrument set

The loaded bank's file system is visible in Audiobank tab's upper right corner, under "Loaded bank" here you can double click to decend into the filesystem and use "Up" to return a level above.

To Remove an Instrument from a bank you must remove all pieces of its data (leaving in ununsed data wont hurt the bank in-game it just wastes space). Every instrument has the following

  1. Instrument meta data found in /instruments/
  2. a ADPCMBook found in /aladpcmbooks/ 2a) most will also have a ADPCMLoop found in /aladpcmloops/
  3. a Envelope found in /envelopes/
  4. Multiple samples found in /samples/

To delete the above, you select an element in the window and hit the "Del" button

images/delete_an_instrument.jpg

WARNING: Some envelopes are used by multiple instruments, removing one that is shared means the remaining instruments must be updated to point at another one, you might want to leave that one alone if you aren't sure it's still used.

Percussion kits

"Percussion kit" is a term we used to describe a unique instrument in the instrument set. Basic instruments can only contain max 3 samples, but the percussion kit can store up to 64, one per note on the keyboard. Most of the percussion kits in vanilla MM don't use more than 6 because that's a lot of data to fit that many instruments into one bank. The limit here is that there is only ONE percussion kit per instrument set, where you can have 16 instruments.

Because every single note is a different instrument, its complicated and tiresome to modify percussion kits to add new instruments, or to move a percussion kit from one bank to another. Instead, I prefer to take vanilla percussion kits, remove all instruments from these kits so they only contain the kit, then save as a xml and reuse for later. It's a lot easier to start with a kit and add vanilla instruments, than it is to start with vanilla instruments and migrate a kit.

I've already created xml templates that only have percussion kits for the 4 most useful percussion kits, I'll link them here, but the instructions can be used to ripp the rest of the percussion kits as needed.

Percussion Isolated Banks

4 most common percussion sets in otherwise empty instrument sets: https://mega.nz/file/HLpCBS4S#Pw6_NtRvyXSw0n6pqLwnSkXZUknFRc-tDFkuApJerYk

For the purposes of explaining how I did this, in case you need to do something similar:

To remove instruments from a bank (to make a percussion base set) switch to the files tab, select Audiobank Index in the top left, scroll on the left to the bank you want, then hit "Load bank" in the bottom left to load the bank into seq64's audiobank tab, switch to that tab. The top right corner is the loaded bank's file system, you want to remove all information about the instruments from the bank, but not the drums. Except for items marked "abdrumlist", delete all items in /instruments/, /envelopes/, /samples/, /aladpcmbooks/, and /aladpcmloops/, then save as a xml.

To make your percussion only set compatible with the set you want to replace, find the set you want to replace in the bottom left corner of the Audiobank tab, clicking on it should load instruments in the Instruments table. Load all instruments from the bank you want to replace by selecting them with mouse and hitting "Import" to their right. Almost everything about that instrument will be transferred over from the vanilla audiobank, except one thing: the index. You'll have to manually re-align which instrument goes into which instrument set instrument slot by visiting /abbank/instlist/ and changing the pointers in the bank to match the instruments in /instruments/ in the same order as the original set. If your instlist only has one value, duplicate it until you have enough.

images/audiobank_from_percussion_base.jpg

At this point your bank should have percussion you want, and the old instruments from the old instrument set. You can now add the new instruments you want by doing the same thing with the instruments you need that the old set did not already have. Once finished, inject it into your testing rom and test with the sequence file.

WARNING: if you need more space for a custom instrument set, seq64's compress/make space is a bit finicky for banks, and can cause all audio to stop working in a rom. The reason why is not clear. I generally only use slot 3 which is one of the largest bank slots, reducing the need to make resize. If you need more space, pointerize bank 0x4 to free up its space, but DO NOT shift the bank, it is broken in seq64 1.0.

To extract your instrument set from your test rom, use the mm_audiobank_ripper script on your test rom, it should export all modified instrument sets to a new folder.

Step 3 Experimental: Instrument Tweaking/Creation

If all you wanted as a instrument set that contains instruments that already exist in MM as-is, you can skip to step 4, otherwise we're getting into experimental territory: You can modify the audiobank elements and data directly in Seq64 to change how instruments behave and possibly create new instruments.

MIDI Envelopes

zSequences aren't exactly like midi but there are similarities. Midi has four basic variables that determine how a sample is warped to form notes by the midi player, these are Attack, Decay, Sustain, and Release. Explained here: https://theproaudiofiles.com/synthesis-101-envelope-parameters-

In MM, instruments have some differences. Each instrument envelope has two attack values, rate and level, but no sustain. Instead we have two decay types with two values each. Release rate is a separate value in the instrument instead of the envelope. You can see all of this info by loading the bank into the audiobank tab, and exploring the data in the loaded Bank file system form in the top right.

How do the two decays work? I'm still not sure, and not sure anyone in the community knows either. My own testing has had mixed results: I believe increasing the attackRate is the same as increasing attack, 2 is standard, but the jazz guitar is changed a lot by a value of 32.

images/seq64 ADS changes.jpg

I believe decreasing the releaserate is the same as increasing release, where going from 150 to 100 means a longer release. 255 is off, and some samples ignore release rate entirely (cathedral bell in Romani Ranch's instrument set for one).

images/seq64 release rate.jpg

I don't know what the difference between the values and the rates are for decay, you can sometimes increase both and get more effect, but the effect is different if you increase one vs the other. (I'm being vague because I lack the vocabulary to describe how they differ, you might want to try it yourself)

Samples and Splits

Each instrument in Zelda64 maps one to three samples to specific key notes and every note between these sample notes is pitched modified to match what the key should sound like it each key had its own sample. Some instruments need all three for one instrument (eg Piano). Some single instruments have multiple instruments, where each instrument is one sample, as multiple samples are not required to cover a whole instrument (eg. Tamborine kit in 0x25 and Conga/Slap in 0x26 and three different Dog SFX in bank 00 in one instrument).

Where these samples meet in the middle is a split, a note where one sample changes over to another. Sometimes you want to move this split further up/down the piano roll (eg Dulcimer's lower or upper sample are different enough, crossing it sounds bad, same with the bottom piano sample), and you can do this by Going to instrument-> (instrument you want to modify) -> splitpoint1/2 and changing the values. I think SP1 is the split between sample 1 and 2, where an increase in value raises the note into higher octaves (cutting out sample 1, offering more sample 2).

The Samples each instrument uses are assigned in the Instrument metadata. Each split/AbSound has a pointer to a sample stored in the current bank. If you wanted to change this, keep in mind you want the appropriate aladpcmbook and aladpcmloop for that sample in order for it to sound the same as it did previously.

You can tune these samples to different octaves, offsetting all notes used by that sample by changing the "tuning" float values in the Instrument/(instrument)/splits/ABSound/tuning variables, Generally they are tuned 1.0 as the keynote integrated into the sound itself is the tuning, although this is an option to change these values after the fact, and can be used to move instruments across the piano roll if you need to add another sample.

images/sample rootkey range and split point visualization.jpg

ADPCM Books and Loops

This is static data that is necessary for the hardware to read your sound files, they should always be static for the sound file you are using.

More detail: N64 soundfiles are compressed AIFF files (AIFC) the predictors are necessary to start the sound correctly, for some reason instead of bundling this information with the sound files themselves they are copied for each instrument that needs them shrug.

Splitting up Percussion kits

I have found several songs that want to use multiple percussion kits, but each instrument set can only have one percussion kit (maybe one day we can put a percussion kit in the unused sfx bank, but that's very experimental). Timpani as a standalone instrument can be found in bank 00 and bank 01, Tambourine kit is available as a regular instrument in bank 25, but what if you need to use another orchestra instrument with drum kit, or a single drum kit instrument with orchestra?

I have extracted most of the instruments in the other percussion kits here:

https://mega.nz/folder/XWgWTa4S#YjNEtP_Uoe4OuAr1IskdPg

To use these, copy any channel that uses the instrument you wish to use, load the new soundfont for that instrument into the copied channel, then tweak the notes to match your original. I cannot easily make a instrument match the pitch of a percussion kit because percussion kits get per-note pitch tuning, and instruments only get a max of 3 tuning.

After fixing your music to use the new instruments in your MIDI editor, you need to load those instruments as XML files into seq64 and save them temporarily to another bank on rom, then load the one instrument back into the bank you want to build.

Step 4: Modify your midi to use the instruments of your new bank

This kinda depends on your MIDI editor, in FLS you want to use the midi export macro first (Tools->Macros->Prepare for midi export) which drops all of your instrument info, setting all of your instrument channels to use instrument 1. Now you can change those values to match your new instrument set (remember seq64 starts at 0 and FLS starts at 1, so add 1 to any instrument value from seq64 to the FLS value) and export midi.

The new bank's instrument indexes are assigned in the /abbank/instlist/ array, the values on the left.

images/new_bank_instrument_values.png

Step 5: Import your MIDI into seq64 and inject into a test rom

Same as the regular vanilla instrument set tutorial: Switch to the MIDI tab, import your MIDI with the import midi button and set the loop branch and song length if necessary.

Step 6: Test the rom to make sure everything sounds good

Injecting a bank into a bank slot is just like injecting a sequence into a sequence slot except you select "Audiobank Index" to select the list of banks to inject into. I typically inject into bank 0x3 for testing because its almost as big as they come size wise, and it has no unique instruments found in no other thanks, so you can still pull all the instruments you might want from another bank after 0x3 is destroyed. If 0x3 still isn't big enough for a test bank (that is a bad sign, you might want to make sure you don't have unused data bloating your bank) you can pointerize bank 0x4 which gives you bank 0x4 as empty space added to bank 0x3.

images/save_instrumentset_to_rom.jpg

After injecting the bank into a bank slot, injecting zseq into a sequence slot, pointing the sequence slot's instrument set at the new custom set you made, save the rom. You should now be able to load the rom into a emulator to listen to it and make sure nothing is broken.

Step 7: Rip the sequence and bank data from the rom with my bank ripper script

You can get my bank ripper script from here: https://github.com/isghj5/mm_audiobank_ripper

It should be fairly straight forward to use:

  1. install python 3.X if you don't have it installed already
  2. drag your test rom onto the DropYourRomHere.bat or onto the exe.

The script should export any modified sequences and banks from the test rom and place them into a new folder based on the date. There is a minor issue: if the rom is too far away from the script in the file system, it won't work (windows pathing issues) just move the rom to the same folder first.

The seqences and banks will be named based on the slot in which they were extracted from, if you put a song in slot 13 it should extract to 13.zseq, if you used bank 24 it should create 24.zbank and 24.bankmeta.

You'll get some false positive files extracted that you don't want, like if you shrank or nullified a song slot to make space for your testing song slot, that broken slot will be extracted too, feel free to delete it. It should not rip files that were not modified.

Then you can just select the bank, bankmeta, and sequence and hit F2 to rename them, and rename them to the bank they are supposed to work with.

Step 8: Saving and file packing

As of April 2020, MMR uses a new file called MMRS to combine the sequence and bank objects into one file for ease of sharing, and organization.

Each MMRS file is just a zip with your files slightly renamed and placed inside of it with a categories.txt file that contains the categories your song has to help MMR place it in the right sequence slots.

For songs with custom instrument sets, just name the bank and metadata same as the sequence and place all three in the file with the categories.txt.

MY-MUSIC.zip

  • categories.txt = 0,2 (in this example)
  • 18.zseq
  • 18.zbank
  • 18.bankmeta

Banks and bankmeta have to be spelled the exact same as their zseq The parser accepts 0B.zseq, B.zseq and 0xB.zseq as all valid ways to identify the bank a zseq should accept, but the bank detection relies on using the exact same name as the song, you can not mix the types between the zseq and the two bank files.

If you want to decrease chances the bank you need is already taken, you can add redundant seq/bank combos together into one file, increasing likelihood of finding a free instrument set slot.

MY-MUSIC.mmrs

  • categories.txt = 0,2 (in this example)
  • 18.zseq
  • 18.zbank
  • 18.bankmeta
  • a.zseq (optional) (redundant 1)
  • a.zbank (optional)
  • a.bankmeta (optional)
  • 2.zseq (optional) (redundant 2)
  • 2.zbank (optional)
  • 2.bankmeta (optional)
  • ...

Edit: MMR 1.15 makes redundant banks unnecessary, if the bank is already stuffed it will be placed in a brand new bank in the expanded banks For backwards compatibility they are still supported but without any advantage.

Then rename your MY-MUSIC.zip to MY-MUSIC.mmrs for the randomizer to use it, where the filename can be anything.

images/mmrs_example.jpg

If you want to make sure your MMRS is working, you can add the songtest to your mmrs filename and randomize a MMR seed and MMR should always force it into the File select screen. Example songtest-mario-flying.mmrs or for zseq songtest-mario-flying_03_4-5-7.zseq

(you can tell windows that 7z can open mmrs files and 7z can auto detect its a zip even after being renamed)

If you have questions or need help visit #support or #music-discussions in the MMR discord: https://discord.gg/8qbreUM

MMR Discord link