UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DynamicStateVariableFilter.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
8namespace Audio
9{
16
17 // combination of two state-variable filters, the first filtering a key signal, which drives gain in the second
19 {
20 public:
23
25 SIGNALPROCESSING_API void ProcessAudio(const float* InSamples, float* OutSamples, const float* KeySamples, const int32 InNumSamples);
26
28 SIGNALPROCESSING_API void SetQ(const float InQ);
29 SIGNALPROCESSING_API void SetGain(const float InGain);
31
38 SIGNALPROCESSING_API void SetRatio(const float InRatio);
39 SIGNALPROCESSING_API void SetKnee(const float InKnee);
40
42
43 protected:
44 float SampleRate = 48000.f;
45 float OneOverSampleRate = 1.f / 48000.f;
47
48 // human readable parameters
50
51 float Frequency = 1000.f;
52 float Q = 1.f;
53 float OneOverQ = 1.f;
54 float ThresholdDb = -12.f;
55 float DynamicRangeDb = 0.f;
56 float Ratio = 1.5f;
57 float GainDb = 1.f;
58 float Knee = 12.f;
59 float HalfKnee = 6.f;
60
61 // cached result of envelope follower
62 float ScaledGainLinear = 1.f;
63
64 // Cached Gain ratio, only needs to be updated when Ratio is changed
65 float SlopeFactor = 0.f;
66
67 // whether coefficients need updating
68 bool bNeedsUpdate = true;
69
70 // state-variable coefficient formulas for the included filter modes can be found here:
71 // https://cytomic.com/files/dsp/SvfLinearTrapOptimised2.pdf
73 {
74 // TanOmega
75 float G = 0.f;
76
77 // Feedback / 1/Q
78 float K = 0.f;
79
80 // Node Scalars
81 float A0 = 1.f;
82 float A1 = 0.f;
83 float A2 = 0.f;
84 float A3 = 0.f;
85
86 // Output Scalars
87 float M0 = 1.f;
88 float M1 = 0.f;
89 float M2 = 0.f;
90 };
91
92 struct FSVFState
93 {
94 // Nodes
95 float V1 = 0.f;
96 float V2 = 0.f;
97 float V3 = 0.f;
98
99 // Delays
100 float Z1 = 0.f;
101 float Z2 = 0.f;
102
103 void ProcessSample(const FSVFCoefficients& Coeffs, const float InSample);
104 };
105
107
109 // One per channel
111
113
115
116 // Points in the knee used for lagrangian interpolation
118
119 SIGNALPROCESSING_API void ProcessBell(const float* InSamples, float* OutSamples, const float* KeySamples, const int32 InNumSamples);
120 SIGNALPROCESSING_API void ProcessLowShelf(const float* InSamples, float* OutSamples, const float* KeySamples, const int32 InNumSamples);
121 SIGNALPROCESSING_API void ProcessHighShelf(const float* InSamples, float* OutSamples, const float* KeySamples, const int32 InNumSamples);
122
126
127 SIGNALPROCESSING_API float CalcGain(const float KeySample);
128 };
129}
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
void Init()
Definition LockFreeList.h:4
Definition DynamicStateVariableFilter.h:19
float Knee
Definition DynamicStateVariableFilter.h:58
SIGNALPROCESSING_API void ProcessBell(const float *InSamples, float *OutSamples, const float *KeySamples, const int32 InNumSamples)
Definition DynamicStateVariableFilter.cpp:127
float Ratio
Definition DynamicStateVariableFilter.h:56
int32 NumChannels
Definition DynamicStateVariableFilter.h:46
float DynamicRangeDb
Definition DynamicStateVariableFilter.h:55
float ScaledGainLinear
Definition DynamicStateVariableFilter.h:62
bool bNeedsUpdate
Definition DynamicStateVariableFilter.h:68
SIGNALPROCESSING_API void UpdatePreFilterVariables()
Definition DynamicStateVariableFilter.cpp:48
FInlineEnvelopeFollower Envelope
Definition DynamicStateVariableFilter.h:106
SIGNALPROCESSING_API void SetGain(const float InGain)
Definition DynamicStateVariableFilter.cpp:308
SIGNALPROCESSING_API void ProcessAudio(const float *InSamples, float *OutSamples, const int32 InNumSamples)
Definition DynamicStateVariableFilter.cpp:100
FSVFCoefficients KeyVars
Definition DynamicStateVariableFilter.h:112
SIGNALPROCESSING_API void SetFilterType(const EDynamicFilterType InFilterType)
Definition DynamicStateVariableFilter.cpp:317
SIGNALPROCESSING_API void SetQ(const float InQ)
Definition DynamicStateVariableFilter.cpp:297
FSVFState KeyFilterState
Definition DynamicStateVariableFilter.h:108
float OneOverSampleRate
Definition DynamicStateVariableFilter.h:45
float ThresholdDb
Definition DynamicStateVariableFilter.h:54
float GainDb
Definition DynamicStateVariableFilter.h:57
TArray< FVector2D > KneePoints
Definition DynamicStateVariableFilter.h:117
SIGNALPROCESSING_API void SetDynamicRange(const float InDynamicRange)
Definition DynamicStateVariableFilter.cpp:351
FSVFCoefficients OutputVars
Definition DynamicStateVariableFilter.h:114
SIGNALPROCESSING_API float GetGainReduction()
Definition DynamicStateVariableFilter.cpp:368
SIGNALPROCESSING_API void SetKnee(const float InKnee)
Definition DynamicStateVariableFilter.cpp:362
SIGNALPROCESSING_API void SetEnvMode(const EPeakMode::Type InMode)
Definition DynamicStateVariableFilter.cpp:346
SIGNALPROCESSING_API void UpdateSettings()
Definition DynamicStateVariableFilter.cpp:40
SIGNALPROCESSING_API void ProcessHighShelf(const float *InSamples, float *OutSamples, const float *KeySamples, const int32 InNumSamples)
Definition DynamicStateVariableFilter.cpp:211
float Frequency
Definition DynamicStateVariableFilter.h:51
SIGNALPROCESSING_API void ProcessLowShelf(const float *InSamples, float *OutSamples, const float *KeySamples, const int32 InNumSamples)
Definition DynamicStateVariableFilter.cpp:169
SIGNALPROCESSING_API void SetThreshold(const float InThresholdDb)
Definition DynamicStateVariableFilter.cpp:341
SIGNALPROCESSING_API float CalcGain(const float KeySample)
Definition DynamicStateVariableFilter.cpp:253
EDynamicFilterType FilterType
Definition DynamicStateVariableFilter.h:49
float Q
Definition DynamicStateVariableFilter.h:52
SIGNALPROCESSING_API void SetRatio(const float InRatio)
Definition DynamicStateVariableFilter.cpp:356
float HalfKnee
Definition DynamicStateVariableFilter.h:59
float SlopeFactor
Definition DynamicStateVariableFilter.h:65
float OneOverQ
Definition DynamicStateVariableFilter.h:53
float SampleRate
Definition DynamicStateVariableFilter.h:44
SIGNALPROCESSING_API void SetAttackTime(const float InAttackTime)
Definition DynamicStateVariableFilter.cpp:331
TArray< FSVFState > FilterState
Definition DynamicStateVariableFilter.h:110
SIGNALPROCESSING_API void SetFrequency(const float InFrequency)
Definition DynamicStateVariableFilter.cpp:285
SIGNALPROCESSING_API void UpdatePostFilterVariables()
Definition DynamicStateVariableFilter.cpp:57
SIGNALPROCESSING_API void SetReleaseTime(const float InReleaseTime)
Definition DynamicStateVariableFilter.cpp:336
SIGNALPROCESSING_API void Reset()
Definition DynamicStateVariableFilter.cpp:34
SIGNALPROCESSING_API void SetAnalog(const bool bInAnalog)
Definition DynamicStateVariableFilter.cpp:326
Definition EnvelopeFollower.h:323
Definition Array.h:670
Type
Definition EnvelopeFollower.h:17
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
EDynamicFilterType
Definition DynamicStateVariableFilter.h:11
@ HighShelf
Definition DynamicStateVariableFilter.h:14
@ LowShelf
Definition DynamicStateVariableFilter.h:13
@ Bell
Definition DynamicStateVariableFilter.h:12
Definition DynamicStateVariableFilter.h:73
float A0
Definition DynamicStateVariableFilter.h:81
float A3
Definition DynamicStateVariableFilter.h:84
float A1
Definition DynamicStateVariableFilter.h:82
float M0
Definition DynamicStateVariableFilter.h:87
float K
Definition DynamicStateVariableFilter.h:78
float M1
Definition DynamicStateVariableFilter.h:88
float G
Definition DynamicStateVariableFilter.h:75
float M2
Definition DynamicStateVariableFilter.h:89
float A2
Definition DynamicStateVariableFilter.h:83
Definition DynamicStateVariableFilter.h:93
float V3
Definition DynamicStateVariableFilter.h:97
float Z2
Definition DynamicStateVariableFilter.h:101
float V1
Definition DynamicStateVariableFilter.h:95
float Z1
Definition DynamicStateVariableFilter.h:100
void ProcessSample(const FSVFCoefficients &Coeffs, const float InSample)
Definition DynamicStateVariableFilter.cpp:373
float V2
Definition DynamicStateVariableFilter.h:96