ripping info - bnnm/vgmstream GitHub Wiki

VGM RIPPING INFO

Random info for harder-to-guess cases.

KOEI TECMO .SRSA+.SRST (.KTSL2ASBIN+.KTSL2STBIN, .ASBIN+.STBIN, .FILE/FDATA, ETC)

That is KT's current wave bank. It works like this: game loads .srsa in memory then it can play audio inside .srsa, or use the info to load streams from .srst. (same for .asbin/stbin/etc, they are the same format).

These .srsa/srst can be inside .file/.fdata and similar bigfiles depending on the game. First you need to extract them with tools like this bms. They can be found externally too, usually as .asbin+.stbin.

Once you have .srst there are .bms and such scripts that can extract subfiles from it, the results usually playable in vgmstream. However I recommend keeping .srsa+.srst untouched because:

  • there are (encrypted) stream names inside .srsa (note that names are optional, but bgm usually has them)
  • some .srst are encrypted, making extracting them a hassle
  • some .srsa have jingles/music/etc, but can't be extracted (memory/srsa audio is a bit different vs stream/srst audio)

vgmstream already handles all that = easier. If you have BGM.srsa + BGM.srst in the same dir just load .srsa and it'll show all audio from BGM.srst with proper names (if names were included).

.SRSA+.SRST with hashed names

One separate problem is that Koei Tecmo's engine often (but not always) uses hashed names, and data is also commonly inside other bigfiles. Meaning you may find 0x3a160928.srsa and 0x272c6efb.srst look unrelated but are actually the same pair.

To handle those hashed names so vgmstream can play .srsa+.srst correctly you can do this:

  • use this bms to extract .srsa and .srst from bigfiles like .file/.fdata
    • any other tool that handles Koei Tecmo's Engine and extracts .srsa/srst (like Cethleann or RDBTool) is fine too
    • .file usually have .srst and .fdata has .srsa
  • put all .srsa + .srst in the same dir
  • run this python script to match .srsa with .srst
    • in some games you may need to edit the .py and set FULL_MATCH = False to get a proper match.

That should create a .txtm file in the dir that tells vgmstream how to match .srsa with .srst even if names aren't the same. Now play the .srsa with .srst and .txtm in the dir and vgmstream should play the file.

You could also rename the hashed filenames to something more sensical. Reversing KT's hashed names isn't that easy but they reuse names often though: 0x3a160928 = SE1_Common_BGM.SRSA and 0x272c6efb = SE1_Common_BGM.SRST, more or less. Here are some filelists.

In some cases the .py may not find a match for some .srsa no matter the settings. Usually this means the .srst is from the localized audio folders, or sometimes it just doesn't exist. For example I've seen .srsa in the base game for DLC audio (the .srst should be downloaded separately). It could be a bug as well though.

.OOR (.RIO ENGINE FILES)

rUGP, âge's engine used in a bunch of visual novels (not only from âge) uses custom .ogg called ".oor".

The .rio filesystem in this engine is particularly complex + often has encrypted TOC. Tools like GARBRO only handle early versions, plus it seems like every other game uses a new versions of the engine.

So instead I made a tool that extracts raw .oor from the .rio packages: https://github.com/bnnm/vgm-tools/tree/master/misc/oor-extractor

Files aren't sorted in .rio, so one may want to use the -s xxxx to filter smaller (voice) files. .oor are playable in vgmstream.

⚠️ **GitHub.com Fallback** ⚠️