aboutsummaryrefslogtreecommitdiffstats
path: root/alc/ambdec.h
diff options
context:
space:
mode:
Diffstat (limited to 'alc/ambdec.h')
-rw-r--r--alc/ambdec.h48
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 */