Posted July 11, 2016
high rated
Officially released Dex OST is missing a lot of tracks from the game (not sure why, I contacted developers about it).
So I decided to extract the audio from the game. It proved to be a multi-step procedure, but doable after all.
1. The game is using Unity, and it packs its resources in its own binary format. To extract that, I used QuickBMS extractor with special script made for Unity (thanks to @ssokolow for pointing out this tool).
See http://aluigi.altervista.org/quickbms.htm
I downloaded the source from here: http://aluigi.altervista.org/papers/quickbms_src.zip and built on Linux (note, that it has to be built as 32-bit, since it's using 32-bit assembly. Make sure you have multilib support for your gcc and needed 32-bit dependencies installed). See documentation on the above page for more details.
The actual QuickBMS script for Unity is located here: http://aluigi.altervista.org/bms/unity.bms
You need to run it using the compiled quickbms tool, and provide path to the game resources directory (better make a copy of it, to avoid messing it up by mistake).
In Dex it's files from Dex_Data (only files, skip the directories from there, otherwise the tool gets confused).
When extracting, filter out only *.fsb files (use -f *.fsb parameter). fsb are archives used by FMOD library, which contain audio data.
2. Now, when you got a bunch of *.fsb files, you need to extract them to get actual audio. That's not straightforward, since FMOD doesn't store audio as is, but splits it in some way. So you need another tool to reconstruct it.
Luckily I found one: https://github.com/tmiasko/fsb-vorbis-extractor
I also built it from source. Once you have that, you can already extract actual Ogg/Vorbis files from *.fsb blobs. Most of the music would be in files like resources~highrise.fsb (i.e. lowercase names after ~). Most other files are speech. There are a few exceptions, like resources~GSV_action_1.fsb and similar ones, probably due to GSV being an abbreviation. May be you can find more.
UPDATE:
Helper script for automating the extraction: https://gist.github.com/shmerl/ad11145ad4ef018fb2a5133bd5009948
So I decided to extract the audio from the game. It proved to be a multi-step procedure, but doable after all.
1. The game is using Unity, and it packs its resources in its own binary format. To extract that, I used QuickBMS extractor with special script made for Unity (thanks to @ssokolow for pointing out this tool).
See http://aluigi.altervista.org/quickbms.htm
I downloaded the source from here: http://aluigi.altervista.org/papers/quickbms_src.zip and built on Linux (note, that it has to be built as 32-bit, since it's using 32-bit assembly. Make sure you have multilib support for your gcc and needed 32-bit dependencies installed). See documentation on the above page for more details.
The actual QuickBMS script for Unity is located here: http://aluigi.altervista.org/bms/unity.bms
You need to run it using the compiled quickbms tool, and provide path to the game resources directory (better make a copy of it, to avoid messing it up by mistake).
In Dex it's files from Dex_Data (only files, skip the directories from there, otherwise the tool gets confused).
When extracting, filter out only *.fsb files (use -f *.fsb parameter). fsb are archives used by FMOD library, which contain audio data.
2. Now, when you got a bunch of *.fsb files, you need to extract them to get actual audio. That's not straightforward, since FMOD doesn't store audio as is, but splits it in some way. So you need another tool to reconstruct it.
Luckily I found one: https://github.com/tmiasko/fsb-vorbis-extractor
I also built it from source. Once you have that, you can already extract actual Ogg/Vorbis files from *.fsb blobs. Most of the music would be in files like resources~highrise.fsb (i.e. lowercase names after ~). Most other files are speech. There are a few exceptions, like resources~GSV_action_1.fsb and similar ones, probably due to GSV being an abbreviation. May be you can find more.
UPDATE:
Helper script for automating the extraction: https://gist.github.com/shmerl/ad11145ad4ef018fb2a5133bd5009948
Post edited July 11, 2016 by shmerl