UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SoundCue.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "CoreMinimal.h"
9#include "Sound/SoundBase.h"
10#include "Sound/SoundNode.h"
11#include "Sound/SoundWave.h"
12
13#if WITH_EDITOR
14#include "EdGraph/EdGraph.h"
15#endif
16
17#include "SoundCue.generated.h"
18
19
20// Forward Declarations
21#if WITH_EDITORONLY_DATA
22class UEdGraph;
23#endif // WITH_EDITORONLY_DATA
24
25class USoundCue;
26class USoundNode;
28struct FActiveSound;
30
31USTRUCT()
33{
35
36 int32 NodePosX;
37
38 int32 NodePosY;
39
40
42 : NodePosX(0)
43 , NodePosY(0)
44 {
45 }
46
47
52};
53
54#if WITH_EDITOR
55class USoundCue;
56
59{
60public:
61 virtual ~ISoundCueAudioEditor() {}
62
65
68
71
74
76 virtual void RemoveNullNodes(USoundCue* SoundCue) = 0;
77
79 virtual void CreateInputPin(UEdGraphNode* SoundCueNode) = 0;
80
82 virtual void RenameNodePins(USoundNode* SoundNode) = 0;
83};
84#endif
85
89UCLASS(hidecategories=object, BlueprintType, meta= (LoadBehavior = "LazyOnDemand"), MinimalAPI)
91{
93
94 UPROPERTY(BlueprintReadOnly, Category = Sound)
96
97 /* Base volume multiplier */
98 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Sound, AssetRegistrySearchable)
99 float VolumeMultiplier;
100
101 /* Base pitch multiplier */
102 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Sound, AssetRegistrySearchable)
103 float PitchMultiplier;
104
105 /* Attenuation settings to use if Override Attenuation is set to true */
106 UPROPERTY(EditAnywhere, Category = Attenuation)
107 FSoundAttenuationSettings AttenuationOverrides;
108
109#if WITH_EDITORONLY_DATA
110 UPROPERTY()
112
113 UPROPERTY()
115#endif
116
117protected:
118 // NOTE: Use GetSubtitlePriority() to fetch this value for external use.
119 UPROPERTY(EditAnywhere, Category = "Voice Management|Priority", Meta = (Tooltip = "The priority of the subtitle. Defaults to 10000. Higher values will play instead of lower values."))
120 float SubtitlePriority;
121
122private:
123 float MaxAudibleDistance;
124
125public:
126
127 /* Makes this sound cue automatically load any sound waves it can play into the cache when it is loaded. */
128 UPROPERTY(EditAnywhere, Category = Memory)
129 uint8 bPrimeOnLoad : 1;
130
131 /* Indicates whether attenuation should use the Attenuation Overrides or the Attenuation Settings asset */
132 UPROPERTY(EditAnywhere, Category = Attenuation)
133 uint8 bOverrideAttenuation : 1;
134
135 /* Ignore per-platform random node culling for memory purposes */
136 UPROPERTY(EditAnywhere, Category = Memory, Meta = (DisplayName = "Disable Random Branch Culling"))
137 uint8 bExcludeFromRandomNodeBranchCulling : 1;
138
139private:
140
142 UPROPERTY()
143 uint8 bHasPlayWhenSilent : 1;
144
145 uint8 bHasAttenuationNode : 1;
146 uint8 bHasAttenuationNodeInitialized : 1;
147 uint8 bShouldApplyInteriorVolumes : 1;
148 uint8 bShouldApplyInteriorVolumesCached : 1;
149 uint8 bIsRetainingAudio : 1;
150
151 UPROPERTY()
152 int32 CookedQualityIndex = INDEX_NONE;
153
154public:
155
156 //~ Begin UObject Interface.
157 ENGINE_API virtual FString GetDesc() override;
158#if WITH_EDITOR
159 ENGINE_API virtual void PostInitProperties() override;
160 ENGINE_API virtual void PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override;
161 static ENGINE_API void AddReferencedObjects(UObject* InThis, FReferenceCollector& Collector);
162#endif
163 ENGINE_API virtual void PostLoad() override;
164 ENGINE_API virtual void Serialize(FStructuredArchive::FRecord Record) override;
165 ENGINE_API virtual bool CanBeClusterRoot() const override;
166 ENGINE_API virtual bool CanBeInCluster() const override;
167 ENGINE_API virtual void BeginDestroy() override;
168 //~ End UObject Interface.
169
170 //~ Begin USoundBase Interface.
171 ENGINE_API virtual bool IsPlayable() const override;
172 ENGINE_API virtual bool IsPlayWhenSilent() const override;
173 ENGINE_API virtual bool ShouldApplyInteriorVolumes() override;
174 ENGINE_API virtual void Parse( class FAudioDevice* AudioDevice, const UPTRINT NodeWaveInstanceHash, FActiveSound& ActiveSound, const FSoundParseParameters& ParseParams, TArray<FWaveInstance*>& WaveInstances ) override;
175 ENGINE_API virtual float GetVolumeMultiplier() override;
176 ENGINE_API virtual float GetPitchMultiplier() override;
177 ENGINE_API virtual float GetMaxDistance() const override;
178 ENGINE_API virtual float GetDuration() const override;
179 ENGINE_API virtual const FSoundAttenuationSettings* GetAttenuationSettingsToApply() const override;
180 ENGINE_API virtual float GetSubtitlePriority() const override;
181 ENGINE_API virtual bool GetSoundWavesWithCookedAnalysisData(TArray<USoundWave*>& OutSoundWaves) override;
182 ENGINE_API virtual bool HasCookedFFTData() const override;
183 ENGINE_API virtual bool HasCookedAmplitudeEnvelopeData() const override;
185 virtual bool IsAttenuationSettingsEditable() const override { return !bOverrideAttenuation; }
186 //~ End USoundBase Interface.
187
189 template<class T>
191 {
192 // Set flag to be transactional so it registers with undo system
194#if WITH_EDITOR
195 AllNodes.Add(SoundNode);
197#endif // WITH_EDITORONLY_DATA
198 return SoundNode;
199 }
200
206 ENGINE_API virtual int32 GetResourceSizeForFormat(FName Format);
207
211 ENGINE_API void RecursiveFindAllNodes( USoundNode* Node, TArray<USoundNode*>& OutNodes );
212
216 template<typename T>
218 {
219 if (Node)
220 {
221 // Record the node if it is the desired type
222 if (T* FoundNode = Cast<T>(Node))
223 {
224 OutNodes.AddUnique(FoundNode);
225 }
226
227 // Recurse.
228 const int32 MaxChildNodes = Node->GetMaxChildNodes();
229 for (int32 ChildIndex = 0; ChildIndex < Node->ChildNodes.Num() && ChildIndex < MaxChildNodes; ++ChildIndex)
230 {
231 RecursiveFindNode<T>(Node->ChildNodes[ChildIndex], OutNodes);
232 }
233 }
234 }
235
236 template<typename T>
238 {
239 if (Node)
240 {
241 // Record the node if it is the desired type
242 if (const T* FoundNode = Cast<T>(Node))
243 {
244 OutNodes.AddUnique(FoundNode);
245 }
246
247 // Recurse.
248 const int32 MaxChildNodes = Node->GetMaxChildNodes();
249 for (int32 ChildIndex = 0; ChildIndex < Node->ChildNodes.Num() && ChildIndex < MaxChildNodes; ++ChildIndex)
250 {
251 RecursiveFindNode<T>(Node->ChildNodes[ChildIndex], OutNodes);
252 }
253 }
254 }
255
257 ENGINE_API bool FindPathToNode(const UPTRINT NodeHashToFind, TArray<USoundNode*>& OutPath) const;
258
260 static ENGINE_API void StaticAudioQualityChanged(int32 NewQualityLevel);
261
262 inline static int32 GetCachedQualityLevel() { return CachedQualityLevel; }
263
265 int32 GetCookedQualityIndex() const { return CookedQualityIndex; }
266
268 ENGINE_API void CacheAggregateValues();
269
271 ENGINE_API void PrimeSoundCue();
272
274 ENGINE_API void RetainSoundCue();
275 ENGINE_API void ReleaseRetainedAudio();
276
278 ENGINE_API void CacheLoadingBehavior(ESoundWaveLoadingBehavior InBehavior);
279
280protected:
281 ENGINE_API bool RecursiveFindPathToNode(USoundNode* CurrentNode, const UPTRINT CurrentHash, const UPTRINT NodeHashToFind, TArray<USoundNode*>& OutPath) const;
282 ENGINE_API float ComputeMaxDistance() const override;
283
284private:
285 ENGINE_API void AudioQualityChanged();
286 ENGINE_API void OnPostEngineInit();
287 ENGINE_API void EvaluateNodes(bool bAddToRoot);
288
289 FDelegateHandle OnPostEngineInitHandle;
290 static ENGINE_API int32 CachedQualityLevel;
291
292public:
293
294 // This is used to cache the quality level if it has not been cached yet.
295 static ENGINE_API void CacheQualityLevel();
296
297 ENGINE_API void RecursiveFindAttenuation(USoundNode* Node, TArray<USoundNodeAttenuation*> &OutNodes);
298 ENGINE_API void RecursiveFindAttenuation(const USoundNode* Node, TArray<const USoundNodeAttenuation*>& OutNodes) const;
299
308 ENGINE_API float EvaluateMaxAttenuation(const FTransform& Origin, FVector Location, float DistanceScale = 1.f) const;
309
310#if WITH_EDITOR
312 ENGINE_API void CreateGraph();
313
315 ENGINE_API void ClearGraph();
316
319
322
325
327 ENGINE_API UEdGraph* GetGraph();
328
330 ENGINE_API void ResetGraph();
331
334
337
338private:
339
342
345
347#endif // WITH_EDITOR
348};
349
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::UPTRINT UPTRINT
An unsigned integer the same size as a pointer.
Definition Platform.h:1146
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
int32 ParseParams(const FString &ParamStr, TArray< FString > &OutArray)
Definition NativeJSScripting.cpp:193
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
@ RF_Transactional
Object is transactional.
Definition ObjectMacros.h:562
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
ESoundWaveLoadingBehavior
Definition SoundWaveLoadingBehavior.h:24
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition IAudioParameterTransmitter.h:96
Definition Archive.h:1208
Definition AudioDevice.h:417
Definition IDelegateInstance.h:14
Definition NameTypes.h:617
Definition UObjectGlobals.h:2492
Definition SoundCue.h:351
virtual ENGINE_API bool SetParameters(TArray< FAudioParameter > &&InParameters) override
Definition SoundCue.cpp:964
ENGINE_API TArray< const TObjectPtr< UObject > * > GetReferencedObjects() const override
Definition SoundCue.cpp:944
ENGINE_API void CreateChildTransmitter(UPTRINT InWaveInstanceHash, USoundBase &InSound, Audio::FParameterTransmitterInitParams InTransmitterInitParams)
Definition SoundCue.cpp:1005
TMap< UPTRINT, TSharedPtr< Audio::IParameterTransmitter > > Transmitters
Definition SoundCue.h:378
TArray< FAudioParameter > ParamsToSet
Definition SoundCue.h:375
ENGINE_API TArray< FAudioParameter > ReleaseAccumulatedParameterUpdates()
Definition SoundCue.cpp:1034
virtual ENGINE_API ~FSoundCueParameterTransmitter()
Definition SoundCue.cpp:939
virtual ENGINE_API void AddReferencedObjects(FReferenceCollector &InCollector) override
Definition SoundCue.cpp:956
ENGINE_API void RemoveChildTransmitter(UPTRINT InWaveInstanceHash)
Definition SoundCue.cpp:1026
Definition StructuredArchiveSlots.h:144
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition SubclassOf.h:30
Definition EdGraphNode.h:289
Definition EdGraph.h:68
Definition Object.h:95
Definition SoundBase.h:109
Definition SoundCue.h:91
int32 GetCookedQualityIndex() const
Definition SoundCue.h:265
void RecursiveFindNode(USoundNode *Node, TArray< T * > &OutNodes)
Definition SoundCue.h:217
T * ConstructSoundNode(TSubclassOf< USoundNode > SoundNodeClass=T::StaticClass(), bool bSelectNewNode=true)
Definition SoundCue.h:190
static int32 GetCachedQualityLevel()
Definition SoundCue.h:262
void RecursiveFindNode(const USoundNode *Node, TArray< const T * > &OutNodes) const
Definition SoundCue.h:237
virtual bool IsAttenuationSettingsEditable() const override
Definition SoundCue.h:185
Definition SoundNodeAttenuation.h:21
Definition SoundNode.h:58
virtual int32 GetMaxChildNodes() const
Definition SoundNode.h:146
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
Definition IAudioParameterTransmitter.h:22
Definition ActiveSound.h:283
Definition AudioParameter.h:93
Definition UnrealType.h:6865
Definition SoundAttenuation.h:139
Definition SoundCue.h:33
friend FArchive & operator<<(FArchive &Ar, FSoundNodeEditorData &MySoundNodeEditorData)
Definition SoundCue.h:48
Definition ActiveSound.h:64
Definition ObjectPtr.h:488