Use templates for common geometric constants (#7558)
* add templates for common geometric constants * oops missed one * LD_2PI -> LD_PI i re-added the wrong constant ffs * CamelCase names and also verify compilation without -DLMMS_MINIMAL * C++20 stuff Updated to account for `<numbers>` and C++20: - Marked all `lmms_constants.h` constants with an exact equivalent in `<numbers>` as deprecated - Removed all `lmms_constants.h` constants where no variant is currently in use - Using `inline constexpr` - Using `std::floating_point` concept instead of `typename` * add lmms::numbers namespace * Remove panning_constants.h Moves the four constants in panning_constants.h into panning.h, then removes panning.h. * Use std::exp(n) instead of powf(numbers::e, n) * Use C++ std math functions Co-authored-by: Dalton Messmer <messmer.dalton@gmail.com> * Use overloaded std math functions An attempt to fix compiler warnings on some platforms * Remove uses of __USE_XOPEN And also update two functions I missed from the previous commit * Missed a few * Fix ANOTHER std math function use Of course there's another one --------- Co-authored-by: Dalton Messmer <messmer.dalton@gmail.com>
This commit is contained in:
@@ -31,10 +31,6 @@
|
||||
#ifndef LMMS_BASIC_FILTERS_H
|
||||
#define LMMS_BASIC_FILTERS_H
|
||||
|
||||
#ifndef __USE_XOPEN
|
||||
#define __USE_XOPEN
|
||||
#endif
|
||||
|
||||
#include <cmath>
|
||||
#include <array>
|
||||
|
||||
@@ -74,21 +70,20 @@ public:
|
||||
inline void setCoeffs( float freq )
|
||||
{
|
||||
// wc
|
||||
const double wc = D_2PI * freq;
|
||||
const double wc = numbers::tau * freq;
|
||||
const double wc2 = wc * wc;
|
||||
const double wc3 = wc2 * wc;
|
||||
m_wc4 = wc2 * wc2;
|
||||
|
||||
// k
|
||||
const double k = wc / tan( D_PI * freq / m_sampleRate );
|
||||
const double k = wc / std::tan(numbers::pi * freq / m_sampleRate);
|
||||
const double k2 = k * k;
|
||||
const double k3 = k2 * k;
|
||||
m_k4 = k2 * k2;
|
||||
|
||||
// a
|
||||
static const double sqrt2 = sqrt( 2.0 );
|
||||
const double sq_tmp1 = sqrt2 * wc3 * k;
|
||||
const double sq_tmp2 = sqrt2 * wc * k3;
|
||||
const double sq_tmp1 = numbers::sqrt2 * wc3 * k;
|
||||
const double sq_tmp2 = numbers::sqrt2 * wc * k3;
|
||||
|
||||
m_a = 1.0 / ( 4.0 * wc2 * k2 + 2.0 * sq_tmp1 + m_k4 + 2.0 * sq_tmp2 + m_wc4 );
|
||||
|
||||
@@ -718,7 +713,7 @@ public:
|
||||
{
|
||||
_freq = std::clamp(_freq, 50.0f, 20000.0f);
|
||||
const float sr = m_sampleRatio * 0.25f;
|
||||
const float f = 1.0f / ( _freq * F_2PI );
|
||||
const float f = 1.0f / (_freq * numbers::tau_v<float>);
|
||||
|
||||
m_rca = 1.0f - sr / ( f + sr );
|
||||
m_rcb = 1.0f - m_rca;
|
||||
@@ -751,8 +746,8 @@ public:
|
||||
const float fract = vowelf - vowel;
|
||||
|
||||
// interpolate between formant frequencies
|
||||
const float f0 = 1.0f / ( linearInterpolate( _f[vowel+0][0], _f[vowel+1][0], fract ) * F_2PI );
|
||||
const float f1 = 1.0f / ( linearInterpolate( _f[vowel+0][1], _f[vowel+1][1], fract ) * F_2PI );
|
||||
const float f0 = 1.0f / (linearInterpolate(_f[vowel+0][0], _f[vowel+1][0], fract) * numbers::tau_v<float>);
|
||||
const float f1 = 1.0f / (linearInterpolate(_f[vowel+0][1], _f[vowel+1][1], fract) * numbers::tau_v<float>);
|
||||
|
||||
// samplerate coeff: depends on oversampling
|
||||
const float sr = m_type == FilterType::FastFormant ? m_sampleRatio : m_sampleRatio * 0.25f;
|
||||
@@ -774,7 +769,7 @@ public:
|
||||
// (Empirical tunning)
|
||||
m_p = ( 3.6f - 3.2f * f ) * f;
|
||||
m_k = 2.0f * m_p - 1;
|
||||
m_r = _q * powf( F_E, ( 1 - m_p ) * 1.386249f );
|
||||
m_r = _q * std::exp((1 - m_p) * 1.386249f);
|
||||
|
||||
if( m_doubleFilter )
|
||||
{
|
||||
@@ -791,7 +786,7 @@ public:
|
||||
|
||||
m_p = ( 3.6f - 3.2f * f ) * f;
|
||||
m_k = 2.0f * m_p - 1.0f;
|
||||
m_r = _q * 0.1f * powf( F_E, ( 1 - m_p ) * 1.386249f );
|
||||
m_r = _q * 0.1f * std::exp((1 - m_p) * 1.386249f);
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -801,7 +796,7 @@ public:
|
||||
m_type == FilterType::Highpass_SV ||
|
||||
m_type == FilterType::Notch_SV )
|
||||
{
|
||||
const float f = sinf(std::max(minFreq(), _freq) * m_sampleRatio * F_PI);
|
||||
const float f = std::sin(std::max(minFreq(), _freq) * m_sampleRatio * numbers::pi_v<float>);
|
||||
m_svf1 = std::min(f, 0.825f);
|
||||
m_svf2 = std::min(f * 2.0f, 0.825f);
|
||||
m_svq = std::max(0.0001f, 2.0f - (_q * 0.1995f));
|
||||
@@ -810,7 +805,7 @@ public:
|
||||
|
||||
// other filters
|
||||
_freq = std::clamp(_freq, minFreq(), 20000.0f);
|
||||
const float omega = F_2PI * _freq * m_sampleRatio;
|
||||
const float omega = numbers::tau_v<float> * _freq * m_sampleRatio;
|
||||
const float tsin = sinf( omega ) * 0.5f;
|
||||
const float tcos = cosf( omega );
|
||||
|
||||
|
||||
@@ -328,7 +328,7 @@ namespace lmms::DspEffectLibrary
|
||||
|
||||
void nextSample( sample_t& inLeft, sample_t& inRight )
|
||||
{
|
||||
const float toRad = F_PI / 180;
|
||||
const float toRad = numbers::pi_v<float> / 180;
|
||||
const sample_t tmp = inLeft;
|
||||
inLeft += inRight * sinf( m_wideCoeff * ( .5 * toRad ) );
|
||||
inRight -= tmp * sinf( m_wideCoeff * ( .5 * toRad ) );
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
#include <cstdlib>
|
||||
#include "Midi.h"
|
||||
#include "panning_constants.h"
|
||||
#include "panning.h"
|
||||
#include "volume.h"
|
||||
|
||||
namespace lmms
|
||||
|
||||
@@ -114,7 +114,7 @@ public:
|
||||
// now follow the wave-shape-routines...
|
||||
static inline sample_t sinSample( const float _sample )
|
||||
{
|
||||
return sinf( _sample * F_2PI );
|
||||
return std::sin(_sample * numbers::tau_v<float>);
|
||||
}
|
||||
|
||||
static inline sample_t triangleSample( const float _sample )
|
||||
|
||||
@@ -37,7 +37,7 @@ public:
|
||||
QuadratureLfo( int sampleRate ) :
|
||||
m_frequency(0),
|
||||
m_phase(0),
|
||||
m_offset(D_PI / 2)
|
||||
m_offset(numbers::pi_half)
|
||||
{
|
||||
setSampleRate(sampleRate);
|
||||
}
|
||||
@@ -64,7 +64,7 @@ public:
|
||||
inline void setSampleRate ( int samplerate )
|
||||
{
|
||||
m_samplerate = samplerate;
|
||||
m_twoPiOverSr = F_2PI / samplerate;
|
||||
m_twoPiOverSr = numbers::tau_v<float> / samplerate;
|
||||
m_increment = m_frequency * m_twoPiOverSr;
|
||||
}
|
||||
|
||||
@@ -81,10 +81,7 @@ public:
|
||||
*r = sinf( m_phase + m_offset );
|
||||
m_phase += m_increment;
|
||||
|
||||
while (m_phase >= D_2PI)
|
||||
{
|
||||
m_phase -= D_2PI;
|
||||
}
|
||||
while (m_phase >= numbers::tau) { m_phase -= numbers::tau; }
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
@@ -25,10 +25,6 @@
|
||||
#ifndef LMMS_INTERPOLATION_H
|
||||
#define LMMS_INTERPOLATION_H
|
||||
|
||||
#ifndef __USE_XOPEN
|
||||
#define __USE_XOPEN
|
||||
#endif
|
||||
|
||||
#include <cmath>
|
||||
#include "lmms_constants.h"
|
||||
#include "lmms_math.h"
|
||||
@@ -82,7 +78,7 @@ inline float cubicInterpolate( float v0, float v1, float v2, float v3, float x )
|
||||
|
||||
inline float cosinusInterpolate( float v0, float v1, float x )
|
||||
{
|
||||
const float f = ( 1.0f - cosf( x * F_PI ) ) * 0.5f;
|
||||
const float f = (1.0f - std::cos(x * numbers::pi_v<float>)) * 0.5f;
|
||||
return f * (v1 - v0) + v0;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,36 +25,54 @@
|
||||
#ifndef LMMS_CONSTANTS_H
|
||||
#define LMMS_CONSTANTS_H
|
||||
|
||||
namespace lmms
|
||||
// #include <numbers>
|
||||
// #include <concepts>
|
||||
|
||||
namespace lmms::numbers
|
||||
{
|
||||
|
||||
//TODO C++20: Use std::floating_point instead of typename
|
||||
//TODO C++20: Use std::numbers::pi_v<T> instead of literal value
|
||||
template<typename T>
|
||||
inline constexpr T pi_v = T(3.14159265358979323846264338327950288419716939937510);
|
||||
inline constexpr double pi = pi_v<double>;
|
||||
|
||||
constexpr long double LD_PI = 3.14159265358979323846264338327950288419716939937510;
|
||||
constexpr long double LD_2PI = LD_PI * 2.0;
|
||||
constexpr long double LD_PI_2 = LD_PI * 0.5;
|
||||
constexpr long double LD_PI_R = 1.0 / LD_PI;
|
||||
constexpr long double LD_PI_SQR = LD_PI * LD_PI;
|
||||
constexpr long double LD_E = 2.71828182845904523536028747135266249775724709369995;
|
||||
constexpr long double LD_E_R = 1.0 / LD_E;
|
||||
constexpr long double LD_SQRT_2 = 1.41421356237309504880168872420969807856967187537695;
|
||||
//TODO C++20: Use std::floating_point instead of typename
|
||||
template<typename T>
|
||||
inline constexpr T tau_v = T(pi_v<T> * 2.0);
|
||||
inline constexpr double tau = tau_v<double>;
|
||||
|
||||
constexpr double D_PI = (double) LD_PI;
|
||||
constexpr double D_2PI = (double) LD_2PI;
|
||||
constexpr double D_PI_2 = (double) LD_PI_2;
|
||||
constexpr double D_PI_R = (double) LD_PI_R;
|
||||
constexpr double D_PI_SQR = (double) LD_PI_SQR;
|
||||
constexpr double D_E = (double) LD_E;
|
||||
constexpr double D_E_R = (double) LD_E_R;
|
||||
constexpr double D_SQRT_2 = (double) LD_SQRT_2;
|
||||
//TODO C++20: Use std::floating_point instead of typename
|
||||
template<typename T>
|
||||
inline constexpr T pi_half_v = T(pi_v<T> / 2.0);
|
||||
inline constexpr double pi_half = pi_half_v<double>;
|
||||
|
||||
constexpr float F_PI = (float) LD_PI;
|
||||
constexpr float F_2PI = (float) LD_2PI;
|
||||
constexpr float F_PI_2 = (float) LD_PI_2;
|
||||
constexpr float F_PI_R = (float) LD_PI_R;
|
||||
constexpr float F_PI_SQR = (float) LD_PI_SQR;
|
||||
constexpr float F_E = (float) LD_E;
|
||||
constexpr float F_E_R = (float) LD_E_R;
|
||||
constexpr float F_SQRT_2 = (float) LD_SQRT_2;
|
||||
//TODO C++20: Use std::floating_point instead of typename
|
||||
template<typename T>
|
||||
inline constexpr T pi_sqr_v = T(pi_v<T> * pi_v<T>);
|
||||
inline constexpr double pi_sqr = pi_sqr_v<double>;
|
||||
|
||||
//TODO C++20: Use std::floating_point instead of typename
|
||||
//TODO C++20: Use std::numbers::e_v<T> instead of literal value
|
||||
template<typename T>
|
||||
inline constexpr T e_v = T(2.71828182845904523536028747135266249775724709369995);
|
||||
inline constexpr double e = e_v<double>;
|
||||
|
||||
//TODO C++20: Use std::floating_point instead of typename
|
||||
template<typename T>
|
||||
inline constexpr T inv_e_v = T(1.0 / e_v<T>);
|
||||
inline constexpr double inv_e = e_v<double>;
|
||||
|
||||
//TODO C++20: Use std::floating_point instead of typename
|
||||
//TODO C++20: Use std::numbers::sqrt2_v<T> instead of literal value
|
||||
template<typename T>
|
||||
inline constexpr T sqrt2_v = T(1.41421356237309504880168872420969807856967187537695);
|
||||
inline constexpr double sqrt2 = sqrt2_v<double>;
|
||||
|
||||
}
|
||||
|
||||
namespace lmms
|
||||
{
|
||||
|
||||
constexpr float F_EPSILON = 1.0e-10f; // 10^-10
|
||||
|
||||
|
||||
@@ -136,32 +136,31 @@ inline float signedPowf(float v, float e)
|
||||
//! Value should be within [0,1]
|
||||
inline float logToLinearScale(float min, float max, float value)
|
||||
{
|
||||
if( min < 0 )
|
||||
if (min < 0)
|
||||
{
|
||||
const float mmax = std::max(std::abs(min), std::abs(max));
|
||||
const float val = value * ( max - min ) + min;
|
||||
float result = signedPowf( val / mmax, F_E ) * mmax;
|
||||
return std::isnan( result ) ? 0 : result;
|
||||
const float val = value * (max - min) + min;
|
||||
float result = signedPowf(val / mmax, numbers::e_v<float>) * mmax;
|
||||
return std::isnan(result) ? 0 : result;
|
||||
}
|
||||
float result = powf( value, F_E ) * ( max - min ) + min;
|
||||
return std::isnan( result ) ? 0 : result;
|
||||
float result = std::pow(value, numbers::e_v<float>) * (max - min) + min;
|
||||
return std::isnan(result) ? 0 : result;
|
||||
}
|
||||
|
||||
|
||||
//! @brief Scales value from logarithmic to linear. Value should be in min-max range.
|
||||
inline float linearToLogScale(float min, float max, float value)
|
||||
{
|
||||
static const float EXP = 1.0f / F_E;
|
||||
const float valueLimited = std::clamp(value, min, max);
|
||||
const float val = ( valueLimited - min ) / ( max - min );
|
||||
if( min < 0 )
|
||||
const float val = (valueLimited - min) / (max - min);
|
||||
if (min < 0)
|
||||
{
|
||||
const float mmax = std::max(std::abs(min), std::abs(max));
|
||||
float result = signedPowf( valueLimited / mmax, EXP ) * mmax;
|
||||
return std::isnan( result ) ? 0 : result;
|
||||
float result = signedPowf(valueLimited / mmax, numbers::inv_e_v<float>) * mmax;
|
||||
return std::isnan(result) ? 0 : result;
|
||||
}
|
||||
float result = powf( val, EXP ) * ( max - min ) + min;
|
||||
return std::isnan( result ) ? 0 : result;
|
||||
float result = std::pow(val, numbers::inv_e_v<float>) * (max - min) + min;
|
||||
return std::isnan(result) ? 0 : result;
|
||||
}
|
||||
|
||||
inline float fastPow10f(float x)
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
#define LMMS_PANNING_H
|
||||
|
||||
#include "lmms_basics.h"
|
||||
#include "panning_constants.h"
|
||||
#include "Midi.h"
|
||||
#include "volume.h"
|
||||
|
||||
@@ -36,6 +35,10 @@
|
||||
namespace lmms
|
||||
{
|
||||
|
||||
inline constexpr panning_t PanningRight = 100;
|
||||
inline constexpr panning_t PanningLeft = -PanningRight;
|
||||
inline constexpr panning_t PanningCenter = 0;
|
||||
inline constexpr panning_t DefaultPanning = PanningCenter;
|
||||
|
||||
inline StereoVolumeVector panningToVolumeVector( panning_t _p,
|
||||
float _scale = 1.0f )
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
/*
|
||||
* panning_constants.h - declaration of some constants, concerning the
|
||||
* panning of a note
|
||||
*
|
||||
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of LMMS - https://lmms.io
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this program (see COPYING); if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301 USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef LMMS_PANNING_CONSTANTS_H
|
||||
#define LMMS_PANNING_CONSTANTS_H
|
||||
|
||||
namespace lmms
|
||||
{
|
||||
|
||||
|
||||
constexpr panning_t PanningRight = ( 0 + 100 );
|
||||
constexpr panning_t PanningLeft = - PanningRight;
|
||||
constexpr panning_t PanningCenter = 0;
|
||||
constexpr panning_t DefaultPanning = PanningCenter;
|
||||
|
||||
|
||||
} // namespace lmms
|
||||
|
||||
#endif // LMMS_PANNING_CONSTANTS_H
|
||||
@@ -220,7 +220,7 @@ void CompressorEffect::calcTiltCoeffs()
|
||||
m_lgain = exp(g1 / amp) - 1;
|
||||
m_hgain = exp(g2 / amp) - 1;
|
||||
|
||||
const float omega = 2 * F_PI * m_compressorControls.m_tiltFreqModel.value();
|
||||
const float omega = numbers::tau_v<float> * m_compressorControls.m_tiltFreqModel.value();
|
||||
const float n = 1 / (m_sampleRate * 3 + omega);
|
||||
m_a0 = 2 * omega * n;
|
||||
m_b1 = (m_sampleRate * 3 - omega) * n;
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace lmms
|
||||
Lfo::Lfo( int samplerate )
|
||||
{
|
||||
m_samplerate = samplerate;
|
||||
m_twoPiOverSr = F_2PI / samplerate;
|
||||
m_twoPiOverSr = numbers::tau_v<float> / samplerate;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -50,10 +50,7 @@ public:
|
||||
m_frequency = frequency;
|
||||
m_increment = m_frequency * m_twoPiOverSr;
|
||||
|
||||
if( m_phase >= F_2PI )
|
||||
{
|
||||
m_phase -= F_2PI;
|
||||
}
|
||||
if (m_phase >= numbers::tau_v<float>) { m_phase -= numbers::tau_v<float>; }
|
||||
}
|
||||
|
||||
|
||||
@@ -62,7 +59,7 @@ public:
|
||||
inline void setSampleRate ( int samplerate )
|
||||
{
|
||||
m_samplerate = samplerate;
|
||||
m_twoPiOverSr = F_2PI / samplerate;
|
||||
m_twoPiOverSr = numbers::tau_v<float> / samplerate;
|
||||
m_increment = m_frequency * m_twoPiOverSr;
|
||||
}
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ Effect::ProcessStatus DispersionEffect::processImpl(SampleFrame* buf, const fpp_
|
||||
const bool dc = m_dispersionControls.m_dcModel.value();
|
||||
|
||||
// All-pass coefficient calculation
|
||||
const float w0 = (F_2PI / m_sampleRate) * freq;
|
||||
const float w0 = (numbers::tau_v<float> / m_sampleRate) * freq;
|
||||
const float a0 = 1 + (std::sin(w0) / (reso * 2.f));
|
||||
float apCoeff1 = (1 - (a0 - 1)) / a0;
|
||||
float apCoeff2 = (-2 * std::cos(w0)) / a0;
|
||||
|
||||
@@ -201,8 +201,7 @@ bool EqHandle::mousePressed() const
|
||||
float EqHandle::getPeakCurve( float x )
|
||||
{
|
||||
double freqZ = xPixelToFreq( EqHandle::x(), m_width );
|
||||
const int SR = Engine::audioEngine()->outputSampleRate();
|
||||
double w0 = 2 * LD_PI * freqZ / SR ;
|
||||
double w0 = numbers::tau * freqZ / Engine::audioEngine()->outputSampleRate();
|
||||
double c = cosf( w0 );
|
||||
double s = sinf( w0 );
|
||||
double Q = getResonance();
|
||||
@@ -238,8 +237,7 @@ float EqHandle::getPeakCurve( float x )
|
||||
float EqHandle::getHighShelfCurve( float x )
|
||||
{
|
||||
double freqZ = xPixelToFreq( EqHandle::x(), m_width );
|
||||
const int SR = Engine::audioEngine()->outputSampleRate();
|
||||
double w0 = 2 * LD_PI * freqZ / SR;
|
||||
double w0 = numbers::tau * freqZ / Engine::audioEngine()->outputSampleRate();
|
||||
double c = cosf( w0 );
|
||||
double s = sinf( w0 );
|
||||
double A = pow( 10, yPixelToGain( EqHandle::y(), m_heigth, m_pixelsPerUnitHeight ) * 0.025 );
|
||||
@@ -274,8 +272,7 @@ float EqHandle::getHighShelfCurve( float x )
|
||||
float EqHandle::getLowShelfCurve( float x )
|
||||
{
|
||||
double freqZ = xPixelToFreq( EqHandle::x(), m_width );
|
||||
const int SR = Engine::audioEngine()->outputSampleRate();
|
||||
double w0 = 2 * LD_PI * freqZ / SR ;
|
||||
double w0 = numbers::tau * freqZ / Engine::audioEngine()->outputSampleRate();
|
||||
double c = cosf( w0 );
|
||||
double s = sinf( w0 );
|
||||
double A = pow( 10, yPixelToGain( EqHandle::y(), m_heigth, m_pixelsPerUnitHeight ) / 40 );
|
||||
@@ -310,8 +307,7 @@ float EqHandle::getLowShelfCurve( float x )
|
||||
float EqHandle::getLowCutCurve( float x )
|
||||
{
|
||||
double freqZ = xPixelToFreq( EqHandle::x(), m_width );
|
||||
const int SR = Engine::audioEngine()->outputSampleRate();
|
||||
double w0 = 2 * LD_PI * freqZ / SR ;
|
||||
double w0 = numbers::tau * freqZ / Engine::audioEngine()->outputSampleRate();
|
||||
double c = cosf( w0 );
|
||||
double s = sinf( w0 );
|
||||
double resonance = getResonance();
|
||||
@@ -353,8 +349,7 @@ float EqHandle::getLowCutCurve( float x )
|
||||
float EqHandle::getHighCutCurve( float x )
|
||||
{
|
||||
double freqZ = xPixelToFreq( EqHandle::x(), m_width );
|
||||
const int SR = Engine::audioEngine()->outputSampleRate();
|
||||
double w0 = 2 * LD_PI * freqZ / SR ;
|
||||
double w0 = numbers::tau * freqZ / Engine::audioEngine()->outputSampleRate();
|
||||
double c = cosf( w0 );
|
||||
double s = sinf( w0 );
|
||||
double resonance = getResonance();
|
||||
@@ -527,10 +522,8 @@ void EqHandle::setlp48()
|
||||
|
||||
double EqHandle::calculateGain(const double freq, const double a1, const double a2, const double b0, const double b1, const double b2 )
|
||||
{
|
||||
const int SR = Engine::audioEngine()->outputSampleRate();
|
||||
|
||||
const double w = 2 * LD_PI * freq / SR ;
|
||||
const double PHI = pow( sin( w / 2 ), 2 ) * 4;
|
||||
const double w = std::sin(numbers::pi * freq / Engine::audioEngine()->outputSampleRate());
|
||||
const double PHI = w * w * 4;
|
||||
|
||||
double gain = 10 * log10( pow( b0 + b1 + b2 , 2 ) + ( b0 * b2 * PHI - ( b1 * ( b0 + b2 )
|
||||
+ 4 * b0 * b2 ) ) * PHI ) - 10 * log10( pow( 1 + a1 + a2, 2 )
|
||||
|
||||
@@ -185,7 +185,7 @@ public :
|
||||
{
|
||||
|
||||
// calc intermediate
|
||||
float w0 = F_2PI * m_freq / m_sampleRate;
|
||||
float w0 = numbers::tau_v<float> * m_freq / m_sampleRate;
|
||||
float c = cosf( w0 );
|
||||
float s = sinf( w0 );
|
||||
float alpha = s / ( 2 * m_res );
|
||||
@@ -228,7 +228,7 @@ public :
|
||||
{
|
||||
|
||||
// calc intermediate
|
||||
float w0 = F_2PI * m_freq / m_sampleRate;
|
||||
float w0 = numbers::tau_v<float> * m_freq / m_sampleRate;
|
||||
float c = cosf( w0 );
|
||||
float s = sinf( w0 );
|
||||
float alpha = s / ( 2 * m_res );
|
||||
@@ -269,7 +269,7 @@ public:
|
||||
void calcCoefficents() override
|
||||
{
|
||||
// calc intermediate
|
||||
float w0 = F_2PI * m_freq / m_sampleRate;
|
||||
float w0 = numbers::tau_v<float> * m_freq / m_sampleRate;
|
||||
float c = cosf( w0 );
|
||||
float s = sinf( w0 );
|
||||
float A = pow( 10, m_gain * 0.025);
|
||||
@@ -332,7 +332,7 @@ public :
|
||||
{
|
||||
|
||||
// calc intermediate
|
||||
float w0 = F_2PI * m_freq / m_sampleRate;
|
||||
float w0 = numbers::tau_v<float> * m_freq / m_sampleRate;
|
||||
float c = cosf( w0 );
|
||||
float s = sinf( w0 );
|
||||
float A = pow( 10, m_gain * 0.025);
|
||||
@@ -369,7 +369,7 @@ public :
|
||||
{
|
||||
|
||||
// calc intermediate
|
||||
float w0 = F_2PI * m_freq / m_sampleRate;
|
||||
float w0 = numbers::tau_v<float> * m_freq / m_sampleRate;
|
||||
float c = cosf( w0 );
|
||||
float s = sinf( w0 );
|
||||
float A = pow( 10, m_gain * 0.025 );
|
||||
|
||||
@@ -56,9 +56,9 @@ EqAnalyser::EqAnalyser() :
|
||||
|
||||
for (auto i = std::size_t{0}; i < FFT_BUFFER_SIZE; i++)
|
||||
{
|
||||
m_fftWindow[i] = (a0 - a1 * cos(2 * F_PI * i / ((float)FFT_BUFFER_SIZE - 1.0))
|
||||
+ a2 * cos(4 * F_PI * i / ((float)FFT_BUFFER_SIZE - 1.0))
|
||||
- a3 * cos(6 * F_PI * i / ((float)FFT_BUFFER_SIZE - 1.0)));
|
||||
m_fftWindow[i] = (a0 - a1 * std::cos(2 * numbers::pi_v<float> * i / ((float)FFT_BUFFER_SIZE - 1.0))
|
||||
+ a2 * std::cos(4 * numbers::pi_v<float> * i / ((float)FFT_BUFFER_SIZE - 1.0))
|
||||
- a3 * std::cos(6 * numbers::pi_v<float> * i / ((float)FFT_BUFFER_SIZE - 1.0)));
|
||||
}
|
||||
clear();
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ Effect::ProcessStatus FlangerEffect::processImpl(SampleFrame* buf, const fpp_t f
|
||||
float amplitude = m_flangerControls.m_lfoAmountModel.value() * Engine::audioEngine()->outputSampleRate();
|
||||
bool invertFeedback = m_flangerControls.m_invertFeedbackModel.value();
|
||||
m_lfo->setFrequency( 1.0/m_flangerControls.m_lfoFrequencyModel.value() );
|
||||
m_lfo->setOffset( m_flangerControls.m_lfoPhaseModel.value() / 180 * D_PI );
|
||||
m_lfo->setOffset(m_flangerControls.m_lfoPhaseModel.value() / 180 * numbers::pi);
|
||||
m_lDelay->setFeedback( m_flangerControls.m_feedbackModel.value() );
|
||||
m_rDelay->setFeedback( m_flangerControls.m_feedbackModel.value() );
|
||||
auto dryS = std::array<sample_t, 2>{};
|
||||
|
||||
@@ -271,7 +271,7 @@ void GranularPitchShifterEffect::changeSampleRate()
|
||||
m_grainCount = 0;
|
||||
m_grains.reserve(8);// arbitrary
|
||||
|
||||
m_dcCoeff = std::exp(-2.0 * F_PI * DcRemovalHz / m_sampleRate);
|
||||
m_dcCoeff = std::exp(-numbers::tau_v<float> * DcRemovalHz / m_sampleRate);
|
||||
|
||||
const double pitch = m_granularpitchshifterControls.m_pitchModel.value() * (1. / 12.);
|
||||
const double pitchSpread = m_granularpitchshifterControls.m_pitchSpreadModel.value() * (1. / 24.);
|
||||
|
||||
@@ -118,10 +118,10 @@ private:
|
||||
|
||||
void setCoefs(float sampleRate, float cutoff)
|
||||
{
|
||||
const float g = std::tan(F_PI * cutoff / sampleRate);
|
||||
const float ginv = g / (1.f + g * (g + F_SQRT_2));
|
||||
const float g = std::tan(numbers::pi_v<float> * cutoff / sampleRate);
|
||||
const float ginv = g / (1.f + g * (g + numbers::sqrt2_v<float>));
|
||||
m_g1 = ginv;
|
||||
m_g2 = 2.f * (g + F_SQRT_2) * ginv;
|
||||
m_g2 = 2.f * (g + numbers::sqrt2_v<float>) * ginv;
|
||||
m_g3 = g * ginv;
|
||||
m_g4 = 2.f * ginv;
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ private:
|
||||
|
||||
inline void setFilterFreq( float fc, StereoOnePole & f )
|
||||
{
|
||||
const float b1 = expf( -2.0f * F_PI * fc );
|
||||
const float b1 = std::exp(-numbers::tau_v<float> * fc);
|
||||
f.setCoeffs( 1.0f - b1, b1 );
|
||||
}
|
||||
|
||||
|
||||
@@ -413,7 +413,7 @@ struct sin_wave
|
||||
static inline float process(float x)
|
||||
{
|
||||
x = positiveFraction(x);
|
||||
return sinf(x * F_2PI);
|
||||
return std::sin(x * numbers::tau_v<float>);
|
||||
}
|
||||
};
|
||||
static freefunc1<float,sin_wave,true> sin_wave_func;
|
||||
@@ -535,7 +535,7 @@ ExprFront::ExprFront(const char * expr, int last_func_samples)
|
||||
m_data->m_expression_string = expr;
|
||||
m_data->m_symbol_table.add_pi();
|
||||
|
||||
m_data->m_symbol_table.add_constant("e", F_E);
|
||||
m_data->m_symbol_table.add_constant("e", numbers::e_v<float>);
|
||||
|
||||
m_data->m_symbol_table.add_constant("seed", SimpleRandom::generator() & max_float_integer_mask);
|
||||
|
||||
|
||||
@@ -252,14 +252,14 @@ void Xpressive::smooth(float smoothness,const graphModel * in,graphModel * out)
|
||||
const int guass_size = (int)(smoothness * 5) | 1;
|
||||
const int guass_center = guass_size/2;
|
||||
const float delta = smoothness;
|
||||
const float a= 1.0f / (sqrtf(2.0f * F_PI) * delta);
|
||||
const float a = 1.0f / (std::sqrt(numbers::tau_v<float>) * delta);
|
||||
auto const guassian = new float[guass_size];
|
||||
float sum = 0.0f;
|
||||
float temp = 0.0f;
|
||||
for (int i = 0; i < guass_size; i++)
|
||||
{
|
||||
temp = (i - guass_center) / delta;
|
||||
sum += guassian[i] = a * powf(F_E, -0.5f * temp * temp);
|
||||
sum += guassian[i] = a * std::exp(-0.5f * temp * temp);
|
||||
}
|
||||
for (int i = 0; i < guass_size; i++)
|
||||
{
|
||||
|
||||
@@ -103,8 +103,8 @@ void BandLimitedWave::generateWaves()
|
||||
{
|
||||
hlen = static_cast<double>( len ) / static_cast<double>( harm );
|
||||
const double amp = -1.0 / static_cast<double>( harm );
|
||||
//const double a2 = cos( om * harm * F_2PI );
|
||||
s += amp * /*a2 **/sin( static_cast<double>( ph * harm ) / static_cast<double>( len ) * F_2PI );
|
||||
//const double a2 = std::cos(om * harm * numbers::tau_v<float>);
|
||||
s += amp * /*a2 **/ std::sin(static_cast<double>(ph * harm) / static_cast<double>(len) * numbers::tau_v<float>);
|
||||
harm++;
|
||||
} while( hlen > 2.0 );
|
||||
s_waveforms[static_cast<std::size_t>(BandLimitedWave::Waveform::BLSaw)].setSampleAt( i, ph, s );
|
||||
@@ -145,8 +145,8 @@ void BandLimitedWave::generateWaves()
|
||||
{
|
||||
hlen = static_cast<double>( len ) / static_cast<double>( harm );
|
||||
const double amp = 1.0 / static_cast<double>( harm );
|
||||
//const double a2 = cos( om * harm * F_2PI );
|
||||
s += amp * /*a2 **/ sin( static_cast<double>( ph * harm ) / static_cast<double>( len ) * F_2PI );
|
||||
//const double a2 = std::cos(om * harm * numbers::tau_v<float>);
|
||||
s += amp * /*a2 **/ std::sin(static_cast<double>(ph * harm) / static_cast<double>(len) * numbers::tau_v<float>);
|
||||
harm += 2;
|
||||
} while( hlen > 2.0 );
|
||||
s_waveforms[static_cast<std::size_t>(BandLimitedWave::Waveform::BLSquare)].setSampleAt( i, ph, s );
|
||||
@@ -186,9 +186,9 @@ void BandLimitedWave::generateWaves()
|
||||
{
|
||||
hlen = static_cast<double>( len ) / static_cast<double>( harm );
|
||||
const double amp = 1.0 / static_cast<double>( harm * harm );
|
||||
//const double a2 = cos( om * harm * F_2PI );
|
||||
s += amp * /*a2 **/ sin( ( static_cast<double>( ph * harm ) / static_cast<double>( len ) +
|
||||
( ( harm + 1 ) % 4 == 0 ? 0.5 : 0.0 ) ) * F_2PI );
|
||||
//const double a2 = std::cos(om * harm * numbers::tau_v<float>);
|
||||
s += amp * /*a2 **/ std::sin((static_cast<double>(ph * harm) / static_cast<double>(len) +
|
||||
((harm + 1) % 4 == 0 ? 0.5 : 0.0)) * numbers::tau_v<float>);
|
||||
harm += 2;
|
||||
} while( hlen > 2.0 );
|
||||
s_waveforms[static_cast<std::size_t>(BandLimitedWave::Waveform::BLTriangle)].setSampleAt( i, ph, s );
|
||||
@@ -273,4 +273,4 @@ moogfile.close();
|
||||
|
||||
}
|
||||
|
||||
} // namespace lmms
|
||||
} // namespace lmms
|
||||
|
||||
@@ -152,7 +152,7 @@ void Instrument::applyFadeIn(SampleFrame* buf, NotePlayHandle * n)
|
||||
{
|
||||
for (ch_cnt_t ch = 0; ch < DEFAULT_CHANNELS; ++ch)
|
||||
{
|
||||
buf[offset + f][ch] *= 0.5 - 0.5 * cosf(F_PI * (float) f / (float) n->m_fadeInLength);
|
||||
buf[offset + f][ch] *= 0.5 - 0.5 * std::cos(numbers::pi_v<float> * (float) f / (float) n->m_fadeInLength);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -168,7 +168,7 @@ void Instrument::applyFadeIn(SampleFrame* buf, NotePlayHandle * n)
|
||||
for (ch_cnt_t ch = 0; ch < DEFAULT_CHANNELS; ++ch)
|
||||
{
|
||||
float currentLength = n->m_fadeInLength * (1.0f - (float) f / frames) + new_length * ((float) f / frames);
|
||||
buf[f][ch] *= 0.5 - 0.5 * cosf(F_PI * (float) (total + f) / currentLength);
|
||||
buf[f][ch] *= 0.5 - 0.5 * std::cos(numbers::pi_v<float> * (float) (total + f) / currentLength);
|
||||
if (total + f >= currentLength)
|
||||
{
|
||||
n->m_fadeInLength = currentLength;
|
||||
|
||||
@@ -127,7 +127,7 @@ void Oscillator::generateSawWaveTable(int bands, sample_t* table, int firstBand)
|
||||
const float imod = (i - OscillatorConstants::WAVETABLE_LENGTH / 2.f) / OscillatorConstants::WAVETABLE_LENGTH;
|
||||
for (int n = firstBand; n <= bands; n++)
|
||||
{
|
||||
table[i] += (n % 2 ? 1.0f : -1.0f) / n * sinf(F_2PI * n * imod) / F_PI_2;
|
||||
table[i] += (n % 2 ? 1.0f : -1.0f) / n * std::sin(numbers::tau_v<float> * n * imod) / numbers::pi_half_v<float>;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -143,7 +143,7 @@ void Oscillator::generateTriangleWaveTable(int bands, sample_t* table, int first
|
||||
for (int n = firstBand | 1; n <= bands; n += 2)
|
||||
{
|
||||
table[i] += (n & 2 ? -1.0f : 1.0f) / powf(n, 2.0f) *
|
||||
sinf(F_2PI * n * i / (float)OscillatorConstants::WAVETABLE_LENGTH) / (F_PI_SQR / 8);
|
||||
std::sin(numbers::tau_v<float> * n * i / (float)OscillatorConstants::WAVETABLE_LENGTH) / (numbers::pi_sqr_v<float> / 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -158,7 +158,9 @@ void Oscillator::generateSquareWaveTable(int bands, sample_t* table, int firstBa
|
||||
{
|
||||
for (int n = firstBand | 1; n <= bands; n += 2)
|
||||
{
|
||||
table[i] += (1.0f / n) * sinf(F_2PI * i * n / OscillatorConstants::WAVETABLE_LENGTH) / (F_PI / 4);
|
||||
table[i] += (1.0f / n)
|
||||
* std::sin(numbers::tau_v<float> * i * n / OscillatorConstants::WAVETABLE_LENGTH)
|
||||
/ (numbers::pi_v<float> / 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -144,9 +144,9 @@ int precomputeWindow(float *window, unsigned int length, FFTWindow type, bool no
|
||||
// common computation for cosine-sum based windows
|
||||
for (unsigned int i = 0; i < length; i++)
|
||||
{
|
||||
window[i] = (a0 - a1 * cos(2 * F_PI * i / ((float)length - 1.0))
|
||||
+ a2 * cos(4 * F_PI * i / ((float)length - 1.0))
|
||||
- a3 * cos(6 * F_PI * i / ((float)length - 1.0)));
|
||||
window[i] = (a0 - a1 * std::cos(2 * numbers::pi_v<float> * i / ((float)length - 1.0))
|
||||
+ a2 * std::cos(4 * numbers::pi_v<float> * i / ((float)length - 1.0))
|
||||
- a3 * std::cos(6 * numbers::pi_v<float> * i / ((float)length - 1.0)));
|
||||
gain += window[i];
|
||||
}
|
||||
|
||||
|
||||
@@ -41,10 +41,6 @@
|
||||
#include "SampleClip.h"
|
||||
#include "SampleWaveform.h"
|
||||
|
||||
#ifndef __USE_XOPEN
|
||||
#define __USE_XOPEN
|
||||
#endif
|
||||
|
||||
#include "ActionGroup.h"
|
||||
#include "AutomationNode.h"
|
||||
#include "ComboBox.h"
|
||||
|
||||
@@ -41,10 +41,6 @@
|
||||
#include <QStyleOption>
|
||||
#include <QToolButton>
|
||||
|
||||
#ifndef __USE_XOPEN
|
||||
#define __USE_XOPEN
|
||||
#endif
|
||||
|
||||
#include <cmath>
|
||||
#include <utility>
|
||||
|
||||
|
||||
@@ -29,10 +29,6 @@
|
||||
#include <QInputDialog>
|
||||
#include <QPainter>
|
||||
|
||||
#ifndef __USE_XOPEN
|
||||
#define __USE_XOPEN
|
||||
#endif
|
||||
|
||||
#include "lmms_math.h"
|
||||
#include "CaptionMenu.h"
|
||||
#include "ControllerConnection.h"
|
||||
|
||||
@@ -25,15 +25,10 @@
|
||||
#include <QMouseEvent>
|
||||
#include <QPainter>
|
||||
|
||||
#ifndef __USE_XOPEN
|
||||
#define __USE_XOPEN
|
||||
#endif
|
||||
|
||||
#include "GroupBox.h"
|
||||
#include "embed.h"
|
||||
#include "FontHelper.h"
|
||||
|
||||
|
||||
namespace lmms::gui
|
||||
{
|
||||
|
||||
|
||||
@@ -26,10 +26,6 @@
|
||||
|
||||
#include <QPainter>
|
||||
|
||||
#ifndef __USE_XOPEN
|
||||
#define __USE_XOPEN
|
||||
#endif
|
||||
|
||||
#include "lmms_math.h"
|
||||
#include "DeprecationHelper.h"
|
||||
#include "embed.h"
|
||||
@@ -316,7 +312,7 @@ void Knob::setTextColor( const QColor & c )
|
||||
|
||||
QLineF Knob::calculateLine( const QPointF & _mid, float _radius, float _innerRadius ) const
|
||||
{
|
||||
const float rarc = m_angle * F_PI / 180.0;
|
||||
const float rarc = m_angle * numbers::pi_v<float> / 180.0;
|
||||
const float ca = cos( rarc );
|
||||
const float sa = -sin( rarc );
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
#include "EffectChain.h"
|
||||
#include "Mixer.h"
|
||||
#include "panning_constants.h"
|
||||
#include "panning.h"
|
||||
#include "PatternStore.h"
|
||||
#include "PatternTrack.h"
|
||||
#include "SampleClip.h"
|
||||
|
||||
Reference in New Issue
Block a user