Atlas Audio: FMOD Studio Extractor

The FMOD Studio extractor analyzes FMOD project metadata to discover audio asset references, event-to-audio relationships, and compiled bank outputs. It’s part of the Atlas Audio extractor pack.

Extensions: .xml, .fspro

Format Detection

FMOD Studio stores project metadata as individual UUID-named XML files under a Metadata/ directory tree. Since .xml is a broad extension, the extractor fast-bails on non-FMOD files by checking for serializationModel="Studio in the first 200 bytes. Non-FMOD XMLs are skipped with zero overhead.

The .fspro project file is also registered but contains only a serialization header — no extractable references. It’s tracked by Atlas for hash identity only.

FMOD Project Structure

A typical FMOD Studio project has this layout:

MyProject/
├── MyProject.fspro              # Project root (minimal XML)
├── Assets/                      # Actual audio files (.wav, .mp3)
│   ├── Ambience/
│   ├── SFX/
│   └── Music/
├── Metadata/                    # UUID-named XML metadata files
│   ├── AudioFile/               # Maps UUIDs → audio file paths
│   ├── Event/                   # Sound event definitions
│   ├── Bank/                    # Compiled bank definitions
│   ├── EventFolder/             # Folder hierarchy (ignored)
│   └── Group/                   # Mixer groups (ignored)
├── Build/Desktop/               # Compiled output
│   ├── Master.bank
│   └── Master.strings.bank
├── .user/                       # Workspace state (ignored by Atlas)
├── .unsaved/                    # Pending changes (ignored by Atlas)
└── .cache/                      # Build cache (ignored by Atlas)

Atlas ignores .user, .unsaved, .cache, .fobj, and .fsb by default — these are FMOD workspace state and build artifacts, not project data.

What It Finds

The extractor handles three FMOD metadata classes. Other classes (EventFolder, Group, MixerView, etc.) are skipped — they define hierarchy and mixer routing, not file lineage.

AudioFile Metadata → Audio Source

AudioFile XMLs (Metadata/AudioFile/{uuid}.xml) map FMOD’s internal UUID to the actual audio file on disk via the assetPath property.

Edge type: input

The assetPath is relative to the project’s Assets/ directory. The extractor resolves it to an absolute path: ../../Assets/{assetPath} relative to the metadata file’s location.

Traits extracted:

TraitDescription
frequency_khzAudio sample rate in kHz
channelsChannel count
length_secondsDuration in seconds

Event Metadata → Audio References + Bank References

Event XMLs (Metadata/Event/{uuid}.xml) define sound events — the playable sounds in the game. Each event contains SingleSound objects that reference AudioFile UUIDs, and a banks relationship pointing to the Bank that compiles this event.

Edge type: input (both audio and bank references)

The extractor finds all SingleSoundaudioFile destinations across the XML, including sounds nested inside MultiSound containers (FMOD’s randomization/layering mechanism). Each UUID is resolved to the corresponding AudioFile metadata XML: ../AudioFile/{uuid}.xml relative to the event file’s location.

Bank references are similarly resolved: ../Bank/{uuid}.xml.

Traits extracted:

TraitDescription
fmod_event_nameHuman-readable event name (e.g., “Footstep”, “Explosion”)

Bank Metadata → Compiled Output

Bank XMLs (Metadata/Bank/{uuid}.xml) define compiled sound banks — the .bank files loaded at runtime. The extractor resolves the bank name to the compiled output file.

Edge type: output

The bank name is resolved to ../../Build/Desktop/{name}.bank relative to the metadata file’s location.

Traits extracted:

TraitDescription
fmod_bank_nameBank name (e.g., “Master”, “SFX”, “Music”)

Lineage Chain

The three metadata classes chain together to form a complete provenance path:

Event XML ──input──► AudioFile XML ──input──► .wav/.mp3 file

    └──input──► Bank XML ──output──► .bank file

This means you can:

  • Start from a .wav file and trace forward to discover which FMOD events use it
  • Start from an event and trace backward to find every audio source it depends on
  • Start from a .bank file and trace backward to the events and audio files compiled into it

Example Usage

# Scan an FMOD project
atlas scan ~/projects/MyGame/FMOD/MyProject/

# View what an event needs
atlas inputs ~/projects/MyGame/FMOD/MyProject/Metadata/Event/{uuid}.xml

# View what a bank produces
atlas outputs ~/projects/MyGame/FMOD/MyProject/Metadata/Bank/{uuid}.xml

# Find which events use a specific audio file
atlas dependents ~/projects/MyGame/FMOD/MyProject/Assets/SFX/explosion.wav

# Check for broken references (missing audio files)
atlas broken ~/projects/MyGame/FMOD/MyProject/

Use Cases

  • Audio asset auditing — See every audio file used across all events in an FMOD project
  • Missing asset detection — Run atlas broken to find audio files referenced by events that have been moved or deleted
  • Build tracing — Trace from compiled .bank files back to the source audio that went into them
  • Asset impact analysis — Before modifying or removing an audio file, check which events depend on it
  • Cross-project tracking — When the same .wav file is used in both FMOD and a DAW project (Reaper, etc.), Atlas connects them through content identity
  • Sound design provenance — Track the full chain from original recording through FMOD event to compiled game build