UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
LinkwitzRileyBandSplitter.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"
6#include "DSP/Filter.h"
9
10#define MAX_BUFFER_SIZE 8192 // 8 channels * 1024 samples
11
12namespace Audio
13{
20
66
67 /*
68 * Helper for Multi-Band processing to generate Linwitz-Riley filtered outputs from input
69 * https://en.wikipedia.org/wiki/Linkwitz%E2%80%93Riley_filter
70 */
72 {
73 public:
75 {
76 float Frequency = 0.f;
77 float Bandwidth = 0.f;
78 };
79
81
82 // initalize filters
84 const float InSampleRate,
85 const EFilterOrder FilterOrder,
86 const bool bInPhaseCompensate,
87 const TArray<float>& InCrossovers); // Always InBands - 1 Crossovers
88
90 SIGNALPROCESSING_API void ProcessAudioBuffer(const float* InBuffer, FMultibandBuffer& OutBuffer, const int32 NumFrames);
91
93
94 private:
96
97 int32 NumBands = 1;
98 int32 NumChannels = 2;
99 float SampleRate = 48000.f;
100
101 TArray<float> SharedBuffer;
102 TArray<float> BandWorkBuffer;
103 FAlignedFloatBuffer SharedAlignedBuffer;
104 FAlignedFloatBuffer BandAlignedBuffer;
105
108
109 SIGNALPROCESSING_API void CopyToBuffer(float* Destination, const float* Origin, const int32 NumSamples);
110 SIGNALPROCESSING_API void InvertBuffer(float* Buffer, const int32 NumSamples);
112 };
113}
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 LinkwitzRileyBandSplitter.h:72
SIGNALPROCESSING_API void ProcessAudioFrame(const float *InBuffer, FMultibandBuffer &OutBuffer)
Definition LinkwitzRileyBandSplitter.cpp:89
SIGNALPROCESSING_API void ProcessAudioBuffer(const float *InBuffer, FMultibandBuffer &OutBuffer, const int32 NumFrames)
Definition LinkwitzRileyBandSplitter.cpp:137
FLinkwitzRileyBandSplitter()
Definition LinkwitzRileyBandSplitter.h:80
SIGNALPROCESSING_API void SetCrossovers(const TArray< float > &InCrossoverFrequencies)
Definition LinkwitzRileyBandSplitter.cpp:190
Definition VariablePoleFilter.h:19
Definition Array.h:670
void SetNumZeroed(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2340
void Reset(SizeType NewSize=0)
Definition Array.h:2246
SizeType AddZeroed()
Definition Array.h:2755
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
EFilterOrder
Definition VariablePoleFilter.h:11
Definition LinkwitzRileyBandSplitter.h:15
TArray< FVariablePoleFilter > Filters
Definition LinkwitzRileyBandSplitter.h:16
FVariablePoleFilter & operator[](int32 InIndex)
Definition LinkwitzRileyBandSplitter.h:18
Definition LinkwitzRileyBandSplitter.h:75
float Bandwidth
Definition LinkwitzRileyBandSplitter.h:77
float Frequency
Definition LinkwitzRileyBandSplitter.h:76
Definition LinkwitzRileyBandSplitter.h:22
void Init(int32 InBands, int32 InSamples)
Definition LinkwitzRileyBandSplitter.h:37
int32 NumBands
Definition LinkwitzRileyBandSplitter.h:25
void SetBands(int32 InBands)
Definition LinkwitzRileyBandSplitter.h:45
void Reset()
Definition LinkwitzRileyBandSplitter.h:58
float * operator[](int32 BandIndex)
Definition LinkwitzRileyBandSplitter.h:64
Audio::FAlignedFloatBuffer Buffer
Definition LinkwitzRileyBandSplitter.h:23
FMultibandBuffer(int32 InBands, int32 InSamples)
Definition LinkwitzRileyBandSplitter.h:30
void SetSamples(int32 InSamples)
Definition LinkwitzRileyBandSplitter.h:51
int32 NumSamples
Definition LinkwitzRileyBandSplitter.h:26