Pages: 1
Posted on 06-04-18, 04:21 pm (rev. 6 by TheTimebreaker on 06-22-18, 08:36 am)
Ninji
W1 out :)

Karma: 544
Posts: 82/229
Since: 10-22-17
Ermm...Hey there. Yeah that's right, another Music hacking guide.

---------------------------------------------
Introduction
---------------------------------------------
But we already have a Music Hacking Guide!
Yeah I know. But it's outdated, some things are more complicated than necessary and honestly it was hard to understand (at least for a music-hacking-noob like me)

Who should read this guide?
This guide won‘t help you if you are already a music hacking god. If you are just getting started, a beginner, then this guide should help you.

That's not working!
If you did everything right, it should. You probably did something wrong.
But you can try a different method, some things simply don't work with a certain method. But if that's the case, it is mentioned (if i did not forget it of course ^^)

I don't understand that!
Reading again can help. But if you still have no clue what I am talking about you can watch one of the videos linked at the end of each chapter.
If you want to harm yourself by looking at my bad editing skills: I won't stop you. But you've been warned /._./
Oh yeah, I didn't use the YouTube tag of this page because YT videos are taking way to much space and will disturb you more than it will help.
Playlist with all videos: Link

I still have a question!
If you tried reading again, watched the video, tried again at the next day and still have a question: Ask either in the forum or below this tutorial. But be polite (sad that this has the be said) and EXPLAIN YOUR PROBLEMS EXACTLY AND WITH SCREENSHOTS (sorry about yelling, but really: no one can help you when you don't describe your problem)

---------------------------------------------
TABLE OF CONTENTS
---------------------------------------------
1. Theory
2. What you need (Tools)
3. Scenarios
-> I....Extract Sound Database from NSMBDS
-> II...Extract Sound Database from other DS games
-> III..Extract a song from any DS game using VGMTrans (easier method)
-> IV...Extract a song from any DS game using Nitro Studio (harder method)
-> V....Extract a song from any DS game when VGMTrans crashes or won't work properly
-> VI...Edit and/or create a song
-> VII..Insert a song into a Sound Database (replacing method)
-> VIII.Insert a song into a Sound Database (inserting method) or: How to add more songs to your game
-> IX...Re-insert an edited Sound Database into NSMBDS
-> X....Note about Sound hacking
4. Thanks/Sources
5. Final Words
-----------------------------------------
1. Theory Game Theory? nope, sry
-----------------------------------------

I know, no one likes to read a ton of theory without doing anything. But: Without knowing the theory behind something you will not be able to understand what you are doing. Also, it makes a ton of things much easier.

Every DS game contains a file with the format ".sdat". This stands for Sound Database and you guessed it right! It contains all songs used in a specific DS game.
E.g. the sound_data.sdat from New Super Mario Bros. contains all good (and not so good) tracks like the Overworld Theme, the Underground Theme, the Credit Theme and so on

In this .sdat files we have a structure that can be found in every DS Game:


Sequence: Format = .sseq, Basically a converted MIDI file. Tells the game, wich instrument plays wich note when, how, with which volume, etc.
Sequence Archive: Can be compared to the Wave Archive, just for .sseq files. But Nitro Studio can't edit them and we don't have to edit them for Music Hacking either.
Bank: Format = .sbnk, Those files contain information about the used instruments.
Wave Archive: Format = .swar and .swav. A .swav file is a converted WAVE file. A .swar file contains plenty of those .swav files. The .swav files can contain SFX, Instruments and a ton of other stuff. Bank files need those files to work.
Stream: Some DS games can use "streamed" music (e.g. Animal Crossing Wild World Title Screen Music is a streamed track). But NSMB DS does not use these files so for hacking the Music and the Sound of this game you won't need this folder.

You won't need to edit "symb.bin" and "info.bin" because Nitro Studio does this on it's own.
SYMB.bin: Contains the names of all files (e.g. BGM_VS_CHIJOU and all other names of all other files contained in the Sound Database file.
INFO.bin: Contains information about each entry. Volume, Priorities, wich bank file is used by wich Sequence file and everything else





Short Explanation:
File ID: Refers to a File in FILES->Sequence/Bank/Wave Archive. Wich sub-folder it is depends on if you are looking at a Sound Sequence entry, a Instrument Bank entry or a Wave entry.
Bank ID: Refers to an entry in the Instrument Bank. The File ID found in the instrument bank refers to a .sbnk file in the FILES->Bank folder.
Wave 0/Wave 1/Wave 2/Wave 3: (not on the picture) These entrys can be found in any Instrument Bank entry below the Banks file ID. Those refer to entrys in Wave.
Volume: Usually 127. Sets the Volume of the track.
Channel Priority: Usually 64. The DS can only play 16 channels at once. If a situation would force the device to play more than 16 channels, the system will cut off the Music/Sound with the lowest priority. But you shouldn't set this to something different than 64 unless you know what you are doing.
Player Priority: Usually 50. Same explanation as above. Set this to 50 unless you know what you are doing.
Player Number: Usually 0. Because the DS has to play multiple things at once, there are multiple players. Each player plays one sequence (a piece of music, a SFX, ...). Set it to 0 unless you REALLY know what you are doing.
----------------------------------------
2. What you need (an overview)
----------------------------------------

I will of course tell before each chapter wich tools will be used but if you were just looking for a complete "What do I need to hack Music and Sound?" list: Here we go.

- Your very own copy of New Super Mario Bros. and a ROM of it on your computer (No one was expecting that!)
- time (hacking music and sound can be a lot of trial and error and takes a lot of time if you want to create completely original tracks)

Tools:
- Nitro Studio (the best sound_data.sdat editor in the entire multiverse, GitHub Link)
- VGM Trans (Can be used to listen to the tracks and extract/convert some files; GitHub Link)
- kiwi.ds/NDS Editor (Can be used to look inside the files of DS Games. Needed, if you want to use tracks and sounds from another DS game; Link)
- NSMBe (You should probably know what this is used for Link)
- NSMBe modified (Needed if you want to add more songs into the game (we will come to that later); Link)

Converter:
Because Nitro Studio can do all the conversions we need by it's own, you don't need to download them (especially because the Nitro Studio version of some converters is working better than it's .exe counterpart. But listing them here does not hurt anyone:


A MIDI editor of your choice to create and/or edit MIDI files, e.g.:
- Anvil Studio (free; Link)
- Cakewalk Sonar (with costs, but trials exist; While writing this tutorial, I could not find a way to download this trial from the official website, so if you wanna use this program: Google is your friend)
- FL Studio (with costs, but trial version works perfectly for everything we are doing with it; Homepage)
...
basically any MIDI editor should work. But things might work slightly different with each editor.

But one MIDI editor you definetly need is:
- Anvil Studio (free; Link; Used for looping the tracks)

And last but not least: interest and patience!

'nuff said. Let's jump right into it.



--------------------------------------------
3. Scenarios
--------------------------------------------

I. How to get your own NSMBDS-.sdat file
What you need for this: NSMBe (any version), ROM of NSMBDS (any region should work, but because most hacks are done for the US version and I don't know if there are any side effects using different regions for music hacking, you should probably use a US ROM)

That's basically the first thing you need to do when hacking music. You extract the .sdat file and save it somewhere.

Step 1:
Open NSMBe (any version) and open your NSMBDS ROM.

Step 2:
Click on "ROM File Browser" and look for "root". Expand it.

Step 3:
You should now see "mgvs_sound_data.sdat" (= songs used in Mario versus Luigi mode (MvL for short) and the minigames) and "sound_data.sdat" (= tracks used in the "normal" levels). Left-click and choose "Extract" at the bottom of the window. Do this for both files

Congratulations! You now have your own copy of the NSMB Sound Database.

video on youtube

-------------------------------------------------------------------------------------------------------------------------------

II. How to extract the Sound Database from other DS games
What you need for this: kiwi.ds/NDS editor, ROM of any game you want

While this is a little bit more complicated than doing this with NSMBDS, it's not the most complex thing in this tutorial. Let's get started:

Step 1:
Get any DS game you want (.nds format and legally bought please) and copy it to an easy-to-find folder.

Step 2:
Open up kiwi.ds, click on "File", then on "Open" and open a DS game of your choice.

Step 3:
As you can see the game was added to the list. Double-click it and two smaller windows should open (if not: Click on "View", then on "File Browser" and try double-clicking the game again)

Warning: kiwi.ds can't open all DS games. For some reason, some games can't be opened at all or double-clicking some games to look at their files crashes kiwi.ds. Sorry about that, but I can't help you with that
But don't worry: I tried kiwi.ds with a lot of games and at least the bigger games like Mario games seemed to work (but I didn't try ALL Mario games, guess you will have to try it out by yourself to see if it's working)


One window contains a ton of informations about the game. You can memorize this if you want to impress your friends: Then close the window, we don't need it.
Take a look at the second window. This thing should be a list containing the ROMs name only. Expand the list by clicking on the "+" symbol on the left side of the name.

Now it gets a little tricky: you have to find the Sound Database by yourself. Because every game contains the file somewhere else you have to expand all sub-folders to look for the file. But luckily they are called something similar to "sound_data.sdat". You can find it if you just try hard enough.

Step 4:
You found the Sound Database AND ticked the box on it's left side? Great! Now look at the buttons above the whole list: hover your cursor over the buttons. The first one should say "Extract Selected". Press that button. A message should pop up, saying that one file was extracted successfully. Close that message
note: Some games have multiple .sdat files. In that case: select all .sdat files and extract them.

Step 5:
Go to the folder where you saved your ROM. There should be another folder with the same name as the ROM. Open it and it's subfolders until you find a file called something similar to "sound_data.sdat". That's the Sound Database. Rename it so you don't forget the game it's from and copy it whereever you want it to be.

Step 6:
Profit.

video on youtube

-----------------------------------------------------------------------

III. How to extract a song from NSMBDS (or any other game) using VGMTrans (easier method)

This method is the easiest way to extract a track from any game. If VGMTrans crashes while opening the file, look at V. How to extract a song from another game when VGMTrans crashes or won't work properly
Step 0.5:
When opening some game's Sound Database you might face a problem: All tracks have the same name (e.g. Animal Crossing, Mario Kart DS).
To find the song you need you have to options:
....1st: Listen to every song using the PLAY function until you find the track you want.
....2nd: Research for a list. Google is your friend.
Some games like NSMBDS have a list and their files have names, making it a lot easier to find them. If you can't find the song you want by using the 2nd method you have to use the 1st one

Step 1:
Open VGMTrans and open your Sound Database.

Step 2:
Choose the song you want to extract by left-clicking it. You can play the songs by left-click on their name followed by pressing SPACE on your keyboard.

Step 3:
In the left-bottom corner you will see a small box containing different files. Those are the .sseq, the .sbnk and the .swar files that song is made of.
.sseq file: The first entry. Icon: notes and music paper. Can be exported as .sseq/Sequence file and as .mid/MIDI file.
.sbnk file: The second entry. Icon: Violin or guitar or something similar. Can be exported as .sbnk/Bank file, as .dls/Downloadable Sounds file and as .sf2/SoundFont2 file.
.swar file(s): Every other file after the Bank file. Icon: a Wave. Can be exported as .swar/Wave file or as .wav/Wave file.
Right-click every entry in that list and press "Save as original format". Don't forget to add the extensions .sseq, .sbnk and .swar to the files.
If you want to edit this track/use it as a base for a new song: Additionally Save the Sequence file as MIDI and the Bank file as DLS and/or SoundFont2 file.

video on youtube

-----------------------------------------------------------------------

IV. How to extract a song from NSMBDS (and any other game) using Nitro Studio (harder method)
What you need for this: Nitro Studio, Sound Database of NSMBDS
note: This method is a little bit tricky because you have to jump a lot between folders and lists. But if VGMTrans crashes or won't work properly, this method can help.

No matter if you want to create a new song or just arrange one from another game or just copy/paste a song from another DS game: You need to extract the song first to do all of this.

Step 1:
Open Nitro Studio. Select "File" (next to "Edit", "Help" and "About"), "Open" and open up your Sound Database.

Step 2:
Expand "Sound Sequence" and left-click the song you want to extract. If you are not sure wich song you want you can left-click every song one by one and press "Play" on the left side of the window to see if that's a song you want or you can use the List of Music.

Step 3:
After Left-Clicking the track you see some informations popping up at the left side of the list.

Short Explanation:
File ID: Refers to a .sseq file in the FILES->Sequence folder
Bank ID: Refers to an entry in the Instrument Bank. The File ID found in the instrument bank refers to a .sbnk file in the FILES->Bank folder.
Volume: Usually 127. Sets the Volume of the track.
Channel Priority: Usually 64.
Player Priority: Usually 50.
Player Number: Usually 0.
If you are not sure about the last four settings; don't worry. You can set them to the usual value and forget about it in most cases.

Write down the number (and the name if you wanna play it safe) of both File ID and Bank ID.

Step 4:
Fold in (the opposite of expanding the list. No idea what's the correct term for that) the "Sound Seqeunce" List And take a look at "FILES":
Expand the "FILES" list.

Step 5:
Expand "Sequence" and look for the File ID you noted.
Right-Click the File and select "Export".
Navigate to a place where your file stays safe and give him a cool name (or just keep the original name to keep track of the songs).
Right below the name you are giving the extracted file you see a box saying "MID Sequence File (*mid)". If you want the MIDI file simply ignore this box. If you want the .sseq file click on that box and select "Misc. Nitro Sound File (*.sseq)" If you are not sure what you want (or you know that you will need both files) just extract both formats by saving one format, then Right-Click the file again to choose a different format.
note: When you want to edit this song, you need the MIDI file. But extracting both does not cost much time and disk space

Step 6:
Fold in the "FILES" and expand "Instrument Bank" instead.
Look for the Bank ID you noted and Left-Click it.
You will see one File ID (note it) and up to four Waves (note them too.) If one Wave says "FFFF - Blank" or something similar you can ignore that specific Wave.

Step 7:
Now expand the "FILES", then "Bank". Look for the File ID of the Instrument Bank you just noted. Right-Click, choose "Export" and save it whereever you want.

Step 8:
Fold in "FILES" again to expand "Wave" (right below "Instrument Bank")
Search all Wave ID's you noted. Left-Click each of them and note the File ID of each. Also note, wich File ID was Wave 0/Wave 1/Wave 2/Wave 3 in the Bank entry in "Instrument Bank" as setting these things wrong will result in wrong instrument settings in the track.

Step 9:
Fold in "Wave" and expand "FILES" one last time. Expand "Wave Archive".
Right-Click each Wave you noted and save them.
IMPORTANT: It is necessary to note wich Wave file was wich Wave in the Bank (Wave 0/Wave 1/Wave 2/Wave 3). Otherwise the track will sound very different!

Step 10:
Profit.

Trust me; it's hard to not forget something while extracting tracks. But once you get used to it, it will become much easier.

video on youtube

-------------------------------------------------------------------------------------------------------------------------------

V. How to extract a song from another game when VGMTrans crashes or won't work properly
What you need: Nitro Studio, kiwi.ds, Sound Database of whatever game you want
Warning: This part of the tutorial is not as accurate as the rest might be, because every DS game works different with the tools. But with this steps and a little bit of trying you should be able to get it work.

Step 1:
When VGMTrans crashes, you can do a procedure similar to the Nitro Studio method found in IV. How to extract a song from NSMBDS (and any other game) using Nitro Studio (harder method)
The "Sound Sequence" refers to a .sseq file in the FILES folder and a Bank ID in "Instrument Banks".
The entry with that Bank ID refers you to a .sbnk file in the FILES folder and to 1-4 WAVE ID's.
Entry's in "Wave" with that Wave ID refer to a .swar file in the FILES folder.

When trying the Nitro Studio methode with a Sound Database that crashes VGMTrans it can happen that Nitro Studio won't show you informations about something and gives an error message. In my case, the only files that made problems were the WAVE files in the "Wave" list (not in FILES subfolder!) of Animal Crossing.
If that's the case you have two options:

Step 2a:
You know the WAVE ID because you looked at the Instrument Bank in Nitro Studio. Take the Bank ID number (e.g. ID 20) and go to FILES, Wave Archive and count the Waves beginning with 0! => 0, 1, 2, ... , 20. When you reach the ID number, right click the .swar file and extract it.

Step 2b:
If this does not work (or you don't want to count) there is another way.
You still need all the ID's from Nitro Studio that you can get.
Open kiwi.ds and don't close Nitro Studio. Open your Sound Database with kiwi.ds and double-click it. The file browser should open.
Expand the file itself, then "Wave Archive". Then look for the Wave ID of your WAVE file (those files should be named like WAVE001, WAVE002 etc.). Tick the box of the right WAVE file and press the "Extract Selected" button above.
Now look at the folder where your Sound Database is located: the new folder contains the .swar file.

Step 3:
You now should have one .sseq file, one .sbnk file and one to four .swar files. Rename them to remember what they are.

Step 4:
Profit.

video on youtube

--------------------------------------------------------------------------------------------------------------

VI. How to edit and/or create a song
What you need: a MIDI editor, Anvil Studio, VGMTrans, a Sound Database file from any game (NSMBDS is recommended because it's the easiest)

This is where the fun begins. You can use this tutorial to create your own songs, to recreate songs from non-DS games or to edit originals.
Step 1:
Think about the song you are going to create or recreate (or edit). Now open up VGM Trans (some Sound Database can't be opened by VGMTrans, in this case Nitro Studio might work for listening to the songs and MKDS Course Modifier can export the files we need in the format we need them. Look below to see how this works).
Open up your Sound Database. A list will load at the bottom of the window containing all music tracks that we can use. Left click the first one and press "SPACE" on you keyboard. The song will start to play.

_______________________________________________________________
Step 1-3: If VGMTrans can't open the .sdat file
If that's the case, download MKDS Course Modifier: On romhacking.net
Now open your Sound Database in Nitro Studio and in MKDS Course Modifier.
Expand "Sound Sequence" in Nitro Studio and listen to the instruments of the song and ask yourself "Can this work with my idea of the track?". Because we are not going to write our own Bank files, we need one from a DS game that contains the instruments we want.
If this does not sound like something you would use, listen to the next song. Repeat this, until you find a song that fits.

If you found a good song, look at FILE ID and BANK ID. Write down both.
Now expand "FILES" (still Nitro Studio), "Sequence" and right-click the file with your FILE ID.
Choose "Export" and save it as a MIDI file.

Then go to MKDS Course Modifier. On the left side of the window there should be a list of folders.
Left-click "Bank" and look at the mass of Bank files you can see in the center of the window.
Right-click the file with your written-down BANK ID (e.g. BANK ID was 22, then look for "Bank 22.sbnk") and "Convert to DLS". Save it where you saved your MIDI file.
If you are using a non-NSMBDS song, expand "Instrument Bank" in Nitro Studio, select the Bank file from your BANK ID and look at the Waves used (left part of the window).
Now export those Wave files like shown in [[[. How to extract a song from another game; Step 2a or Step 2b
. . . . . . . . . . . .Continue with Step 4. . . . . . . . . . . .


Step 2:
Listen to the instruments and ask yourself "Can this work with my idea of the song?". Because we are not going to write our own Bank files, we need one from a DS game that contains the instruments we want.
If this does not sound like something you would use, press the down-arrow on your keyboard, then SPACE again. This will play the next song. Continue, until you find a instrumentation that fits.

Step 3:
When you got the song you need, look at the left side of the track list. There should be a box containing some files.
The first file (icon: some notes and note paper) is the Sequence file. Right-click it and "Save as MIDI".
The next file (icon: a very compressed violin or something like that) is the Bank file. Right-click it and "Convert to DLS" or "Convert to SoundFont2" (depending on wich format your MIDI editor can use). If the song you are using is not from NSMBDS, right-click again and "Save as original format" (be sure to add the extension ".sbnk". Otherwise we can't use the file afterwards)
If you are using a non-NSMBDS song, right-click all files following the Bank file (those are the Wave files) and "Save as original format". Add the extension ".swar", otherwise we can't use the file afterwards.

Step 4: (from now on this tutorial is very generic because how things work will discern between MIDI editors)
Now you can open the MIDI with any MIDI editor that can use either DLS or SoundFont2 files (or both). (e.g. Anvil Studio can't use both, FL Studio supports DLS. You should know this better than me. But I'm sure you can research it)
Load the DLS/SoundFont2 file and Play the song. It should sound like it did in VGMTrans or in the game itself. If it doesn't, well, figure out how it works. To do the really cool stuff you have to learn a MIDI editor. (I am using FL Studio, tutorial about how this works can be found here(video)
If that's the case, continue with Step 5

Step 5:
Now you can edit the song however you want.
As mentioned, you need to know how your MIDI editor works in order to do some cool stuff.
Once finished editing and polishing the song, save it as a MIDI file and export it.

Step 6: optional
ADDING CUSTOM BAHPS
This was like the only thing I never made working. Some tracks support them, but to make Goombas and Koopa Troopas dance, you need to make them work with another tutorial.
So the only thing I can say is: " skawo made a hard-to-understand-but-it-seems-to-work-tutorial. Go check it out. And explain me how this works in a pm (just kidding )"
You don't necessarily need those things and some tracks sound stupid with them, but that's yours to decide.
If I ever am able to understand those things, I'll try to expand this tutorial and explain it easier.
Attention: If you want to loop the song AND add custom bahps: only follow the tutorial until step three, but don't convert the MIDI into a .sseq file, only save as MIDI.

Step 7a: optional
LOOPING YOUR SONG
This part is based on this wiki page. "Thank you"'s go to the person who wrote this.
Step 7.1:
Count the measures of your song (e.g. 64 measures), the time signature (e.g. 4/4, 4/2, 4/8, 6/8 etc. (usually 4/4)) and the tempo (e.g. 128 bpm, 78 bpm, etc.) and write those things down.
Also write down wich measure should be in the loop (everything before the loop starts will played once, everything inside the loop will loop and everything after the loop won't be played at all)
The borders of the loop will be set after those numbers.
e.g. I want to loop my track from measure 18 until 45 included. Then I have to use the numbers 17 and 45.

note: If your loop should start from the beginning of the track (= you want to loop the whole track) you have to set the first Marker (loopStart) to 0:00:00:00

Step 7.2:
If this is your first use of Anvil Studio, you need to set it up. If you already made these settings, skip to Step 7.3
Open Anvil Studio and look at the top. Right below "Help" you should see the three buttons "Time", "Mouse" and "Duration". Click on "Time".
In the new window, choose for "Units for Position/Time" the option "Hour:Minute:Second:Frame". The "Frames Per Seconds" box next to this option has to be clicked. Set the FPS to 30, then "OK" all windows to return to the "normal"/main window.
Those adjustments to the settings will be done once and you don't need to make them again.

Step 7.3:
Click onto "Edit", then select "Insert MIDI Event".
Tick the box "Include Meta events" and choose "Marker" from the list above.

Step 7.4:
Now we have to do some MATH!!! Noooooooooooo
But don't worry, you only have to insert some numbers into a formula.

You will have to calculate two numbers, to time stamps to be exactly.
first one: (60s x beats_per_measure x measure_of_loop_start) : BPM or tempo
in my example this would be (60s x 4 x 17) : 120bpm = 34s

second one: (60s x beats_per_measure x measure_of_loop_end) : BPM or tempo
in my case (60s x 4 x 45) : 120bpm = 90s

The measures you insert there (measure_of_loop_start and measure_of_loop_End) will be in the loop. e.g. 17 and 45 will play this:
1 2 3 ... 17 18 ... 45 17 18 ... 45 17 (and so on)

If the numbers have decimals (e.g. 34.6s) you need to convert it into s:FPS:
Take everything before the "." (in this case 34) as seconds.
Calculate the FPS with everything after "." (e.g. 0.6): 0.6 x 30 FPS = 18 FPS. If the FPS are decimals too, round them according to the common rules.
Put them together: 34s 18FPS

Now we have to convert our values into the format used for times in Anvil Studio: Hours:Minutes:Seconds:FPS but substract one FPS!!!
In this case: 00(hours), 00(Minutes), 34(seconds), 00(FPS) => 00:00:33:29 (loopStart)
And 00(hours), 01(minute), 30(seconds), 00(FPS) => 00:01:29:29 (loopEnd)

Enter the first time into "Time of". Click the blank box below the "Include Meta events" box and write "loopStart".
The second time/Marker will be called "loopEnd".
If you did this correctly, click "File" and "Export MIDI-0 format file...". Name it something like "0_oldname.mid" or whatever. Just don't overwrite your non-looped file by naming the MIDI-0 file the same (in case something goes wrong).

Step 7b:
IF YOU DON'T WANT TO LOOP YOUR SONG...
Due to the fact that some programs export bad MIDI's (yeah I'm looking at you FL Studio) we have to do something (you don't have to do this if you looped your track as showed above):
Open your track with Anvil Studio.
Choose "File" on the top of the window and click on "Export MIDI-0 format file...". Name it something like "0_oldname.mid" or whatever. Just don't overwrite your original file by naming the MIDI-0 file the same (in case something goes wrong).

Step 8
You can now use either the looped MIDI-0 file or the non-looped MIDI-0 file to insert them into your game using one of the methods mentioned below (VII., VIII.)

no video this time

---------------------------------------------------------------------------------------------------------------

VII. How to insert a song into a Sound Database (replacing method)
What you need: Nitro Studio, Sound Database of NSMBDS, your new track

Step 1:
Open Nitro Studio. And open a copy of your .sdat file you wanna edit. Why copy? Because if something gets messed up you did not kill your original trust me it's worth it

Step 2:
Think about a track you don't need. E.g when inserting another desert theme you could replace the original desert theme. If you know one, expand "Sound Sequence", left-click that track and write down the File ID.

Step 3:
Fold in the "Sound Sequence" list and expand "FILES" instead followed by "Sequence".

Step 4:
Right-Click the File ID you decided to replace. Select "Replace" and choose your file (can be .sseq or MIDI-0). If the window simply dissappears and you look into Nitro Studio again, that's good. If you get an error message, look at V. How to edit and/or create a song; Step 7a/Step 7b. If this still doesn't work, ask in the forum if someone knows how to help.

Step 5:
Fold in "FILES" to expand "Sound Sequence" again. Left-Click the File you replaced. It still has the same name as before. Right-Click and select Rename to give the track the name it deserves.

Step 6:
After correcting the name of the file, take a look at the left side of the window again.

Step 7a: if the song uses a Bank file from NSMBDS
Look at Bank ID. Click on the list and choose the Bank file your track uses.
Set the four Settings below to the default setting (Volume = 127, can be adjusted if track is too loud or too quiet compared to other tracks, Channel Priority = 64, Player Priority = 50, Player Number = 0)
Continue with Step 8:

Step 7b: if the song uses a non-NSMBDS Bank file
Look at the Bank ID. Write down that number, expand "Instrument Bank", find that file, left-click it and look at it's "File ID" and the Waves.
Now Expand "FILES", "Bank" and right-click the file from your File ID. "Replace" that file by the Bank file your track uses. You can rename this file afterwards in "Instrument Bank".
Expand "Wave" and write down the File ID's of your Waves (the ID's of the Waves of the bank file).
Now look at "FILES", "Wave Archive" and replace the Waves with the ID's by your new waves.
If you need to add more Waves than you can replace, right-click "Wave Archive" and "Add" your file. Be sure to rename it by right-clicking the New entry in "Wave".
Then select your Bank file in "Instrument Bank" again to make sure it uses the correct Waves.

Step 8:
Select your track in "Sound Sequence" and press Play.
If it works: Congratulation
If not: you probably did something wrong. Check the Steps.

Step 9:
SAVE THE SOUND DATABASE: "File", "Save" and don't be like me and loose everything you edited.

Step 10:
Profit.

video on youtube

--------------------------------------------------------------------------------------------------------------------------------

VIII. How to insert a song into a Sound Database (inserting method) or: How to add more songs to your game
What you need: Nitro Studio, Sound Database of NSMBDS, your new track, modified version of NSMBe
Thanks to  Gota7 for creating: original thread

This method is only recommended if you want to add a ton of new songs to the game. You only need to do this method when adding .sseq files. You can add .sbnk and .swar files with the replacing method (VI).

Step 0.5 You need to prepare your ROM to be able to handle this
To make your ROM be able to handle the Sound Database file we will create, you need to enable  RoadrunnerWMC's ASM patch that enables SSEQ indexes over 111: Link
You don't know how to use ASM patches? Use the Search function of NSMB Hacking Domain to find out. It's not that hard.

Step 1:
Open your copy of the Sound Database in Nitro Studio.

Step 2:
Expand "FILES" and right-click "Sequence". Choose "Add" and select your new song (MIDI-0 and .sseq can work).
This will add a new entry at the bottom of the "Sequence" list.
Jump to "Sound Sequence", expand the list and look at the bottom of the list.
You will find an entry called "New File".
Right-click and rename it.

Step 3:
Now you have to set the Bank and Wave settings right.
To do this you can follow VII. How to insert a song into a Sound Database (replacing method); Step 7a/Step 7b until the end.

But how do I use the newly inserted songs?
Oh good that you asked other me.
Level editing on a ROM with more songs than allowed can be done with all versions of NSMBe.
Setting the Music settings is a different story:

You need Nitro Studio, your current Sound Database and a copy (because sometimes the ROM simply breaks and then you will beg for a copy of your work) of NSMBDS where your Sound Database is inserted (how to do this in IX. How to re-insert an edited Sound Database into NSMBDS)
Open your Sound Database with Nitro Studio and your NSMBDS ROM with NSMBe modified.

Open a level you wanna edit and click a View.
Left bottom corner, look at Music. You no longer see a drop-down list but a text field with a number in it. The music that will play depends on the ID you enter there.

Wich ID? Expand "Sound Sequence" with Nitro Studio. Every song has it's own number, these are the ID's.

video on youtube

---------------------------------------------------------------------------------------------------------------------------------

IX. How to re-insert an edited Sound Database into NSMBDS
What you need:NSMBe (any version), edited Sound Database, NSMBDS ROM

Step 1:
Open your NSMBDS ROM using NSMBe.

Step 2:
Choose the tab "ROM File Browser". Expand "root".

Step 3:
Left-click "sound_data.sdat" and choose "Replace" at the bottom of the screen. Choose your edited Sound Database.

Step 4: optional, but recommended
Go to the tab "Tools/Options" and look for "Music Slots". Try to remember wich song you replaced with wich new song (e.g. I replaced the 06: Desert theme with a Pokémon theme)
Left-click the entry you want to rename and press "Rename". This will also edit the name in the Level editor, so selecting new songs in NSMBe is easier.

advice if you re-insert a Sound Database with edited songs: Use a copy of your ROM. Always. Because sometimes your ROM size can expand above 32MB.
???????
For those who don't know: NSMBDS was written in a 32MB file. Every action that causes the file to exceed 32MB will make the ROM Header invalid.
What does this mean?
Honestly I am not sure. I think it causes problems when the ROM is played on a real DS/3DS. Because DeSmuMe can still play the games.
Invalid isn't good, don't upload patches to broken ROM's
Sometimes, the file size exceeds without a reason (once I changed wich Music will be played in 1-1 and this broke the header).
In this case: Use your backup to create another copy and try again what you did.
Oh yeah, not adding hundreds of songs into the game might also help.

video on youtube

---------------------------------------------------------------------------------------------------------------------------------

X. note about Sound hacking
Or: Why I didn't write something about Sound hacking:
1. For most of the people, Music hacking is the father of hacking and Sound hacking is it's little brother that noone likes.
2. It's really, and I mean really complicated. It can be harder than anything else in this tutorial.
So, if you still want to edit the Sounds of NSMBDS, go check the original tutorial posted way back in 2011.
It's old, some parts of it are really complicated but because I never did Sound hacking and I did not plan to try it out soon, just read that tutorial and try your best. Me explaining something I don't understand doesn't work.

-----------------------------------------------------------------------------------------------------



--------------------------------------------
4. Thanks/Sources
--------------------------------------------

-  Dirbaio for reposting the original Music and Sound Hacking guide made by Orengefox: Link
-  Gota7 and  RoadrunnerWMC for making it possible to add more songs to the game: Link
-  skawo for making the "How to add custom bahps" tutorial: Link
- no clue who wrote this but thanks for writing a tutorial on how to loop sseq files
- Everyone who answered my questions about Music hacking or helped me with music (by name and in no order: Thierry,  SGC,  Bloom, Fairy of Fire,  KTRMAmbiance, newluigidev,  DaneGaming,  LuigiXHero, RicBent,  Gota7)
- The online dictionary dict.cc helped a lot because, as you can read in the Final Words, I am German and sometimes I need to research a phrase and this page helped me. (kind of off-topic maybe, but I think I should thank everyone and everything that helped, even if the help was being a dictionary)
- All creators of the tools mentioned in the "What you need" section.
And last but not least: everyone who reads this, comments what he thinks about this tutorial, helps correcting mistakes or simply is happy about a new guide.

I wrote this tutorial all on my own, but some parts are strongly inspired/partially copied from other tutorials (in this case: it is mentioned) and my knowledge is all based on the things mentioned above and on everything I found out by myself.
It is still possible that I forgot someone to mention. In that case: I am really sorry, please write me that I forgot you/forgot a link and I'll add it as soon as possible.
Also, the videos showing things in action were recorded by myself.




--------------------------------------------
5. Final Words
--------------------------------------------
I am not a music hacking god. I make mistakes. If you are smarter than I am and you see something I described wrong: tell me and I will correct it.
Also, i am German, so if you find any mistakes (grammar mistakes, misspelling something, bad expression): tell me and I'll try to fix it.
It took hours of writing, rewriting and recording the videos for this tutorial and I had a ton of fun doing this.

Hmmm, what else can I say?
Well, bye bye people, pray to the Helix, the one and only true god and have a nice day!

Greets
BooChewbaca
_________________________
previously (un)known as BooChewbaca
Posted on 06-12-18, 12:13 am (rev. 1 by  Gota7 on 06-12-18, 06:07 am)
Red Goomba


Karma: 198
Posts: 30/35
Since: 09-04-16

SWAR packing using external exes is not necessary. Nitro Studio can edit SWARs, which allows you to add as many SWAVs as you please, and even preview them. (Double click a SWAR to edit, same goes for SBNKs)

SSARs (Sound Sequence Archives) contain SSEQs. They are the kinda like SWARs, except they contain SSEQs. They are hard to edit though, since the sequences inside them are intertwined. For this reason, as of now Nitro Studio cannot edit them.

SYMB.bin contains the all the names for the SDAT, and INFO.bin has info regarding each sound entry. Nitro Studio edits and regenerates these bin files, but you never see this happen. The data like volume, groups, players, etc. would be in INFO.bin. IF you really, really, really want to get into the technical stuff then http://www.feshrine.net/hacking/doc/nds-sdat.php#sdat will tell you how they work. But again, no need to re-invent the wheel. It would be impractical for anyone to edit them manually.

Swav2Wav and other tools cannot be found via normal means due to them being part of the Nitro SDK. While Nitro Studio depends on these converters, I'm currently developing a custom library to make these files without them.

Also, huh, never knew there was an actual method to looping music. I just used the guess and check method. All I did was estimate where the loop would fit, would be nice if a dedicated looping tool existed.

Nella carne io sono uno, ma nello spirito, che sono e per sempre saranno sette.

Posted on 02-07-22, 06:51 am
Kooper

Karma: 1
Posts: 2/2
Since: 12-11-21
I'm going to try, but I think your tutorial can be very helpful, thank you very much for taking your time to write this!
Posted on 01-22-24, 10:11 pm


Karma: 2
Posts: 2/2
Since: 01-22-24
I used LMMS instead of anvil studio (Cuz it's easier to use), and My music works, it just doesn't loop even though I put loop points in my song in LMMS. Can you (or anyone else) maybe help me?
Posted on 03-24-24, 04:24 am (rev. 10 by  ruigi on 03-24-24, 10:35 pm)
Secret Locker

Karma: 71
Posts: 7/14
Since: 04-01-18
I found the looping section to be quite anti-intuitive and really weird, unfriendly to those who cannot math, unfriendly those with songs with bpm changes, plus imprecise (the biggest factor here). Thus, I have invented my own epic guide for looping.

Chapter 1: Discover your asymptotes.


Say you have a song that is 12 measures long in 4/4 that you made in FL Studio. You want the first 4 measures to play at the start and not be in the loop, the middle 4 to BE the loop, and have 4 at the end unused just for fun. Your asymptotes would be at 5:01:00 and 9:01:00 in Bar:Beat:Tick format. Don't worry if your song isn't in 4/4, from what I can tell it does not matter.

Or maybe you just so happen to know the exact millisecond the loop starts and ends at. If that is you, remember you're Peppino.

Chapter 2: A Cyber's World


Step 1: Make a backup (optional)


Step 2: Open your midi in Anvil Studio


Lap 3: It's Pizza Time.


  1. Located below Help, there should be "Time". It is not in Help but visually below it.
  2. Click on it.
  3. If you're Peppino, set it to "Hour:Minute:Second:Milliseconds". If you're not Peppino, set it to "Bar:Beat:Ticks".
  4. Click OK

Step 4: Open the Event List


From the menu bar, you should see View. Click that, and then "Event List"

Step 5: Make sure you're somewhere you remember (optional)


Under "Time" from earlier there should be a dropdown. Make sure it is the second thing below "Song Properties".

Step 6: Doing stuff in the Event List


In the Event List, you must do all of the following stuffs:

Step 6 Part 1: Adding the first asymptote


  1. Click "Insert Event..." rectangle
  2. For "Time of event", put down your first asymptote. From my example, it would be "05:01:000"
  3. Tick the "Include Meta events (Comments, Copyright, etc.)" checkbox
  4. Go up to the "Kind of event" dropdown menu and select "Marker"
  5. In the white box, type "loopStart"
  6. Click OK

Step 6 Part 2: Adding the second asymptote


  1. Click "Insert Event..." rectangle
  2. For "Time of event", put down your second asymptote. From my example, it would be "09:01:000"
  3. In the white box, type "loopEnd"
  4. Click OK

Step 6 Part 3: Filtering the Spam (optional)


  1. Click the "Filter Events..." rectangle
  2. Tick the "Show a Filtered Set of Events" radio button
  3. Tick the "Show all events of this kind" radio button
  4. Go through the dropdown menu until you see "Marker"
  5. Click OK

Step 6 Part 4: Look at what you've done...


You should see your "loopStart" and "loopEnd" events in the Event List.
When you click on the "loopStart" one, you should recognize that one of the numbers on the top right is very familiar looking. That is good. Same for "loopEnd"

Step 6 Part 5: Vento Aureo


The final part of this step is double clicking on "loopEnd" to get into a menu. Subtract 1 from "Time of event" for safe measure. You could maybe subtract from "Time before", but the program warns that "changing this shifts all following events". What you should see is that the loopEnd marker is ever-so-slightly earlier.

Step 7: SAVE the world


From the menu bar, you should see File. Click that, and then click "Export MIDI-Format 0 file...". When saving, do not overwrite your original file. After that you can just import it however you like.

The Result


Here is what my Anvil Studio looked like when I didn't do this, but instead did trial and effort for where I wanted my markers to be. As you can see, it is The Death That I Deservioli:

(ignore time before being selected)

Notes


Nothing here is special to Anvil Studio. If your DAW is good enough you wouldn't need this, but unfortunately FL Studio is free. You can always check to see if the midi markers are there by opening the midi as a text file and searching for "loopStart" and "loopEnd".
Pages: 1