ambdec.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #ifndef CORE_AMBDEC_H
  2. #define CORE_AMBDEC_H
  3. #include <array>
  4. #include <memory>
  5. #include <optional>
  6. #include <string>
  7. #include <vector>
  8. #include "alspan.h"
  9. #include "core/ambidefs.h"
  10. /* Helpers to read .ambdec configuration files. */
  11. enum class AmbDecScale {
  12. Unset,
  13. N3D,
  14. SN3D,
  15. FuMa,
  16. };
  17. struct AmbDecConf {
  18. std::string Description;
  19. int Version{0}; /* Must be 3 */
  20. unsigned int ChanMask{0u};
  21. unsigned int FreqBands{0u}; /* Must be 1 or 2 */
  22. AmbDecScale CoeffScale{AmbDecScale::Unset};
  23. float XOverFreq{0.0f};
  24. float XOverRatio{0.0f};
  25. struct SpeakerConf {
  26. std::string Name;
  27. float Distance{0.0f};
  28. float Azimuth{0.0f};
  29. float Elevation{0.0f};
  30. std::string Connection;
  31. };
  32. std::vector<SpeakerConf> Speakers;
  33. using CoeffArray = std::array<float,MaxAmbiChannels>;
  34. std::vector<CoeffArray> Matrix;
  35. /* Unused when FreqBands == 1 */
  36. std::array<float,MaxAmbiOrder+1> LFOrderGain{};
  37. al::span<CoeffArray> LFMatrix;
  38. std::array<float,MaxAmbiOrder+1> HFOrderGain{};
  39. al::span<CoeffArray> HFMatrix;
  40. ~AmbDecConf();
  41. std::optional<std::string> load(const char *fname) noexcept;
  42. };
  43. #endif /* CORE_AMBDEC_H */