Disable starup serialization to be able to launch 2 editors

,

Before using FMOD we were able to launch multiple editors. Working with 1 editor is “fine” most of the time, however when working on online stuff we usually need 2 editors running on debug (or at least 1 development editor and 1 visual studio). But this is no longer possible because UE crashes due to fmod assets not being able to be written.
Is there any way to disable this behavior? even better, is there any way for FMOD to update it’s own assets (i guess it’s the events dictionary?) every-time the editor launches?
Thanks

What version of FMOD and Unreal are you using? I haven’t had any crashes when using two editors but I am getting an issue with the second editor being unable to audition events.
Can you pelase send over a crash log when you get a chance?

We are using 4.26 and fmod 2.01.08. The crash stack is the following

Error saving ‘…/…/…/…/MyGame/trunk/Content/FMOD/Events/Character/snd_footstep.uasset’

UE4Editor_CoreUObject!UPackage::Save() [E:\UE4.26_SourceCode\Engine\Source\Runtime\CoreUObject\Private\UObject\SavePackage.cpp:3341]
UE4Editor_CoreUObject!UPackage::SavePackage() [E:\UE4.26_SourceCode\Engine\Source\Runtime\CoreUObject\Private\UObject\SavePackage.cpp:4820]
UE4Editor_FMODStudioEditor!FFMODAssetBuilder::CreateAsset() [E:\MyGame\trunk\Plugins\FMODStudio\Source\FMODStudioEditor\Private\FMODAssetBuilder.cpp:425]
UE4Editor_FMODStudioEditor!FFMODAssetBuilder::BuildAssets() [E:\MyGame\trunk\Plugins\FMODStudio\Source\FMODStudioEditor\Private\FMODAssetBuilder.cpp:131]
UE4Editor_FMODStudioEditor!FFMODAssetBuilder::ProcessBanks() [E:\MyGame\trunk\Plugins\FMODStudio\Source\FMODStudioEditor\Private\FMODAssetBuilder.cpp:43]
UE4Editor_FMODStudioEditor!FFMODStudioEditorModule::OnPostEngineInit() [E:\MyGame\trunk\Plugins\FMODStudio\Source\FMODStudioEditor\Private\FMODStudioEditorModule.cpp:364]
UE4Editor_FMODStudioEditor!TBaseRawMethodDelegateInstance<0,FFMODStudioEditorModule,void __cdecl(void),FDefaultDelegateUserPolicy>::ExecuteIfSafe() [E:\UE4.26.2.Full\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:469]
UE4Editor!TMulticastDelegate<void __cdecl(void),FDefaultDelegateUserPolicy>::Broadcast() [E:\UE4.26_SourceCode\Engine\Source\Runtime\Core\Public\Delegates\DelegateSignatureImpl.inl:955]
UE4Editor!FEngineLoop::Init() [E:\UE4.26_SourceCode\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:3958]
UE4Editor_UnrealEd!EditorInit() [E:\UE4.26_SourceCode\Engine\Source\Editor\UnrealEd\Private\UnrealEdGlobals.cpp:94]
UE4Editor!GuardedMain() [E:\UE4.26_SourceCode\Engine\Source\Runtime\Launch\Private\Launch.cpp:149]
UE4Editor!GuardedMainWrapper() [E:\UE4.26_SourceCode\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:137]
UE4Editor!WinMain() [E:\UE4.26_SourceCode\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:268]
UE4Editor!__scrt_common_main_seh() [D:\agent_work\13\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
kernel32
ntdll

Thanks for the extra info- I have reproduced the crash with your specific versions. I have found that the latest FMOD version, 2.01.12, allows any number of UE editors to be open simultaneously- I think we introduced a bank reloading delay at some point which seems to have resolved this issue as a side effect.
It looks like you can’t save changes to a scene when it is open in another editor, but keeping a blank scene to switch back and fourth between mitigates the inconvenience.
I suggest trying out version 2.01.12 and updating your project if the workflow is better for you.

Hi, thanks for the answer.
I did make a test with 2.01.12 and even 2.02.03 and while it no longer crashed on multiple editors on package it did not sound (i also tried re-exporting banks).
I remember having a similar issue long ago which was posted on a thread and it was because FMODAnimNotifyPlay was using TAssetPtr (when that happened only fmod events from anim notifies didn’t sound, in this case nothing sound at all).

this is debugging on Development. EventDesc is null which causes no sound

Thanks for the extra info- I’ll pass that along to the Dev team. It looks like a few people are having this issue after upgrading. At the moment the workaround is to go into project settings and search for “Additional Non-Asset Directories to Copy”, delete the existing array values and add a single entry, “/Game/FMOD”, then you should get sound back in packaged builds.

Hi. Sorry for the late response but i tried this with 2.02.03 and it fails to build. If i put it exactly as you state (/Game/FMOD) it complains that no separator should be at the start of the path. If i remove the “/” i get “no folder is present on that path”. My FMOD folder is directly on Content. Was i supposed to move the FMOD folder?

This is what changed on our DefaultGame.ini:

+DirectoriesToAlwaysStageAsNonUFS=(Path=“Game/FMOD”)

And this is the error:

ERROR: System.IO.DirectoryNotFoundException: Could not find a part of the path 'E:\MyGame\trunk\Content\Game\FMOD'.
          at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
          at System.IO.FileSystemEnumerableIterator`1.CommonInit()
          at System.IO.FileSystemEnumerableIterator`1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost)
          at System.IO.Directory.EnumerateFiles(String path, String searchPattern)
          at Tools.DotNETCommon.DirectoryReference.<EnumerateFiles>d__28.MoveNext() in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\DotNETCommon\DotNETUtilities\DirectoryReference.cs:line 358
          at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
          at DeploymentContext.FindFilesToStageInternal(DirectoryReference BaseDir, String Pattern, StageFilesSearch Option, List`1 Files) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\AutomationUtils\DeploymentContext.cs:line 577
          at DeploymentContext.FindFilesToStage(DirectoryReference BaseDir, String Pattern, StageFilesSearch Option) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\AutomationUtils\DeploymentContext.cs:line 562
          at DeploymentContext.StageFiles(StagedFileType FileType, DirectoryReference InputDir, String Pattern, StageFilesSearch Option, StagedDirectoryReference OutputDir) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\AutomationUtils\DeploymentContext.cs:line 726
          at DeploymentContext.StageFiles(StagedFileType FileType, DirectoryReference InputDir, StageFilesSearch Option, StagedDirectoryReference OutputDir) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\AutomationUtils\DeploymentContext.cs:line 699
          at Project.StageAdditionalDirectoriesFromConfig(DeploymentContext SC, DirectoryReference ProjectContentRoot, StagedDirectoryReference StageContentRoot, ConfigHierarchy PlatformGameConfig, Boolean bUFS, String ConfigKeyName) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\Scripts\CopyBuildToStagingDirectory.Automation.cs:line 462
          at Project.CreateStagingManifest(ProjectParams Params, DeploymentContext SC) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\Scripts\CopyBuildToStagingDirectory.Automation.cs:line 814
          at Project.CopyBuildToStagingDirectory(ProjectParams Params) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\Scripts\CopyBuildToStagingDirectory.Automation.cs:line 3971
          at BuildCookRun.DoBuildCookRun(ProjectParams Params) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\Scripts\BuildCookRun.Automation.cs:line 216
          at BuildCookRun.ExecuteBuild() in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\Scripts\BuildCookRun.Automation.cs:line 39
          at AutomationTool.BuildCommand.Execute() in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\AutomationUtils\BuildCommand.cs:line 263
          at AutomationTool.Automation.Execute(List`1 CommandsToExecute, Dictionary`2 Commands) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\AutomationUtils\Automation.cs:line 547
          at AutomationTool.Automation.Process(String[] Arguments, StartupTraceListener StartupListener) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\AutomationUtils\Automation.cs:line 511
          at AutomationTool.Program.MainProc(String[] Arguments, StartupTraceListener StartupListener) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\Program.cs:line 175
          at AutomationTool.Program.<>c__DisplayClass1_0.<Main>b__2() in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\Program.cs:line 87
          at AutomationTool.InternalUtils.RunSingleInstance(Func`1 Main) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\AutomationUtils\Utils.cs:line 737
          at AutomationTool.Program.Main(String[] Arguments) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\Program.cs:line 87
       (see C:\Users\Khalim\AppData\Roaming\Unreal Engine\AutomationTool\Logs\E+UE4.26.2.Full\Log.txt for full exception trace)

