C# library for parsing and extracting FMOD Studio sound banks, with a primary focus on Unreal Engine projects.
FModBankParser allows you to analyze, extract, and inspect FMOD .bank files of any kind, including those used in commercial games and standalone FMOD projects.
It supports a wide range of FMOD versions.
This library was originally developed for the FModel project, if you are only interested in exploring or extracting FMOD audio from UE games you should check it out first.
This project was reverse-engineered by studying publicly available SDKs, documentation, and game binaries, and is not affiliated with or endorsed by Firelight Technologies in any way. All work was independently performed to better understand FMOD soundbank formats within Unreal Engine projects.
No proprietary, confidential, or internal source code from Firelight Technologies was used in the development of this library.
This library is intended only for parsing, reading, and extracting FMOD .bank, .assets.bank, .streams.bank, and .strings.bank files.
It is not designed and will never be used to rebuild or modify soundbanks.
The easiest way to use FModBankParser is via NuGet:
dotnet add package FModBankParserIf you have a local copy of the project:
git clone https://github.com/Masusder/FModBankParser.gitYou can include it directly in your .NET project:
dotnet add reference ../FModBankParser/FModBankParser.csprojProject comes with an example FModBankParser.Demo that you can use.
Compile the project or download the demo executable from the Releases tab, then run it from a terminal:
FModBankParser.Demo <file_or_folder> [--key <encryptionKey>] [--export-audio] [--output <outputFolder>]| Option | Description |
|---|---|
path |
Path to a FMOD .bank file or folder containing soundbanks (required) |
--key -k |
Optional encryption key string for encrypted soundbanks |
--export-audio -e |
Flag if you want to export audio from the soundbanks |
--output -o |
Optional output folder for exported audio (default: ExportedAudio) |
--help -h |
Print help options |
using FModBankParser;
var reader = FModBankParser.LoadSoundBank("Master.bank");
Console.WriteLine($"Soundbank: {reader.BankName} (GUID: {reader.GetBankGuid()})");
Console.WriteLine($"FMOD Version: {reader.BankInfo.FileVersion}");
Console.WriteLine($"Event count: {reader.EventNodes.Count}");using FModBankParser;
var readers = FModBankParser.LoadSoundBanks("C:\\Games\\MyProject\\Content\\FMOD");
foreach (var reader in readers)
Console.WriteLine($"Loaded bank: {reader.BankName}");Important
FSB5 audio extraction is handled via Fmod5Sharp library, make sure to check it out.
using FModBankParser;
// Load a sound bank
var reader = FModBankParser.LoadSoundBank("Master.bank")
var outDir = new DirectoryInfo("ExportedAudio")
// Export all embedded audio
var exportedAudio = FModBankParser.ExportAudio(reader, outDir);
if (exportedAudio.Success)
{
Console.WriteLine($"Exported {exportedAudio.FilesExported} audio files to: {outDir.FullName}");
}
else
{
Console.WriteLine($"No audio files were exported for {file.Name}.");
}| FMOD Version | Game(s) |
|---|---|
0x33 |
All is Dust |
0x3E |
Interloper |
0x40 |
Ancestory |
0x44 |
Quanero VR |
0x4A |
Quanero VR |
0x87 |
Train Life – A Railway Simulator (UE 4.27) |
0x8E |
Dispatch Demo, Militsioner, The Day Before, Ghostrunner 2, Epic Mickey Rebrushed, Daimon Blades, etc. |
0x92 |
Dead as Disco Demo, Rage Quit, Spongebob: Titans of the Tide, Groovity, Dreadbone, Lilith, etc. |
Note
For a full list of tested versions check this summary.
- Special thanks to LongerWarrior for the help.
FModBankParser is licensed under Apache License 2.0, licenses of third-party libraries used are listed here.