front_stablizer.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. #ifndef ALC_FRONT_STABLIZER_H
  2. #define ALC_FRONT_STABLIZER_H
  3. #include <array>
  4. #include <memory>
  5. #include "almalloc.h"
  6. #include "core/bufferline.h"
  7. #include "core/filters/splitter.h"
  8. struct FrontStablizer {
  9. static constexpr size_t DelayLength{256u};
  10. FrontStablizer(size_t numchans) : DelayBuf{numchans} { }
  11. alignas(16) std::array<float,BufferLineSize + DelayLength> Side{};
  12. alignas(16) std::array<float,BufferLineSize + DelayLength> MidDirect{};
  13. alignas(16) std::array<float,DelayLength> MidDelay{};
  14. alignas(16) std::array<float,BufferLineSize + DelayLength> TempBuf{};
  15. BandSplitter MidFilter;
  16. alignas(16) FloatBufferLine MidLF{};
  17. alignas(16) FloatBufferLine MidHF{};
  18. using DelayLine = std::array<float,DelayLength>;
  19. al::FlexArray<DelayLine,16> DelayBuf;
  20. static std::unique_ptr<FrontStablizer> Create(size_t numchans)
  21. { return std::unique_ptr<FrontStablizer>{new(FamCount(numchans)) FrontStablizer{numchans}}; }
  22. DEF_FAM_NEWDEL(FrontStablizer, DelayBuf)
  23. };
  24. #endif /* ALC_FRONT_STABLIZER_H */