UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SoundEffectBase.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "CoreMinimal.h"
5#include "AudioResampler.h"
7#include "UObject/Object.h"
10#include "HAL/ThreadSafeBool.h"
11#include "Containers/Queue.h"
12#include "Misc/ScopeLock.h"
13
14
15// Forward Declarations
17
18
19// The following macro code creates boiler-plate code for a sound effect preset and hides unnecessary details from user-created effects.
20
21// Macro chain to expand "MyEffectName" to "FMyEffectNameSettings"
22#define EFFECT_SETTINGS_NAME2(CLASS_NAME, SUFFIX) F ## CLASS_NAME ## SUFFIX
23#define EFFECT_SETTINGS_NAME1(CLASS_NAME, SUFFIX) EFFECT_SETTINGS_NAME2(CLASS_NAME, SUFFIX)
24#define EFFECT_SETTINGS_NAME(CLASS_NAME) EFFECT_SETTINGS_NAME1(CLASS_NAME, Settings)
25
26#define EFFECT_PRESET_NAME2(CLASS_NAME, SUFFIX) U ## CLASS_NAME ## SUFFIX
27#define EFFECT_PRESET_NAME1(CLASS_NAME, SUFFIX) EFFECT_PRESET_NAME2(CLASS_NAME, SUFFIX)
28#define EFFECT_PRESET_NAME(CLASS_NAME) EFFECT_PRESET_NAME1(CLASS_NAME, Preset)
29
30#define GET_EFFECT_SETTINGS(EFFECT_NAME) \
31 U##EFFECT_NAME##Preset* _Preset = Cast<U##EFFECT_NAME##Preset>(Preset); \
32 F##EFFECT_NAME##Settings Settings = _Preset != nullptr ? _Preset->GetSettings() : F##EFFECT_NAME##Settings(); \
33
34#define EFFECT_PRESET_METHODS(EFFECT_NAME) \
35 virtual bool CanFilter() const override { return false; } \
36 virtual bool HasAssetActions() const { return true; } \
37 virtual FText GetAssetActionName() const override { return FText::FromString(#EFFECT_NAME); } \
38 virtual UClass* GetSupportedClass() const override { return EFFECT_PRESET_NAME(EFFECT_NAME)::StaticClass(); } \
39 virtual FSoundEffectBase* CreateNewEffect() const override { return new F##EFFECT_NAME; } \
40 virtual USoundEffectPreset* CreateNewPreset(UObject* InParent, FName Name, EObjectFlags Flags) const override \
41 { \
42 USoundEffectPreset* NewPreset = NewObject<EFFECT_PRESET_NAME(EFFECT_NAME)>(InParent, GetSupportedClass(), Name, Flags); \
43 NewPreset->Init(); \
44 return NewPreset; \
45 } \
46 virtual void Init() override \
47 { \
48 FScopeLock ScopeLock(&SettingsCritSect); \
49 SettingsCopy = Settings; \
50 } \
51 void UpdateSettings(const F##EFFECT_NAME##Settings& InSettings) \
52 { \
53 FScopeLock ScopeLock(&SettingsCritSect); \
54 SettingsCopy = InSettings; \
55 Update(); \
56 } \
57 void UpdateSettings(TUniqueFunction<void(F##EFFECT_NAME##Settings&)> InCommand) \
58 { \
59 FScopeLock ScopeLock(&SettingsCritSect); \
60 InCommand(SettingsCopy); \
61 Update(); \
62 } \
63 F##EFFECT_NAME##Settings GetSettings() \
64 { \
65 FScopeLock ScopeLock(&SettingsCritSect); \
66 return SettingsCopy; \
67 } \
68 FCriticalSection SettingsCritSect; \
69 F##EFFECT_NAME##Settings SettingsCopy; \
70
72{
73public:
74 virtual ~FSoundEffectBase() = default;
75
77 virtual void OnPresetChanged() { }
78
80 ENGINE_API bool IsActive() const;
81
83 ENGINE_API void SetEnabled(const bool bInIsEnabled);
84
86 ENGINE_API bool Update();
87
90
93
95 ENGINE_API void EffectCommand(TUniqueFunction<void()> Command);
96
99
100protected:
102
105
108
112
115
116 // Effect command queue
118
119private:
121 void ClearPreset();
122
123 // Allow preset to re-register when editor update is requested
124 // and create effects using the templated Create call, as well
125 // as clear preset.
126 friend class USoundEffectPreset;
127};
128
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition SoundEffectBase.h:72
FThreadSafeBool bChanged
Definition SoundEffectBase.h:109
FThreadSafeBool bIsRunning
Definition SoundEffectBase.h:113
ENGINE_API bool IsActive() const
Definition SoundEffectBase.cpp:14
ENGINE_API void EffectCommand(TUniqueFunction< void()> Command)
Definition SoundEffectBase.cpp:64
FThreadSafeBool bIsActive
Definition SoundEffectBase.h:114
ENGINE_API void SetEnabled(const bool bInIsEnabled)
Definition SoundEffectBase.cpp:19
ENGINE_API TWeakObjectPtr< USoundEffectPreset > & GetPresetPtr()
Definition SoundEffectBase.cpp:34
TWeakObjectPtr< USoundEffectPreset > Preset
Definition SoundEffectBase.h:110
uint32 GetParentPresetId() const
Definition SoundEffectBase.h:98
virtual ~FSoundEffectBase()=default
ENGINE_API USoundEffectPreset * GetPreset()
Definition SoundEffectBase.cpp:24
FCriticalSection SettingsCritSect
Definition SoundEffectBase.h:106
ENGINE_API void PumpPendingMessages()
Definition SoundEffectBase.cpp:69
virtual void OnPresetChanged()
Definition SoundEffectBase.h:77
TArray< uint8 > CurrentAudioThreadSettingsData
Definition SoundEffectBase.h:107
ENGINE_API bool IsPreset(USoundEffectPreset *InPreset) const
Definition SoundEffectBase.cpp:59
ENGINE_API bool Update()
Definition SoundEffectBase.cpp:44
TQueue< TUniqueFunction< void()> > CommandQueue
Definition SoundEffectBase.h:117
uint32 ParentPresetUniqueId
Definition SoundEffectBase.h:111
ENGINE_API FSoundEffectBase()
Definition SoundEffectBase.cpp:8
Definition ThreadSafeBool.h:17
Definition Array.h:670
Definition Queue.h:48
Definition FunctionFwd.h:19
Definition SoundEffectPreset.h:24
Definition WeakObjectPtrTemplates.h:25