ec30a306df
While a neat trick, it's been shown to be too volatile and add noise as the signal gets louder. It's better to just accept the phase shift and ensure everything stays aligned.
32 lines
866 B
C++
32 lines
866 B
C++
#ifndef CORE_FRONT_STABLIZER_H
|
|
#define CORE_FRONT_STABLIZER_H
|
|
|
|
#include <array>
|
|
#include <memory>
|
|
|
|
#include "almalloc.h"
|
|
#include "bufferline.h"
|
|
#include "filters/splitter.h"
|
|
|
|
|
|
struct FrontStablizer {
|
|
FrontStablizer(size_t numchans) : ChannelFilters{numchans} { }
|
|
|
|
alignas(16) std::array<float,BufferLineSize> MidDirect{};
|
|
alignas(16) std::array<float,BufferLineSize> Side{};
|
|
alignas(16) std::array<float,BufferLineSize> Temp{};
|
|
|
|
BandSplitter MidFilter;
|
|
alignas(16) FloatBufferLine MidLF{};
|
|
alignas(16) FloatBufferLine MidHF{};
|
|
|
|
al::FlexArray<BandSplitter,16> ChannelFilters;
|
|
|
|
static std::unique_ptr<FrontStablizer> Create(size_t numchans)
|
|
{ return std::unique_ptr<FrontStablizer>{new(FamCount(numchans)) FrontStablizer{numchans}}; }
|
|
|
|
DEF_FAM_NEWDEL(FrontStablizer, ChannelFilters)
|
|
};
|
|
|
|
#endif /* CORE_FRONT_STABLIZER_H */
|