47 float F1 = 176.0f,
F2 = 775.0f,
F3 = 3408.0f;
58 const simd lowerEdge(20.0f, splitFrequenciesHz.
F1, splitFrequenciesHz.
F2, splitFrequenciesHz.
F3);
59 const simd upperEdge(splitFrequenciesHz.
F1, splitFrequenciesHz.
F2, splitFrequenciesHz.
F3, nyquist);
63 template<std::
floating_po
int T, std::
size_t N>
requires(N != std::dynamic_extent)
64 [[nodiscard]] JPL_INLINE std::array<T, N + 1>
ComputeBandCenters(std::span<const T, N> splitFrequenciesHz, T nyquist = T(22050.0))
66 std::array<T, N + 1> centers{ T(20.0) };
67 std::ranges::copy(splitFrequenciesHz, ¢ers[1]);
69 for (
uint32 i = 0; i < centers.size() - 1; ++i)
70 centers[i] *= splitFrequenciesHz[i];
71 centers.back() *= nyquist;
81 const simd lowerEdge(20.0f, splitFrequenciesHz.
F1, splitFrequenciesHz.
F2, splitFrequenciesHz.
F3);
82 const simd upperEdge(splitFrequenciesHz.
F1, splitFrequenciesHz.
F2, splitFrequenciesHz.
F3, 22050.0f);
84 const simd bandRatio = upperEdge / lowerEdge;
85 const simd firstThirdCenter = lowerEdge *
pow(bandRatio,
simd(1.0f / 6.0f));
87 return firstThirdCenter;
93 (bandCenters * bandCenters).store(centers2);
95 const float f3 = centers2[3] / nyquist;
96 const float f2 = centers2[2] / f3;
97 const float f1 = centers2[1] / f2;
JPL_INLINE constexpr T Sqrt(T x) noexcept
Definition Math.h:269
Definition AcousticMaterial.h:36
std::uint32_t uint32
Definition Core.h:311
const FreqBandCenters cBandCenters
Definition FrequencyBands.h:110
constexpr SplitFrequencies cDefaultFrequencySplits
At the moment JPL Spatial uses these frequency sptits for sound propagation.
Definition FrequencyBands.h:53
JPL_INLINE SplitFrequencies SplitFrequenciesFromBandCenters(const FreqBandCenters &bandCenters, float nyquist=22050.0f)
Definition FrequencyBands.h:90
JPL_INLINE FreqBandCenters ComputeBandLowerThirdCenters(const SplitFrequencies &splitFrequenciesHz, float nyquist=22050.0f)
Definition FrequencyBands.h:79
JPL_INLINE simd round(const simd &vec) noexcept
Element-wise round to nearest integer value.
Definition SIMD.h:1930
simd pow(const simd &x, const simd &y) noexcept
Definition SIMDMath.h:372
JPL_INLINE FreqBandCenters ComputeBandCenters(const SplitFrequencies &splitFrequenciesHz, float nyquist=22050.0f)
Definition FrequencyBands.h:56
Split frequencies points for crossover.
Definition FrequencyBands.h:46
float F1
Definition FrequencyBands.h:47
float F2
Definition FrequencyBands.h:47
float F3
Definition FrequencyBands.h:47
constexpr bool operator==(const SplitFrequencies &) const noexcept=default
Minimal 4-wide 32-bit float vector implementation for SIMD.
Definition SIMD.h:60