UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DynamicsProcessor.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7#include "DSP/IntegerDelay.h"
8#include "Filter.h"
9
10namespace Audio
11{
12 // What mode the compressor is in
13 namespace EDynamicsProcessingMode
14 {
24 }
25
27 {
29 Average,
30 Peak,
31 Count
32 };
33
34 // Dynamic range compressor
35 // https://en.wikipedia.org/wiki/Dynamic_range_compression
37 {
38 public:
41
42 SIGNALPROCESSING_API void Init(const float InSampleRate, const int32 InNumChannels = 2);
43
47
70
71 SIGNALPROCESSING_API void ProcessAudioFrame(const float* InFrame, float* OutFrame, const float* InKeyFrame);
72 SIGNALPROCESSING_API void ProcessAudioFrame(const float* InFrame, float* OutFrame, const float* InKeyFrame, float* OutGain);
73 SIGNALPROCESSING_API void ProcessAudio(const float* InBuffer, const int32 InNumSamples, float* OutBuffer, const float* InKeyBuffer = nullptr, float* OutEnvelope = nullptr);
74
75 // For single channels of audio OR non-interleaved blocks of multichannel audio.
76 SIGNALPROCESSING_API void ProcessAudio(const float* const* const InBuffers, const int32 InNumFrames, float* const* OutBuffers, const float* const* const InKeyBuffers, float* const* OutEnvelopes);
77
78 protected:
81
82 // Process key frame, returning true if should continue processing
83 // (Returns false in audition mode and writes straight to output).
85
87
88 // (Optional) Low-pass filter for input signal
90
91 // (Optional) High-pass filter for input signal
93
95
97
98 // Peak mode of envelope followers
100
101 // Lookahead delay lines
103
104 // Envelope followers
106
107 // Channel values of cached detector sample
109
110 // Channel values of cached gain sample
112
113 // How far ahead to look in the audio
115
116 // The period of which the compressor decreases gain to the level determined by the compression ratio
118
119 // The period of which the compressor increases gain to 0 dB once level has fallen below the threshold
121
122 // Amplitude threshold above which gain will be reduced
124
125 // Amount of gain reduction
126 float Ratio;
127
128 // Defines how hard or soft the gain reduction blends from no gain reduction to gain reduction (determined by the ratio)
130
131 // Amount of input gain
133
134 // Amount of output gain
136
137 // Gain of key detector signal in dB
138 float KeyGain;
139
140 // Sample rate of both key and input (must match)
142
143 // Whether or not input channels are linked, and if so, how to calculate gain
145
146 // Whether or not we're in analog mode
148
149 // Whether or not to bypass processor and only output key modulator
151
152 // Whether or not key high-pass filter is enabled
154
155 // Whether or not key low-pass filter is enabled
157
158 static constexpr float UpwardsCompressionMaxGain = 36.0f;
159
160 static constexpr float MaxLookaheadMsec = 100.0f;
161
162 private:
163
164 // OutBuffers is also used a temporary buffer for processing the Key.
165 // Thus, OutBuffers must supply enough valid memory to support it's use as a
166 // temporary buffer and needs to have Max(NumInputChannels, NumKeyChannels)
167 // buffers available.
168 void ProcessAudioDeinterleaveInternal(const float* const* const InBuffers, const int32 InNumFrames, float* const* OutBuffers, const float* const* const InKeyBuffers, float* const* OutEnvelopes);
169
170 int32 GetNumDelayFrames() const;
171
172 void CalculateSlope();
173
174 void CalculateKnee();
175
176 // Points in the knee used for lagrangian interpolation
177 struct FKneePoint
178 {
179 float X{ 0.0f };
180 float Y{ 0.0f };
181 };
182 TArray<FKneePoint> KneePoints;
183
184 // For optimized LagrangianInterpolation on blocks...
185 float Denominator0Minus1;
186
187 // For optimized LagrangianInterpolation on blocks...
188 float Denominator1Minus0;
189
190 };
191
192}
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define X(Name, Desc)
Definition FormatStringSan.h:47
void Init()
Definition LockFreeList.h:4
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Filter.h:33
Definition DynamicsProcessor.h:37
SIGNALPROCESSING_API ~FDynamicsProcessor()
Definition DynamicsProcessor.cpp:35
SIGNALPROCESSING_API void SetKeyLowshelfCutoffFrequency(const float InCutoffFreq)
Definition DynamicsProcessor.cpp:155
SIGNALPROCESSING_API int32 GetNumChannels() const
Definition DynamicsProcessor.cpp:63
SIGNALPROCESSING_API void SetChannelLinkMode(const EDynamicsProcessorChannelLinkMode InLinkMode)
Definition DynamicsProcessor.cpp:204
SIGNALPROCESSING_API void SetInputGain(const float InInputGainDb)
Definition DynamicsProcessor.cpp:125
EDynamicsProcessorChannelLinkMode LinkMode
Definition DynamicsProcessor.h:144
SIGNALPROCESSING_API FDynamicsProcessor()
Definition DynamicsProcessor.cpp:10
SIGNALPROCESSING_API void ProcessAudio(const float *InBuffer, const int32 InNumSamples, float *OutBuffer, const float *InKeyBuffer=nullptr, float *OutEnvelope=nullptr)
Definition DynamicsProcessor.cpp:300
SIGNALPROCESSING_API int32 GetKeyNumChannels() const
Definition DynamicsProcessor.cpp:68
SIGNALPROCESSING_API bool ProcessKeyFrame(const float *InKeyFrame, float *OutFrame, bool bKeyIsInput)
Definition DynamicsProcessor.cpp:528
SIGNALPROCESSING_API void ComputeGains(float *InEnvFollowerDbOutGain, const int32 InNumSamples)
Definition DynamicsProcessor.cpp:670
SIGNALPROCESSING_API void SetKeyAudition(const bool InAuditionEnabled)
Definition DynamicsProcessor.cpp:130
float OutputGain
Definition DynamicsProcessor.h:135
bool bKeyHighshelfEnabled
Definition DynamicsProcessor.h:153
SIGNALPROCESSING_API void SetKeyHighshelfEnabled(const bool bInEnabled)
Definition DynamicsProcessor.cpp:145
float KeyGain
Definition DynamicsProcessor.h:138
float SlopeFactor
Definition DynamicsProcessor.h:96
float SampleRate
Definition DynamicsProcessor.h:141
EPeakMode::Type EnvelopeFollowerPeakMode
Definition DynamicsProcessor.h:99
SIGNALPROCESSING_API void SetLookaheadMsec(const float InLookAheadMsec)
Definition DynamicsProcessor.cpp:78
SIGNALPROCESSING_API void SetNumChannels(const int32 InNumChannels)
Definition DynamicsProcessor.cpp:218
SIGNALPROCESSING_API void SetKeyNumChannels(const int32 InNumChannels)
Definition DynamicsProcessor.cpp:170
SIGNALPROCESSING_API void SetKeyHighshelfGain(const float InGainDb)
Definition DynamicsProcessor.cpp:150
FBiquadFilter InputHighshelfFilter
Definition DynamicsProcessor.h:92
FBiquadFilter InputLowshelfFilter
Definition DynamicsProcessor.h:89
SIGNALPROCESSING_API void SetThreshold(const float InThresholdDb)
Definition DynamicsProcessor.cpp:106
SIGNALPROCESSING_API void SetPeakMode(const EPeakMode::Type InEnvelopeFollowerModeType)
Definition DynamicsProcessor.cpp:242
SIGNALPROCESSING_API void SetKeyHighshelfCutoffFrequency(const float InCutoffFreq)
Definition DynamicsProcessor.cpp:140
TArray< float > DetectorOuts
Definition DynamicsProcessor.h:108
float ThresholdDb
Definition DynamicsProcessor.h:123
float AttackTimeMsec
Definition DynamicsProcessor.h:117
SIGNALPROCESSING_API void SetAnalogMode(const bool bInIsAnalogMode)
Definition DynamicsProcessor.cpp:209
float LookaheadDelayMsec
Definition DynamicsProcessor.h:114
SIGNALPROCESSING_API void SetKeyLowshelfEnabled(const bool bInEnabled)
Definition DynamicsProcessor.cpp:160
static constexpr float UpwardsCompressionMaxGain
Definition DynamicsProcessor.h:158
SIGNALPROCESSING_API void SetOutputGain(const float InOutputGainDb)
Definition DynamicsProcessor.cpp:199
SIGNALPROCESSING_API float ComputeGain(const float InEnvFollowerDb)
Definition DynamicsProcessor.cpp:640
float Ratio
Definition DynamicsProcessor.h:126
SIGNALPROCESSING_API void SetKeyLowshelfGain(const float InGainDb)
Definition DynamicsProcessor.cpp:165
SIGNALPROCESSING_API void SetRatio(const float InCompressionRatio)
Definition DynamicsProcessor.cpp:112
SIGNALPROCESSING_API void SetKneeBandwidth(const float InKneeBandwidthDb)
Definition DynamicsProcessor.cpp:119
bool bKeyAuditionEnabled
Definition DynamicsProcessor.h:150
SIGNALPROCESSING_API void ProcessAudioFrame(const float *InFrame, float *OutFrame, const float *InKeyFrame)
Definition DynamicsProcessor.cpp:257
SIGNALPROCESSING_API void SetProcessingMode(const EDynamicsProcessingMode::Type ProcessingMode)
Definition DynamicsProcessor.cpp:251
SIGNALPROCESSING_API float GetMaxLookaheadMsec() const
Definition DynamicsProcessor.cpp:73
SIGNALPROCESSING_API void SetKeyGain(const float InKeyGain)
Definition DynamicsProcessor.cpp:135
bool bKeyLowshelfEnabled
Definition DynamicsProcessor.h:156
SIGNALPROCESSING_API bool IsInProcessingThreshold(const float InEnvFollowerDb) const
Definition DynamicsProcessor.cpp:626
bool bIsAnalogMode
Definition DynamicsProcessor.h:147
float InputGain
Definition DynamicsProcessor.h:132
EDynamicsProcessingMode::Type ProcessingMode
Definition DynamicsProcessor.h:94
float ReleaseTimeMsec
Definition DynamicsProcessor.h:120
SIGNALPROCESSING_API void SetReleaseTime(const float InReleaseTimeMsec)
Definition DynamicsProcessor.cpp:97
float HalfKneeBandwidthDb
Definition DynamicsProcessor.h:129
TArray< float > Gain
Definition DynamicsProcessor.h:111
static constexpr float MaxLookaheadMsec
Definition DynamicsProcessor.h:160
TArray< FIntegerDelay > LookaheadDelay
Definition DynamicsProcessor.h:102
SIGNALPROCESSING_API void SetAttackTime(const float InAttackTimeMsec)
Definition DynamicsProcessor.cpp:88
TArray< FInlineEnvelopeFollower > EnvFollower
Definition DynamicsProcessor.h:105
Definition Array.h:670
Type
Definition DynamicsProcessor.h:16
@ UpwardsCompressor
Definition DynamicsProcessor.h:21
@ Limiter
Definition DynamicsProcessor.h:18
@ Compressor
Definition DynamicsProcessor.h:17
@ Expander
Definition DynamicsProcessor.h:19
@ Count
Definition DynamicsProcessor.h:22
@ Gate
Definition DynamicsProcessor.h:20
Type
Definition EnvelopeFollower.h:17
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
EDynamicsProcessorChannelLinkMode
Definition DynamicsProcessor.h:27