UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AudioAnalyzer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Async/AsyncWork.h"
8#include "AudioDefines.h"
9#include "CoreMinimal.h"
12#include "Sound/AudioBus.h"
13
14#include "AudioAnalyzer.generated.h"
15
17
24UCLASS(Abstract, EditInlineNew, BlueprintType, MinimalAPI)
29
31
33{
34public:
36
37 // Set in the task the current state of the analyzer controls
39
40 // Give the task the audio data to analyze
42
43 // Move the audio buffer back out
44 TArray<float>&& GetAudioBuffer() { return MoveTemp(AudioData); }
45
46 // Does the task work
47 void DoWork();
48
50
51 // Get the results from the task
53
54private:
56 int32 SampleRate = 0;
57 int32 NumChannels = 0;
58 TArray<float> AudioData;
61};
62
73UCLASS(Abstract, EditInlineNew, BlueprintType, MinimalAPI)
75{
77
79
80public:
86
89
93
95 UFUNCTION(BlueprintCallable, BlueprintCosmetic, Category = AudioAnalyzer, meta = (WorldContext = "WorldContextObject"))
96 AUDIOANALYZER_API void StartAnalyzing(const UObject* WorldContextObject, UAudioBus* AudioBusToAnalyze);
97
99 UE_DEPRECATED(5.4, "Use the StartAnalyzing method that uses Audio::FDeviceId.")
101
102 AUDIOANALYZER_API void StartAnalyzing(const Audio::FDeviceId InAudioDeviceId, UAudioBus* AudioBusToAnalyze);
103
105 UFUNCTION(BlueprintCallable, BlueprintCosmetic, Category = AudioAnalyzer, meta = (WorldContext = "WorldContextObject"))
106 AUDIOANALYZER_API void StopAnalyzing(const UObject* WorldContextObject = nullptr);
107
112 AUDIOANALYZER_API virtual TUniquePtr<Audio::IAnalyzerSettings> GetSettings(const int32 InSampleRate, const int32 InNumChannels) const;
113
118 AUDIOANALYZER_API virtual TSharedPtr<Audio::IAnalyzerControls> GetAnalyzerControls() const;
119
121 virtual void BroadcastResults() {}
122
123 //~ Begin UObject Interface.
124 AUDIOANALYZER_API virtual void BeginDestroy() override;
125 //~ End UObject interface
126
127private:
129 AUDIOANALYZER_API bool IsReadyForAnalysis() const;
130
132 AUDIOANALYZER_API bool DoAnalysis();
133
134protected:
135
136 template<class ResultType>
138 {
139 return TUniquePtr<ResultType>(static_cast<ResultType*>(ResultsInternal.Release()));
140 }
141
142 /* Subclasses must override this method in order to inform this object which AnalyzerFactory to use for analysis */
143 virtual FName GetAnalyzerFactoryName() const PURE_VIRTUAL(UAudioAnalyzer::GetAnalyzerFactoryName, return FName(););
144
146 int32 NumFramesPerBufferToAnalyze = 1024;
147
148private:
149
150 // Returns UAudioAnalyzerSettings* if property points to a valid UAudioAnalyzerSettings, otherwise returns nullptr.
152
153 // Audio analysis subsystem used with this audio analyzer
155 TObjectPtr<UAudioAnalyzerSubsystem> AudioAnalyzerSubsystem;
156
157 // Output patch for retrieving audio from audio bus for analysis
158 Audio::FPatchOutputStrongPtr PatchOutputStrongPtr;
159
160 // Analysis task
162
163 // The analyzer facade used for async tasks
164 TUniquePtr<Audio::FAnalyzerFacade> AnalyzerFacade;
165
166 // Cached results of previous analysis task. Can be invalid.
167 TUniquePtr<Audio::IAnalyzerResult> ResultsInternal;
168
169 // The analyzer controls that can be modified real-time
170 TSharedPtr<Audio::IAnalyzerControls> AnalyzerControls;
171
172 // Scratch buffer used for copying data from patch output and fed to analysis task
173 TArray<float> AnalysisBuffer;
174
175 // The sample of the audio renderer
176 int32 AudioMixerSampleRate = 0;
177
178 // The number of channels for the audio bus
179 int32 NumBusChannels = 0;
180
181 // The analyzer factory to use
182 Audio::IAnalyzerFactory* AnalyzerFactory = nullptr;
183};
184
TSharedPtr< Audio::IAnalyzerResult, ESPMode::ThreadSafe > FAnalyzerResultSharedPtr
Definition AudioAnalyzer.h:30
#define PURE_VIRTUAL(func,...)
Definition CoreMiscDefines.h:103
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define RETURN_QUICK_DECLARE_CYCLE_STAT(StatId, GroupId)
Definition Stats.h:655
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define UCLASS(...)
Definition ObjectMacros.h:776
ESPMode
Definition SharedPointerFwd.h:12
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition AsyncWork.h:585
Definition AudioAnalyzer.h:33
TStatId GetStatId() const
Definition AudioAnalyzer.h:49
TArray< float > && GetAudioBuffer()
Definition AudioAnalyzer.h:44
void SetAudioBuffer(TArray< float > &&InAudioData)
Definition AudioAnalyzer.cpp:25
void SetAnalyzerControls(TSharedPtr< Audio::IAnalyzerControls > InControls)
Definition AudioAnalyzer.cpp:30
TUniquePtr< Audio::IAnalyzerResult > GetResults()
Definition AudioAnalyzer.h:52
void DoWork()
Definition AudioAnalyzer.cpp:35
Definition NameTypes.h:617
Definition AsyncWork.h:663
Definition UnrealType.h:174
Definition Array.h:670
Definition SharedPointer.h:692
Definition UniquePtr.h:107
Definition AudioAnalyzerAsset.h:18
Definition AudioAnalyzer.h:26
Definition AudioAnalyzerSubsystem.h:18
Definition AudioAnalyzer.h:75
virtual FName GetAnalyzerFactoryName() const PURE_VIRTUAL(UAudioAnalyzer
Definition AudioAnalyzer.h:143
int32 FResultId
Definition AudioAnalyzer.h:85
TUniquePtr< ResultType > GetResults()
Definition AudioAnalyzer.h:137
Definition AudioBus.h:76
Definition Object.h:95
Definition World.h:918
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
Definition ObjectPtr.h:488
Definition LightweightStats.h:416