if i use:
+DirectoriesToAlwaysStageAsNonUFS=(Path="/Game/FMOD")

the error is

ERROR: System.ArgumentException: Staged filesystem reference may not start with a path separator or contain an empty path fragment (MyGame/Content//Game/FMOD)
          at StagedFileSystemReference..ctor(String InName) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\AutomationUtils\StagedFileSystemReference.cs:line 66
          at StagedDirectoryReference..ctor(String Name) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\AutomationUtils\StagedDirectoryReference.cs:line 21
          at StagedDirectoryReference.Combine(StagedDirectoryReference BaseDir, String[] Fragments) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\AutomationUtils\StagedDirectoryReference.cs:line 44
          at Project.StageAdditionalDirectoriesFromConfig(DeploymentContext SC, DirectoryReference ProjectContentRoot, StagedDirectoryReference StageContentRoot, ConfigHierarchy PlatformGameConfig, Boolean bUFS, String ConfigKeyName) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\Scripts\CopyBuildToStagingDirectory.Automation.cs:line 453
          at Project.CreateStagingManifest(ProjectParams Params, DeploymentContext SC) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\Scripts\CopyBuildToStagingDirectory.Automation.cs:line 814
          at Project.CopyBuildToStagingDirectory(ProjectParams Params) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\Scripts\CopyBuildToStagingDirectory.Automation.cs:line 3971
          at BuildCookRun.DoBuildCookRun(ProjectParams Params) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\Scripts\BuildCookRun.Automation.cs:line 216
          at BuildCookRun.ExecuteBuild() in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\Scripts\BuildCookRun.Automation.cs:line 39
          at AutomationTool.BuildCommand.Execute() in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\AutomationUtils\BuildCommand.cs:line 263
          at AutomationTool.Automation.Execute(List`1 CommandsToExecute, Dictionary`2 Commands) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\AutomationUtils\Automation.cs:line 547
          at AutomationTool.Automation.Process(String[] Arguments, StartupTraceListener StartupListener) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\AutomationUtils\Automation.cs:line 511
          at AutomationTool.Program.MainProc(String[] Arguments, StartupTraceListener StartupListener) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\Program.cs:line 175
          at AutomationTool.Program.<>c__DisplayClass1_0.<Main>b__2() in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\Program.cs:line 87
          at AutomationTool.InternalUtils.RunSingleInstance(Func`1 Main) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\AutomationUtils\Utils.cs:line 737
          at AutomationTool.Program.Main(String[] Arguments) in E:\UE4.26_SourceCode\Engine\Saved\CsTools\Engine\Source\Programs\AutomationTool\Program.cs:line 87
       (see C:\Users\Khalim\AppData\Roaming\Unreal Engine\AutomationTool\Logs\E+UE4.26.2.Full\Log.txt for full exception trace)

Apologies for the confusion, I think I must have misread which version of UE you are using from another thread. The values inside DefaultEngine.ini for packaging to Desktop in UE4.26 should be:

+DirectoriesToAlwaysCook=(Path="/Game/FMOD/Banks")
+DirectoriesToAlwaysCook=(Path="/Game/FMOD/Buses")
+DirectoriesToAlwaysCook=(Path="/Game/FMOD/Events")
+DirectoriesToAlwaysCook=(Path="/Game/FMOD/Reverbs")
+DirectoriesToAlwaysCook=(Path="/Game/FMOD/Snapshots")
+DirectoriesToAlwaysCook=(Path="/Game/FMOD/VCAs")
+DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Desktop")

Please give this a shot and let me know if you are still getting this issue.

Hi jeff. Sadly after using your latest Patch1 (which does what you point out) on consoles it doesn’t works when trying to build a package.

After manually setting

-DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Desktop")
+DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Switch")

on each platform the package builds as expected

Ah yes, I should have added that it is still a requirement that any additional platforms need these two lines

-DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Desktop")
+DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/<platform>")

in their specific Platforms\<platform>\Config\<platform>Game.ini file, and some platforms may also need whitelisting. Further details are in the Platfrom Specifics section of our docs, for anyone encountering this issue in the future.