UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
IAudioProxyInitializer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "Templates/Casts.h"
10#include "UObject/NameTypes.h"
11
12#include <type_traits>
13
21#define IMPL_AUDIOPROXY_CLASS(FClassName) \
22 static FName GetAudioProxyTypeName() \
23 { \
24 static FName MyClassName = #FClassName; \
25 return MyClassName; \
26 } \
27 static constexpr bool bWasAudioProxyClassImplemented = true; \
28 friend class ::Audio::IProxyData; \
29 friend class ::Audio::TProxyData<FClassName>;
30
31
32namespace Audio
33{
34 // Forward Declarations
35 class IProxyData;
36 using IProxyDataPtr UE_DEPRECATED(5.2, "Replace IProxyDataPtr with TSharedPtr<Audio::IProxyData>") = TUniquePtr<Audio::IProxyData>;
37
38 /*
39 * Base class that allows us to typecheck proxy data before downcasting it in debug builds.
40 */
42 {
43 private:
44 FName ProxyTypeName;
45 public:
46 virtual ~IProxyData() = default;
47
48 template<typename ProxyType>
49 bool CheckTypeCast() const
50 {
51 const FName DestinationTypeName = ProxyType::GetAudioProxyTypeName();
52 return ensureAlwaysMsgf(ProxyTypeName == DestinationTypeName, TEXT("Tried to downcast type %s to %s!"), *ProxyTypeName.ToString(), *DestinationTypeName.ToString());
53 }
54
56 {
57 return ProxyTypeName;
58 }
59
60 template<typename ProxyType>
61 ProxyType& GetAs()
62 {
63 static_assert(std::is_base_of_v<IProxyData, ProxyType>, "Tried to downcast IProxyInitData to an unrelated type!");
65 {
66 return static_cast<ProxyType&>(*this);
67 }
68 else
69 {
70 // This is an illegal cast, and is considered a fatal error.
72 return *((ProxyType*)0x1);
73 }
74 }
75
76 template<typename ProxyType>
77 const ProxyType& GetAs() const
78 {
79 static_assert(std::is_base_of_v<IProxyData, ProxyType>, "Tried to downcast IProxyInitData to an unrelated type!");
81 {
82 return static_cast<const ProxyType&>(*this);
83 }
84 else
85 {
86 // This is an illegal cast, and is considered a fatal error.
88 return *((ProxyType*)0x1);
89 }
90 }
91
93 : ProxyTypeName(InProxyTypeName)
94 {}
95
96 UE_DEPRECATED(5.2, "Proxy data is stored in a TSharedPtr<> and no longer requires cloning")
97 virtual TUniquePtr<IProxyData> Clone() const { return nullptr; }
98 };
99
104 template <typename Type>
105 class TProxyData : public IProxyData
106 {
107 protected:
108 static constexpr bool bWasAudioProxyClassImplemented = false;
109
110 public:
113 {
114 static_assert(Type::bWasAudioProxyClassImplemented, "Make sure to include IMPL_AUDIOPROXY_CLASS(ClassName) in your implementation of TProxyData.");
115 }
116 };
117
122} // namespace Audio
123
124/*
125* This can be subclassed to make a UClass an audio proxy factory.
126*/
128{
129public:
130 UE_DEPRECATED(5.2, "Call TSharedPtr<Audio::IProxyData> CreateProxyData(...) instead of a TUniquePtr<Audio::IProxyData> CreateNewProxyData(...).")
132
134};
135
136namespace Audio
137{
138 template <typename UClassToUse>
140 {
141 if constexpr (std::is_base_of_v<IAudioProxyDataFactory, UClassToUse>)
142 {
143 if (InObject)
144 {
147 {
148 return static_cast<IAudioProxyDataFactory*>(DowncastObject);
149 }
150 }
151 }
152
153 return nullptr;
154 }
155} // namespace Audio
#define ensureAlways( InExpression)
Definition AssertionMacros.h:466
#define ensureAlwaysMsgf(InExpression, InFormat,...)
Definition AssertionMacros.h:467
#define checkNoEntry()
Definition AssertionMacros.h:316
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TEXT(x)
Definition Platform.h:1272
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition IAudioProxyInitializer.h:42
virtual ~IProxyData()=default
ProxyType & GetAs()
Definition IAudioProxyInitializer.h:61
bool CheckTypeCast() const
Definition IAudioProxyInitializer.h:49
FName GetProxyTypeName() const
Definition IAudioProxyInitializer.h:55
const ProxyType & GetAs() const
Definition IAudioProxyInitializer.h:77
virtual TUniquePtr< IProxyData > Clone() const
Definition IAudioProxyInitializer.h:97
IProxyData(FName InProxyTypeName)
Definition IAudioProxyInitializer.h:92
Definition IAudioProxyInitializer.h:106
TProxyData()
Definition IAudioProxyInitializer.h:111
static constexpr bool bWasAudioProxyClassImplemented
Definition IAudioProxyInitializer.h:108
Definition NameTypes.h:617
CORE_API FString ToString() const
Definition UnrealNames.cpp:3537
Definition IAudioProxyInitializer.h:128
UE_DEPRECATED(5.2, "Call TSharedPtr<Audio::IProxyData> CreateProxyData(...) instead of a TUniquePtr<Audio::IProxyData> CreateNewProxyData(...).") AUDIOEXTENSIONS_API virtual TUniquePtr< Audio virtual AUDIOEXTENSIONS_API TSharedPtr< Audio::IProxyData > CreateProxyData(const Audio::FProxyDataInitParams &InitParams)
Definition IAudioProxyInitializer.cpp:17
Definition SharedPointer.h:692
Definition UniquePtr.h:107
Definition Object.h:95
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
IAudioProxyDataFactory * CastToProxyDataFactory(UObject *InObject)
Definition IAudioProxyInitializer.h:139
Definition IAudioProxyInitializer.h:119
FName NameOfFeatureRequestingProxy
Definition IAudioProxyInitializer.h:120