26#ifndef LMMS_BANDLIMITEDWAVE_H
27#define LMMS_BANDLIMITEDWAVE_H
32#include "lmms_export.h"
51 2 << 2, 3 << 2, 2 << 3, 3 << 3,
52 2 << 4, 3 << 4, 2 << 5, 3 << 5,
53 2 << 6, 3 << 6, 2 << 7, 3 << 7,
54 2 << 8, 3 << 8, 2 << 9, 3 << 9,
55 2 << 10, 3 << 10, 2 << 11, 3 << 11 };
62 if (table % 2 == 0) {
return m_data[
TLENS[table] + ph]; }
117 return static_cast<float>( sr ) /
f;
139 const float lookupf = ph *
static_cast<float>( tlen );
140 int lookup =
static_cast<int>( lookupf );
141 const float ip =
fraction( lookupf );
144 const sample_t s2 =
s_waveforms[
static_cast<std::size_t
>(_wave) ].sampleAt(
t, ( lookup + 1 ) % tlen );
146 const int lm = lookup == 0 ? tlen - 1 : lookup - 1;
148 const sample_t s3 =
s_waveforms[
static_cast<std::size_t
>(_wave) ].sampleAt(
t, ( lookup + 2 ) % tlen );
168 static void generateWaves();
static QString s_wavetableDir
Definition BandLimitedWave.h:174
static sample_t oscillate(float _ph, float _wavelen, Waveform _wave)
This method provides interpolated samples of bandlimited waveforms.
Definition BandLimitedWave.h:131
Waveform
Definition BandLimitedWave.h:93
@ Count
Definition BandLimitedWave.h:98
static float freqToLen(float f)
This method converts frequency to wavelength. The oscillate function takes wavelength as argument so ...
Definition BandLimitedWave.h:108
static float freqToLen(float f, sample_rate_t sr)
This method converts frequency to wavelength, but you can use any custom sample rate with it.
Definition BandLimitedWave.h:115
static constexpr auto NumWaveforms
Definition BandLimitedWave.h:100
static std::array< WaveMipMap, NumWaveforms > s_waveforms
Definition BandLimitedWave.h:172
BandLimitedWave()=default
virtual ~BandLimitedWave()=default
static float pdToLen(float pd)
This method converts phase delta to wavelength. It assumes a phase scale of 0 to 1.
Definition BandLimitedWave.h:121
static bool s_wavesGenerated
Definition BandLimitedWave.h:170
static AudioEngine * audioEngine()
Definition Engine.h:59
struct huft * t
Definition inflate.c:943
unsigned f
Definition inflate.c:1572
float in
Definition lilv_test.c:1460
float out
Definition lilv_test.c:1461
Definition AudioAlsa.cpp:35
constexpr int MIPMAPSIZE3
Definition BandLimitedWave.h:44
constexpr int MIPMAPSIZE
Definition BandLimitedWave.h:43
std::uint32_t sample_rate_t
Definition LmmsTypes.h:42
float sample_t
Definition LmmsTypes.h:39
constexpr int MAXTLEN
Definition BandLimitedWave.h:47
QDataStream & operator>>(QDataStream &in, WaveMipMap &waveMipMap)
Definition BandLimitedWave.cpp:50
QDataStream & operator<<(QDataStream &out, WaveMipMap &waveMipMap)
Definition BandLimitedWave.cpp:38
float optimal4pInterpolate(float v0, float v1, float v2, float v3, float x)
Definition interpolation.h:100
constexpr int MAXTBL
Definition BandLimitedWave.h:45
@ Count
Definition Sfxr.h:43
constexpr int MINTLEN
Definition BandLimitedWave.h:46
constexpr int MAXLEN
Definition BandLimitedWave.h:42
auto fraction(std::floating_point auto x) noexcept
Returns the fractional part of a float, a value between -1.0f and 1.0f.
Definition lmms_math.h:63
const int TLENS[MAXTBL+1]
Definition BandLimitedWave.h:50
Definition BandLimitedWave.h:58
sample_t m_data[MIPMAPSIZE]
Definition BandLimitedWave.h:78
sample_t m_data3[MIPMAPSIZE3]
Definition BandLimitedWave.h:79
void setSampleAt(int table, int ph, sample_t sample)
Definition BandLimitedWave.h:68
sample_t sampleAt(int table, int ph)
Definition BandLimitedWave.h:60
signed int sample
Definition tap_dynamics_m.c:41