#ifndef AMBDEC_H #define AMBDEC_H #include #include #include "core/ambidefs.h" #include "vector.h" /* Helpers to read .ambdec configuration files. */ enum class AmbDecScale { 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{}; 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; }; al::vector Speakers; using CoeffArray = std::array; /* Unused when FreqBands == 1 */ float LFOrderGain[MaxAmbiOrder+1]{}; al::vector LFMatrix; float HFOrderGain[MaxAmbiOrder+1]{}; al::vector HFMatrix; int load(const char *fname) noexcept; }; #endif /* AMBDEC_H */