diff --git a/.gitignore b/.gitignore index 700c65e..bf60e28 100644 --- a/.gitignore +++ b/.gitignore @@ -48,7 +48,7 @@ SourceArt/**/*.tga # Binary Files Binaries/* -Plugins/*/Binaries/* + # Builds Build/* diff --git a/Plugins/FMODStudio/Binaries/Android/fmod.jar b/Plugins/FMODStudio/Binaries/Android/fmod.jar new file mode 100644 index 0000000..542923e Binary files /dev/null and b/Plugins/FMODStudio/Binaries/Android/fmod.jar differ diff --git a/Plugins/FMODStudio/Binaries/Win64/UE4Editor-FMODStudio.pdb b/Plugins/FMODStudio/Binaries/Win64/UE4Editor-FMODStudio.pdb new file mode 100644 index 0000000..83ce8e7 Binary files /dev/null and b/Plugins/FMODStudio/Binaries/Win64/UE4Editor-FMODStudio.pdb differ diff --git a/Plugins/FMODStudio/Binaries/Win64/UE4Editor-FMODStudioEditor.pdb b/Plugins/FMODStudio/Binaries/Win64/UE4Editor-FMODStudioEditor.pdb new file mode 100644 index 0000000..191d891 Binary files /dev/null and b/Plugins/FMODStudio/Binaries/Win64/UE4Editor-FMODStudioEditor.pdb differ diff --git a/Plugins/FMODStudio/Binaries/Win64/UE4Editor.modules b/Plugins/FMODStudio/Binaries/Win64/UE4Editor.modules new file mode 100644 index 0000000..a5e23d3 --- /dev/null +++ b/Plugins/FMODStudio/Binaries/Win64/UE4Editor.modules @@ -0,0 +1,8 @@ +{ + "BuildId": "13144385", + "Modules": + { + "FMODStudio": "UE4Editor-FMODStudio.dll", + "FMODStudioEditor": "UE4Editor-FMODStudioEditor.dll" + } +} \ No newline at end of file diff --git a/Plugins/FMODStudio/Docs/api-reference-afmodambientsound.html b/Plugins/FMODStudio/Docs/api-reference-afmodambientsound.html deleted file mode 100644 index 06ddf94..0000000 --- a/Plugins/FMODStudio/Docs/api-reference-afmodambientsound.html +++ /dev/null @@ -1,50 +0,0 @@ - -
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from AActor
-Properties:
-FMODAudioComponent used to play the ambient Event.
--
UFMODAudioComponent *AudioComponent;
-
See Also: UFMODAudioComponent
UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-Properties:
-Methods:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-Properties:
-Public:
-Private:
-Methods:
-Public:
-Private:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from FMovieSceneEvalTemplate.
-Properties:
-Public:
-Methods:
-Private:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from FMovieSceneParameterSectionTemplate.
-Methods:
-Private:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-Defines:
-Methods:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-Defines:
-Properties:
-Methods:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from IFMODStudioModule.
-Defines:
-FMODMemoryFree
-FFMODSnapshotEntry
-FFMODStudioSystemClockSink
-NamedBankEntry
-Properties:
-Methods:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-Methods:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-Defines:
-Methods:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from IModuleInterface.
-Defines:
-Methods:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-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 UFMODBlueprintStatics::PlayEventAttached is called using the current UFMODAnimNotifyPlay::AttachName.
-Otherwise UFMODBlueprintStatics::PlayEventAtLocation is called using the MeshComp
for the positional information.
UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-Base asset used for creating FMOD object assets in UE4.
-This class inherits from UObject
-Properties:
-Methods:
-The unique Guid, which matches the one exported from FMOD Studio.
--
FGuid AssetGuid;
-
Whether to show in the content window.
--
bool bShowAsAsset;
-
In memory asset name, created at load time.
--
FString FileName;
-
Get tags to show in content view.
--
virtual void GetAssetRegistryTags(TArray<FAssetRegistryTag> &OutTags) const override
-
Event triggered when the timeline crosses the notify marker.
--
virtual bool IsAsset() const override
-
Returns UFMODAsset::bShowAsAsset.
UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from USceneComponent
-Defines:
-Properties:
-Public:
-Private:
-Methods:
-Public:
-Private:
-Activates the component.
--
virtual void Activate(
- bool bReset = false
-);
-
Calculated Ambient LPF level for that frame.
--
float AmbientLPF;
-
Used for automating volume and/or LPF with Ambient Zones.
-See Also: Ambient Zones
-Stored ID of the LPF parameter of the Event (if applicable).
--
FMOD_STUDIO_PARAMETER_ID AmbientLPFID;
-
See Also: Ambient Zones, FMOD_STUDIO_PARAMETER_ID
-Calculated Ambient volume level for that frame.
--
float AmbientVolume;
-
Used for automating volume and/or LPF with Ambient Zones.
-See Also: Ambient Zones
-Stored ID of the Volume parameter of the Event (if applicable).
--
FMOD_STUDIO_PARAMETER_ID AmbientVolumeID;
-
See Also: Ambient Zones, FMOD_STUDIO_PARAMETER_ID
-Apply Volume and LPF to Event.
--
void ApplyVolumeLPF();
-
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;
-
Have the Event parameters default values been cached.
--
bool bDefaultParameterValuesCached;
-
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;
-
Cache default event parameter values
--
void CacheDefaultParameterValues()
-
Stores the Timeline Beats as they are triggered.
--
TArray<FTimelineBeatProperties> CallbackBeatQueue;
-
See Also: UFMODAudioComponent::EventCallbackAddBeat
-A scope lock used specifically for callbacks.
--
FCriticalSection CallbackLock;
-
Stores the Timeline Markers as they are triggered.
--
TArray<FTimelineMarkerProperties> CallbackMarkerQueue;
-
See Also: UFMODAudioComponent::EventCallbackAddMarker
-Previous interior LPF value.
--
float CurrentInteriorLPF;
-
Used for automating volume and/or LPF with Ambient Zones.
-See Also: Ambient Zones
-Current interior volume value.
--
float CurrentInteriorVolume;
-
Used for automating volume and/or LPF with Ambient Zones.
-See Also: Ambient Zones
-Deactivates the SceneComponent.
--
virtual void Deactivate();
-
Overridable function called whenever this actor is being removed from a level.
--
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override
-
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 on set on the UFMODAudioComponent::StudioInstance if UFMODAudioComponent::bEnableTimelineCallbacks is true or UFMODAudioComponent::ProgrammerSoundName is not empty.
-See Also: FMOD_STUDIO_EVENT_CALLBACK_TYPE, UFMODAudioComponent::EventCallbackAddMarker, UFMODAudioComponent::EventCallbackAddBeat, UFMODAudioComponent::EventCallbackCreateProgrammerSound, UFMODAudioComponent::EventCallbackDestroyProgrammerSound
-Timeline Beat callback.
--
void EventCallbackAddBeat(
- struct FMOD_STUDIO_TIMELINE_BEAT_PROPERTIES *props
-);
-
See Also: UFMODAudioComponent_EventCallback, FMOD_STUDIO_TIMELINE_BEAT_PROPERTIES
-Timeline Marker callback.
--
void EventCallbackAddMarker(
- struct FMOD_STUDIO_TIMELINE_MARKER_PROPERTIES *props
-);
-
See Also: UFMODAudioComponent_EventCallback, FMOD_STUDIO_TIMELINE_MARKER_PROPERTIES
-Programmer Sound Create callback.
--
void EventCallbackCreateProgrammerSound(
- struct FMOD_STUDIO_PROGRAMMER_SOUND_PROPERTIES *props
-);
-
See Also: UFMODAudioComponent_EventCallback, FMOD_STUDIO_PROGRAMMER_SOUND_PROPERTIES
-Programmer Sound Destroy callback.
--
void EventCallbackDestroyProgrammerSound(
- struct FMOD_STUDIO_PROGRAMMER_SOUND_PROPERTIES *props
-);
-
See Also: UFMODAudioComponent_EventCallback, FMOD_STUDIO_PROGRAMMER_SOUND_PROPERTIES
-The length of the current Event in milliseconds.
--
int32 EventLength;
-
Get the event length in milliseconds.
--
int32 GetLength() const;
-
Get parameter value from the Event.
--
float GetParameter(
- FName Name
-);
-
Get a property of the Event.
--
float GetProperty(
- EFMODEventProperty::Type Property
-);
-
See Also: EFMODEventProperty
-Return a cached reference to the current IFMODStudioModule.
--
IFMODStudioModule& GetStudioModule();
-
See Also: IFMODStudioModule
-Get the timeline position in milliseconds.
--
int32 GetTimelinePosition();
-
Timer used for volumes fading in and out.
--
double InteriorLastUpdateTime;
-
Return true if this component is currently playing an event.
--
bool IsPlaying();
-
Previously set LPF value.
--
float LastLPF;
-
Used for automating volume and/or LPF with Ambient Zones.
-See Also: Ambient Zones
-Previously set Volume value.
--
float LastVolume;
-
Used for automating volume and/or LPF with Ambient Zones.
-See Also: Ambient Zones
-Stored reference to the current IFMODStudioModule.
--
IFMODStudioModule* Module;
-
See Also: IFMODStudioModule
-FMOD Custom Occlusion Details.
--
struct FFMODOcclusionDetails OcclusionDetails;
-
See Also: FFMODOcclusionDetails
-Stored ID of the Occlusion parameter of the Event (if applicable).
--
FMOD_STUDIO_PARAMETER_ID OcclusionID;
-
See Also: Occlusion, FMOD_STUDIO_PARAMETER_ID
-Called when an event stops, either because it played to completion or because a Stop() call turned it off early.
--
FOnEventStopped OnEventStopped;
-
Called when the event has finished stopping.
--
void OnPlaybackCompleted();
-
Called when a component is registered, after Scene is set, but before CreateRenderState_Concurrent or OnCreatePhysicsState are called.
--
virtual void OnRegister();
-
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
-Called when a component is unregistered. Called after DestroyRenderState_Concurrent and OnDestroyPhysicsState are called.
--
virtual void OnUnregister();
-
Native callback when this component is moved.
--
virtual void OnUpdateTransform(
- EUpdateTransformFlags UpdateTransformFlags,
- ETeleportType Teleport = ETeleportType::None
-);
-
Used to update the 3D positional information of the Event.
-Cache of the current Events parameters.
--
TMap<FName, float> ParameterCache;
-
Start a sound playing on an audio component.
--
void Play();
-
Internal play function which can play Events in the editor.
--
void PlayInternal(
- EFMODSystemContext::Type Context
-);
-
See Also: EFMODSystemContext
-Direct assignment of programmer sound from other C++ code.
--
FMOD::Sound *ProgrammerSound;
-
See Also: FMOD::Sound
-Sound name used for programmer sound.
--
FString ProgrammerSoundName;
-
The integration will look up the name in any loaded audio table.
-Release the current Studio Instance.
--
void Release();
-
See Also: UFMODAudioComponent::StudioInstance
-Release any cached parameters then the Studio Instance.
--
void ReleaseEventCache();
-
See Also: UFMODAudioComponent::StudioInstance
-Release the Studio Instance.
--
void ReleaseEventInstance();
-
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 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 Als: FMOD::Sound
-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.
-Previous interior LPF value.
--
float SourceInteriorLPF;
-
Used for automating volume and/or LPF with Ambient Zones.
-See Also: Ambient Zones
-Previous interior volume value.
--
float SourceInteriorVolume;
-
Used for automating volume and/or LPF with Ambient Zones.
-See Also: Ambient Zones
-Stop an audio component playing.
--
void Stop();
-
Stored properties to apply next time we create an instance.
--
float StoredProperties[EFMODEventProperty::Count];
-
See Also: EFMODEventProperty
-Actual Studio instance handle.
--
FMOD::Studio::EventInstance *StudioInstance;
-
Function called every frame on this ActorComponent.
--
virtual void TickComponent(
- float DeltaTime,
- enum ELevelTick TickType,
- FActorComponentTickFunction *ThisTickFunction
-);
-
Only executes if the component is registered, and also PrimaryComponentTick.bCanEverTick must be set to true.
-Trigger a cue in an event.
--
void TriggerCue();
-
Update attenuation if we have it set.
--
void UpdateAttenuation();
-
Update gain and low-pass based on interior volumes.
--
void UpdateInteriorVolumes();
-
Was the object occluded in the previous frame.
--
bool wasOccluded;
-
See Also: Occlusion
UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from UFMODAsset
-Methods:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from UBlueprintFunctionLibrary
-Defines:
-Methods:
-UFMODBlueprintStatics::MixerResume Resume the FMOD mixer.
-UFMODBlueprintStatics::LoadBank Load a bank.
-UFMODBlueprintStatics::UnloadBankSampleData Unload bank sample data.
-UFMODBlueprintStatics::BusSetVolume Set volume on a bus.
-UFMODBlueprintStatics::VCASetVolume Set volume on a VCA.
-UFMODBlueprintStatics::PlayEvent2D Play an event without a specified location.
-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
-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
-Get a parameter on an FMOD Event Instance.
--
static float EventInstanceGetParameter(
- FFMODEventInstance EventInstance,
- FName Name
-);
-
Return whether this FMOD Event Instance is valid.
--
static bool EventInstanceIsValid(
- FFMODEventInstance EventInstance
-);
-
The instance will be invalidated when the sound stops.
-Play an FMOD Event Instance.
--
static void EventInstancePlay(
- 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
-);
-
See Also: FMOD::Studio::EventInstance
-Mute/Unmute the bus.
--
static void EventInstanceStop(
- FFMODEventInstance EventInstance
-);
-
Trigger a cue on an FMOD Event Instance.
--
static void EventInstanceTriggerCue(
- FFMODEventInstance EventInstance
-);
-
See Also: Sustain Points and Key Off
-Wrapped FMOD::Studio::EventInstance for use in blueprints.
--
struct FFMODEventInstance{
- FMOD::Studio::EventInstance *Instance;
-} FFMODEventInstance;
-
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
-);
-
See Also: UFMODBlueprintStatics::SetGlobalParameterByName
-List all output device names.
--
static TArray<FString> GetOutputDrivers();
-
See Also: UFMODBlueprintStatics::SetOutputDriverByIndex, UFMODBlueprintStatics::SetOutputDriverByName
-Return true if a bank is loaded.
--
static bool IsBankLoaded(
- UFMODBank *Bank
-);
-
See Also: UFMODBlueprintStatics::LoadBank
-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 current output device by its index from GetOutputDrivers.
--
static void SetOutputDriverByIndex(
- int NewDriverIndex
-);
-
See Also: UFMODBlueprintStatics::GetOutputDrivers
-Set current output device by name or part of the name.
--
static void SetOutputDriverByName(
- FString NewDriverName
-);
-
See Also: UFMODBlueprintStatics::GetOutputDrivers
-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
-);
-
UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from UFMODAsset
-Methods:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from UFMODAsset
-Methods:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from UMovieSceneSection.
-Defines:
-Properties:
-Methods:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from UMovieSceneNameableTrack.
-Properties:
-Private:
-Methods:
-Public:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from UMovieSceneNameableTrack.
-Properties:
-Private:
-Methods:
-Public:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from UObject.
-Defines:
-Properties:
-Methods:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from UFMODEvent.
-Methods:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from UReverbEffect.
-Properties:
-Methods:
-UE4 Integration 2.00
-This documentation is preliminary and is subject to change.
-This class inherits from UFMODAsset.
-Methods:
-UE4 Integration 2.00
-UE4 Integration 2.00
- -UE4 Integration 2.00
- -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.
UE4 Integration 2.00
- -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.
-To build for TVOS, make sure FMODStudio is in your game's directory and not in the Engine plugins directory.
-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 UE4. 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 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
-
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
-
UE4 Integration 2.00
- -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.
UE4 Integration 2.00
- -The FMOD UE4 Integration settings can be found in the UE4 Editor, under "Project Settings > Plugins > FMOD Studio".
-
UE4 Integration 2.00
- -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 the FMOD UE4 integration. Add the following command line to the UE4 editor:
--LogCmds="LogFMOD verbose"
-
UE4 Integration 2.00
-The FMOD UE4 Integration is a plugin that allows you to use the FMOD APIs and projects from the FMOD Studio authoring tool in your UE4 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 integration consists of a single FMODStudio folder which can be placed in either the Engine/Plugins
directory or your UE4 game's Plugin directory {ProjectName}/Plugins
. The next steps show how to install it into your Engine directory, so it will be available for all projects using UE4.
Browse to your UE4 Engine folder and unzip FMODStudio into the plugins directory.
-Use Finder to browse to your /Users/Shared/UnrealEngine/4.X/Engine
directory and drop FMODStudio into the plugins directory.
If you have trouble getting the plugin working on a certain platform, then try putting FMODStudio in your game's Plugins directory instead of the engine.
-Otherwise see the TroubleShooting section.
-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.
-There are settings in both UE4 and FMOD Studio that need to be configured to link the two together.
-If you have any trouble setting up your project, use the automatic method. These settings can always be changed later.
-You can run the "Help > FMOD Validate" option in the UE4 Help menu. It finds and fixes common issues, and can automatically set up your FMOD Studio project for you!
-It will check the following:
-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.
-Now, open UE4 and look at the content browser. The plug-in defaults to looking in 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.
-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 UE4. 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/UE4*.*
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 UE4 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 the FMOD UE4 Integration 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 UFMODBlueprintStatics::PlayEventAttached 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
-- FMOD API Reference.
The FMOD UE4 integration 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 FMODListeners will follow the UE4 listeners which by default is attached to the camera, but we can move them by moving the UE4 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 the FMOD UE4 integration. 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 UE4 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.
The FMOD UE4 integration 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 withing 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.
-The FMOD UE4 integration 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.
-The FMOD UE4 integration 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 UE4 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.
The FMOD UE4 integration supports the use of the standard UE4 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 zone. It uses the same logic as the inbuilt UE4 audio system to determine which audio volume should be enabled, based on the priority of the volume.
-By default, snapshots apply instantly. To have a snapshot fade in, one of two things can be done. The first is by adding a 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 UE4 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:
-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.
-You can set up a programmer sound to point directly to a file. To do this, 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 do this, you'll need to make sure that directory with the media files is added 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 have the most flexibility for programmers.
-If you are writing code, you can programmatically set the FMOD Sound to use by calling the FMOD audio component function SetProgrammerSound
. Here is an example of setting the sound from code:
void AExampleGameMode::InitAudio(UFMODAudioComponent* AudioComponent)
-{
- if (AudioComponent)
- {
- FMOD::Studio::System* System = IFMODStudioModule::Get().GetStudioSystem(EFMODSystemContext::Runtime);
- FMOD::System* CoreSystem = nullptr;
- System->getCoreSystem(&CoreSystem);
-
- // Create sound in memory
- static const int EXAMPLE_SOUND_LEN = 4096;
- float ExampleData[EXAMPLE_SOUND_LEN];
- for (int i=0; i<EXAMPLE_SOUND_LEN; ++i)
- {
- ExampleData[i] = FMath::Sin((float)i);
- }
-
- FMOD_CREATESOUNDEXINFO SoundInfo = {0};
- SoundInfo.cbsize = sizeof(SoundInfo);
- SoundInfo.format = FMOD_SOUND_FORMAT_PCMFLOAT;
- SoundInfo.defaultfrequency = 12000;
- SoundInfo.numchannels = 1;
- SoundInfo.length = sizeof(float) * EXAMPLE_SOUND_LEN;
-
- FMOD::Sound* Sound = nullptr;
- if (CoreSystem->createSound(reinterpret_cast<const char*>(ExampleData), FMOD_OPENMEMORY | FMOD_OPENRAW | FMOD_LOOP_OFF, &SoundInfo, &Sound) == FMOD_OK)
- {
- AudioComponent->SetProgrammerSound(Sound);
- // Note: Need to remember to release the sound *after* the audio component has finished using it.
- }
- }
-}
-
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.
Banks need to be packaged and included in the game data. This can be done by selecting the "Edit > Project Settings..." menu item. Navigating to the Packaging section from the left hand pane, under the game heading, presents you with options for specifying directories that include extra assets. There are two ways of doing this:
-We recommend using Directories to Package so that bank files are bundled into the package file automatically.
-Each platform will look for its own type of banks in its own directory. Make sure you have added the platform to FMOD Studio project. The platforms are:
-If you only have the Desktop banks and want to run on another platform, you can set force platform name to Desktop in the FMOD advanced settings.
-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 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.
-The default permissions won't allow FMOD to set up a socket properly for live update. Uncheck the enable live update option in FMOD settings to avoid errors.
-If you get a deployment error "resource.resw is in use by other process", go to the YourGame/Config/DefaultGame.ini
and remove the following:
-CulturesToStage=en
-+CulturesToStage=en
-
UE4 Integration 2.00
- -This section describes the major features introduced in the 2.00 release. See the Detailed Revision History for information regarding each patch release.
-The LowLevel API has been renamed to Core API:
-Studio::System::getLowLevelSystem
is now Studio::System::getCoreSystem
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:
-
The Studio parameter API has been updated to support global parameters and provide a more robust fast path for setting parameter values frequently. There are a number of new, removed and renamed APIs, see the FMOD API User Manual for more information.
-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 UE4 Integration 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 UE4 Integration settings:
-- Occlusion Parameter
-- Ambient Volume Parameter
-- Ambient LPF Parameter
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 UE4 Settings so that the Integration can find it.
-UE4 Integration 2.00
- -The FMOD UE4 Integration is a plugin that allows you to use the FMOD APIs and projects from FMOD Studio in your UE4 game.
-The integration is compatible with public release versions UE4.20 and newer.
-The integration supports:
-The integration itself is free, but you must have the appropriate FMOD License to release a title using FMOD Studio with UE4. 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.