39 [[nosiscard]] JPL_INLINE simd
EstimateRT60_Sabine(
float w,
float l,
float h,
const simd& avgAbsorption);
42 [[nosiscard]] JPL_INLINE simd
EstimateRT60_Sabine(
float w,
float l,
float h,
const simd& avgAbsorption,
const simd& airAttenuation_dB);
50 [[nosiscard]] JPL_INLINE simd
EstimateRT60_Eyring(
float w,
float l,
float h,
const simd& avgAbsorption);
53 [[nosiscard]] JPL_INLINE simd
EstimateRT60_Eyring(
float w,
float l,
float h,
const simd& avgAbsorption,
const simd& airAttenuation_dB);
59 static constexpr float eps = 1.0e-4f;
60 const simd absorption =
clamp(avgAbsorption, eps, 1.0f - eps);
61 return simd(0.161f * mfpMeters) / (4.0f * -
log(
simd(1.0f) - absorption));
80 [[nosidscard]]
static JPL_INLINE
simd Compute(
float surface,
const simd& avgAbsorption)
82 return surface * avgAbsorption;
88 [[nosidscard]]
static JPL_INLINE
simd Compute(
float surface,
const simd& avgAbsorption)
90 return -surface *
log(
simd(1.0f) - avgAbsorption);
98 static const float napersCoeff = 1.0f / (10.0f *
::log10(std::numbers::e_v<float>));
99 const simd m = airAttenuation_dB * napersCoeff;
100 return 4.0f * m * volume;
103 template<
class SurfaceFactor>
106 static const simd K(0.161f);
107 const float surface = 2.0f * (l * w + l * h + w * h);
108 const float volume = w * l * h;
109 return simd(K * volume) / SurfaceFactor::Compute(surface, avgAbsorption);
112 template<
class SurfaceFactor>
115 static const simd K(0.161f);
116 const float surface = 2.0f * (l * w + l * h + w * h);
117 const float volume = w * l * h;
118 return simd(K * volume) /
JPL_INLINE simd ComputeAirAbsorptionFactor(float volume, const simd &airAttenuation_dB)
Definition ReverbUtilities.h:94
JPL_INLINE simd EstimateRT60(float w, float l, float h, const simd &avgAbsorption)
Definition ReverbUtilities.h:104
Definition AcousticMaterial.h:36
JPL_INLINE simd clamp(const simd &value, const simd &minV, const simd &maxV) noexcept
Element-wise clamp.
Definition SIMD.h:1838
JPL_INLINE simd EstimateRT60_Sabine(float w, float l, float h, const simd &avgAbsorption)
Definition ReverbUtilities.h:125
JPL_INLINE simd EstimateRT60_Eyring(float w, float l, float h, const simd &avgAbsorption)
Definition ReverbUtilities.h:136
JPL_INLINE simd EstimateRT60FromMFP(float mfpMeters, const simd &avgAbsorption)
Estimate RT60 from Mean Free Path using Eyring-Norris equation.
Definition ReverbUtilities.h:57
simd log(simd x) noexcept
Definition SIMDMath.h:191
JPL_INLINE simd log10(const simd &vec) noexcept
log10 for 4-wide 32-bit float vector
Definition SIMDMath.h:241
Definition ReverbUtilities.h:87
static JPL_INLINE simd Compute(float surface, const simd &avgAbsorption)
Definition ReverbUtilities.h:88
Definition ReverbUtilities.h:79
static JPL_INLINE simd Compute(float surface, const simd &avgAbsorption)
Definition ReverbUtilities.h:80
Minimal 4-wide 32-bit float vector implementation for SIMD.
Definition SIMD.h:60