diff options
Diffstat (limited to 'alc/ambdec.h')
-rw-r--r-- | alc/ambdec.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/alc/ambdec.h b/alc/ambdec.h new file mode 100644 index 00000000..ff7b71ee --- /dev/null +++ b/alc/ambdec.h @@ -0,0 +1,48 @@ +#ifndef AMBDEC_H +#define AMBDEC_H + +#include <array> +#include <string> + +#include "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<SpeakerConf> Speakers; + + using CoeffArray = std::array<float,MAX_AMBI_CHANNELS>; + /* Unused when FreqBands == 1 */ + float LFOrderGain[MAX_AMBI_ORDER+1]{}; + al::vector<CoeffArray> LFMatrix; + + float HFOrderGain[MAX_AMBI_ORDER+1]{}; + al::vector<CoeffArray> HFMatrix; + + int load(const char *fname) noexcept; +}; + +#endif /* AMBDEC_H */ |