Modder's FMOD banks failing to load in FMOD 2.0.0.7

We have a game where modders are making their own FMOD banks to add sounds to their mods. This was working fine in FMOD 1.10.09. They weren’t using a template of our master FMOD bank, they were just creating their own banks and we were loading them after all of the main game’s banks were loaded. No issues.

We have upgraded the game to FMOD 2.00.07 and now when the game loads the modder’s banks we get “error code 28: FMOD_ERR_INTERNAL An error occurred that wasn’t supposed to. Contact support.”

I realise that there is this doc…

https://fmod.com/resources/documentation-studio?version=2.0&page=supporting-downloadable-and-user-generated-content.html

…which say’s we’re supposed to make a template FMOD project for the modders to use, but I believe we’ve been taking advantage of this…

“If you want to load multiple master banks simultaneously, each master bank must have a different GUID. A newly created master bank has a unique GUID by default, but a new version of an existing master bank does not.”

I’m under the impression that the modders master banks GUID would be unique to our internal master bank GUID, which has been working fine before, but now does not seem to be the case.

Has this changed and we absolutely have to provide the modders with a template FMOD project?

Cheers,
Jeff

There’s no requirement to provide your modders with a template FMOD Studio project. The workflow in the user manual is just a recommendation.

The master bank’s GUID is generated when you create that master bank. If your modders are creating their own projects rather than using a project provided by you, their master bank GUIDs should be unique.

I’m afraid we’ll need more information to identify why this error message is appearing. Try using the logging version of the FMOD Engine, and see if there’s any more information in the logs.

On investigation, in our previous fmod api usage (1.10.09), for some of our modders banks, we would call FMOD::Studio::System::loadBankFile() a second time if it failed on the first call.

Version 1.10.09:

First call we get the following log output (loadBankFile returns FMOD_ERR_INTERNAL):

c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_bank_loader.cpp(123) : TID 12732 : 1307706751 ms    +1 : [LOG] Manager::readBank                        : fileversion = 101, compatVersion = 99 (oldest = 44, newest = 101)
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_factory.cpp(96) : TID 13240 : 1307706786 ms   +35 : [ERR] assert                                   : assertion: '!mManager->masterBus()' failed
c:\jk\workspace\build__1.10__api_win\studio_api\src\fmod_factory.h(133) : TID 13240 : 1307706786 ms    +0 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_runtime_manager.cpp(1371) : TID 13240 : 1307706786 ms    +0 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_runtime_manager.cpp(1388) : TID 13240 : 1307706786 ms    +0 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_runtime_manager.cpp(4064) : TID 13240 : 1307706787 ms    +1 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_studio_impl.cpp(1754) : TID  4744 : 1307706814 ms   +27 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_studio_impl.cpp(4200) : TID  4744 : 1307706814 ms    +0 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.

Second call we get the following log output (loadBankFile returns FMOD_OK):

c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_bank_loader.cpp(123) : TID 12732 : 1307758452 ms    +1 : [LOG] Manager::readBank                        : fileversion = 101, compatVersion = 99 (oldest = 44, newest = 101)
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_playback_system.cpp(1601) : TID 13240 : 1307758493 ms   +41 : [ERR] assert                                   : assertion: 'mMasterBus == nullptr' failed
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_playback_system.cpp(1614) : TID 13240 : 1307758494 ms    +1 : [LOG] PlaybackSystem::acquireMasterBus         : Setting master channel group format to 6

Third and subsequent calls we get the following log output. i.e. reloading a mod (loadBankFile returns FMOD_OK):

c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_bank_loader.cpp(123) : TID 12732 : 1308216608 ms +6533 : [LOG] Manager::readBank                        : fileversion = 101, compatVersion = 99 (oldest = 44, newest = 101)
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_playback_system.cpp(1614) : TID 13240 : 1308216636 ms   +28 : [LOG] PlaybackSystem::acquireMasterBus         : Setting master channel group format to 6

Version 2.00.07:

After updating to fmod 2.00.07, we get different behaviour:

First call we get the following log output (loadBankFile returns FMOD_ERR_INTERNAL):

f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_bank_loader.cpp(120) : TID 18968 : 1308538376 ms    +1 : [LOG] Manager::readBank                        : fileversion = 101, compatVersion = 99 (oldest = 44, newest = 125)
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_factory.cpp(96) : TID  6844 : 1308538408 ms   +32 : [ERR] assert                                   : assertion: '!mManager->masterBus()' failed
f:\jk\workspace\build__2.0__api_win\studio_api\src\fmod_factory.h(134) : TID  6844 : 1308538409 ms    +1 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_runtime_manager.cpp(1273) : TID  6844 : 1308538409 ms    +0 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_runtime_manager.cpp(1290) : TID  6844 : 1308538409 ms    +0 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_runtime_manager.cpp(2967) : TID  6844 : 1308538409 ms    +0 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_studio_impl.cpp(1921) : TID 11540 : 1308538443 ms   +34 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_studio_impl.cpp(4551) : TID 11540 : 1308538443 ms    +0 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.

