aboutsummaryrefslogtreecommitdiffstats
path: root/core/front_stablizer.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/front_stablizer.h')
-rw-r--r--core/front_stablizer.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/core/front_stablizer.h b/core/front_stablizer.h
new file mode 100644
index 00000000..3d328a8d
--- /dev/null
+++ b/core/front_stablizer.h
@@ -0,0 +1,36 @@
+#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 {
+ static constexpr size_t DelayLength{256u};
+
+ FrontStablizer(size_t numchans) : DelayBuf{numchans} { }
+
+ alignas(16) std::array<float,BufferLineSize + DelayLength> Side{};
+ alignas(16) std::array<float,BufferLineSize + DelayLength> MidDirect{};
+ alignas(16) std::array<float,DelayLength> MidDelay{};
+
+ alignas(16) std::array<float,BufferLineSize + DelayLength> TempBuf{};
+
+ BandSplitter MidFilter;
+ alignas(16) FloatBufferLine MidLF{};
+ alignas(16) FloatBufferLine MidHF{};
+
+ using DelayLine = std::array<float,DelayLength>;
+ al::FlexArray<DelayLine,16> DelayBuf;
+
+ static std::unique_ptr<FrontStablizer> Create(size_t numchans)
+ { return std::unique_ptr<FrontStablizer>{new(FamCount(numchans)) FrontStablizer{numchans}}; }
+
+ DEF_FAM_NEWDEL(FrontStablizer, DelayBuf)
+};
+
+#endif /* CORE_FRONT_STABLIZER_H */