#ifndef CORE_AMBDEC_H #define CORE_AMBDEC_H #include #include #include #include #include #include "core/ambidefs.h" /* Helpers to read .ambdec configuration files. */ enum class AmbDecScale { Unset, N3D, SN3D, FuMa, }; struct AmbDecConf { std::string Description; int Version{0}; /* Must be 3 */ unsigned int ChanMask{0u}; unsigned int FreqBands{0u}; /* Must be 1 or 2 */ AmbDecScale CoeffScale{AmbDecScale::Unset}; float XOverFreq{0.0f}; float XOverRatio{0.0f}; struct SpeakerConf { std::string Name; float Distance{0.0f}; float Azimuth{0.0f}; float Elevation{0.0f}; std::string Connection; }; std::vector Speakers; using CoeffArray = std::array; std::vector Matrix; /* Unused when FreqBands == 1 */ std::array LFOrderGain{}; CoeffArray *LFMatrix; std::array HFOrderGain{}; CoeffArray *HFMatrix; ~AmbDecConf(); std::optional load(const char *fname) noexcept; }; #endif /* CORE_AMBDEC_H */