Second and subsequent calls we get the following log output (loadBankFile returns FMOD_ERR_INTERNAL):

f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_bank_loader.cpp(120) : TID 18968 : 1308538462 ms   +19 : [LOG] Manager::readBank                        : fileversion = 101, compatVersion = 99 (oldest = 44, newest = 125)
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_factory.cpp(96) : TID  6844 : 1308538493 ms   +31 : [ERR] assert                                   : assertion: '!mManager->masterBus()' failed
f:\jk\workspace\build__2.0__api_win\studio_api\src\fmod_factory.h(134) : TID  6844 : 1308538493 ms    +0 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_runtime_manager.cpp(1273) : TID  6844 : 1308538493 ms    +0 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_runtime_manager.cpp(1290) : TID  6844 : 1308538494 ms    +1 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_runtime_manager.cpp(2967) : TID  6844 : 1308538494 ms    +0 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_studio_impl.cpp(1921) : TID 11540 : 1308538524 ms   +30 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_studio_impl.cpp(4551) : TID 11540 : 1308538524 ms    +0 : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.

It looks like in 1.10.09, if it failed the first time, it would succeeed the second and subsequent times by “Setting master channel group format to 6”. It no longer appears to do this in 2.00.07.

After some discussion with our API team, I’ve learned that there were a whole suite of changes made to how banks are handled between FMOD Studio 1.10 and FMOD Studio 2.00, so it’s difficult to pinpoint exactly which one has caused this change in behavior. Moreover, we haven’t been able to reproduce the behavior you describe in 1.10: When we test, changing the master channel group format has no effect on whether banks load correctly. Are you able to send us your bank loading code?

In any case, while loading banks not based on a template project could apparently be made to work, it has never been an officially supported feature. As such, if you want to continue using this method, we recommend continuing to use FMOD Studio 1.10 if you want to continue supporting your modders’ current workflow, or providing modders with a template project as recommended in the FMOD Studio User Guide if you want to update to 2.00.

OK, thanks for the feedback Joseph.

We have created a simple test case in our game and provided some of the bank loading code as requested, along with more details of our test case and results:

Bank Loading Code (modified slightly in our 2.00.07 test to use FMOD_STUDIO_LOAD_BANK_UNENCRYPTED flag since the banks we are testing with are not encrypted):

void MusicManager::LoadBank(const char* filepath)
{
	FMOD_RESULT result;
	FMOD::Studio::Bank* bank = NULL;

	OutputDebugString(Format("Loading Bank File %s\n", filepath));
	result = mFModStudio->loadBankFile(filepath, FMOD_STUDIO_LOAD_BANK_NORMAL, &bank);

	// Fmod can fail to load custom banks the first time - this is a workaround
	if (result != FMOD_OK)
	{
		OutputDebugString(Format("Error loading Bank File %s first time (%s), attempting a second time\n", filepath, FMOD_ErrorString(result)));
		result = mFModStudio->loadBankFile(filepath, FMOD_STUDIO_LOAD_BANK_NORMAL, &bank);
	}

	if (result == FMOD_OK)
	{
		OutputDebugString(Format("Successfully loaded Bank File %s\n\n", filepath));
		mBanks.push_back(bank);
	}
	else
		OutputDebugString(Format("Error loading Bank File %s (%s), aborting\n\n", filepath, FMOD_ErrorString(result)));
}

List of banks we are loading (we can provide a dropbox link to these via email or PM):

“audio/master_bank.bank”,
“audio/master_bank.strings.bank”,
“audio/mod_bank.bank”,
“audio/mod_bank.strings.bank”,

Output using FMOD 1.10.09:

Loading Bank File audio/master_bank.bank
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_bank_loader.cpp(123) : [LOG] Manager::readBank                        : fileversion = 101, compatVersion = 99 (oldest = 44, newest = 101)
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_playback_system.cpp(1614) : [LOG] PlaybackSystem::acquireMasterBus         : Setting master channel group format to 6
Successfully loaded Bank File audio/master_bank.bank

Loading Bank File audio/master_bank.strings.bank
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_bank_loader.cpp(123) : [LOG] Manager::readBank                        : fileversion = 101, compatVersion = 99 (oldest = 44, newest = 101)
Successfully loaded Bank File audio/master_bank.strings.bank

