diff --git a/Content/Unbread/Core/Character/BP_Character.uasset b/Content/Unbread/Core/Character/BP_Character.uasset index 59a870b5..2b02cd03 100644 --- a/Content/Unbread/Core/Character/BP_Character.uasset +++ b/Content/Unbread/Core/Character/BP_Character.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b97974dbce2d22d509c5d3efa2016d8f02beeb9ac93c683568e7bb6065494ef -size 276599 +oid sha256:278222349b78b6b4cd871e6bc764ccbe5759258c667fb0533eb153bdcd91ca96 +size 289 diff --git a/Content/Unbread/Core/GameModes/RespawnGamemode.uasset b/Content/Unbread/Core/GameModes/RespawnGamemode.uasset index e8b721d1..f28a93ee 100644 --- a/Content/Unbread/Core/GameModes/RespawnGamemode.uasset +++ b/Content/Unbread/Core/GameModes/RespawnGamemode.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:73af0b7f293d697de26d444cf120aec6a99772139fbd4d1c634454785ffea7b7 -size 116500 +oid sha256:b75ad022cbf69ea1d6a8e82dbfa6e200207131138d240244b85805a4b1a87ede +size 117070 diff --git a/Content/Unbread/Core/UI/Widgets/WBP_Main_Menu.uasset b/Content/Unbread/Core/UI/Widgets/WBP_Main_Menu.uasset index 7375a274..95edb942 100644 --- a/Content/Unbread/Core/UI/Widgets/WBP_Main_Menu.uasset +++ b/Content/Unbread/Core/UI/Widgets/WBP_Main_Menu.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2353112f9efca2ae53722cd0fd97f6f6877b99397aa77395795b3a250d562c68 -size 420810 +oid sha256:fd9868ab3ffed0c1af613007106b0c513871db01aa2acb9ba3c4fd37aea54ecc +size 442739 diff --git a/Content/Unbread/Core/UI/Widgets/WBP_PauseMenu.uasset b/Content/Unbread/Core/UI/Widgets/WBP_PauseMenu.uasset index 3d524bff..314cd93f 100644 --- a/Content/Unbread/Core/UI/Widgets/WBP_PauseMenu.uasset +++ b/Content/Unbread/Core/UI/Widgets/WBP_PauseMenu.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f7cf30c48f405f573b5e1a6103522acdab83717cf00fe7bf761dd26aed7cbd77 -size 324532 +oid sha256:690fdfde60b32f4bb2ef837995da861b93983630d4e9bacb8f6910050221342b +size 345622 diff --git a/Content/Unbread/Core/UI/Widgets/WBP_WinMenu.uasset b/Content/Unbread/Core/UI/Widgets/WBP_WinMenu.uasset index 9216d1c8..495fcc70 100644 --- a/Content/Unbread/Core/UI/Widgets/WBP_WinMenu.uasset +++ b/Content/Unbread/Core/UI/Widgets/WBP_WinMenu.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:46a62e07b845c2ed25ddc3e64aa7983897d623fd45bddc2a8b41bbeadd90b57f -size 142523 +oid sha256:5c5e9ce35ea55e92b4fbca4e9a3ce58f5b1489961a6f72f50c0174c9a24a2ae2 +size 146793 diff --git a/Plugins/FMODStudio/Docs/api-reference-afmodambientsound.html b/Plugins/FMODStudio/Docs/api-reference-afmodambientsound.html deleted file mode 100644 index 7e7cd1e3..00000000 --- a/Plugins/FMODStudio/Docs/api-reference-afmodambientsound.html +++ /dev/null @@ -1,48 +0,0 @@ - -
-Unreal Integration 2.02
- -This class inherits from AActor
-Properties:
-FMODAudioComponent used to play the ambient Event.
--
UFMODAudioComponent *AudioComponent;
-
See Also: UFMODAudioComponent
Unreal Integration 2.02
- -Types:
-Methods:
-Override the attenuation values from FMOD Studio.
--
struct FFMODAttenuationDetails
-{
- uint32 bOverrideAttenuation;
- float MinimumDistance;
- float MaximumDistance;
-};
-
These definitions describe built-in event properties.
--
enum Type
-{
- ChannelPriority,
- ScheduleDelay,
- ScheduleLookahead,
- MinimumDistance,
- MaximumDistance,
- Count
-};
-
Priority to set on low-level channels created by this event instance.
-Schedule delay to synchronized playback for multiple tracks in DSP clocks, or -1 for default.
-Schedule look-ahead on the timeline in DSP clocks, or -1 for default.
-Override the event's 3D minimum distance, or -1 for default.
-Override the event's 3D maximum distance, or -1 for default.
-Which FMOD Studio system to use.
--
enum Type
-{
- Auditioning,
- Runtime,
- Editor,
- Max
-};
-
Occlusion details.
--
struct FFMODOcclusionDetails
-{
- bool bEnableOcclusion;
- TEnumAsByte<enum ECollisionChannel> OcclusionTraceChannel;
- bool bUseComplexCollisionForOcclusion;
-}
-
This constant is used to convert unreal units to meters for FMOD Studio. The default value is appropriate for games that follow the Unreal Engine's convention of 1 unreal unit == 1cm; if your game world's scale uses a different length for unreal units, you can alter this value in FMODUtils.h.
--
#define FMOD_VECTOR_SCALE_DEFAULT 0.01f
-
Helper function to debug FMOD function calls.
--
void LogError(
- FMOD_RESULT result,
- const char *function
-);
-
Helper function to convert from UE world axis to FMOD axis.
--
void Assign(
- FMOD_VECTOR &Dest
- const FVector &Src
-);
-void Assign(
- FMOD_3D_ATTRIBUTES &Dest,
- const FTransform &Src
-);
-
Helper function to convert from UE world vector to FMOD vector.
--
FMOD_VECTOR ConvertWorldVector(
- const FVector &Src
-);
-
Helper function for converting unit vector to be used by FMOD.
--
FMOD_VECTOR ConvertUnitVector(
- const FVector &Src
-);
-
Helper function to convert from FMOD distance to UE scale.
--
float DistanceToUEScale(
- float FMODDistance
-);
-
Helper function to know if an object is audible in the world.
--
bool IsWorldAudible(
- UWorld *World,
- bool AllowInEditor
-);
-
Helper function to convert from UE GUID to FMOD Studio ID.
--
FMOD::Studio::ID ConvertGuid(
- const FGuid &UnrealGuid
-);
-
Helper function to get UE GUID from an FMOD instanced object.
--
FGuid GetID(
- StudioType *Instance
-);
-
Helper function to get the path of an event.
--
FString GetPath(
- StudioType *Instance
-);
-
Helper function to return the name of an event using its Guid.
--
FString LookupNameFromGuid(
- FMOD::Studio::System *StudioSystem,
- const FGuid &Guid
-);
-FString LookupNameFromGuid(
- FMOD::Studio::System *StudioSystem,
- const FMOD::Studio::ID &Guid
-);
-
Helper function to return the FMOD Studio Parameter as a string.
--
FString ParameterTypeToString(
- FMOD_STUDIO_PARAMETER_TYPE Type
-);
-
Unreal Integration 2.02
- -This class inherits from IModuleInterface.
-Methods:
-Singleton-like access to this module's interface. Beware of calling this during the shutdown phase, though. Your module might have been unloaded already.
--
IFMODStudioModule &Get()
-
Checks to see if this module is loaded and ready. It is only valid to call Get() if IsAvailable() returns true.
-bool IsAvailable()
-
Get a pointer to the runtime studio system (only valid in-game or in PIE).
-FMOD::Studio::System *GetStudioSystem(
- EFMODSystemContext::Type Context
-);
-
See Also: EFMODSystemContext.
-Set system paused.
-void SetSystemPaused(
- bool paused
-);
-
Called when user changes any studio settings.
-void RefreshSettings();
-
Called when we enter or leave PIE mode.
-void SetInPIE(
- bool bInPIE,
- bool bSimulating
-);
-
Look up an asset given its name.
-UFMODAsset *FindAssetByName(
- const FString &Name
-);
-
Look up an event given its name.
-UFMODEvent *FindEventByName(
- const FString &Name
-);
-
Get the disk path for a bank asset.
-FString GetBankPath(
- const UFMODBank &Bank
-);
-
Get the disk paths for all Banks.
-void GetAllBankPaths(
- TArray<FString> &Paths,
- bool IncludeMasterBank
-);
-
Called by the editor module when banks have been modified on disk.
-void ReloadBanks();
-
Set active locale. Locale must be the locale name of one of the configured project locales.
-bool SetLocale(
- const FString& Locale
-);
-
Get current locale.
-FString GetLocale();
-
Get an event description. The system type can control which Studio system to use, or leave it as System_Max for it to choose automatically.
-FMOD::Studio::EventDescription *GetEventDescription(
- const UFMODEvent *Event,
- FMODSystemContext::Type Context = EFMODSystemContext::Max
-);
-
See Also: EFMODSystemContext.
-Create a single auditioning instance using the auditioning system.
-FMOD::Studio::EventInstance *CreateAuditioningInstance(
- const UFMODEvent *Event
-);
-
Stop any auditioning instance.
-void StopAuditioningInstance();
-
Return whether the listener(s) have moved.
-bool HasListenerMoved();
-
Used to update a listener's position.
-void SetListenerPosition(
- int ListenerIndex,
- UWorld *World,
- FTransform &ListenerTransform,
- float DeltaSeconds
-);
-
Used to update the listener positions.
-void FinishSetListenerPosition(
- int NumListeners
-);
-
Return the audio settings for the listener nearest the given location.
-const FFMODListener &GetNearestListener(
- const FVector &Location
-);
-
Return a list of banks that failed to load due to an error.
-TArray<FString> GetFailedBankLoads(
- EFMODSystemContext::Type Context
-);
-
See Also: EFMODSystemContext.
-This event is fired after all banks were reloaded.
-FSimpleMulticastDelegate &BanksReloadedEvent();
-
Return a list of plugins that appear to be needed.
-TArray<FString> GetRequiredPlugins();
-
Register a plugin that is required.
-void AddRequiredPlugin(
- const FString &Plugin
-);
-
Returns whether sound is enabled for the game.
-bool UseSound();
-
Attempts to load a plugin by name.
-bool LoadPlugin(
- EFMODSystemContext::Type Context,
- const TCHAR *ShortName
-);
-
See Also: EFMODSystemContext.
-Log an FMOD error.
-void LogError(
- int result,
- const char *function
-);
-
This returns true if the plugin has loaded all required banks on startup. Depending if bLoadAllBanks is checked, this could be all banks or just the Master and Strings Bank.
-bool AreBanksLoaded();
-
Unreal Integration 2.02
- -Used for triggering Events in Animation timelines.
-This class inherits from UAnimNotify
-Properties:
-Methods:
-Socket or bone name to attach sound to.
--
FString AttachName;
-
Should this sound follow its owner.
--
unit32 bFollow : 1;
-
FMODEvent reference to play.
--
TAssetPtr<class UFMODEvent> Event;
-
See Also: UFMODEvent
-Event triggered when the timeline crosses the notify marker.
--
virtual void Notify(USkeletalMeshComponent *MeshComp, UAnimSequenceBase *AnimSeq) override
-
If UFMODAnimNotifyPlay::bFollow is true Play Event Attached is called using the current UFMODAnimNotifyPlay::AttachName.
-Otherwise Play Event At Location is called using the MeshComp
for the positional information.
Unreal Integration 2.02
- -Base asset used for creating FMOD object assets in Unreal.
-This class inherits from UObject
-Properties:
-The unique Guid, which matches the one exported from FMOD Studio.
--
FGuid AssetGuid;
-
Unreal Integration 2.02
- -This class inherits from USceneComponent
-Properties:
-Methods:
-BlueprintCallable Methods:
-FMOD Custom Attenuation Details.
--
struct FFMODAttenuationDetails AttenuationDetails;
-
See Also: FFMODAttenuationDetails
-Whether we apply gain and low-pass based on audio zones.
--
uint32 bApplyAmbientVolumes : 1;
-
Whether we apply gain and low-pass based on occlusion onto a parameter.
--
uint32 bApplyOcclusionParameter : 1;
-
Auto destroy this component on completion.
--
uint32 bAutoDestroy : 1;
-
Enable timeline callbacks for this sound, so that OnTimelineMarker and OnTimelineBeat can be used.
--
uint32 bEnableTimelineCallbacks : 1;
-
See Also: UFMODAudioComponent::OnTimelineMarker, UFMODAudioComponent::OnTimelineBeat
-Stop sound when owner is destroyed.
--
uint32 bStopWhenOwnerDestroyed : 1;
-
The event asset to use for this sound.
--
TAssetPtr<class UFMODEvent> Event;
-
See Also: UFMODEvent
-Generic callback used for the Studio Instance.
--
FMOD_RESULT F_CALLBACK UFMODAudioComponent_EventCallback(
- FMOD_STUDIO_EVENT_CALLBACK_TYPE type,
- FMOD_STUDIO_EVENTINSTANCE *event,
- void *parameters
-);
-
This is called if the UFMODAudioComponent::bEnableTimelineCallbacks is true or UFMODAudioComponent::ProgrammerSoundName is not empty.
-See Also: FMOD_STUDIO_EVENT_CALLBACK_TYPE
-FMOD Custom Occlusion Details.
--
struct FFMODOcclusionDetails OcclusionDetails;
-
See Also: FFMODOcclusionDetails
-Called when an event stops, either because it played to completion or because a Stop() call turned it off early.
--
FOnEventStopped OnEventStopped;
-
Called when we reach a beat of a tempo (if bEnableTimelineCallbacks is true).
--
FOnTimelineMarker OnTimelineBeat;
-
See Also: UFMODAudioComponent::bEnableTimelineCallbacks
-Called when we reach a named marker (if bEnableTimelineCallbacks is true).
--
FOnTimelineMarker OnTimelineMarker;
-
See Also: UFMODAudioComponent::bEnableTimelineCallbacks
-Cache of the current Events parameters.
--
TMap<FName, float> ParameterCache;
-
Sound name used for programmer sound.
--
FString ProgrammerSoundName;
-
The integration will look up the name in any loaded audio table.
-Set a programmer sound to use for this audio component. Lifetime of sound must exceed that of the audio component.
--
void SetProgrammerSound(
- FMOD::Sound *Sound
-);
-
See Also: FMOD::Sound
-Actual Studio instance handle.
--
FMOD::Studio::EventInstance *StudioInstance;
-
Unreal Integration 2.02
- -This class inherits from UFMODAsset.
-Properties:
-The unique Guid, which matches the one exported from FMOD Studio.
--
FGuid AssetGuid;
-
Unreal Integration 2.02
- -This class inherits from UBlueprintFunctionLibrary
-Refer to Blueprint Reference.
-Defines:
-Studio stop mode enum for use in blueprints.
--
enum EFMOD_STUDIO_STOP_MODE{
- ALLOWFADEOUT,
- IMMEDIATE
-} EFMOD_STUDIO_STOP_MODE;
-
See Also: FMOD_STUDIO_STOP_MODE
-Wrapped FMOD::Studio::EventInstance for use in blueprints.
--
struct FFMODEventInstance{
- FMOD::Studio::EventInstance *Instance;
-} FFMODEventInstance;
-
Unreal Integration 2.02
- -This class inherits from UFMODAsset.
-Properties:
-The unique Guid, which matches the one exported from FMOD Studio.
--
FGuid AssetGuid;
-
Unreal Integration 2.02
- -This class inherits from UFMODAsset
-Methods:
-The unique Guid, which matches the one exported from FMOD Studio.
--
FGuid AssetGuid;
-
Get parameter descriptions for this event.
--
void GetParameterDescriptions(
- TArray<FMOD_STUDIO_PARAMETER_DESCRIPTION> &Parameters
-);
-
Unreal Integration 2.02
- -This class inherits from UFMODAsset.
-Properties:
-The unique Guid, which matches the one exported from FMOD Studio.
--
FGuid AssetGuid;
-
Unreal Integration 2.02
- -This class inherits from UObject.
-Defines:
-Properties:
-FMOD Logging level.
--
enum EFMODLogging
-{
- LEVEL_NONE = 0,
- LEVEL_ERROR = 1,
- LEVEL_WARNING = 2,
- LEVEL_LOG = 4
-};
-
Project output format, should match the mode set up for the Studio project.
--
namespace EFMODSpeakerMode
-{
- enum Type
- {
- Stereo,
- Surround_5_1,
- Surround_7_1,
- Surround_7_1_4
- };
-}
-
This setting must match the corresponding project platform in the FMOD Studio build settings.
-FMOD System Output modes.
--
namespace EFMODOutput
-{
- enum Type
- {
- TYPE_AUTODETECT,
- TYPE_NOSOUND,
- TYPE_WASAPI,
- TYPE_ASIO,
- TYPE_PULSEAUDIO,
- TYPE_ALSA,
- TYPE_COREAUDIO,
- TYPE_AUDIOTRACK,
- TYPE_OPENSL,
- TYPE_AUDIOOUT,
- TYPE_AUDIO3D,
- TYPE_NNAUDIO,
- TYPE_WINSONIC,
- TYPE_AAUDIO,
- };
-}
-
Target Platforms.
--
namespace EFMODPlatforms
-{
- enum Type
- {
- Windows,
- Linux,
- Mac,
- Android,
- IOS,
- PS4,
- PS5,
- Deprecated,
- Switch,
- XboxOne,
- XSX,
- Editor
- };
-}
-
Encoding formats.
--
namespace EFMODCodec
-{
- enum Type
- {
- VORBIS,
- FADPCM,
- OPUS,
- XMA,
- AT9,
- };
-}
-
Use specific memory pool size for platform, in bytes. Disabled by default.
--
struct FCustomPoolSizes
-{
- int32 Desktop;
- int32 Mobile;
- int32 PS4;
- int32 Switch;
- int32 XboxOne;
-};
-
(Disabled) units in bytes.
-(Disabled) units in bytes.
-(Disabled) units in bytes.
-(Disabled) units in bytes.
-(Disabled) units in bytes.
-FMOD may become unstable if the limit is exceeded!
-Locales for localized banks. Theses should match the project locales configured in the FMOD Studio Project.
--
struct FFMOD::ProjectLocale
-{
- FString LocaleName;
- FString LocaleCode;
- bool bDefault;
-};
-
This section contains settings that can be set per platform.
--
struct FFMODPlatformSettings
-{
- int32 RealChannelCount;
- int32 SampleRate;
- TEnumAsByte<EFMODSpeakerMode::Type> SpeakerMode;
- TEnumAsByte<EFMODOutput::Type> OutputType;
- int32 CustomPoolSize;
- TMap<TEnumAsByte<EFMODCodec::Type>, int32> Codecs;
-};
-
Load all banks at startup.
--
bool bLoadAllBanks;
-
Load all banks sample data into memory at start up.
--
bool bLoadAllSampleData;
-
Enable live update in non-final builds.
--
bool bEnableLiveUpdate;
-
Enable live update in Editor for Auditioning. Requires Restart
--
bool bEnableEditorLiveUpdate;
-
Will log internal API errors when enabled.
--
bool bEnableAPIErrorLogging;
-
Enables the FMOD_STUDIO_INIT_MEMORY_TRACKING flag in the FMOD Studio system.
--
bool bEnableMemoryTracking;
-
See Also: FMOD_STUDIO_INIT_MEMORY_TRACKING
-Path to find your studio bank output directory, relative to Content directory.
--
FDirectoryPath BankOutputDirectory;
-
Project output format, should match the mode set up for the Studio project.
--
TEnumAsByte<EFMODSpeakerMode::Type> OutputFormat;
-
Built-in output types that can be used to run the mixer.
--
TEnumAsByte<EFMODOutput::Type> OutputType;
-
Locales for localized banks. These should match the project locales configured in the FMOD Studio project.
--
TArray<FFMODProjectLocale> Locales;
-
The signal level at which to make channels virtual.
--
float Vol0VirtualLevel;
-
Sample rate to use, or 0 to match system rate.eg. 0, 22050, 24000, 32000, 44100, 48000.
--
int32 SampleRate;
-
Match hardware sample rate where reasonable (44.1kHz to 48kHz).
--
bool bMatchHardwareSampleRate;
-
Number of actual software voices that can be used at once.
--
int32 RealChannelCount;
-
Total number of voices available that can be either real or virtual.
--
int32 TotalChannelCount;
-
DSP mixer buffer length (eg. 512, 1024) or 0 for system default.
--
int32 DSPBufferLength;
-
When changing the Buffer Length, Buffer Count also needs to be set.
-DSP mixer buffer count (eg. 2, 4) or 0 for system default.
--
int32 DSPBufferCount;
-
When changing the Buffer Count, Buffer Length also needs to be set.
-File buffer size in bytes (2048 by default).
--
int32 FileBufferSize;
-
Studio update period in milliseconds, or 0 for default (which means 20ms).
--
int32 StudioUpdatePeriod;
-
Output device to choose at system start up, or empty for default.
--
FString InitialOutputDriverName;
-
Lock all mixer buses at startup, making sure they are created up front.
--
bool bLockAllBuses;
-
Use specified memory pool size for platform, units in bytes. Disabled by default. FMOD may become unstable if the limit is exceeded!
--
FCustomPoolSizes MemoryPoolSizes;
-
Live update port to use, or 0 for default.
--
int32 LiveUpdatePort;
-
Live update port to use while in editor for auditioning. Requires Restart
--
int32 EditorLiveUpdatePort;
-
Delay in seconds before automatically reloading modified banks from disk.
--
int32 ReloadBanksDelay;
-
This can be extended if building banks takes a long time and UE4 tries to reload banks before building is completed. Set to 0 to disable automatic bank reloading.
-Enables the FMOD_STUDIO_INIT_MEMORY_TRACKING flag in the FMOD Studio system.
--
bool bEnableMemoryTracking;
-
See Also: FMOD_STUDIO_INIT_MEMORY_TRACKING
-Extra plugin files to load. The plugin files should sit alongside the FMOD dynamic libraries in the ThirdParty directory.
--
TArray<FString> PluginFiles;
-
Directory for content to appear in content window. Be careful changing this!
--
FString ContentBrowserPrefix;
-
Force platform directory name, or leave empty for automatic (Desktop/Mobile/PS4/XBoxOne)
--
FString ForcePlatformName;
-
Name of master bank. The default in Studio is "Master".
--
FString MasterBankName;
-
Skip bank files of the given name. Can be used to load all banks except for a certain set, such as localization banks.
--
FString SkipLoadBankName;
-
Specify the key for loading sounds from encrypted banks.
--
FString StudioBankKey;
-
Force wav writer output, for debugging only. Setting this will prevent normal sound output!
--
FString WavWriterPath;
-
Specify the logging level to use in a debug/development build.
--
TEnumAsByte<EFMODLogging> LoggingLevel;
-
Name of the parameter used in Studio to control occlusion effects.
--
FString OcclusionParameter;
-
Name of the parameter used in Studio to control ambient volume.
--
FString AmbientVolumeParameter;
-
Name of the parameter used in Studio to control ambient LPF effects.
--
FString AmbientLPFParameter;
-
Used to specify platform specific settings.
--
TMap<TEnumAsByte<EFMODPlatforms::Type>, FFMODPlatformSettings> Platforms;
-
Unreal Integration 2.02
- -This class inherits from UFMODEvent.
-Methods:
-The unique Guid, which matches the one exported from FMOD Studio.
--
FGuid AssetGuid;
-
Get parameter descriptions for this event.
--
void GetParameterDescriptions(
- TArray<FMOD_STUDIO_PARAMETER_DESCRIPTION> &Parameters
-) const;
-
Unreal Integration 2.02
- -This class inherits from UReverbEffect.
-Properties:
-The unique Guid, which matches the Guid of the FMOD Stuido Snapshot correpsonding to this reverb.
--
FGuid AssetGuid;
-
Unreal Integration 2.02
- -This class inherits from UFMODAsset.
-Properties:
-The unique Guid, which matches the one exported from FMOD Studio.
--
FGuid AssetGuid;
-
Unreal Integration 2.02
- -Unreal Integration 2.02
- -AudioLink is an API that connects Unreal Audio Engine to external software, allowing Audio to be passed from Unreal to FMOD. By using hardware abstraction, AudioLink bypasses the need for direct hardware access and provides the strengths of both Unreal Audio Engine and FMOD.
-This section will assume a basic understanding of the Unreal AudioLink system and will focus on the FMOD specific information.
-The FMOD for Unreal AudioLink module assumes the Event linked contains a Programmer Instrument, this is what it uses to pass the sound data from Unreal to FMOD.
-
-Generally you will want an Event that has a looping async programmer sound, because we may not know the length of the sounds being played from Unreal (ie. submixes are generally alive from startup to shutdown).
In the FMOD for Unreal Settings, you can choose to enable/disable AudioLink support. This will load/unload the appropriate modules when the editor is reloaded.
- -The default FMOD AudioLink Settings can be found in the project settings, under 'Plugins > FMOD AudioLink'. This is used in cases where the property has not been set, so it is unnecessary to pass it every time you create an AudioLink.
-You can create multiple FMOD AudioLink Settings assets for different FMOD Events, allowing you to easily route different sounds to different events allowing for greater customization.
-These settings are used to set up the FMOD Event:
FMOD supports AudioLink through three link types:
-FMODAudioLink
.MetaSounds, Sound Cues, and Sound Waves are classed as 'Sources', to play them through AudioLink you can use the Attenuation Settings or the Submix.
-In the source/component Details panel you will find the option to individually override or assign Attenuation settings:
-Meta Sound | -Sound Cue | -Audio Component | -
---|---|---|
- | - | - |
It is recommended to disable the Attenuation (Spatialization)
option as FMOD needs to handle the spatialization.
To send specific sounds to FMOD, use the settings under Attenuation (AudioLink)
:
If you want to override the Attenuation Settings, either through an asset or in the details panel, but not use the Enable Send to AudioLink
(ie. you want it to route through a specified submix instead) you need to make sure that the Attenuation (Spatialization)
is disabled.
You can set the Send to Audio Link
flag and the Audio Link Settings property in the submix's Details panel, under 'Audio Link'.
AudioLink Component support is included through the FMOD AudioLink
Component, but is often unnecessary as sources are componentless by design, highly optimized for scale, and provide engine-level support.
The AudioLink Component is then controlled through the API:
-PlayLink
SetLinkSound
StopLink
IsLinkPlaying
In UE5.2 and UE5.3, two events will spawn when using the FMODAudioLinkComponent: one for the component (intended) and one for the sound source (not intended). This appears to be an engine bug.
-Workaround:
-Create a new FMODAudioLinkSettings asset and leave the Link Event
empty, then assign this to the sound source (through the Attenuation Settings).
log LogFMODAudioLink All
to output (a lot) more detailed information to the log. Send to AudioLink
flag on the source or submix.Unreal Integration 2.02
- -This is an Unreal Level Blueprint that demonstrates how to build a loading screen that can be used at the start of a game to load both FMOD Studio data and Unreal data without blocking the main thread. To make this work properly "Load All Banks" needs to be turned off in the FMOD Settings.
- -Topics:
- -Load All Banks
is also disabledEvent Begin
, uses the Load Sample Data
variable for the Load Bank
node.Done
variable every tick. If it is still false, it will iterate through the array of banks incrementing the variable Number of Loaded Banks
. Once Number of Loaded Banks
is equal to the total number of banks in the array then the variable Done
is set to true, and it is safe to load the playable Map.Unreal Integration 2.02
- -Used for controlling mixer buses.
-Methods:
-Mute/Unmute the bus.
- --
static void BusSetMute(
- class UFMODBus *Bus,
- bool bMute
-);
-
Pause/Unpause all events going through the bus.
- --
static void BusSetPaused(
- class UFMODBus *Bus,
- bool bPaused
-);
-
Set volume on a bus.
- --
static void BusSetVolume(
- class UFMODBus *Bus,
- float Volume
-);
-
Volume value.
-Stop all EventInstances routed into the bus.
- --
static void BusStopAllEvents(
- class UFMODBus *Bus,
- EFMOD_STUDIO_STOP_MODE stopMode
-);
-
See Also: FMOD_STUDIO_STOP_MODE
Unreal Integration 2.02
- -The common section contains methods for controlling the FMOD system.
-Methods:
-Get Output Drivers List all output device names.
-Set Global Parameter By Name Set a global parameter from the System.
-Set Locale Set the active locale for subsequent bank loads.
-Mixer Suspend Suspend the FMOD mixer.
-Mixer Resume Resume the FMOD mixer.
-Load Bank Load a bank.
-Unload Bank Sample Data Unload bank sample data.
-Play Event 2D Play an event without a specified location.
-Unload Event Sample Data Unload event sample data.
-VCA Set Volume Set volume on a VCA.
-Find an asset by name.
- --
static UFMODAsset *FindAssetByName(
- const FString &Name
-);
-
See Also: UFMODAsset
-Find an Event by name.
- --
static UFMODEvent *FindEventByName(
- const FString &Name
-);
-
See Also: UFMODEvent
-Return a list of all event instances that are playing for this event.
- --
static TArray<FFMODEventInstance> FindEventInstances(
- UObject *WorldContextObject,
- UFMODEvent *Event
-);
-
Be careful using this function because it is possible to find and alter any playing sound, even ones owned by other audio components.
-See Also: FFMODEventInstance
-Get a global parameter value from the System.
- --
static float GetGlobalParameterByName(
- FName Name
-);
-
Will be deprecated in FMOD 2.01, use Get Global Parameter Value By Name instead.
-See Also: Set Global Parameter By Name
-Get a global parameter value from the System.
- --
void GetGlobalParameterValueByName(
- FName Name,
- float &UserValue,
- float &FinalValue
-);
-
List all output device names.
- --
static TArray<FString> GetOutputDrivers();
-
See Also: Set Output Driver By Index, Set Output Driver By Name
-Return true if a bank is loaded.
- --
static bool IsBankLoaded(
- UFMODBank *Bank
-);
-
See Also: Load Bank
-Load a bank.
- --
static void LoadBank(
- UFMODBank *Bank,
- bool bBlocking,
- bool bLoadSampleData
-);
-
Load bank sample data.
- --
static void LoadBankSampleData(
- UFMODBank *Bank
-);
-
Load event sample data.
- --
static void LoadEventSampleData(
- UObject *WorldContextObject,
- UFMODEvent *Event
-);
-
This can be done ahead of time to avoid loading stalls.
-Resume the FMOD mixer.
- --
static void MixerResume();
-
Used when resuming the application.
-Suspend the FMOD mixer.
- --
static void MixerSuspend();
-
Used when suspending the application.
-Play an event without a specified location.
- --
static FFMODEventInstance PlayEvent2D(
- UObject *WorldContextObject,
- UFMODEvent *Event,
- bool bAutoPlay
-);
-
This returns an FFMODEventInstance.
-The sound does not travel with any actor.
Plays an event at the given location.
- --
static FFMODEventInstance PlayEventAtLocation(
- UObject *WorldContextObject,
- UFMODEvent *Event,
- const FTransform &Location,
- bool bAutoPlay
-);
-
This returns an FMOD Event Instance.
-The sound does not travel with any actor.
Play an event attached to and following the specified component.
- --
static class UFMODAudioComponent *PlayEventAttached(
- UFMODEvent *Event,
- USceneComponent *AttachToComponent,
- FName AttachPointName,
- FVector Location,
- EAttachLocation::Type LocationType,
- bool bStopWhenAttachedToDestroyed,
- bool bAutoPlay,
- bool bAutoDestroy
-);
-
Set a global parameter from the System.
- --
static void SetGlobalParameterByName(
- FName Name,
- float Value
-);
-
Set the active locale for subsequent bank loads.
- --
static void SetLocale(const FString& Locale);
-
Set current output device by its index from GetOutputDrivers.
- --
static void SetOutputDriverByIndex(
- int NewDriverIndex
-);
-
See Also: Get Output Drivers
-Set current output device by name or part of the name.
- --
static void SetOutputDriverByName(
- FString NewDriverName
-);
-
See Also: Get Output Drivers
-Unload a bank.
- --
static void UnloadBank(
- UFMODBank *Bank
-);
-
Unload bank sample data.
- --
static void UnloadBankSampleData(
- UFMODBank *Bank
-);
-
Unload event sample data.
- --
static void UnloadEventSampleData(
- UObject *WorldContextObject,
- UFMODEvent *Event
-);
-
Set volume on a VCA.
- --
static void VCASetVolume(
- UFMODVCA *Vca,
- float Volume
-);
-
Unreal Integration 2.02
- -These methods are used to control the state of Audio Components.
-Methods:
-Creates a new Audio Component.
- -Get the event length in milliseconds.
- --
int32 GetLength() const;
-
Get parameter value from the Event.
- --
float GetParameter(
- FName Name
-);
-
Get parameter value from the Event.
- --
void GetParameterValue(FName Name, float &UserValue, float &FinalValue);
-
Get the paused state of the audio component.
- --
bool GetPaused();
-
Get a property of the Event.
- --
float GetProperty(
- EFMODEventProperty::Type Property
-);
-
See Also: EFMODEventProperty
-Get the timeline position in milliseconds.
- --
int32 GetTimelinePosition();
-
Return true if this component is currently playing an event.
- --
bool IsPlaying();
-
Allow an event to continue past a sustain point.
- --
void KeyOff();
-
Start a sound playing on an audio component.
- --
void Play();
-
Release the current Studio Instance.
- --
void Release();
-
See Also: UFMODAudioComponent::StudioInstance
-New Event to be used by the FMODAudioComponent.
- --
void SetEvent(
- UFMODEvent *NewEvent
-);
-
If an Event is currently playing, it will be stopped and the new Event passed in will be started.
-See Also: UFMODEvent
-Set a parameter of the Event.
- --
void SetParameter(
- FName Name,
- float Value
-);
-
Pause/Unpause an audio component.
- --
void SetPaused(
- bool paused
-);
-
Set pitch on an audio component.
- --
void SetPitch(
- float pitch
-);
-
The pitch multiplier is used to modulate the event instance's pitch. It can be set to any value greater than or equal to zero but the final combined pitch is clamped to the range [0, 100] before being applied.
-Set the sound name to use for programmer sound.
- --
void SetProgrammerSoundName(
- FString Value
-);
-
The integration will look up the name in any loaded audio table.
-Set a property of the Event.
- --
void SetProperty(
- EFMODEventProperty::Type Property,
- float Value
-);
-
See Also: EFMODEventProperty
-Set the timeline position in milliseconds
- --
void SetTimelinePosition(
- int32 Time
-);
-
Set volume on an audio component.
- --
void SetVolume(
- float volume
-);
-
This volume is applied as a scaling factor for the event volume. It does not override the volume level set in FMOD Studio, nor any internal volume automation or modulation.
-Stop an audio component playing.
- --
void Stop();
-
Unreal Integration 2.02
- -Automatically generated methods for working with FMOD and Unreal Enums.
-Methods:
-Converts a byte to an EFMOD_STUDIO_STOP_MODE.
- --
EFMOD_STUDIO_STOP_MODE ByteToEnum(
- byte Byte
-);
-
See Also: EFMOD_STUDIO_STOP_MODE.
-Returns every value in the EFMOD_STUDIO_STOP_MODE enum.
- --
EFMOD_STUDIO_STOP_MODE ForEachEFMOD_STUDIO_STOP_MODE();
-
See Also: EFMOD_STUDIO_STOP_MODE.
-Returns the total number of entries in the EFMOD_STUDIO_STOP_MODE enum.
- --
int GetNumberOfEntriesInEFMOD_STUDIO_STOP_MODE();
-
See Also: EFMOD_STUDIO_STOP_MODE.
-Returns the value of an EFMOD_STUDIO_STOP_MODE member.
- --
EFMOD_STUDIO_STOP_MODE LiteralEnumEFMOD_STUDIO_STOP_MODE(
- EFMOD_STUDIO_STOP_MODE Enum
-);
-
See Also: EFMOD_STUDIO_STOP_MODE.
Unreal Integration 2.02
- -These methods are used to control individual Event Instances.
-Methods:
-Get a parameter value on an FMOD Event Instance.
- --
static float EventInstanceGetParameter(
- FFMODEventInstance EventInstance,
- FName Name
-);
-
Will be deprecated in FMOD 2.01, use Event Instance Get Parameter Value instead.
-Get a parameter value on an FMOD Event Instance.
- --
static void EventInstanceGetParameterValue(
- FFMODEventInstance EventInstance,
- FName Name,
- float &UserValue,
- float &FinalValue
-);
-
Return whether this FMOD Event Instance is valid. The instance will be invalidated when the sound stops.
- --
static bool EventInstanceIsValid(
- FFMODEventInstance EventInstance
-);
-
The instance will be invalidated when the sound stops.
-Allow an FMOD Event Instance to continue past a sustain point.
- --
static void EventInstanceKeyOff(FFMODEventInstance EventInstance);
-
Play an FMOD Event Instance.
- --
static void EventInstancePlay(
- FFMODEventInstance EventInstance
-);
-
Release an FMOD Event Instance.
- --
static void EventInstanceRelease(FFMODEventInstance EventInstance);
-
Set a parameter on an FMOD Event Instance.
- --
static void EventInstanceSetParameter(
- FFMODEventInstance EventInstance,
- FName Name,
- float Value
-);
-
Pause/Unpause an FMOD Event Instance.
- --
static void EventInstanceSetPaused(
- FFMODEventInstance EventInstance,
- bool Paused
-);
-
Set pitch on an FMOD Event Instance.
- --
static void EventInstanceSetPitch(
- FFMODEventInstance EventInstance,
- float Pitch
-);
-
Set an FMOD event property on an FMOD Event Instance.
- --
static void EventInstanceSetProperty(
- FFMODEventInstance EventInstance,
- EFMODEventProperty::Type Property,
- float Value
-);
-
Set 3D attributes on an FMOD Event Instance.
- --
static void EventInstanceSetTransform(
- FFMODEventInstance EventInstance,
- const FTransform &Location
-);
-
Set volume on an FMOD Event Instance.
- --
static void EventInstanceSetVolume(
- FFMODEventInstance EventInstance,
- float Volume
-);
-
Mute/Unmute the bus.
- --
static void EventInstanceStop(FFMODEventInstance EventInstance, bool Release = false);
-
Unreal Integration 2.02
- -Automatically generated methods for working with FMOD and Unreal Structs.
-Methods
-Adds a node that breaks an 'FMODAttenuationDetails` into its member fields.
-
-
FMODAttenuationDetails BreakFMODAttenuationDetails(
- FMODAttenuation Details
-);
-
Adds a node that breaks an 'FMODOcclusionDetails' into its member fields.
- --
FMODOcclusionDetails BreakFMODOcclusionDetails(
- FMODOcclusion Details
-)
-
Adds a node that creates an 'FMODAttenuationDetails' from its members.
- --
FMODAttenuationDetails MakeFMODAttenuationDetails(
- bool OverrideAttenuation,
- float MinimumDistance,
- float MaximumDistance
-);
-
OverrideAttenuation
is true.OverrideAttenuation
is true.See Also: FMODAttenuationDetails.
-Adds a node that creates an 'FMODEventInstance' from its members.
- --
FMODEventInstance MakeFMODEventInstance();
-
See Also: Event Instance.
-Adds a node that creates an 'FMODOcclusionDetails' from its members.
- --
FMODAttenuationDetails MakeFMODAttenuationDetails(
- bool EnableOcclusion,
- enum OcclusionTraceChannel,
- bool UseComplexCollisionForOcclusion
-);
-
See Also: FMODOcclusionDetails.
Unreal Integration 2.02
- -Automatically generated methods for working with FMOD and Unreal Utilities.
-Methods:
-Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Cast Failed
path will be taken.Access object as a class 'FMODAmbientSound' it may be an instance of. On failure the Cast Failed
path will be taken.
-
FMODAmbientSound CastToFMODAmbientSound(
- Object Object
-);
-
Access class 'FMODAmbientSound' as one it may inherit from. On failure the Cast Failed
path will be taken.
-
FMODAmbientSound CastToFMODAmbientSoundclass(
- ObjectClassReference Class
-);
-
Access object as a class 'FMODAnimNotifyPlay' it may be an instance of. On failure the Cast Failed
path will be taken.
-
FMODAnimNotifyPlay CastToFMODAnimNotifyPlay(
- Object Object
-);
-
Access class 'FMODAnimNotifyPlay' as one it may inherit from. On failure the Cast Failed
path will be taken.
-
FMODAnimNotifyPlay CastToFMODAnimNotifyPlayclass(
- ObjectClassReference Class
-);
-
Access object as a class 'FMODAsset' it may be an instance of. On failure the Cast Failed
path will be taken.
-
FMODAsset CastToFMODAsset(
- Object Object
-);
-
Access class 'FMODAsset' as one it may inherit from. On failure the Cast Failed
path will be taken.
-
FMODAsset CastToFMODAssetclass(
- ObjectClassReference Class
-);
-
Access object as a class 'FMODAudioComponent' it may be an instance of. On failure the Cast Failed
path will be taken.
-
FMODAudioComponent CastToFMODAudioComponent(
- Object Object
-);
-
Access class 'FMODAudioComponent' as one it may inherit from. On failure the Cast Failed
path will be taken.
-
FMODAudioComponent CastToFMODAudioComponentclass(
- ObjectClassReference Class
-);
-
Access object as a class 'FMODBank' it may be an instance of. On failure the Cast Failed
path will be taken.
-
FMODBank CastToFMODBank(
- Object Object
-);
-
Access class 'FMODBank' as one it may inherit from. On failure the Cast Failed
path will be taken.
-
FMODBank CastToFMODBankclass(
- ObjectClassReference Class
-);
-
Access object as a class 'FMODBus' it may be an instance of. On failure the Cast Failed
path will be taken.
-
FMODBus CastToFMODBus(
- Object Object
-);
-
Access class 'FMODBus' as one it may inherit from. On failure the Cast Failed
path will be taken.
-
FMODBus CastToFMODBusclass(
- ObjectClassReference Class
-);
-
Access object as a class 'FMODEvent' it may be an instance of. On failure the Cast Failed
path will be taken.
-
FMODEvent CastToFMODEvent(
- Object Object
-);
-
Access class 'FMODEvent' as one it may inherit from. On failure the Cast Failed
path will be taken.
-
FMODEvent CastToFMODEventclass(
- ObjectClassReference Class
-);
-
Access object as a class 'FMODEventControlSection' it may be an instance of. On failure the Cast Failed
path will be taken.
-
FMODEventControlSection CastToFMODEventControlSection(
- Object Object
-);
-
Access class 'FMODEventControlSection' as one it may inherit from. On failure the Cast Failed
path will be taken.
-
FMODEventControlSection CastToFMODEventControlSectionclass(
- ObjectClassReference Class
-);
-
Access object as a class 'FMODEventControlTrack' it may be an instance of. On failure the Cast Failed
path will be taken.
-
FMODEventControlTrack CastToFMODEventControlTrack(
- Object Object
-);
-
Access class 'FMODEventControlTrack' as one it may inherit from. On failure the Cast Failed
path will be taken.
-
FMODEventControlTrack CastToFMODEventControlTrackclass(
- ObjectClassReference Class
-);
-
Access object as a class 'FMODEventParameterTrack' it may be an instance of. On failure the Cast Failed
path will be taken.
-
FMODEventParameterTrack CastToFMODEventParameterTrack(
- Object Object
-);
-
Access class 'FMODEventParameterTrack' as one it may inherit from. On failure the Cast Failed
path will be taken.
-
FMODEventParameterTrack CastToFMODEventParameterTrackclass(
- ObjectClassReference Class
-);
-
Access object as a class 'FMODPort' it may be an instance of. On failure the Cast Failed
path will be taken.
-
FMODPort CastToFMODPort(
- Object Object
-);
-
Access class 'FMODPort' as one it may inherit from. On failure the Cast Failed
path will be taken.
-
FMODPort CastToFMODPortclass(
- ObjectClassReference Class
-);
-
Access object as a class 'FMODSnapshot' it may be an instance of. On failure the Cast Failed
path will be taken.
-
FMODSnapshot CastToFMODSnapshot(
- Object Object
-);
-
Access class 'FMODSnapshot' as one it may inherit from. On failure the Cast Failed
path will be taken.
-
FMODSnapshot CastToFMODSnapshotclass(
- ObjectClassReference Class
-);
-
Access object as a class 'FMODSnapshotReverb' it may be an instance of. On failure the Cast Failed
path will be taken.
-
FMODSnapshotReverb CastToFMODSnapshotReverb(
- Object Object
-);
-
Access class 'FMODSnapshotReverb' as one it may inherit from. On failure the Cast Failed
path will be taken.
-
FMODSnapshotReverb CastToFMODSnapshotReverbclass(
- ObjectClassReference Class
-);
-
Access object as a class 'FMODVCA' it may be an instance of. On failure the Cast Failed
path will be taken.
-
FMODVCA CastToFMODVCA(
- Object Object
-);
-
Access class 'FMODVCA' as one it may inherit from. On failure the Cast Failed
path will be taken.
-
FMODVCA CastToFMODVCAclass(
- ObjectClassReference Class
-);
-
Unreal Integration 2.02
- -Unreal Integration 2.02
- -This page includes definitions for various common FMOD Studio terms, along with references to related terms and documentation.
-Token | -Meaning | -
---|---|
Out | -The API function will fill in information in this parameter. | -
Opt | -This parameter is optional, specify null or zero to ignore. | -
R/O | -This token applies to members of various structures which FMOD passes to user callbacks. User callbacks must not modify the values of these members. Modifying the values of these members will cause undefined behavior. | -
C# | -This is only available in C#. | -
JS | -This is only available in Javascript. | -
The version number of FMOD Studio. Version numbers are split into three parts, in the format: productVersion.majorVersion.minorVersion. For example, the version 1.23.45 would indicate product version 1, major version 23, and minor version 45 of that major version.
-Major versions contain significant changes, add new features, and may affect bank compatibility. Updating to a new major version usually requires project migration. New major versions may change playback behavior in some cases.
-Minor versions, also known as patch versions, contain bug fixes and smaller workflow improvements.
Unreal Integration 2.02
- -Niagara is Unreal Engines VFX System and this section explains how to use the FMOD Integration with it.
-In Niagara you are able to play one shot events, play persistent events and update parameters.
-To view the available FMOD Niagara Modules, make sure to enable 'Plugins' in the Source Filtering options:
-UE5 | -UE4 | -
---|---|
- | - |
An FMOD Niagara module can be added to one or multiple Unreal Niagara Modules depending on the desired behavior.
-This can be added to the System, Emitter or Particle modules.
-Plays a one shot event at the given location that cannot be controlled after being played.
-UE5 | -UE4 | -
---|---|
- | - |
- | - |
This can be added to the System, Emitter or Particle modules.
-An FMODEvent reference that can be used with the play and update modules.
-By assigning an Event to the FMOD Event Player, you can use it to play multiple one shots of the same event with the same settings or it can be used with persistance events that require updating over its lifetime.
UE5 | -UE4 | -
---|---|
- | - |
- | Found in UE editor window |
-
This can be added to the System, Emitter or Particle modules.
-Play an event from a reference that can later be used with UpdatePersistentFMODEvent
.
UE5 | -UE4 | -
---|---|
- | - |
This can be added to the System, Emitter or Particle modules.
-Used to update information of an event referenced from FMODEventPlayer.
-You can have multiple of these if you need to control multiple parameters.
FMOD Parameters need to be referenced by index from the FMODEventPlayer
.
UE5 | -UE4 | -
---|---|
- | - |
Basic example of how to add a one shot event to an emitter:
-- Add a PlayFMODEvent module to emitter.
-- Assign an FMOD Event.
-- Add your emitter to the scene and press play to hear it in action.
PlayPersistentFMODEvent
module selected, drag your FMODEventPlayer
into the FMOD Event Player
parameter.UE5 | -UE4 | -
---|---|
- | - |
FMODEventPlayer
.Continuing on from Playing a persistent event as you will need both the event player and play modules.
-UpdatePersistentFMODEvent
module selected, drag your FMODEventPlayer
into the FMOD Event Player
parameter.UE5 | -UE4 | -
---|---|
- | - |
UE5 | -UE4 | -
---|---|
- | - |
- | - |
- | - |
Unreal Integration 2.02
-Some platforms require some extra steps to run properly.
-To deploy on Android, make sure FMODStudio is in your game's directory, not in the Engine plugins directory. When FMODStudio is in your game's plugin directory, the engine will rebuild the plugin for Android and deploy all the files properly.
-FMOD supports DSP plugins, which will be stand-alone .so files that will need to be packaged into the build. Add the .so file into the FMODStudio/Binaries/Android/{Architecture}
directory. Unreal will also need an APL file so it knows to package the .so file. To do this, you will need to write an APL file and drop it into the FMODStudio/Binaries/Android
directory. The FMODStudio.build.cs file looks for any file ending with "_APL.xml" and will pass that along to the unreal build tool for packaging.
The APL is a custom xml file format which is documented in the engine file AndroidPluginLanguage.cs. Here is a sample APL file for libovrfmod.so:
-<?xml version="1.0" encoding="utf-8"?>
-<!--Plugin additions-->
-<root xmlns:android="http://schemas.android.com/apk/res/android">
- <!-- init section is always evaluated once per architecture -->
- <init>
- <log text="ovrfmod APL init"/>
- </init>
-
- <!-- optional files or directories to copy to Intermediate/Android/APK -->
- <resourceCopies>
- <log text="ovrfmod APL copying files for $S(Architecture)/"/>
- <copyFile src="$S(PluginDir)/$S(Architecture)/libovrfmod.so"
- dst="$S(BuildDir)/libs/$S(Architecture)/libovrfmod.so" />
- </resourceCopies>
-
- <!-- optional libraries to load in GameActivity.java before libUE4.so -->
- <soLoadLibrary>
- <log text="ovrfmod APL adding loadLibrary references"/>
- <loadLibrary name="ovrfmod" failmsg="ovrfmod not loaded and required!" />
- </soLoadLibrary>
-</root>
-
You only need to write this if you want to load a DSP plugin on Android.
-Banks for Android are expected to be located in the Mobile
sub-directory of the Studio built banks output directory. This sub-directory name is hardcoded in the integration so if you want to use a different location you would need to modify the integration source code.
To package the Android banks add these lines to Platforms\Android\Config\AndroidGame.ini
:
[/Script/UnrealEd.ProjectPackagingSettings]
--DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Desktop")
-+DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Mobile")
-
4.24
-The location of AndroidGame.ini
is Config\Android\AndroidGame.ini
Any platform specific requirements for Android also apply to Android-based VR devices, such as Oculus Quest.
-To enable Live Update the Unreal XSX project settings must be modified to allow FMOD to open the Live Update port from the running game. Access the settings by opening the Project Settings editor from the Edit menu, then navigate to Xbox Series X|S platform settings. Under the Development category, add the following entry to the Debug Network Ports setting:
-
Banks for the Xbox Series X|S are expected to be located in the Scarlett
sub-directory of the Studio built banks output directory. This sub-directory name is hardcoded in the integration so if you want to use a different location you would need to modify the integration source code.
To package the Xbox Series X|S specific banks add the following lines to the appropriate Unreal config file from the table below e.g. Platforms\XSX\Config\XSXGame.ini
:
Unreal version | -FMOD Studio bank folder | -Unreal platform | -Unreal config file | -
---|---|---|---|
4.25 | -Scarlett | -MPX | -Platforms\MPX\Config\MPXGame.ini | -
4.25+ onwards | -Scarlett | -XSX | -Platforms\XSX\Config\XSXGame.ini | -
[/Script/UnrealEd.ProjectPackagingSettings]
--DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Desktop")
-+DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Scarlett")
-
FMOD will not work with inbuilt Unreal audio on Xbox Series X|S. You will need to disable the Unreal Audio Device by adding/editing the appropriate Unreal engine config file from the table below e.g. Config\XSX\XSXEngine.ini
with the following section:
Unreal version | -Unreal engine config file | -
---|---|
4.25 | -Config\MPX\MPXEngine.ini | -
4.25+ onwards | -Config\XSX\XSXEngine.ini | -
[Audio]
-AudioDeviceModuleName=
-AudioMixerModuleName=
-
To enable Live Update the Unreal Xbox One GDK project settings must be modified to allow FMOD to open the Live Update port from the running game. Access the settings by opening the Project Settings editor from the Edit menu, then navigate to Xbox One GDK platform settings. Under the Development category, add the following entry to the Debug Network Ports setting:
-
Banks for the Xbox One are expected to be located in the XboxOne
sub-directory of the Studio built banks output directory. This sub-directory name is hardcoded in the integration so if you want to use a different location you would need to modify the integration source code.
To package the Xbox One specific banks add the following lines to the appropriate Unreal config file from the table below e.g. Platforms\XB1\Config\XB1Game.ini
, replacing MyGame
with your project's name:
Unreal version | -FMOD Studio bank folder | -Unreal platform | -Unreal config file | -
---|---|---|---|
4.25 | -XboxOne | -XboxOneAnvil | -Platforms\XboxOneAnvil\Config\XboxOneAnvilGame.ini | -
4.25+, 4.26, 4.27 | -XboxOne | -XboxOneGDK | -Platforms\XboxOneGDK\Config\XboxOneGDKGame.ini | -
5.0 onwards | -XboxOne | -XB1 | -Platforms\XB1\Config\XB1Game.ini | -
[/Script/UnrealEd.ProjectPackagingSettings]
--DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Desktop")
-+DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/XboxOne")
-
-[Staging]
-+WhitelistDirectories=MyGame/Content/FMOD/XboxOne
-
[/Script/UnrealEd.ProjectPackagingSettings]
--DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Desktop")
-+DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/XboxOne")
-
-[Staging]
-+AllowedDirectories=MyGame/Content/FMOD/XboxOne
-
FMOD will not work with inbuilt Unreal audio on Xbox One. You will need to disable the Unreal Audio Device by adding/editing the appropriate Unreal engine config file from the table below e.g. Config\XboxOneGDK\XboxOneGDKEngine.ini
with the following section:
Unreal version | -Unreal engine config file | -
---|---|
4.25 | -Config\XboxOneAnvil\XboxOneAnvilEngine.ini | -
4.25+, 4.26, 4.27 | -Config\XboxOneGDK\XboxOneGDKEngine.ini | -
5.0 onwards | -Config\XB1\XB1Engine.ini | -
[Audio]
-AudioDeviceModuleName=
-AudioMixerModuleName=
-
Banks for Game Core Desktop are expected to be located in the Desktop
sub-directory of the Studio built banks output directory. This sub-directory name is hardcoded in the integration so if you want to use a different location you would need to modify the integration source code.
The Unreal Build Tool will block packaging of the Desktop
directory unless it is explicitly whitelisted. To whitelist the directory add the following lines to the appropriate Unreal config file from the table below e.g. Platforms\WinGDK\Config\WinGDKGame.ini
, replacing MyGame
with your project's name:
Unreal version | -FMOD Studio bank folder | -Unreal platform | -Unreal config file | -
---|---|---|---|
4.25 | -Desktop | -WinAnvil | -Platforms\WinAnvil\Config\WinAnvilGame.ini | -
4.25+ onwards | -Desktop | -WinGDK | -Platforms\WinGDK\Config\WinGDKGame.ini | -
[Staging]
-+WhitelistDirectories=MyGame/Content/FMOD/Desktop
-
[Staging]
-+AllowedDirectories=MyGame/Content/FMOD/Desktop
-
Banks for iOS are expected to be located in the Mobile
sub-directory of the Studio built banks output directory. This sub-directory name is hardcoded in the integration so if you want to use a different location you would need to modify the integration source code.
To package the iOS banks from the Mobile
sub-directory, add these lines to Platforms\IOS\Config\IOSGame.ini
:
[/Script/UnrealEd.ProjectPackagingSettings]
--DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Desktop")
-+DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Mobile")
-
If you do insist on modifying the integration source code and using the Desktop
sub-directory instead of the Mobile
sub-directory, add these lines to Platforms\IOS\Config\IOSGame.ini
instead, replacing mygame
with your project's name:
[Staging]
-+WhitelistDirectories=cookeddata/mygame/content/fmod/desktop
-
[Staging]
-+AllowedDirectories=cookeddata/mygame/content/fmod/desktop
-
FMOD will not work with inbuilt Unreal audio on iOS. You will need to disable the Unreal Audio Device by creating a new file Config\IOS\IOSEngine.ini
with this section:
[Audio]
-AudioDeviceModuleName=
-AudioMixerModuleName=
-
4.24
-The location of IOSGame.ini
is Config\IOS\IOSGame.ini
Using remote build to build for iOS on Windows using the FMOD Studio plugin requires some additional files to be copied to the remote Mac. To tell Unreal to copy the additional files add a file named RsyncProject.txt
to the directory <ue_project_root>/Build/Rsync
(you may need to create this directory). The RsyncProject.txt
file needs to contain this line:
+ /Plugins/FMODStudio/Binaries/IOS/**
-
To build for tvOS, make sure FMODStudio is in your game's directory and not in the Engine plugins directory.
-Banks for tvOS are expected to be located in the Mobile
sub-directory of the Studio built banks output directory. This sub-directory name is hardcoded in the integration so if you want to use a different location you would need to modify the integration source code.
To package the correct banks add these lines to Platforms\TVOS\Config\TVOSGame.ini
:
[/Script/UnrealEd.ProjectPackagingSettings]
--DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Desktop")
-+DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Mobile")
-
4.24
-The location of TVOSGame.ini
is Config\TVOS\TVOSGame.ini
FMOD will not work with inbuilt Unreal audio on tvOS. You will need to disable the Unreal Audio Device by creating a new file Config\TVOS\TVOSEngine.ini
with this section:
[Audio]
-AudioDeviceModuleName=
-AudioMixerModuleName=
-
To deploy on linux, you will need to rebuild the engine from source via github. For compiling linux from windows, see this page for instructions how to get up and running with Unreal. Then, add in both the fmodstudio linux .zip and windows .zip on top of each other into the engine plugins directory.
-The last thing you will need to do is to get the FMOD .so libraries into a directory that the executable can read them. The easiest way is to copy them from
-<DeployedDir>\Engine\Plugins\FMODStudio\Binaries\Linux\x86_64
-
to
-<DeployedDir>\<GameName>\Binaries\Linux
-
To see what directories the .so files can be located, look at LinuxToolChain.cs. Currently there are only a set of hard coded directories that are supported.
-To make a packaged build runnable on your local machine, execute the following command from the command shell :
-install_name_tool -add_rpath @executable_path/../Unreal/YourGame/Plugins/FMODStudio/Libs/Mac /Path/To/YourGame.app/Contents/MacOS/YourGame
-
Banks for the PS4 are expected to be located in the PS4
sub-directory of the Studio built banks output directory. This sub-directory name is hardcoded in the integration so if you want to use a different location you would need to modify the integration source code.
To package the PS4 specific banks add these lines to Platforms\PS4\Config\PS4Game.ini
:
[/Script/UnrealEd.ProjectPackagingSettings]
--DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Desktop")
-+DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/PS4")
-
Banks for the PS5 are expected to be located in the PS5
sub-directory of the Studio built banks output directory. This sub-directory name is hardcoded in the integration so if you want to use a different location you would need to modify the integration source code.
To package the PS5 specific banks add these lines to Platforms\PS5\Config\PS5Game.ini
:
[/Script/UnrealEd.ProjectPackagingSettings]
--DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Desktop")
-+DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/PS5")
-
To enable vibration for the PS5 controller add these lines to Config\PS5\PS5Engine.ini
:
[/Script/Engine.InputSettings]
-AdvancedVibrationMode=true
-
[SonyController]
-bAdvancedVibrationMode=true
-
FMOD will not work with built-in Unreal audio on PS5 without some engine modification. In most cases you should disable the Unreal Audio Device by adding/editing Config\PS5\PS5Engine.ini
with the following section:
[Audio]
-AudioDeviceModuleName=
-AudioMixerModuleName=
-
See this forum post for details.
-Banks for the Switch are expected to be located in the Switch
sub-directory of the Studio built banks output directory. This sub-directory name is hardcoded in the integration so if you want to use a different location you would need to modify the integration source code.
To package the Switch specific banks add these lines to Platforms\Switch\Config\SwitchGame.ini
:
[/Script/UnrealEd.ProjectPackagingSettings]
--DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Desktop")
-+DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Switch")
-
To enable FMOD Studio the use of any microphone input, including Kinect, on the Xbox One. The Engine ini file specific for the platform, located in /Config/XboxOne/XboxOneEngine.ini
, needs to have the following lines added:
[AppxManifest]
-Package.Capabilities.mx:Capability[0].Name=kinectAudio
-Package.Capabilities.mx:Capability[1].Name=kinectGamechat
-
To enable Live Update the Unreal Xbox One project settings must be modified to allow FMOD to open the Live Update port from the running game. Access the settings by opening the Project Settings editor from the Edit menu, then navigate to Xbox One platform settings. Under the Network category, add the following entries to the Secure Socket Descriptions and Secure Socket Associations settings:
-
Banks for the Xbox One are expected to be located in the XboxOne
sub-directory of the Studio built banks output directory. This sub-directory name is hardcoded in the integration so if you want to use a different location you would need to modify the integration source code.
To package the Xbox One specific banks add these lines to Platforms\XboxOne\Config\XboxOneGame.ini
:
[/Script/UnrealEd.ProjectPackagingSettings]
--DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Desktop")
-+DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/XboxOne")
-
FMOD will not work with inbuilt Unreal audio on Xbox One. You will need to disable the Unreal Audio Device by creating a new file Config\XboxOne\XboxOneEngine.ini
with this section:
[Audio]
-AudioDeviceModuleName=
-AudioMixerModuleName=
-
This has been solved in 2.01.07, you only need to follow these steps if you are using an older version.
-Add the following to GetFilesToDeployOrStage in XboxOnePlatform.Automation.cs, before the end of the function:
-// FMOD code start
-DirectoryReference FMODDLLPath = null;
-if (Directory.Exists(Path.Combine(SC.ProjectRoot.ToString(), "Plugins/FMODStudio")))
-{
- FMODDLLPath = DirectoryReference.Combine(SC.ProjectRoot, "Plugins/FMODStudio/Binaries/XBoxOne/");
-}
-else if (Directory.Exists(Path.Combine(SC.LocalRoot.ToString(), "Engine/Plugins/FMODStudio")))
-{
- FMODDLLPath = DirectoryReference.Combine(SC.LocalRoot, "Engine/Plugins/FMODStudio/Binaries/XBoxOne/");
-}
-else
-{
- LogError("Failed to find FMODStudio plugin in game or engine directory");
-}
-if (FMODDLLPath != null)
-{
- Log.TraceInformation("Copying FMOD dlls to loose directory: " + RelativeBinPath);
- StagedDirectoryReference RelativeBinPathRef = new StagedDirectoryReference(RelativeBinPath);
- StageFileIfExists(StagedFileType.NonUFS, FileReference.Combine(FMODDLLPath, "fmod.dll"), RelativeBinPathRef, SC);
- StageFileIfExists(StagedFileType.NonUFS, FileReference.Combine(FMODDLLPath, "fmodL.dll"), RelativeBinPathRef, SC);
- StageFileIfExists(StagedFileType.NonUFS, FileReference.Combine(FMODDLLPath, "fmodstudio.dll"), RelativeBinPathRef, SC);
- StageFileIfExists(StagedFileType.NonUFS, FileReference.Combine(FMODDLLPath, "fmodstudioL.dll"), RelativeBinPathRef, SC);
-}
-// FMOD code end
-
Add the following to PrepTargetForDeployment in XboxOneDeploy.cs, in the same scope as 'DestDir':
-// FMOD code start
-string FMODDLLPath = null;
-if (Directory.Exists(Path.Combine(ProjectDirectory.FullName, "Plugins/FMODStudio")))
-{
- FMODDLLPath = Path.Combine(ProjectDirectory.FullName, "Plugins/FMODStudio/Binaries/XBoxOne/");
-}
-else if (Directory.Exists(Path.Combine(RelativeEnginePath, "Plugins/FMODStudio")))
-{
- FMODDLLPath = Path.Combine(RelativeEnginePath, "Plugins/FMODStudio/Binaries/XBoxOne/");
-}
-else
-{
- Log.TraceWarning("Failed to find FMODStudio plugin in game or engine directory");
-}
-if (FMODDLLPath != null)
-{
- Log.TraceInformation("...copying the FMOD dlls...");
- string FMODDLLName = "fmod.dll";
- Log.TraceInformation("\tcopying " + FMODDLLPath + FMODDLLName + " to " + DestDir + "/" + FMODDLLName);
- CopyFile(FMODDLLPath + FMODDLLName, DestDir + "/" + FMODDLLName, true);
- FMODDLLName = "fmodL.dll";
- Log.TraceInformation("\tcopying " + FMODDLLPath + FMODDLLName + " to " + DestDir + "/" + FMODDLLName);
- CopyFile(FMODDLLPath + FMODDLLName, DestDir + "/" + FMODDLLName, true);
- FMODDLLName = "fmodstudio.dll";
- Log.TraceInformation("\tcopying " + FMODDLLPath + FMODDLLName + " to " + DestDir + "/" + FMODDLLName);
- CopyFile(FMODDLLPath + FMODDLLName, DestDir + "/" + FMODDLLName, true);
- FMODDLLName = "fmodstudioL.dll";
- Log.TraceInformation("\tcopying " + FMODDLLPath + FMODDLLName + " to " + DestDir + "/" + FMODDLLName);
- CopyFile(FMODDLLPath + FMODDLLName, DestDir + "/" + FMODDLLName, true);
-}
-// FMOD code end
-
The XboxOne validaition tool uses _NT_SYMBOL_PATH
environment variable to know where to look for PDBs.
-In 'XboxOnePlatform.Automation.cs' is where Unreal overrides _NT_SYMBOL_PATH:
EnvironmentVariables.Add("_NT_SYMBOL_PATH", Params.GetProjectBinariesPathForPlatform(UnrealTargetPlatform.XboxOne).ToString());
-
We want to change this to add to it:
-string SymbolPath = Params.GetProjectBinariesPathForPlatform(UnrealTargetPlatform.XboxOne).ToString() + ";" + CommandUtils.GetEnvVar("_NT_SYMBOL_PATH");
-EnvironmentVariables.Add("_NT_SYMBOL_PATH", SymbolPath);
-
Now it keeps the original value as well as adding its own path.
-Then, on your build machine you need to set the value of _NT_SYMBOL_PATH
to where the FMOD PDBs will be.
-Eg. "[MyGame]\Plugins\FMODStudio\Binaries\XBoxOne" or "[MyGame]\Platforms\XboxOne\Plugins\FMODStudio\Binaries".
Unreal Integration 2.02
- -FMOD Studio projects can be set up to use third party plugins. These can include custom DSP effects that are created in-house or commercial products that can be used with FMOD Studio.
-The plugins must be loaded at runtime so that they are there when loading the banks that need them. Plugins are set up in the project settings Advanced section.
- -Each entry should be the filename of the plugin, without any extension. Any plugin files required should be added to the FMODStudio/Binaries/Platform/ directory.
-For example, to use fmod_gain.dll on Win64 builds, you should add the file here:
-FMODStudio/Binaries/Win64/fmod_gain.dll
-
You will need to make sure the plugins are deployed as well. Unreal deployment doesn't have access to the settings information so you will need to create an extra file that lists the plugins you want to deploy.
-Create a file "plugins.txt" in the FMODStudio/Binaries/Platform/ directory. The text file should contain the plugin names (just the name without file extension).
-For example, to deploy fmod_gain.dll on Win64 builds, create a file FMODStudio/Binaries/Win64/plugins.txt with the following contents:
-fmod_gain
-
Check the Platform Specifics for information relating to plugins on specific platforms.
Unreal Integration 2.02
-FMOD For Unreal adds a number of configuration options to the Project Settings editor.
-Access the settings by opening the Project Settings editor from the Edit menu, then navigate to the FMOD Studio plugin settings:
-
All of the settings are stored in the default engine configuration file and can be manually edited there if desired.
-When enabled the metadata from all FMOD bank files is loaded at startup.
-Default: Enabled
-
-When enabled the sample data from all FMOD bank files is loaded at startup. Only effective when Load All Banks is also enabled.
-Default: Disabled
-
-When enabled FMOD Studio Live Update can connect to non-final builds of the game while running.
-Default: Enabled
-
-When enabled FMOD Studio Live Update can connect to the editor.
-Default: Disabled
-
-Path to the FMOD Studio built banks output directory, relative to the project's Content directory. See Studio Bank Output Directory in the user guide for more information.
-Default: FMOD
-
-Project output format, this should match the FMOD Studio project Surround Speaker Mode.
-Default: Surround_5_1
-
-Built-in output types that can be used to run the mixer.
-Default: TYPE_AUTODETECT
-
-List of project locales. This should match the locales configured for the FMOD Studio project. See Localization in the user guide for more information.
-Each entry in the list has three members:
-When loading banks, banks which correspond to the active locale are loaded while banks which correspond to any other recognized locale are skipped.
-Sets the signal level at which Channels are virtualized. This corresponds directly to the vol0virtual
member of FMOD_ADVANCED_SETTINGS
in the Core API.
Default: 0.0001
-
-The sample rate for the FMOD mixer. This corresponds to the samplerate
parameter of FMOD::System::setSoftwareFormat
in the Core API.
Default: 0 (uses the default sample rate for the platform)
-
-When enabled attempt to match the sample rate for the FMOD mixer with the output driver's sample rate.
-Default: Enabled
-
-The maximum number of active Channels. This corresponds to the numsoftwarechannels
parameter of FMOD::System::setSoftwareChannels
in the Core API.
Default: 64
-
-The maximum number of Channels to be used in FMOD. This corresponds to the maxchannels
parameter of FMOD::Studio::System::initialize
in the Studio API.
Default: 512
-
-The mixer block length for the FMOD mixer. This corresponds to the bufferlength
parameter of FMOD::System::setDSPBufferSize
in the Core API.
Units: samples
-Default: 0 (uses the default DSP buffer length for the platform)
-
-The number of mixer blocks for the FMOD mixer to use. This corresponds to the numbuffers
parameter of FMOD::System::setDSPBufferSize
in the Core API.
Default: 0 (uses the default DSP buffer count for the platform)
-
-File buffering chunk size. This corresponds to the blockalign
parameter of FMOD::System::setFileSystem
in the Core API.
Units: bytes
-Default: 2048
-
-Update period of FMOD Studio. This corresponds to the studioupdateperiod
member of FMOD_STUDIO_ADVANCEDSETTINGS
in the Studio API.
Units: milliseconds
-Default: 0 (uses the default update period for FMOD Studio)
-
-Name of output driver to choose at start up. If this is not empty the available output drivers are enumerated at start up and if a driver with a matching name is found then that driver is selected for output.
-Default: Empty (uses the default output driver)
-
-When enabled all buses in the global mixer are locked when the master bank is loaded. This ensures that all buses in the global mixer are created.
-Default: Disabled
-
-Size of memory pool to use on each platform. When this is set to a value other than zero a memory pool of the requested size is allocated using the Unreal memory system and all FMOD memory allocations are made from the pool. Otherwise FMOD memory allocations directly use the Unreal memory system.
-Units: bytes
-Default: 0
-
-TCP port to listen on for FMOD Studio Live Update connections when running non-final builds of the game.
-Default: 9264
-
-TCP port to listen on for FMOD Studio Live Update connections when running the editor.
-Default: 9265
-
-Delay before automatically reloading modified banks from disk. This can be extended if building banks takes a long time and Unreal tries to reload banks before building is completed. Set to 0 to disable automatic bank reloading.
-Units: seconds
-Default: 5
-
-Will log internal API errors when enabled.
-Default: Disabled
-
-Enables FMOD's detailed memory tracking for non-final builds. This corresponds to setting the FMOD_STUDIO_INIT_MEMORY_TRACKING
flag into the studioflags
when initializing the Studio API.
Default: Disabled
-
-List of FMOD Studio plugins to be loaded when the system starts up. See Plugins for more information.
-Root directory for FMOD assets.
-Default: /Game/FMOD
-
-Override platform name for loading banks at runtime.
-Default: Empty (use default platform name)
-
-Name of master bank (without extension). Must match the FMOD Studio project.
-Default: Master
-
-String to filter banks loaded when Load All Banks is enabled. If Skip Load Bank Name is not empty then any bank with a name containing the specified string will be skipped by automatic bank loading.
-Default: Empty
-
-Key for loading encrypted banks. This corresponds to the encryptionkey
member of FMOD_STUDIO_ADVANCEDSETTINGS
in the Studio API.
File name that the wav writer will output to. If this is not empty then the runtime FMOD Studio system will use FMOD_OUTPUTTYPE_WAVWRITER
and the mixed audio produced by FMOD will be sent to the specified file. There will be no audible output when using this setting.
Default: Empty
-
-Logging level for non-final builds. The logging levels correspond to the similarly named FMOD_DEBUG_LEVEL_XXX
flags used by the FMOD::Debug_Initialize
function in the Core API.
Default: LEVEL NONE
-
-Name of event parameter to automate using Unreal occlusion ray casts. See Occlusion Settings for more information.
-Default: Empty
-
-Name of event parameter to automate using Unreal ambient zone volume settings. See Ambient Zone Settings for more information.
-Default: Empty
-
-Name of event parameter to automate using Unreal ambient zone LPF settings. See Ambient Zone Settings for more information.
-Default: Empty
-
-Used to specify individual settings for different platforms.
-Name of the platform.
-The maximum number of active channels. This corresponds to the numsoftwarechannels
parameter of FMOD::System::setSoftwareChannels
in the Core API.
Default: 64
-
-The sample rate for the FMOD mixer. This corresponds to the samplerate
parameter of FMOD::System::setSoftwareFormat
in the Core API.
Default: 0 (uses the default sample rate for the platform)
-
-Project output format, this should match the FMOD Studio project Surround Speaker Mode.
-Default: Surround_5_1
-
-Built-in output types that can be used to run the mixer.
-Default: TYPE_AUTODETECT
-
-Size of memory pool to use. When this is set to a value other than zero a memory pool of the requested size is allocated using the Unreal memory system and all FMOD memory allocations are made from the pool. Otherwise FMOD memory allocations directly use the Unreal memory system.
-Units: bytes
-Default: 0
-
-Specifying one or more of the codec maximums will help determine the maximum CPU usage of playing FMOD_CREATECOMPRESSEDSAMPLE Sounds of that type as well as the memory requirements.
-As well as settings exposed by FMOD For Unreal you will need to add the directory containing the FMOD bank files to the Additional Non-asset Directory To Copy setting in Unreal's Project - Packaging settings. The FMOD Studio settings UI will prompt you to update this setting if it is not correctly configured. See Packaging banks in the user guide for more information.
Unreal Integration 2.02
- -If you are experiencing an issue with the integration and none of the topics below help, visit to our Q&A Forum.
-You should see a shortcut to the manual is available under the help menu, that means the plugin is in the right place and has been enabled.
- -If you see the FMOD Help in the manual, then the plugin installed correctly. If you don't see FMOD help, it isn't installed.
-If you have modified the project output format in your FMOD Studio project, you will need to update your Unreal project settings to match.
-This can be found under "Edit > Project Settings > FMOD Studio > Output Format". Keep in mind that this must match the Studio project settings in order for the mix to behave correctly.
The editor does not mark FMOD assets as read-only, so there is nothing stopping the user from trying to rearrange the folder structure.
-However any such changes aren't going to change the underlying Studio project, so the changes will be lost next time Unreal is restarted.
The inbuilt Unreal asset serialization stores asset by full path, not by GUID. This means that if you rename events or folders in the Studio Tool, then any references in Unreal levels will be lost. For now the only workaround is to avoid renaming events or folders once you have started using them in levels.
-See the Deployment page for information about issues with deployment.
-If you Launch your game and there is no sound playing or there is error loading the FMODStudio module, it an issue with Deployment.
-If Live Update is enabled and the FMOD Studio will error when it fails to open the required network port. If this is a problem, then Live Update can be disabled in the Project Settings window.
-To help track down problems, verbose logging can be turned on for FMOD For Unreal. Add the following command line to the Unreal editor:
--LogCmds="LogFMOD verbose"
-
Packaging a blueprint only project containing FMOD for Unreal will result in an error:
-"Plugin 'FMODStudio' failed to load because module 'FMODStudio' could not be found.
-
The only way to work around this is to add a blank code class to the project and build the resulting solution before packaging again.
-This is mentioned by Epic on their forum: Unable to run plugins when packaged.
FMOD will not automatically mute its audio output when your game loses focus due to the user hitting alt-tab or switching to a different app. If you would like to mute FMOD audio when your game loses focus, make an OnApplicationActivationStateChanged callback and write code to mute the FMOD master bus. Here is an example :
-void AExampleGameMode::InitFMODFocusChangeCallback()
-{
- FSlateApplication::Get().OnApplicationActivationStateChanged()
- .AddUObject(this, &AExampleGameMode::OnWindowFocusChanged);
-}
-
-void AExampleGameMode::OnWindowFocusChanged(bool bIsFocused)
-{
-#if !WITH_EDITOR
- if (IFMODStudioModule::IsAvailable())
- {
- FMOD::Studio::System* StudioSystem = IFMODStudioModule::Get().GetStudioSystem(EFMODSystemContext::Runtime);
- FMOD::Studio::Bus* masterBus;
- StudioSystem->getBus("bus:/", &masterBus);
- masterBus->setMute(!bIsFocused);
- }
-#endif
-}
-
Unreal Integration 2.02
-FMOD For Unreal is a plugin that allows you to use the FMOD APIs and projects from the FMOD Studio authoring tool in your Unreal game.
-Normally you will just need one copy of the integration. If you develop for multiple platforms at once, you can copy multiple integrations over the top of each other.
-The FMOD for Unreal integration is delivered as a set of plugins. You must install the integration plugin for the host platform which you are developing on, and may need to install additional integration plugins for other platforms which you are targeting.
-FMOD for Unreal can be installed in either the project or engine directory.
-The supported host platforms are Windows, Mac and Linux.
-The integration packages for these platforms should be extracted to MyGame\Plugins\
(replace MyGame
with the root directory of your Unreal project or Unreal Engine and create the Plugins
folder if it does not already exist). After extracting the base package into MyGame\Plugins
you should have this structure:
After installing the integration plugin for your host platform you may need to install additional plugins for other platforms which you are targeting.
-Install the Windows plugin following the instructions for Host Platform Integration. Files which are duplicated between the plugins can be overwritten safely.
-UWP support is included in the Windows plugin package. Install the plugin following the instructions for Host Platform Integration. Files which are duplicated between the plugins can be overwritten safely.
-Install the Linux plugin following the instructions for Host Platform Integration. Files which are duplicated between the plugins can be overwritten safely. Additional setup is required for this platform, please see the Platform Specifics | Linux section for more information.
-Install the Mac plugin following the instructions for Host Platform Integration. Files which are duplicated between the plugins can be overwritten safely. Additional setup is required for this platform, please see the Platform Specifics | macOS section for more information.
-iOS support is included in the Mac plugin package. Install the plugin following the instructions for Host Platform Integration. Files which are duplicated between the plugins can be overwritten safely. Additional setup is required for this platform, please see the Platform Specifics | iOS section for more information.
-tvOS support is included in the Mac plugin package. Install the plugin following the instructions for Host Platform Integration. Files which are duplicated between the plugins can be overwritten safely. Additional setup is required for this platform, please see the Platform Specifics | tvOS section for more information.
-Android support is included in the Windows plugin package. Install the plugin following the instructions for Host Platform Integration. Files which are duplicated between the plugins can be overwritten safely. Additional setup is required for this platform, please see the Platform Specifics | Android section for more information.
-Install the PS4 plugin following the instructions for Platform Specific Integrations. Additional setup is required for this platform, please see the Platform Specifics | PS4 section for more information.
-Install the PS5 plugin following the instructions for Platform Specific Integrations. Additional setup is required for this platform, please see the Platform Specifics | PS5 section for more information.
-Install the Xbox One plugin following the instructions for Platform Specific Integrations. Additional setup is required for this platform, please see the Platform Specifics | Xbox One section for more information.
-Install the XBox Series X|S plugin following the instructions for Platform Specific Integrations. Additional setup is required for this platform, please see the Platform Specifics | Xbos Series X|S section for more information.
-Install the Switch plugin following the instructions for Platform Specific Integrations. Additional setup is required for this platform, please see the Platform Specifics | Switch section for more information.
-When adding additional platform specific integration packages you should extract them directly into the project root directory. After extracting them you should have this kind of structure:
- -Additional platform specific installation instructions may be included in the Platform Specifics section. Most platforms will require additional config files. Refer to the Platform Specifics section for more information. Otherwise see the TroubleShooting section.
-After adding The FMOD UE4 integration to your project or engine, you will need to restart the Unreal Editor before you can access it.
-There are settings in both Unreal and FMOD Studio that need to be configured to link the two together.
In order to access your FMOD Studio content, the plugin will need to locate the .bank files that FMOD Studio produces.
-By default the plugin looks in the '{MyProject}/Content/FMOD' directory for the platform folders containing banks.
-You can either manually copy them or use the 'Validate FMOD' option from the plugin in Unreal to connect to FMODStudio and build the banks directly into the project.
From your FMOD Studio Project, select "Edit > Preferences..." ("FMOD Studio > Preferences..." on Mac) and select the build tab. Set your built banks output directory to a directory called "FMOD" under your game's content path.
- -Now select "File > Build". This will build bank files for events that have been assigned to banks. You should do this whenever project data has been modified.
-You can run the "Help > Validate FMOD" option in the Unreal Help menu at any time, this can help with making sure the plugin settings are up to date and prepared for deployment.
- -If an issue is detected in the settings then you will also see this popup that can be used to start the 'Validate' process.
- -If you have the FMOD Studio Project open 'Validate' will allow the plugin to connect to it and gather more information to add the the plugin settings. It finds and fixes common issues, and can automatically link your FMOD Studio project for you!
-Running validate will do the following:
-Now, open Unreal and look at the content browser. The plug-in defaults to looking in '{MyProject}/Content/FMOD' directory for banks, so if you have exported banks there, assets should appear in the content window automatically. These represent items in your Studio project which update automatically when banks are built.
- -For more information about banks, see the Banks page.
-FMOD For Unreal will create Unreal assets to represent the objects in your FMOD Studio project. These are the assets you see in the content browser. The names of the assets are based on the names you use in FMOD Studio, but there are some limitations imposed by Unreal which may not apply in FMOD Studio:
-"',/.:|&!~@#(){}[]=;^%$`
"',\\|/&!~@#(){}[]=;^%$`
If you use any of these illegal characters in your FMOD Studio folder names or object names then the integration will generate a name for you by replacing the illegal characters. The generated names are not guaranteed to be unique and if a generated name duplicates another asset's name then one of the assets will be hidden by the other and the hidden asset will be inaccessible.
-To avoid any unexpected behavior or confusion we recommend that FMOD Studio folder names and object names are named in line with the limitations imposed by Unreal.
-Refer to Platform Specifics for details of additional platform dependent setup.
-FMOD For Unreal provides multiple ways in which Studio events can be played.
-The simplest way to play a looping ambience, is to drag and drop an event from the content browser into a scene viewport.
- -For example, try dragging the Game/FMOD/Events/Ambience/Forest
event into a level. This will create an FMODAmbientSound. Hit Play to begin playing in editor, and you should immediately hear the Forest ambience.
Make sure you drag an event into the main viewport. Dragging a bank into main viewport won't do anything.
-Another easy way to trigger a sound is via blueprint. You can use the play event at location function to quickly trigger any given event.
- -In the example shown below, the Single_Explosion event is triggered at the location of the camera, every time the spacebar is pressed.
- -Keep in mind that more advanced control is also available from blueprints. There are graph functions for playing and stopping events, setting parameters, and loading or unloading banks. You can also add FMODAudioComponents to blueprints, allowing you attach audio directly to an object.
-FMOD can support up to 8 listeners in game. The listeners will follow the Unreal listeners which by default is attached to the camera, but we can move them by moving the Unreal listeners.
-This is particularly useful for Third-Person and Top-Down style games.
-Using SetAudioListenerOverride allows you either attach the listener to a component or set the transform and rotation manually.
- -Content created in FMOD Studio is exported into bank files. These bank files can then be loaded within Unreal using FMOD For Unreal. Banks can contain multiple events, which will implicitly pull in any audio assets they depend on.
- -Loading a bank will load all metadata, which contains information about all the events, parameters, and other data needed for all events assigned to that bank.
-It is highly recommended that banks are exported to the Content directory of your project (see Deployment for more information). This can set via the built banks output directory setting in the FMOD Studio, which can be found in "Edit > Preferences..." on Windows (or "FMOD Studio > Preferences..." on Mac), under the Build tab.
- -When using the Unreal editor, as long as you match the FMOD Studio built banks output directory to the bank output directory specified in the Unreal project settings ("Edit > Project Settings > FMOD Studio"), the integration will find and load all bank content automatically.
- -Before a new FMOD Studio event can be used in Unreal, it must first be assigned and built to a bank which can be loaded by Unreal. This can be done within FMOD Studio via the context menu of an event, or by dragging and dropping an event onto a bank.
- -Events are typically assigned to the same bank when they should be loaded and unloaded at the same time. For example, you might put all the events for the Goblin enemy within the Goblin bank.
-Once you have assigned your events to a bank, you should rebuild your banks. This is done via the "File > Build..." menu item.
- -The banks built in FMOD Studio are loaded in editor by the plugin, so that you can browse Events, Buses, Snapshots, etc. from the Studio Project. You are able to customize the way the banks are loaded in game, to suit your requirement, otherwise by default all the banks will be loaded at initialization.
-Within the Unreal editor, banks are loaded automatically as soon they are built. When correctly configured, any data within banks (e.g. events, mixer strips) should appear within the content browser under Game/FMOD
by default.
FMOD For Unreal will load all banks by default. If you would like to manually control bank loading, this behavior can be disabled via the load all banks checkbox within the FMOD Studio settings dialog ("Edit > Project Settings > FMOD Studio").
-If using split banks, make sure to load the assets bank first and using load sample data on the metadata bank.
-Banks can then manually be loaded and unloaded using the Load Bank
and Unload Bank
blueprint functions.
The Master Bank does not need to be loaded manually. It is automatically loaded at startup.
-FMOD is integrated into Unreal Engine 4's Sequencer.
-Events can be added in one of two ways:
-Ambient sounds already placed in the level may be possessed by the level sequence. Add ambient sound actors to the sequence by clicking the button in the Sequencer editor and choosing the ambient sound actor to add. Alternatively the actor can be dragged from the World Outliner into the Sequencer editor.
-
-Possessed events will retain any state set by the level sequence when playback is complete. The level sequence's Restore State setting can be enabled to restore the state of possessed events (and any other actors possessed by the level sequence).
New events may be spawned from Sequencer. Sequencer can spawn FMOD events during playback. To create a spawned event drag an FMOD event from the Content Browser into the Sequencer editor.
-
-Spawned events will not automatically play when spawned.
Once added to a sequence additional sub-tracks are required to do anything interesting. Sub-tracks can be added by clicking the button in the object's track. FMOD adds two new sub-track types for events in addition to the standard Sequencer sub-tracks.
-Keyframes on the event control sub-track can be used to Play or Stop the event.
- -An FMOD Event Parameter Track allows additional sub-tracks to be added for each parameter in the targeted FMOD event. Additional sub-tracks can be added by clicking the button in the FMOD Event Parameter Track.
- -Keyframes may be added to the parameter sub-tracks to control the value of the event parameter during playback of the level sequence. The Unreal Engine 4 curve editor may be used to create rich curves for FMOD event parameters.
- -FMOD For Unreal is unable to validate the range of parameter values set by Sequencer. The FMOD Engine will clamp any parameter value outside the range specified in FMOD Studio.
-FMOD For Unreal supports the use of ray casts, to drive a specified parameter, for per instance occlusion of sounds.
-To enable occlusion ray casts for FMOD in your Unreal project, set the name of the parameter that will be used for occlusion in Studio.
- -If an Event contains this parameter, the integration will set the parameter value any time the occlusion value changes.
-You can disable occlusion, per instance, and adjust the Trace Channel in the Component Details window.
FMOD For Unreal supports the use of the standard Unreal audio volumes to trigger Studio's advanced snapshot system.
-The workflow to use reverb zones is to set up snapshots in FMOD Studio. Snapshots can modify global reverb effects, change any bus volume, and modify any DSP value. To help trigger snapshots for reverb effects, the integration exports all snapshots as reverb effects in the FMOD/Reverbs
folder.
These reverb effects can be dragged into audio volume Reverb Settings panel to be triggered when the audio listener enters the audio volume. It uses the same logic as the inbuilt Unreal audio system to determine which audio volume should be enabled, based on the priority of all the audio volumes the audio listener is within. The Snapshot priority, which is used to resolve conflicting property values when mutliple snapshots are active, is unrelated to audio volume priority and not a factor in determining which audio volume will be enabled. In the case of nested audio volumes you must set distinct priorities because audio volumes with the same priority may not become enabled.
- -By default, snapshots apply instantly. To have a snapshot fade in, one of two things can be done. The first is by adding an AHDSR modulation to the intensity dial. The second way is to expose the intensity as a parameter, which allows it to be driven from the integration.
- -If the snapshot has its intensity exposed as a parameter, then the integration will ramp in the intensity over time based on the audio volume's Volume and Fade Time settings. If the snapshot does not expose its intensity as a parameter, then these values will not do anything.
-Another feature of the Unreal audio system is the ability to have an ambient effect applied to selected instances, based on both the listener position and the emitter position. Unlike the global reverb effects, this is something which is applied per instance.
- -Only some sounds should be affected by the ambient settings. To enable the ambient effect your Events will need two parameters, one for volume and one for LPF.
-You will need to add these parameter names to the integration settings.
If an Event contains these parameters, the integration will set the parameter value any time the ambient values change.
-Only FMOD audio components are affected by ambient zones. The simpler PlayEventAtLocation
blueprint function to spawn one-shots does not apply ambient effects.
You can hook up event callbacks using blueprints. FMOD Audio component callbacks are only triggered if the enable callback option is ticked. This is because each component that triggers callbacks can incur a small CPU overhead, so it has to be turned on explicitly for the components you want to use.
- -Once enabled, then tempo beat callbacks and timeline callbacks can be added in blueprints. One way is via the Assign On Timeline Beat
and Assign On Timeline Marker
blueprint actions. For FMOD audio components used in blueprint actors, you can add events from the details window instead.
You can trigger various actions to occur on the beat or when a timeline hits a named marker. The event contains the same fields as FMOD_STUDIO_TIMELINE_BEAT_PROPERTIES
and FMOD_STUDIO_TIMELINE_MARKER_PROPERTIES
.
Localized audio tables are a special kind of audio table with features that facilitate localization. We recommend using localized audio tables if your game supports multiple spoken languages, or if you intend to add support for additional languages in a future patch.
-Audio Tables are lists of audio files stored outside your FMOD Studio project's asset folder. You can use audio tables to control localized sounds. See the Dialogue and Localization section of the FMOD Studio Docs on how to set up an audio table in your project.
- -Audio tables are assigned to an associated bank, this means that in order to change the currently loaded audio table you will need to change the bank. Only one localized bank should be loaded at a time, otherwise just the first one to be loaded will be used.
-You will need to define the different locale names and codes in the Localization Settings.
- -Only the locale that is selected as default will have it's bank loaded at startup, if Load All Banks has been enabled in the settings.
-To change the locale, you will need to:
-Start by replacing the old FMODStudio folder with the new version:
-If you are updating to a newer minor version of FMOD no additional steps are required unless specified in the revision history.
-Upgrading to a newer major version of FMOD is usually only recommend for projects at or near the beginning of development, because new major versions may introduce behavioral and breaking changes. If you are upgrading to a new major version, you will need to read over:
- -These will describe specific changes that might need to be made to your project.
-When upgrading a project with FMOD integration to Unreal Engine 4.26 from an earlier version of UE4 you may encounter warnings in the log about FMOD assets failing to load. This happens because in 4.26 the FMOD integration switched from always dynamically generating Unreal assets to serializing the generated assets and loading them from disk. When an upgraded project is first opened the generated assets have not been serialized to disk so loading them fails. After closing and re-opening the upgraded project the warning messages should be gone.
-If you want to recompile the plugin, you can drop the plugin into a code project under your game's Plugins/FMODStudio
directory, then re-generate the project. This might be useful if you want to use the plugin with a different version of the engine, such as a new pre-release of Unreal. You can also do this if you want to get the plugin from github.
To recompile the plugin after downloading it from FMOD, do the following:
-FMODStudio/Intermediate
directory.FMODStudio/Binaries/Platform/Unreal*.*
files. Leave the fmod libraries in the binaries directory!YourGame/Plugins/FMODStudio
.To compile the plugin after downloading the source from github, do the following
-FMODStudio/Binaries/Platform/
directory. The libs can be obtained in the programmers API download or from the FMOD for Unreal download.YourGame/Plugins/FMODStudio
.When rebuilding the plugin inside a code project, make sure you haven't also left it in the engine directory as well!
-You are able to interface with FMOD For Unreal and/or the FMOD C++ APIs.
-To reference FMOD Studio, the programmer will need to add the following to their .Build.cs file:
-PrivateDependencyModuleNames
To add some FMOD Events to a class, do the following:
-UPROPERTY
macro like any other fieldTo play the event at a location, do the following:
-You can also call Play Event Attached to create a new audio component attached to an actor, which will update the location automatically as the actor moves around the world.
-Programmers can interface with FMOD Studio directly by including "fmod_studio.hpp".
-The Studio system can be obtained by GetStudioSystem. The function takes an enum because there may be a separate Studio system for auditioning in-editor and the proper system for play-in-editor. Normally, you will want to obtain the system with EFMODSystemContext.Runtime since that is the real system used in game.
-if (IFMODStudioModule::IsAvailable())
-{
- FMOD::Studio::System* StudioSystem = IFMODStudioModule::Get().GetStudioSystem(EFMODSystemContext::Runtime);
- if (StudioSystem)
- {
- // Use it here
- }
-}
-
You can use a mixture of FMOD Studio wrapper and FMOD Studio API functions. For example:
-// Call wrapper helper function to create and start an event instance
-FFMODEventInstance InstanceWrapper = UFMODBlueprintStatics::PlayEventAtLocation(ThisActor, MyEvent, FTransform(MyLocation), true);
-FMOD::Studio::EventInstance* Instance = InstanceWrapper.Instance;
-// Call into FMOD API directly
-Instance->setVolume(0.5f);
-// The instance handle will be cleaned up automatically when the sound finishes
-
For further documentation, see:
-- Integration API Reference
-- Integration Blueprint Reference
-- FMOD API Reference.
FMOD Studio events can include programmer sound modules that are controlled at runtime. There are a few different ways of hooking them up.
-With this approach, you don't need to do any programming at all!
-Create an event with a programmer sound module on it. If the module has a name, then if nothing else is assigned then that sound will be used. For example, if the sound designer sets the module name as "Welcome", then the audio table entry "Welcome" will be used by default.
- -To select at runtime what audio entry to use, set the programmer sound name field in the FMODAudioComponent.
- -Or you can assign the name via blueprint.
- -The name has to be one of the audio asset entries of a loaded audio table, or it won't find the sound to play.
-Be careful to set the name before you play the audio component. If the name is assigned after the event has started, it may not play the right sound.
-With this approach you can easily play any media file for your event, including loose files packaged with the project or found on the player's drive.
-To point a programmer sound directly to a file, set the FMOD audio component's programmer sound name to the path to the .wav or .ogg file that you want to load. If this path is relative, it will be looked up relative to the content directory.
-If you need to include these files in your packaged game, add the directory containing these media files to 'directories to package' in the packaging settings, otherwise it will work in the editor but not when packaged into the final game.
- -With this approach, you will need to create an C++ class actor that can be placed in the scene to then be added as a persistent reference in the Level Blueprint. The dialogue options will then be triggered by inputs from the keyboard.
-Creating the C++ Actor:
-
-Selector Actor:
-
-Name the Actor:
-
-Add the Actor the level:
-
The following code will need to be added to your C++ Actor
-ProgrammerExample.h
-//--------------------------------------------------------------------
-//
-// This is an Unreal actor script that demonstrates how to use
-// Programmer Sounds and an Audio Table in your game code.
-//
-// Programmer sounds allows the game code to receive a callback at a
-// sound-designer specified time and return a sound object to be
-// played within the event.
-//
-// The audio table is a group of audio files compressed in a Bank that
-// are not associated with any event and can be accessed by a string key.
-//
-// Together these two features allow for an efficient implementation of
-// dialogue systems where the sound designer can build a single template
-// event and different dialogue sounds can be played through it at runtime.
-//
-// This script will play one of three pieces of dialog through an event
-// on a key press from the player.
-//
-// This document assumes familiarity with Unreal Engine scripting. See
-// https://docs.unrealengine.com/4.26/en-US/ProgrammingAndScripting/
-// for resources on learning Unreal Engine scripting.
-//
-// For information on using FMOD example code in your own programs, visit
-// https://www.fmod.com/legal
-//
-//--------------------------------------------------------------------
-
-#pragma once
-
-#include "CoreMinimal.h"
-#include "GameFramework/Actor.h"
-#include "fmod.hpp"
-#include "FMODEvent.h"
-#include <FMODAudioComponent.h>
-#include "ProgrammerExample.generated.h"
-
-struct UserData
-{
- FMOD::System* coreSystem = nullptr;
- FMOD::Studio::System* studioSystem = nullptr;
- FString key = FString();
-};
-
-/* Don't forget to change the project name to match your own */
-UCLASS()
-class MYPROJECT_API AProgrammerExample : public AActor
-{
- GENERATED_BODY()
-
-public:
- // Sets default values for this actor's properties
- AProgrammerExample();
-
- // Path of the Programmer Instrument in the FMOD Project
- UPROPERTY(EditAnywhere)
- UFMODEvent* dialogueEvent;
- UFUNCTION(BlueprintCallable, category = "ProgrammerInstrumentFunction")
- void PlayDialogue(FString key);
-protected:
- UserData userData = UserData();
-};
-
ProgrammerExample.cpp
-// Fill out your copyright notice in the Description page of Project Settings.
-#include "ProgrammerExample.h"
-
-FMOD_RESULT F_CALLBACK StaticDialogueEventCallback(FMOD_STUDIO_EVENT_CALLBACK_TYPE type, FMOD_STUDIO_EVENTINSTANCE* event, void* parameters);
-
-AProgrammerExample::AProgrammerExample()
-{
- userData.studioSystem = IFMODStudioModule::Get().GetStudioSystem(EFMODSystemContext::Runtime);
- userData.studioSystem->getCoreSystem(&userData.coreSystem);
-}
-
-void AProgrammerExample::PlayDialogue(FString key)
-{
- FMOD::Studio::EventDescription* dialogueDescription = IFMODStudioModule::Get().GetEventDescription(dialogueEvent, EFMODSystemContext::Runtime);
- FMOD::Studio::EventInstance* dialogueInstance = nullptr;
- dialogueDescription->createInstance(&dialogueInstance);
-
- userData.key = key;
-
- dialogueInstance->setUserData(&userData);
-
- dialogueInstance->setCallback(StaticDialogueEventCallback, FMOD_STUDIO_EVENT_CALLBACK_CREATE_PROGRAMMER_SOUND | FMOD_STUDIO_EVENT_CALLBACK_DESTROY_PROGRAMMER_SOUND);
-
- dialogueInstance->start();
- dialogueInstance->release();
-}
-
-FMOD_RESULT F_CALLBACK StaticDialogueEventCallback(FMOD_STUDIO_EVENT_CALLBACK_TYPE type, FMOD_STUDIO_EVENTINSTANCE* event, void* parameters)
-{
- // Retrieving the instance
- FMOD::Studio::EventInstance* instance = (FMOD::Studio::EventInstance*)event;
-
- // Retrieve the user data from the instance
- UserData* context = nullptr;
- instance->getUserData((void**)&context);
-
- // Switch on the current type of the callback
- switch (type)
- {
- case FMOD_STUDIO_EVENT_CALLBACK_CREATE_PROGRAMMER_SOUND:
- {
- FMOD_MODE soundMode = FMOD_LOOP_NORMAL | FMOD_CREATECOMPRESSEDSAMPLE | FMOD_NONBLOCKING;
- FMOD_STUDIO_PROGRAMMER_SOUND_PROPERTIES* props = (FMOD_STUDIO_PROGRAMMER_SOUND_PROPERTIES*)parameters;
-
- // Changing key from FString to const char*
- const char* charKey = TCHAR_TO_ANSI(*context->key);
-
- FMOD_STUDIO_SOUND_INFO info;
- FMOD_RESULT result = context->studioSystem->getSoundInfo(charKey, &info);
- if (result != FMOD_OK)
- {
- break;
- }
-
- FMOD::Sound* sound = nullptr;
- result = context->coreSystem->createSound(info.name_or_data, soundMode, &info.exinfo, &sound);
- if (result == FMOD_OK)
- {
- props->sound = (FMOD_SOUND*)sound;
- props->subsoundIndex = info.subsoundindex;
- }
- break;
- }
- case FMOD_STUDIO_EVENT_CALLBACK_DESTROY_PROGRAMMER_SOUND:
- {
- FMOD_STUDIO_PROGRAMMER_SOUND_PROPERTIES* props = (FMOD_STUDIO_PROGRAMMER_SOUND_PROPERTIES*)parameters;
- FMOD::Sound* sound = (FMOD::Sound*)props->sound;
- sound->release();
- }
- }
- return FMOD_OK;
-}
-
Following that, drag and drop the Actor into the Level Blueprint so that it can be triggered:
-
Also, when setting the name to an audio table entry, you will need to make sure the audio table bank is already loaded before the event starts.
-The FMOD audio component only supports a single programmer sound per event. If you want to have an event that has multiple programmer sounds, each one playing a different sound, then you'll need to create the event directly via the FMOD API and provide your own callback. You can look at how the FMOD audio component programmer sound callback works and use that as a base for your own class.
-These steps describe how to prepare your project for deployment. This is relevant to both the Launch option as well as the "File > Package Project" menu item.
-If any platforms require specific steps, they can be found in Platform Specifics.
The directory containing the built FMOD banks should be added to the "Additional Non-Asset Directories To Copy" list, and directories containing generated assets should be added to the "Additional Non-Asset Directories To Cook" list. You will be prompted to do this in the FMOD Studio settings pane of Unreal project settings ("Edit > Project Settings > FMOD Studio"):
- -This can also be done manually by selecting the "Edit > Project Settings..." menu item and navigating to the Packaging section from the left hand pane, under the Project heading and adding the bank output directory to the "Additional Non-Asset Directories To Copy" list.
-Generated assests can be manually added to the "Additional Non-Asset Directories To Cook" list in the same way.
When the bank output directory is added to the "Additional Non-Asset Directories To Copy" list the banks will be copied as loose files when packaging your project. This is the recommended approach. It is possible to have the banks added to Unreal's .PAK file by adding the bank output directory to the "Additional Non-Asset Directories to Package" list, but we no longer recommend this approach because adding the banks to the .PAK file can lead to the packaged project deadlocking in the filesystem.
-When directories are included in the "Additional Non-Asset Directories To Cook" list Unreal's default cooking behaviour, cooking all maps during packaging, will no longer occur. If you want to re-enable this behaviour you can tick "Cook everything in the project content directory (ignore list of maps below)".
-By default the directory containing banks for the "Desktop" platform is added to the "Additional Non-Asset Directories To Copy" list and the banks for the Desktop platform are the ones which will be available at runtime. This is usually correct for the Windows, Mac and Linux platforms.
-For other platforms the relevant PlatformGame.ini
file can be edited so the correct platform-specific banks are copied instead. See Platform Specifics for details.
If you only have the Desktop banks and want to run on another platform, you can set Force Platform Name in the FMOD advanced settings to Desktop
.
The above directory name is relative to your Content directory. It is highly recommended that banks be placed within the content directory, as paths outside this directory will not deploy correctly to all platforms. For example:
-This doesn't mean you need to put your whole Studio project inside the content directory. You can customize Studio by editing the Preferences and choosing a directory to export banks to, as described in the Working with Banks page.
-The integration will load the platform bank files automatically. On PC it will load from FMOD/Desktop
but on Android and IOS it will look for banks under FMOD/Mobile
.
If you use FMOD as the directory to deploy and have multiple platform banks exported, then they will all be packaged up. To slim down your final package size, you may need to tweak the additional directories setting on a per platform basis. That way you only package FMOD/Mobile
for Android, FMOD/Desktop
for PC, FMOD/PS4
for PS4, etc.
You will need to make sure the plugins are deployed as well. Unreal deployment doesn't have access to the settings information so you will need to create an extra file that lists the plugins you want to deploy.
-Create a file "plugins.txt" in the FMODStudio/Binaries/Platform/
directory. The text file should contain the plugin names (just the name without file extension).
For example, to deploy fmod_gain.dll on Win64 builds, create a file FMODStudio/Binaries/Win64/plugins.txt
with the following contents:
fmod_gain
-
One issue to be aware of is where blueprints are serialized from disk too early, before any plugins are loaded. This can occur from the following code, which is included by default in example C++ projects constructor:
-static ConstructorHelpers::FClassFinder<APawn> PlayerPawnClassFinder(TEXT("/Game/FirstPersonCPP/Blueprints/FirstPersonCharacter"));
-
The finder will serialize the first person character blueprint, but any FMOD references will fail to load since the FMOD plugin has not been created yet. To make sure that the FMOD plugin is loaded first, add the line of code above the class finder.
-IFMODStudioModule::Get();
-
By default FMOD Studio works side-by-side with the inbuilt Unreal audio device on the following platforms:
-Any of the platforms listed below will not work with the inbuilt Unreal audio:
-To disable the Unreal audio while leaving the FMOD Studio audio, the standard Unreal ini file setting can be used.
-For each required platform, add a new file /Config/{Platform}/{Platform}Engine.ini
with this section:
[Audio]
-AudioDeviceModuleName=
-AudioMixerModuleName=
-
The audio device can be disabled for every platform that you want to ship with.
-Not all of the plugin files are required to be checked in to source control, below the necessary files are marked:
- -FMOD Banks cannot be added using the In-Editor source control, as the editor only interacts with UAssets, they need to be added to source control from outside of the UE Editor.
-Other files/folders are optional and will depend on your teams setup.
-From UE4.26 onwards, generated assets in the plugin will be serialized to disk. These files can be generated in two ways:
-Unreal Editor: By opening the Unreal Editor, the FMOD plugin will automatically load the FMOD Studio bank files and generate assets on disk.
-Commandlet: This can be used from commandline to generate assets on disk without opening the Unreal Editor.
-The recommended way of dealing with generated assets is to exclude all generated assets from source control. This can help prevent source control locking/conflicts as the assets are generated locally when the editor is opened.
-If you employ an automated build process that pulls directly from source control without running the Unreal Editor, the generated assets will need to be built explicitly as part of your build process. This can be done with the provided Commandlet.
-While not recommended, it is possible to add the generated assets to source control. This can simplify your automated build process (no need to run the Commandlet) at the cost of complicating your source control workflow (possible locking/conflict issues).
- -When updating the banks, make sure to update the generated assets at the same time. This is to avoid conflicting checkouts with the Unreal Editor source control plugin.
-From UE4.26 onwards, FMOD for Unreal now provides a Commandlet for generating the serialized UAssets without having to open the Editor.
-{editor-executable} {ProjectPath.uproject} -run=FMODGenerateAssets [-rebuild]
-
UE4Editor-cmd.exe
. When using Unreal Engine 5, this will be UnrealEditor-cmd.exe
.This can be especially useful for build machines that don't normally run the Editor at all, which is what normally triggers the assets to be built, and does not require the generated assets to be checked in to source control.
Unreal Integration 2.02
- -This section describes the major features introduced in the 2.00 release. See the Detailed Revision History for information regarding each patch release.
-General runtime features and improvements, including any API changes relevant to scripting are documented in the API what's new page.
-The Studio API now supports global parameters. These parameters are controlled via the System parameter API and have a single value that is shared between all instances.
-See the Global Parameters chapter of the FMOD API User Manual for more information.
-New blueprint nodes can be found for getting and setting Global Parameters:
--
Bank sample data can now be encrypted using FMOD Studio. This implementation is an extension of the Core API FSB encryption feature.
-See the Sample Data Encryption chapter of the FMOD API User Manual for more information.
-To allow bank loading when used with the Studio API, set the key via FMOD_STUDIO_ADVANCEDSETTINGS::encryptionkey
. Then if some banks are unencrypted you can use the FMOD_STUDIO_LOAD_BANK_UNENCRYPTED
load flag to ignore the given key.
The FMOD for Unreal settings now have an added field for bank loading, Bank Encryption Key, which will set the FMOD_STUDIO_ADVANCEDSETTINGS::encryptionkey
for you.
The integration uses Parameters to pass Occlusion & Ambient information to Studio. The Parameters can be specified in the FMOD for Unreal settings:
- -The default Master Bank name has changed from "Master Bank.bank" to "Master.bank". If you are upgrading from an older version or you are using a different name, this will need to be updated in the Master Bank Name field of the FMOD Unreal Settings so that the integration can find it.
-Unreal Integration 2.02
- -This section describes the major features introduced in the 2.01 release. See the Detailed Revision History for information regarding each patch release.
-General runtime features and improvements, including any API changes relevant to scripting are documented in the API what's new page.
-This release focused on improving general performance and fixing bugs with no significant changes to the FMOD for Unreal plugin.
-This section describes any major changes that occurred in 2.00.xx leading up to the release of 2.01.
-Added support for version 4.22, 4.23, 4.24, 4.25 and 4.25+.
-Added support for Stadia, tvOS and Android x86_64.
Unreal Integration 2.02
- -This section describes the major features introduced in the 2.02 release. See the Detailed Revision History for information regarding each patch release.
-General runtime features and improvements, including any API changes relevant to scripting are documented in the API what's new page.
-This release focused on improving general performance and fixing bugs with no significant changes to the FMOD for Unreal plugin.
-This section describes any major changes that occurred in 2.01.xx leading up to the release of 2.02.
-Added support for version 4.25, 4.25+ and 4.26.
-When upgrading to 4.26 refer to the user guide upgrade notes.
-Added support for PS5 and Game Core.
Unreal Integration 2.02
- -FMOD for Unreal is a plugin that allows you to use the FMOD APIs and projects from FMOD Studio in your Unreal game.
-The integration is compatible with public release versions of Unreal Engine 4.25, 4.25+, 4.26, 4.27, 5.0, 5.1, 5.2 and 5.3.
-Preview builds are not officially supported however you are able to build the plugin from source yourself.
-The integration supports:
-The integration itself is free, but you must have the appropriate FMOD License to release a title using FMOD Studio with Unreal. For more information about licensing see the FMOD sales page.
-This section describes the major changes introduced in each new release. See the Detailed Revision History for information regarding each patch release.