• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.
  • Announcement - March 5th 12:17 PM GMT

    Hi there Guest!
    Thanks for checking out Silph Co.! Right now things are very much still in development with things like themes, guidelines, rules and most importantly content, still being a WIP. The staff and our members are actively working to make the community more homey for you. In the mean time, we are welcoming feedback and suggestions if you have them in the Feedback section.
    Please read the forum rules before posting.

Other [DS] Pokémon Music & Sound Engine Research

#1
Hello! This thread is here for researching the Nitro Sound Engine which was used in the DS generation of Pokémon games.

Foreword:
The Pokémon games on the DS use a proprietary Nintendo sound engine, which is called the "Nitro Composer Sound System". The way this sound system works is pretty much like a standard MIDI player:
  1. The game, when started, loads Nitro Composer Sound Data (.sdat), and parses all of the entries in the sound data.
  2. Whenever a song is told to be played, the game uses the entry to load all of the files which correspond to the entry. In most cases, this is a combination of a Nitro Composer Sequence File (.sseq), a Nitro Composer Bank Data file (.sbnk), and a Nitro Composer Wave Archive file (.swar).
  3. The game loads the files for the entry into the RAM, maps them to their corresponding locations and plays the sequence using that data.

The current state of DS Music Hacking:
The good news is that we are actually able to create custom sound data, using an official program from the NITRO/TWL-SDK (which I cannot provide for copyright reasons).
The bad news is, while being able to load custom sequence data flawlessly, the games seem to be very picky about what it plays and what it doesn't, particularly with the sound banks. As of right now, we don't know why. But hopefully we are able to find a solution soon. I also hope to post some tutorials about using the Nitro Composer SDK for things like this.

Resources:
 
#2
I would also like to further note that looping midis before converting to SSEQ is exactly the same process as with the AGB: You use [ for loop start, and ] for loop end.

@platinum The reason is likely due to 2 reasons: The NDS is extremely picky about the format the instrument samples are in, depending on the game. Knowing what the original uses might aid in this. It is also possible the public version of NSM that was floating around is an older version than the one used for the target game (especially B/W/2, possibly HGSS). This could cause it to fail. I found a complete DS SDK pulled from the dev site before it was removed, but I long since forgot where (not like I could share it anyhow). That site also had a full final Wii SDK (minus Unity/UE for Wii).
 
#3
I would also like to further note that looping midis before converting to SSEQ is exactly the same process as with the AGB: You use [ for loop start, and ] for loop end.

@platinum The reason is likely due to 2 reasons: The NDS is extremely picky about the format the instrument samples are in, depending on the game. Knowing what the original uses might aid in this. It is also possible the public version of NSM that was floating around is an older version than the one used for the target game (especially B/W/2, possibly HGSS). This could cause it to fail. I found a complete DS SDK pulled from the dev site before it was removed, but I long since forgot where (not like I could share it anyhow). That site also had a full final Wii SDK (minus Unity/UE for Wii).
I've done some research, and it seems like the Nitro Composer tools haven't been updated in a significant way. I seem to have more success with using this custom sound data with the Generation 5 games (where shared banks aren't really a thing) than with Generation 4 (where shared banks are a thing). I think the issue lies within Generation 4's method of keeping the shared bank in memory, and any additional banks being loaded.