Loading Bank File audio/mod_bank.bank
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_bank_loader.cpp(123) : [LOG] Manager::readBank                        : fileversion = 101, compatVersion = 99 (oldest = 44, newest = 101)
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_factory.cpp(96) : [ERR] assert                                   : assertion: '!mManager->masterBus()' failed
c:\jk\workspace\build__1.10__api_win\studio_api\src\fmod_factory.h(133) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_runtime_manager.cpp(1371) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_runtime_manager.cpp(1388) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_runtime_manager.cpp(4064) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_studio_impl.cpp(1754) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_studio_impl.cpp(4200) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
Error loading Bank File audio/mod_bank.bank first time (An error occurred that wasn't supposed to.  Contact support.), attempting a second time
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_bank_loader.cpp(123) : [LOG] Manager::readBank                        : fileversion = 101, compatVersion = 99 (oldest = 44, newest = 101)
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_playback_system.cpp(1601) : [ERR] assert                                   : assertion: 'mMasterBus == nullptr' failed
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_playback_system.cpp(1614) : [LOG] PlaybackSystem::acquireMasterBus         : Setting master channel group format to 6
Successfully loaded Bank File audio/mod_bank.bank

Loading Bank File audio/mod_bank.strings.bank
c:\jk\workspace\Build__1.10__API_Win\studio_api\src\fmod_bank_loader.cpp(123) : [LOG] Manager::readBank                        : fileversion = 101, compatVersion = 99 (oldest = 44, newest = 101)
Successfully loaded Bank File audio/mod_bank.strings.bank

Output using FMOD 2.00.07:

Loading Bank File audio/master_bank.bank
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_bank_loader.cpp(120) : [LOG] Manager::readBank                        : fileversion = 125, compatVersion = 119 (oldest = 44, newest = 125)
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_playback_system.cpp(1629) : [LOG] PlaybackSystem::acquireMasterBus         : Setting master channel group format to 6
Successfully loaded Bank File audio/master_bank.bank

Loading Bank File audio/master_bank.strings.bank
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_bank_loader.cpp(120) : [LOG] Manager::readBank                        : fileversion = 125, compatVersion = 119 (oldest = 44, newest = 125)
Successfully loaded Bank File audio/master_bank.strings.bank

Loading Bank File audio/mod_bank.bank
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_bank_loader.cpp(120) : [LOG] Manager::readBank                        : fileversion = 101, compatVersion = 99 (oldest = 44, newest = 125)
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_factory.cpp(96) : [ERR] assert                                   : assertion: '!mManager->masterBus()' failed
f:\jk\workspace\build__2.0__api_win\studio_api\src\fmod_factory.h(134) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_runtime_manager.cpp(1273) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_runtime_manager.cpp(1290) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_runtime_manager.cpp(2967) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_studio_impl.cpp(1921) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_studio_impl.cpp(4551) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
Error loading Bank File audio/mod_bank.bank first time (An error occurred that wasn't supposed to.  Contact support.), attempting a second time
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_bank_loader.cpp(120) : [LOG] Manager::readBank                        : fileversion = 101, compatVersion = 99 (oldest = 44, newest = 125)
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_factory.cpp(96) : [ERR] assert                                   : assertion: '!mManager->masterBus()' failed
f:\jk\workspace\build__2.0__api_win\studio_api\src\fmod_factory.h(134) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_runtime_manager.cpp(1273) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_runtime_manager.cpp(1290) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_runtime_manager.cpp(2967) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_studio_impl.cpp(1921) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_studio_impl.cpp(4551) : [LOG] FMOD_RESULT = 28 -- An error occurred that wasn't supposed to.  Contact support.
Error loading Bank File audio/mod_bank.bank (An error occurred that wasn't supposed to.  Contact support.), aborting

Loading Bank File audio/mod_bank.strings.bank
f:\jk\workspace\Build__2.0__API_Win\studio_api\src\fmod_bank_loader.cpp(120) : [LOG] Manager::readBank                        : fileversion = 101, compatVersion = 99 (oldest = 44, newest = 125)
Successfully loaded Bank File audio/mod_bank.strings.bank

As can be seen, we are not doing anything strange as far as loading a bank file (apart from attepting to load it a second time), and from what we can tell, there is nothing obviously wrong with the modders bank file or their fmod project.

If possible, perhaps you could attempt to reproduce what we see using the same banks as we use in our test case?

As mentioned above, we can provide a dropbox link via email/PM to download the 4 bank files we used in our test case.

We’ve now tried giving the modders a template and when we load multiple banks from them we get this error now…

“Bank with guid {1e64267b-be7e-427c-8183-4e1857eed1d6} has already been loaded”

So at this point it looks like we can’t have modders make their own banks in Fmod 2.x unless we’re still missing something.

Did you have any luck with Skoddle’s data in the previous post?

Cheers,
Jeff

This message indicates that the master bank created by your modders has the same GUID as the master bank in your existing content. To solve this issue, delete the master bank from your template project. Your modders will be able to make new master banks, which will have new GUIDs. This information can be found in the Creating UGC section of the Supporting Downloadable and User-Generated Content chapter of the FMOD Studio User Manual.

We’re still looking into Skoddle’s data.