Get rid of MathDefs
This commit is contained in:
parent
1bbea9cd30
commit
f8ac1ffe80
@ -68,7 +68,6 @@
|
||||
#include "core/voice_change.h"
|
||||
#include "event.h"
|
||||
#include "filter.h"
|
||||
#include "math_defs.h"
|
||||
#include "opthelpers.h"
|
||||
#include "ringbuffer.h"
|
||||
#include "threads.h"
|
||||
|
21
alc/alu.cpp
21
alc/alu.cpp
@ -40,6 +40,7 @@
|
||||
#include <utility>
|
||||
|
||||
#include "almalloc.h"
|
||||
#include "alnumbers.h"
|
||||
#include "alnumeric.h"
|
||||
#include "alspan.h"
|
||||
#include "alstring.h"
|
||||
@ -505,16 +506,16 @@ bool CalcEffectSlotParams(EffectSlot *slot, EffectSlot **sorted_slots, ContextBa
|
||||
inline float ScaleAzimuthFront(float azimuth, float scale)
|
||||
{
|
||||
const float abs_azi{std::fabs(azimuth)};
|
||||
if(!(abs_azi >= al::MathDefs<float>::Pi()*0.5f))
|
||||
return std::copysign(minf(abs_azi*scale, al::MathDefs<float>::Pi()*0.5f), azimuth);
|
||||
if(!(abs_azi >= al::numbers::pi_v<float>*0.5f))
|
||||
return std::copysign(minf(abs_azi*scale, al::numbers::pi_v<float>*0.5f), azimuth);
|
||||
return azimuth;
|
||||
}
|
||||
|
||||
/* Wraps the given value in radians to stay between [-pi,+pi] */
|
||||
inline float WrapRadians(float r)
|
||||
{
|
||||
constexpr float Pi{al::MathDefs<float>::Pi()};
|
||||
constexpr float Pi2{al::MathDefs<float>::Tau()};
|
||||
constexpr float Pi{al::numbers::pi_v<float>};
|
||||
constexpr float Pi2{Pi*2.0f};
|
||||
if(r > Pi) return std::fmod(Pi+r, Pi2) - Pi;
|
||||
if(r < -Pi) return Pi - std::fmod(Pi-r, Pi2);
|
||||
return r;
|
||||
@ -617,17 +618,18 @@ void AmbiRotator(std::array<std::array<float,MaxAmbiChannels>,MaxAmbiChannels> &
|
||||
auto V = [P](const int l, const int m, const int n, const size_t last_band,
|
||||
const std::array<std::array<float,MaxAmbiChannels>,MaxAmbiChannels> &R)
|
||||
{
|
||||
using namespace al::numbers;
|
||||
if(m > 0)
|
||||
{
|
||||
const bool d{m == 1};
|
||||
const float p0{P( 1, l, m-1, n, last_band, R)};
|
||||
const float p1{P(-1, l, -m+1, n, last_band, R)};
|
||||
return d ? p0*std::sqrt(2.0f) : (p0 - p1);
|
||||
return d ? p0*sqrt2_v<float> : (p0 - p1);
|
||||
}
|
||||
const bool d{m == -1};
|
||||
const float p0{P( 1, l, m+1, n, last_band, R)};
|
||||
const float p1{P(-1, l, -m-1, n, last_band, R)};
|
||||
return d ? p1*std::sqrt(2.0f) : (p0 + p1);
|
||||
return d ? p1*sqrt2_v<float> : (p0 + p1);
|
||||
};
|
||||
auto W = [P](const int l, const int m, const int n, const size_t last_band,
|
||||
const std::array<std::array<float,MaxAmbiChannels>,MaxAmbiChannels> &R)
|
||||
@ -816,7 +818,7 @@ void CalcPanningAndFilters(Voice *voice, const float xpos, const float ypos, con
|
||||
* panning.
|
||||
*/
|
||||
const float coverage{!(Distance > std::numeric_limits<float>::epsilon()) ? 1.0f :
|
||||
(Spread * (1.0f/al::MathDefs<float>::Tau()))};
|
||||
(al::numbers::inv_pi_v<float>/2.0f * Spread)};
|
||||
|
||||
auto calc_coeffs = [xpos,ypos,zpos](RenderMode mode)
|
||||
{
|
||||
@ -1388,7 +1390,8 @@ void CalcAttnSourceParams(Voice *voice, const VoiceProps *props, const ContextBa
|
||||
/* Calculate directional soundcones */
|
||||
if(directional && props->InnerAngle < 360.0f)
|
||||
{
|
||||
const float Angle{Rad2Deg(std::acos(-Direction.dot_product(ToSource)) * ConeScale * 2.0f)};
|
||||
constexpr float Rad2Deg{5.72957795130823229e+01f/*180/pi*/};
|
||||
const float Angle{Rad2Deg*2.0f * std::acos(-Direction.dot_product(ToSource)) * ConeScale};
|
||||
|
||||
float ConeGain, ConeHF;
|
||||
if(!(Angle > props->InnerAngle))
|
||||
@ -1520,7 +1523,7 @@ void CalcAttnSourceParams(Voice *voice, const VoiceProps *props, const ContextBa
|
||||
|
||||
float spread{0.0f};
|
||||
if(props->Radius > Distance)
|
||||
spread = al::MathDefs<float>::Tau() - Distance/props->Radius*al::MathDefs<float>::Pi();
|
||||
spread = al::numbers::pi_v<float>*2.0f - Distance/props->Radius*al::numbers::pi_v<float>;
|
||||
else if(Distance > 0.0f)
|
||||
spread = std::asin(props->Radius/Distance) * 2.0f;
|
||||
|
||||
|
@ -28,6 +28,7 @@
|
||||
|
||||
#include "alc/effects/base.h"
|
||||
#include "almalloc.h"
|
||||
#include "alnumbers.h"
|
||||
#include "alnumeric.h"
|
||||
#include "alspan.h"
|
||||
#include "core/ambidefs.h"
|
||||
@ -38,7 +39,6 @@
|
||||
#include "core/effectslot.h"
|
||||
#include "core/mixer.h"
|
||||
#include "intrusive_ptr.h"
|
||||
#include "math_defs.h"
|
||||
|
||||
|
||||
namespace {
|
||||
@ -159,7 +159,7 @@ void AutowahState::process(const size_t samplesToDo,
|
||||
env_delay = lerp(sample, env_delay, a);
|
||||
|
||||
/* Calculate the cos and alpha components for this sample's filter. */
|
||||
w0 = minf((bandwidth*env_delay + freq_min), 0.46f) * al::MathDefs<float>::Tau();
|
||||
w0 = minf((bandwidth*env_delay + freq_min), 0.46f) * (al::numbers::pi_v<float>*2.0f);
|
||||
mEnv[i].cos_w0 = std::cos(w0);
|
||||
mEnv[i].alpha = std::sin(w0)/(2.0f * QFactor);
|
||||
}
|
||||
|
@ -28,6 +28,7 @@
|
||||
|
||||
#include "alc/effects/base.h"
|
||||
#include "almalloc.h"
|
||||
#include "alnumbers.h"
|
||||
#include "alnumeric.h"
|
||||
#include "alspan.h"
|
||||
#include "core/bufferline.h"
|
||||
@ -39,7 +40,6 @@
|
||||
#include "core/mixer/defs.h"
|
||||
#include "core/resampler_limits.h"
|
||||
#include "intrusive_ptr.h"
|
||||
#include "math_defs.h"
|
||||
#include "opthelpers.h"
|
||||
#include "vector.h"
|
||||
|
||||
@ -150,7 +150,7 @@ void ChorusState::update(const ContextBase *Context, const EffectSlot *Slot,
|
||||
mLfoScale = 4.0f / static_cast<float>(mLfoRange);
|
||||
break;
|
||||
case ChorusWaveform::Sinusoid:
|
||||
mLfoScale = al::MathDefs<float>::Tau() / static_cast<float>(mLfoRange);
|
||||
mLfoScale = al::numbers::pi_v<float>*2.0f / static_cast<float>(mLfoRange);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
|
||||
#include "alc/effects/base.h"
|
||||
#include "almalloc.h"
|
||||
#include "alnumbers.h"
|
||||
#include "alnumeric.h"
|
||||
#include "alspan.h"
|
||||
#include "core/bufferline.h"
|
||||
@ -38,7 +39,6 @@
|
||||
#include "core/mixer.h"
|
||||
#include "core/mixer/defs.h"
|
||||
#include "intrusive_ptr.h"
|
||||
#include "math_defs.h"
|
||||
|
||||
|
||||
namespace {
|
||||
@ -77,7 +77,7 @@ void DistortionState::update(const ContextBase *context, const EffectSlot *slot,
|
||||
const DeviceBase *device{context->mDevice};
|
||||
|
||||
/* Store waveshaper edge settings. */
|
||||
const float edge{minf(std::sin(al::MathDefs<float>::Pi()*0.5f * props->Distortion.Edge),
|
||||
const float edge{minf(std::sin(al::numbers::pi_v<float>*0.5f * props->Distortion.Edge),
|
||||
0.99f)};
|
||||
mEdgeCoeff = 2.0f * edge / (1.0f-edge);
|
||||
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "alc/effects/base.h"
|
||||
#include "alcomplex.h"
|
||||
#include "almalloc.h"
|
||||
#include "alnumbers.h"
|
||||
#include "alnumeric.h"
|
||||
#include "alspan.h"
|
||||
#include "core/bufferline.h"
|
||||
@ -40,7 +41,6 @@
|
||||
#include "core/mixer.h"
|
||||
#include "core/mixer/defs.h"
|
||||
#include "intrusive_ptr.h"
|
||||
#include "math_defs.h"
|
||||
|
||||
|
||||
namespace {
|
||||
@ -61,7 +61,7 @@ std::array<double,HIL_SIZE> InitHannWindow()
|
||||
/* Create lookup table of the Hann window for the desired size, i.e. HIL_SIZE */
|
||||
for(size_t i{0};i < HIL_SIZE>>1;i++)
|
||||
{
|
||||
constexpr double scale{al::MathDefs<double>::Pi() / double{HIL_SIZE}};
|
||||
constexpr double scale{al::numbers::pi / double{HIL_SIZE}};
|
||||
const double val{std::sin(static_cast<double>(i+1) * scale)};
|
||||
ret[i] = ret[HIL_SIZE-1-i] = val * val;
|
||||
}
|
||||
@ -217,7 +217,7 @@ void FshifterState::process(const size_t samplesToDo, const al::span<const Float
|
||||
uint phase_idx{mPhase[c]};
|
||||
for(size_t k{0};k < samplesToDo;++k)
|
||||
{
|
||||
const double phase{phase_idx * ((1.0/MixerFracOne) * al::MathDefs<double>::Tau())};
|
||||
const double phase{phase_idx * (al::numbers::pi*2.0 / MixerFracOne)};
|
||||
BufferOut[k] = static_cast<float>(mOutdata[k].real()*std::cos(phase) +
|
||||
mOutdata[k].imag()*std::sin(phase)*mSign[c]);
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
|
||||
#include "alc/effects/base.h"
|
||||
#include "almalloc.h"
|
||||
#include "alnumbers.h"
|
||||
#include "alnumeric.h"
|
||||
#include "alspan.h"
|
||||
#include "core/ambidefs.h"
|
||||
@ -38,7 +39,6 @@
|
||||
#include "core/filters/biquad.h"
|
||||
#include "core/mixer.h"
|
||||
#include "intrusive_ptr.h"
|
||||
#include "math_defs.h"
|
||||
|
||||
|
||||
namespace {
|
||||
@ -53,7 +53,7 @@ using uint = unsigned int;
|
||||
|
||||
inline float Sin(uint index)
|
||||
{
|
||||
constexpr float scale{al::MathDefs<float>::Tau() / WAVEFORM_FRACONE};
|
||||
constexpr float scale{al::numbers::pi_v<float>*2.0f / WAVEFORM_FRACONE};
|
||||
return std::sin(static_cast<float>(index) * scale);
|
||||
}
|
||||
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "alc/effects/base.h"
|
||||
#include "alcomplex.h"
|
||||
#include "almalloc.h"
|
||||
#include "alnumbers.h"
|
||||
#include "alnumeric.h"
|
||||
#include "alspan.h"
|
||||
#include "core/bufferline.h"
|
||||
@ -39,7 +40,6 @@
|
||||
#include "core/mixer.h"
|
||||
#include "core/mixer/defs.h"
|
||||
#include "intrusive_ptr.h"
|
||||
#include "math_defs.h"
|
||||
|
||||
struct ContextBase;
|
||||
|
||||
@ -63,7 +63,7 @@ std::array<double,STFT_SIZE> InitHannWindow()
|
||||
/* Create lookup table of the Hann window for the desired size, i.e. STFT_SIZE */
|
||||
for(size_t i{0};i < STFT_SIZE>>1;i++)
|
||||
{
|
||||
constexpr double scale{al::MathDefs<double>::Pi() / double{STFT_SIZE}};
|
||||
constexpr double scale{al::numbers::pi / double{STFT_SIZE}};
|
||||
const double val{std::sin(static_cast<double>(i+1) * scale)};
|
||||
ret[i] = ret[STFT_SIZE-1-i] = val * val;
|
||||
}
|
||||
@ -155,7 +155,7 @@ void PshifterState::process(const size_t samplesToDo, const al::span<const Float
|
||||
/* Cycle offset per update expected of each frequency bin (bin 0 is none,
|
||||
* bin 1 is x1, bin 2 is x2, etc).
|
||||
*/
|
||||
constexpr double expected_cycles{al::MathDefs<double>::Tau() / OVERSAMP};
|
||||
constexpr double expected_cycles{al::numbers::pi*2.0 / OVERSAMP};
|
||||
|
||||
for(size_t base{0u};base < samplesToDo;)
|
||||
{
|
||||
@ -198,8 +198,8 @@ void PshifterState::process(const size_t samplesToDo, const al::span<const Float
|
||||
double tmp{(phase - mLastPhase[k]) - static_cast<double>(k)*expected_cycles};
|
||||
|
||||
/* Map delta phase into +/- Pi interval */
|
||||
int qpd{double2int(tmp / al::MathDefs<double>::Pi())};
|
||||
tmp -= al::MathDefs<double>::Pi() * (qpd + (qpd%2));
|
||||
int qpd{double2int(tmp / al::numbers::pi)};
|
||||
tmp -= al::numbers::pi * (qpd + (qpd%2));
|
||||
|
||||
/* Get deviation from bin frequency from the +/- Pi interval */
|
||||
tmp /= expected_cycles;
|
||||
|
@ -44,7 +44,6 @@
|
||||
#include "core/mixer.h"
|
||||
#include "core/mixer/defs.h"
|
||||
#include "intrusive_ptr.h"
|
||||
#include "math_defs.h"
|
||||
#include "opthelpers.h"
|
||||
#include "vecmat.h"
|
||||
#include "vector.h"
|
||||
@ -113,7 +112,7 @@ alignas(16) constexpr float EarlyA2B[NUM_LINES][NUM_LINES]{
|
||||
};
|
||||
|
||||
/* Converts A-Format to B-Format for late reverb. */
|
||||
constexpr float Sqrt1_2{7.07106781e-01f/*1.0f/std::sqrt(2.0f)*/};
|
||||
constexpr auto Sqrt1_2 = static_cast<float>(1.0/al::numbers::sqrt2);
|
||||
alignas(16) constexpr float LateA2B[NUM_LINES][NUM_LINES]{
|
||||
{ 0.5f, 0.5f, 0.5f, 0.5f },
|
||||
{ Sqrt1_2, -Sqrt1_2, 0.0f, 0.0f },
|
||||
@ -795,10 +794,8 @@ void T60Filter::calcCoeffs(const float length, const float lfDecayTime,
|
||||
void EarlyReflections::updateLines(const float density_mult, const float diffusion,
|
||||
const float decayTime, const float frequency)
|
||||
{
|
||||
constexpr float sqrt1_2{0.70710678118654752440f/*1.0f/std::sqrt(2.0f)*/};
|
||||
|
||||
/* Calculate the all-pass feed-back/forward coefficient. */
|
||||
VecAp.Coeff = diffusion*diffusion * sqrt1_2;
|
||||
VecAp.Coeff = diffusion*diffusion * Sqrt1_2;
|
||||
|
||||
for(size_t i{0u};i < NUM_LINES;i++)
|
||||
{
|
||||
@ -888,8 +885,7 @@ void LateReverb::updateLines(const float density_mult, const float diffusion,
|
||||
DensityGain[1] = CalcDensityGain(CalcDecayCoeff(length, decayTimeWeighted));
|
||||
|
||||
/* Calculate the all-pass feed-back/forward coefficient. */
|
||||
constexpr float sqrt1_2{0.70710678118654752440f/*1.0f/std::sqrt(2.0f)*/};
|
||||
VecAp.Coeff = diffusion*diffusion * sqrt1_2;
|
||||
VecAp.Coeff = diffusion*diffusion * Sqrt1_2;
|
||||
|
||||
for(size_t i{0u};i < NUM_LINES;i++)
|
||||
{
|
||||
@ -1431,7 +1427,7 @@ void ReverbState::earlyFaded(const size_t offset, const size_t todo, const float
|
||||
|
||||
void Modulation::calcDelays(size_t todo)
|
||||
{
|
||||
constexpr float inv_scale{MOD_FRACONE / al::MathDefs<float>::Tau()};
|
||||
constexpr float inv_scale{MOD_FRACONE / al::numbers::pi_v<float> / 2.0f};
|
||||
uint idx{Index};
|
||||
const uint step{Step};
|
||||
const float depth{Depth[0]};
|
||||
@ -1446,7 +1442,7 @@ void Modulation::calcDelays(size_t todo)
|
||||
|
||||
void Modulation::calcFadedDelays(size_t todo, float fadeCount, float fadeStep)
|
||||
{
|
||||
constexpr float inv_scale{MOD_FRACONE / al::MathDefs<float>::Tau()};
|
||||
constexpr float inv_scale{MOD_FRACONE / al::numbers::pi_v<float> / 2.0f};
|
||||
uint idx{Index};
|
||||
const uint step{Step};
|
||||
const float depth{Depth[0]};
|
||||
|
@ -40,6 +40,7 @@
|
||||
|
||||
#include "alc/effects/base.h"
|
||||
#include "almalloc.h"
|
||||
#include "alnumbers.h"
|
||||
#include "alnumeric.h"
|
||||
#include "alspan.h"
|
||||
#include "core/ambidefs.h"
|
||||
@ -50,7 +51,6 @@
|
||||
#include "core/effectslot.h"
|
||||
#include "core/mixer.h"
|
||||
#include "intrusive_ptr.h"
|
||||
#include "math_defs.h"
|
||||
|
||||
|
||||
namespace {
|
||||
@ -71,7 +71,7 @@ using uint = unsigned int;
|
||||
|
||||
inline float Sin(uint index)
|
||||
{
|
||||
constexpr float scale{al::MathDefs<float>::Tau() / WAVEFORM_FRACONE};
|
||||
constexpr float scale{al::numbers::pi_v<float>*2.0f / WAVEFORM_FRACONE};
|
||||
return std::sin(static_cast<float>(index) * scale)*0.5f + 0.5f;
|
||||
}
|
||||
|
||||
@ -103,7 +103,7 @@ struct FormantFilter
|
||||
|
||||
FormantFilter() = default;
|
||||
FormantFilter(float f0norm, float gain)
|
||||
: mCoeff{std::tan(al::MathDefs<float>::Pi() * f0norm)}, mGain{gain}
|
||||
: mCoeff{std::tan(al::numbers::pi_v<float> * f0norm)}, mGain{gain}
|
||||
{ }
|
||||
|
||||
inline void process(const float *samplesIn, float *samplesOut, const size_t numInput)
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include "alconfig.h"
|
||||
#include "alc/context.h"
|
||||
#include "almalloc.h"
|
||||
#include "alnumbers.h"
|
||||
#include "alnumeric.h"
|
||||
#include "aloptional.h"
|
||||
#include "alspan.h"
|
||||
@ -57,7 +58,6 @@
|
||||
#include "core/logging.h"
|
||||
#include "core/uhjfilter.h"
|
||||
#include "device.h"
|
||||
#include "math_defs.h"
|
||||
#include "opthelpers.h"
|
||||
|
||||
|
||||
@ -658,7 +658,7 @@ void InitPanning(ALCdevice *device, const bool hqdec=false, const bool stablize=
|
||||
|
||||
void InitHrtfPanning(ALCdevice *device)
|
||||
{
|
||||
constexpr float Deg180{al::MathDefs<float>::Pi()};
|
||||
constexpr float Deg180{al::numbers::pi_v<float>};
|
||||
constexpr float Deg_90{Deg180 / 2.0f /* 90 degrees*/};
|
||||
constexpr float Deg_45{Deg_90 / 2.0f /* 45 degrees*/};
|
||||
constexpr float Deg135{Deg_45 * 3.0f /*135 degrees*/};
|
||||
|
@ -18,11 +18,15 @@ static constexpr auto pi_v = detail_::as_fp<T>(3.1415926535897932384626433832795
|
||||
template<typename T>
|
||||
static constexpr auto inv_pi_v = detail_::as_fp<T>(0.318309886183790671537767526745028724L);
|
||||
|
||||
template<typename T>
|
||||
static constexpr auto sqrt2_v = detail_::as_fp<T>(1.414213562373095048801688724209698079L);
|
||||
|
||||
template<typename T>
|
||||
static constexpr auto sqrt3_v = detail_::as_fp<T>(1.732050807568877293527446341505872367L);
|
||||
|
||||
static constexpr auto pi = pi_v<double>;
|
||||
static constexpr auto inv_pi = inv_pi_v<double>;
|
||||
static constexpr auto sqrt2 = sqrt2_v<double>;
|
||||
static constexpr auto sqrt3 = sqrt3_v<double>;
|
||||
|
||||
} // namespace numbers
|
||||
|
@ -1,26 +1,7 @@
|
||||
#ifndef AL_MATH_DEFS_H
|
||||
#define AL_MATH_DEFS_H
|
||||
|
||||
constexpr float Deg2Rad(float x) noexcept { return x * 1.74532925199432955e-02f/*pi/180*/; }
|
||||
constexpr float Rad2Deg(float x) noexcept { return x * 5.72957795130823229e+01f/*180/pi*/; }
|
||||
|
||||
namespace al {
|
||||
|
||||
template<typename Real>
|
||||
struct MathDefs { };
|
||||
|
||||
template<>
|
||||
struct MathDefs<float> {
|
||||
static constexpr float Pi() noexcept { return 3.14159265358979323846e+00f; }
|
||||
static constexpr float Tau() noexcept { return 6.28318530717958647692e+00f; }
|
||||
};
|
||||
|
||||
template<>
|
||||
struct MathDefs<double> {
|
||||
static constexpr double Pi() noexcept { return 3.14159265358979323846e+00; }
|
||||
static constexpr double Tau() noexcept { return 6.28318530717958647692e+00; }
|
||||
};
|
||||
|
||||
} // namespace al
|
||||
constexpr float Deg2Rad(float x) noexcept
|
||||
{ return static_cast<float>(x * 1.74532925199432955e-02/*pi/180*/); }
|
||||
|
||||
#endif /* AL_MATH_DEFS_H */
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
|
||||
#include "math_defs.h"
|
||||
#include "alnumbers.h"
|
||||
#include "opthelpers.h"
|
||||
|
||||
|
||||
@ -21,9 +21,9 @@ using uint = unsigned int;
|
||||
*/
|
||||
double Sinc(const double x)
|
||||
{
|
||||
if UNLIKELY(std::abs(x) < Epsilon)
|
||||
if(unlikely(std::abs(x) < Epsilon))
|
||||
return 1.0;
|
||||
return std::sin(al::MathDefs<double>::Pi()*x) / (al::MathDefs<double>::Pi()*x);
|
||||
return std::sin(al::numbers::pi*x) / (al::numbers::pi*x);
|
||||
}
|
||||
|
||||
/* The zero-order modified Bessel function of the first kind, used for the
|
||||
@ -95,7 +95,7 @@ constexpr uint Gcd(uint x, uint y)
|
||||
*/
|
||||
constexpr uint CalcKaiserOrder(const double rejection, const double transition)
|
||||
{
|
||||
const double w_t{2.0 * al::MathDefs<double>::Pi() * transition};
|
||||
const double w_t{2.0 * al::numbers::pi * transition};
|
||||
if LIKELY(rejection > 21.0)
|
||||
return static_cast<uint>(std::ceil((rejection - 7.95) / (2.285 * w_t)));
|
||||
return static_cast<uint>(std::ceil(5.79 / w_t));
|
||||
|
@ -9,9 +9,9 @@
|
||||
#include <utility>
|
||||
|
||||
#include "almalloc.h"
|
||||
#include "alnumbers.h"
|
||||
#include "filters/splitter.h"
|
||||
#include "front_stablizer.h"
|
||||
#include "math_defs.h"
|
||||
#include "mixer.h"
|
||||
#include "opthelpers.h"
|
||||
|
||||
@ -164,10 +164,10 @@ void BFormatDec::processStablize(const al::span<FloatBufferLine> OutBuffer,
|
||||
* is panned 1/3rd toward center and the high-frequency signal is panned
|
||||
* 1/4th toward center. These values can be tweaked.
|
||||
*/
|
||||
const float cos_lf{std::cos(1.0f/3.0f * (al::MathDefs<float>::Pi()*0.5f))};
|
||||
const float cos_hf{std::cos(1.0f/4.0f * (al::MathDefs<float>::Pi()*0.5f))};
|
||||
const float sin_lf{std::sin(1.0f/3.0f * (al::MathDefs<float>::Pi()*0.5f))};
|
||||
const float sin_hf{std::sin(1.0f/4.0f * (al::MathDefs<float>::Pi()*0.5f))};
|
||||
const float cos_lf{std::cos(1.0f/3.0f * (al::numbers::pi_v<float>*0.5f))};
|
||||
const float cos_hf{std::cos(1.0f/4.0f * (al::numbers::pi_v<float>*0.5f))};
|
||||
const float sin_lf{std::sin(1.0f/3.0f * (al::numbers::pi_v<float>*0.5f))};
|
||||
const float sin_hf{std::sin(1.0f/4.0f * (al::numbers::pi_v<float>*0.5f))};
|
||||
for(size_t i{0};i < SamplesToDo;i++)
|
||||
{
|
||||
const float m{mStablizer->MidLF[i]*cos_lf + mStablizer->MidHF[i]*cos_hf + mid[i]};
|
||||
|
@ -27,8 +27,8 @@
|
||||
#include <cmath>
|
||||
#include <iterator>
|
||||
|
||||
#include "alnumbers.h"
|
||||
#include "bs2b.h"
|
||||
#include "math_defs.h"
|
||||
|
||||
|
||||
/* Set up all data. */
|
||||
@ -91,11 +91,11 @@ static void init(struct bs2b *bs2b)
|
||||
* $d = 1 / 2 / pi / $fc;
|
||||
* $x = exp(-1 / $d);
|
||||
*/
|
||||
x = std::exp(-al::MathDefs<float>::Tau() * Fc_lo / static_cast<float>(bs2b->srate));
|
||||
x = std::exp(-al::numbers::pi_v<float>*2.0f*Fc_lo/static_cast<float>(bs2b->srate));
|
||||
bs2b->b1_lo = x;
|
||||
bs2b->a0_lo = G_lo * (1.0f - x) * g;
|
||||
|
||||
x = std::exp(-al::MathDefs<float>::Tau() * Fc_hi / static_cast<float>(bs2b->srate));
|
||||
x = std::exp(-al::numbers::pi_v<float>*2.0f*Fc_hi/static_cast<float>(bs2b->srate));
|
||||
bs2b->b1_hi = x;
|
||||
bs2b->a0_hi = (1.0f - G_hi * (1.0f - x)) * g;
|
||||
bs2b->a1_hi = -x * g;
|
||||
|
@ -9,8 +9,8 @@
|
||||
#include <memory>
|
||||
#include <stdexcept>
|
||||
|
||||
#include "alnumbers.h"
|
||||
#include "core/mixer/defs.h"
|
||||
#include "math_defs.h"
|
||||
|
||||
|
||||
namespace {
|
||||
@ -28,7 +28,7 @@ constexpr double Sinc(const double x)
|
||||
constexpr double epsilon{std::numeric_limits<double>::epsilon()};
|
||||
if(!(x > epsilon || x < -epsilon))
|
||||
return 1.0;
|
||||
return std::sin(al::MathDefs<double>::Pi()*x) / (al::MathDefs<double>::Pi()*x);
|
||||
return std::sin(al::numbers::pi*x) / (al::numbers::pi*x);
|
||||
}
|
||||
|
||||
/* The zero-order modified Bessel function of the first kind, used for the
|
||||
@ -87,9 +87,9 @@ constexpr double Kaiser(const double beta, const double k, const double besseli_
|
||||
constexpr double CalcKaiserWidth(const double rejection, const uint order) noexcept
|
||||
{
|
||||
if(rejection > 21.19)
|
||||
return (rejection - 7.95) / (order * 2.285 * al::MathDefs<double>::Tau());
|
||||
return (rejection - 7.95) / (2.285 * al::numbers::pi*2.0 * order);
|
||||
/* This enforces a minimum rejection of just above 21.18dB */
|
||||
return 5.79 / (order * al::MathDefs<double>::Tau());
|
||||
return 5.79 / (al::numbers::pi*2.0 * order);
|
||||
}
|
||||
|
||||
/* Calculates the beta value of the Kaiser window. Rejection is in dB. */
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include <cassert>
|
||||
#include <cmath>
|
||||
|
||||
#include "alnumbers.h"
|
||||
#include "opthelpers.h"
|
||||
|
||||
|
||||
@ -16,7 +17,7 @@ void BiquadFilterR<Real>::setParams(BiquadType type, Real f0norm, Real gain, Rea
|
||||
// Limit gain to -100dB
|
||||
assert(gain > 0.00001f);
|
||||
|
||||
const Real w0{al::MathDefs<Real>::Tau() * f0norm};
|
||||
const Real w0{al::numbers::pi_v<Real>*2.0f * f0norm};
|
||||
const Real sin_w0{std::sin(w0)};
|
||||
const Real cos_w0{std::cos(w0)};
|
||||
const Real alpha{sin_w0/2.0f * rcpQ};
|
||||
|
@ -6,8 +6,8 @@
|
||||
#include <cstddef>
|
||||
#include <utility>
|
||||
|
||||
#include "alnumbers.h"
|
||||
#include "alspan.h"
|
||||
#include "math_defs.h"
|
||||
|
||||
|
||||
/* Filters implementation is based on the "Cookbook formulae for audio
|
||||
@ -40,11 +40,11 @@ enum class BiquadType {
|
||||
template<typename Real>
|
||||
class BiquadFilterR {
|
||||
/* Last two delayed components for direct form II. */
|
||||
Real mZ1{0.0f}, mZ2{0.0f};
|
||||
Real mZ1{0}, mZ2{0};
|
||||
/* Transfer function coefficients "b" (numerator) */
|
||||
Real mB0{1.0f}, mB1{0.0f}, mB2{0.0f};
|
||||
Real mB0{1}, mB1{0}, mB2{0};
|
||||
/* Transfer function coefficients "a" (denominator; a0 is pre-applied). */
|
||||
Real mA1{0.0f}, mA2{0.0f};
|
||||
Real mA1{0}, mA2{0};
|
||||
|
||||
void setParams(BiquadType type, Real f0norm, Real gain, Real rcpQ);
|
||||
|
||||
@ -55,7 +55,7 @@ class BiquadFilterR {
|
||||
* \param slope 0 < slope <= 1
|
||||
*/
|
||||
static Real rcpQFromSlope(Real gain, Real slope)
|
||||
{ return std::sqrt((gain + 1.0f/gain)*(1.0f/slope - 1.0f) + 2.0f); }
|
||||
{ return std::sqrt((gain + Real{1}/gain)*(Real{1}/slope - Real{1}) + Real{2}); }
|
||||
|
||||
/**
|
||||
* Calculates the rcpQ (i.e. 1/Q) coefficient for filters, using the
|
||||
@ -65,12 +65,12 @@ class BiquadFilterR {
|
||||
*/
|
||||
static Real rcpQFromBandwidth(Real f0norm, Real bandwidth)
|
||||
{
|
||||
const Real w0{al::MathDefs<Real>::Tau() * f0norm};
|
||||
return 2.0f*std::sinh(std::log(Real{2.0f})/2.0f*bandwidth*w0/std::sin(w0));
|
||||
const Real w0{al::numbers::pi_v<Real>*Real{2} * f0norm};
|
||||
return 2.0f*std::sinh(std::log(Real{2})/Real{2}*bandwidth*w0/std::sin(w0));
|
||||
}
|
||||
|
||||
public:
|
||||
void clear() noexcept { mZ1 = mZ2 = 0.0f; }
|
||||
void clear() noexcept { mZ1 = mZ2 = Real{0}; }
|
||||
|
||||
/**
|
||||
* Sets the filter state for the specified filter type and its parameters.
|
||||
|
@ -7,14 +7,14 @@
|
||||
#include <cmath>
|
||||
#include <limits>
|
||||
|
||||
#include "math_defs.h"
|
||||
#include "alnumbers.h"
|
||||
#include "opthelpers.h"
|
||||
|
||||
|
||||
template<typename Real>
|
||||
void BandSplitterR<Real>::init(Real f0norm)
|
||||
{
|
||||
const Real w{f0norm * al::MathDefs<Real>::Tau()};
|
||||
const Real w{f0norm * (al::numbers::pi_v<Real>*2)};
|
||||
const Real cw{std::cos(w)};
|
||||
if(cw > std::numeric_limits<float>::epsilon())
|
||||
mCoeff = (std::sin(w) - 1.0f) / cw;
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "albyte.h"
|
||||
#include "alfstream.h"
|
||||
#include "almalloc.h"
|
||||
#include "alnumbers.h"
|
||||
#include "alnumeric.h"
|
||||
#include "aloptional.h"
|
||||
#include "alspan.h"
|
||||
@ -30,7 +31,6 @@
|
||||
#include "filters/splitter.h"
|
||||
#include "helpers.h"
|
||||
#include "logging.h"
|
||||
#include "math_defs.h"
|
||||
#include "mixer/hrtfdefs.h"
|
||||
#include "opthelpers.h"
|
||||
#include "polyphase_resampler.h"
|
||||
@ -79,7 +79,7 @@ constexpr char magicMarker03[8]{'M','i','n','P','H','R','0','3'};
|
||||
|
||||
/* First value for pass-through coefficients (remaining are 0), used for omni-
|
||||
* directional sounds. */
|
||||
constexpr float PassthruCoeff{0.707106781187f/*sqrt(0.5)*/};
|
||||
constexpr auto PassthruCoeff = static_cast<float>(1.0/al::numbers::sqrt2);
|
||||
|
||||
std::mutex LoadedHrtfLock;
|
||||
al::vector<LoadedHrtf> LoadedHrtfs;
|
||||
@ -164,8 +164,8 @@ struct IdxBlend { uint idx; float blend; };
|
||||
*/
|
||||
IdxBlend CalcEvIndex(uint evcount, float ev)
|
||||
{
|
||||
ev = (al::MathDefs<float>::Pi()*0.5f + ev) * static_cast<float>(evcount-1) /
|
||||
al::MathDefs<float>::Pi();
|
||||
ev = (al::numbers::pi_v<float>*0.5f + ev) * static_cast<float>(evcount-1) /
|
||||
al::numbers::pi_v<float>;
|
||||
uint idx{float2uint(ev)};
|
||||
|
||||
return IdxBlend{minu(idx, evcount-1), ev-static_cast<float>(idx)};
|
||||
@ -176,8 +176,8 @@ IdxBlend CalcEvIndex(uint evcount, float ev)
|
||||
*/
|
||||
IdxBlend CalcAzIndex(uint azcount, float az)
|
||||
{
|
||||
az = (al::MathDefs<float>::Tau()+az) * static_cast<float>(azcount) /
|
||||
al::MathDefs<float>::Tau();
|
||||
az = (al::numbers::pi_v<float>*2.0f + az) * static_cast<float>(azcount) /
|
||||
(al::numbers::pi_v<float>*2.0f);
|
||||
uint idx{float2uint(az)};
|
||||
|
||||
return IdxBlend{idx%azcount, az-static_cast<float>(idx)};
|
||||
@ -192,7 +192,7 @@ IdxBlend CalcAzIndex(uint azcount, float az)
|
||||
void GetHrtfCoeffs(const HrtfStore *Hrtf, float elevation, float azimuth, float distance,
|
||||
float spread, HrirArray &coeffs, const al::span<uint,2> delays)
|
||||
{
|
||||
const float dirfact{1.0f - (spread / al::MathDefs<float>::Tau())};
|
||||
const float dirfact{1.0f - (al::numbers::inv_pi_v<float>/2.0f * spread)};
|
||||
|
||||
const auto *field = Hrtf->field;
|
||||
const auto *field_end = field + Hrtf->fdCount-1;
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "albyte.h"
|
||||
#include "alcomplex.h"
|
||||
#include "almalloc.h"
|
||||
#include "alnumbers.h"
|
||||
#include "alspan.h"
|
||||
#include "vector.h"
|
||||
#include "opthelpers.h"
|
||||
@ -501,7 +502,7 @@ int main(int argc, char **argv)
|
||||
for(size_t i{0};i < got;++i)
|
||||
{
|
||||
/* Attenuate by -3dB for FuMa output levels. */
|
||||
constexpr float sqrt1_2{0.707106781187f};
|
||||
constexpr auto sqrt1_2 = static_cast<float>(1.0/al::numbers::sqrt2);
|
||||
for(size_t j{0};j < outchans;++j)
|
||||
outmem[i*outchans + j] = f32AsLEBytes(decmem[j][LeadIn+i] * sqrt1_2);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user