Quick answer: Use exact bus path with bus:/ prefix. Call studio.flushCommands() to apply immediately. Verify Master.bank + Master.strings.bank loaded.

A pause menu calls FMOD Studio Bus::setPaused(true) on bus:/Music. Music keeps playing. Path wrong or banks not loaded.

Correct Path

FMOD::Studio::Bus* bus;
FMOD_RESULT r = studio->getBus("bus:/Music", &bus);
if (r == FMOD_OK) {
    bus->setPaused(true);
    studio->flushCommands();   // optional, applies sooner
}

Path starts with bus:/. Case-sensitive. Trailing slashes / leading whitespace break match.

Verify Banks Loaded

FMOD::Studio::Bank* master;
studio->loadBankFile("Master.bank", FMOD_STUDIO_LOAD_BANK_NORMAL, &master);
studio->loadBankFile("Master.strings.bank", FMOD_STUDIO_LOAD_BANK_NORMAL, &stringsBank);

Without strings.bank, paths can’t resolve. Both required.

Check by GUID

For robustness, use GUIDs instead of paths:

FMOD_GUID guid;
studio->lookupID("bus:/Music", &guid);
// store guid; later:
studio->getBusByID(&guid, &bus);

GUID immune to renames.

Studio Update

FMOD Studio commands queue. Call studio.update() each frame; flushCommands() forces immediate apply. Without update, pause never executes.

Verifying

Pause menu opens; music silences. Resume; music plays. Profile shows no audio mix CPU during pause.

“FMOD paths are exact strings. Banks must load. Update must fire. Three pillars.”

For granular control, use Snapshots over Bus pause — snapshots smoothly fade out specific routings rather than hard-cut.