28# define PI 3.141592653589793f
62template <
typename effectsuite_t = effectsuite_t_default>
69 virtual effectsuite_t processFloat(effectsuite_t inputSample) = 0;
77 return this->
active_flag ? (
effect_t)(32767.0f * processFloat(
static_cast<effectsuite_t
>(inputSample)/32767.0f)) : inputSample;
92template <
typename effectsuite_t = effectsuite_t_default>
119 srand(
static_cast<unsigned>(time(0)));
143 const effectsuite_t radPerSec = 2 * 3.1415926536f *
timeStep;
145 for (
int j = 0; j < 35; j += 1)
147 (sin((2. * effectsuite_t(j) + 1) * i * radPerSec)) /
148 (2. * effectsuite_t(j) + 1);
156 const effectsuite_t radPerSec = 2 * 3.1415926536f *
timeStep;
158 for (
int j = 0; j < 35; j += 1)
159 waveTable[i] += (sin((2 * j + 1) * i * radPerSec)) / (2 * j + 1);
167 const effectsuite_t radPerSec = 2 * 3.1415926536f *
timeStep;
169 for (
int j = 1; j < 11; j += 1)
170 waveTable[i] += pow(-1, j) * sin(j * radPerSec * i) / effectsuite_t(j);
177 const effectsuite_t radPerSec = 2 * 3.1415926536f *
timeStep;
185 const effectsuite_t radPerSec = 2 * 3.1415926536f *
timeStep;
187 waveTable[i] = (sin(i * radPerSec) + 1) * .5f;
215 const effectsuite_t lo = -1.;
216 const effectsuite_t hi = 1.;
217 return lo +
static_cast<effectsuite_t
>(rand()) /
218 (
static_cast<effectsuite_t
>(RAND_MAX / (hi - lo)));
255 for (
int j = 0; j <
res; j++) {
256 for (
int i = 0; i <
order; i++) {
267 effectsuite_t *polynomial_normaliser =
new effectsuite_t[
order];
268 if (!polynomial_normaliser) {
271 std::fill(polynomial_normaliser, polynomial_normaliser +
order, 1);
272 effectsuite_t *alphas =
new effectsuite_t[
res];
277 for (
int i = 0; i <
res; i++) {
278 alphas[i] = (i / float(
res)) - 0.5;
281 effectsuite_t *anchors =
new effectsuite_t[
order];
283 if ((
order % 2) == 0) {
284 for (
int i = 0; i <
order; i++) {
285 anchors[i] = -(effectsuite_t(
order) - 1) * 0.5 + effectsuite_t(i);
289 for (
int i = 0; i <
order; i++) {
290 anchors[i] = (-(effectsuite_t(
order)) * 0.5) + effectsuite_t(i);
295 for (
int q = 0; q <
res; q++) {
297 for (
int j = 0; j <
order; j++) {
299 for (
int m = 0; m <
order; m++) {
302 polynomial_normaliser[j] =
303 polynomial_normaliser[j] * (anchors[j] - anchors[m]);
312 delete[] polynomial_normaliser;
340 const int orderHalf =
order * .5;
342 effectsuite_t interpOut = 0;
343 int intBufferIndex = floor(bufferIndex);
344 int alphaIndex = int(floor((bufferIndex - intBufferIndex) *
res));
346 for (
int i = 0; i <
order; i++) {
369 const int n0 = floor(bufferIndex);
371 const int n2 = (n0 + (2 * freq)) %
sampleRate;
372 const effectsuite_t alpha = bufferIndex - n0;
378 const effectsuite_t d = (-c) / 3;
379 return a + (b * alpha) + (c * alpha * alpha) + (d * alpha * alpha * alpha);
396 static const int res = 100;
407 template <
class T,
typename effectsuite_t = effectsuite_t_default>
438template <
typename effectsuite_t = effectsuite_t_default>
498 effectsuite_t **interpTable =
new effectsuite_t *[order];
503 for (
int i = 0; i < order; i++) {
504 interpTable[i] =
new effectsuite_t[res + 1];
505 if (!interpTable[i]) {
508 std::fill(interpTable[i], interpTable[i] + res, 1);
511 effectsuite_t *polynomial_normaliser =
new effectsuite_t[order];
512 if (!polynomial_normaliser) {
515 std::fill(polynomial_normaliser, polynomial_normaliser + order, 1);
516 effectsuite_t *alphas =
new effectsuite_t[res];
521 for (
int i = 0; i < res; i++) {
522 alphas[i] = (i / float(res)) - 0.5;
525 effectsuite_t *anchors =
new effectsuite_t[order];
527 if ((order % 2) == 0) {
528 for (
int i = 0; i < order; i++) {
529 anchors[i] = -(effectsuite_t(order) - 1) * 0.5 + effectsuite_t(i);
532 for (
int i = 0; i < order; i++) {
533 anchors[i] = (-(effectsuite_t(order)) * 0.5) + effectsuite_t(i);
538 for (
int q = 0; q < res; q++) {
540 for (
int j = 0; j < order; j++) {
542 for (
int m = 0; m < order; m++) {
545 polynomial_normaliser[j] =
546 polynomial_normaliser[j] * (anchors[j] - anchors[m]);
548 interpTable[j][q] *= (alphas[q] - anchors[m]);
551 interpTable[j][q] /= polynomial_normaliser[j];
554 delete[] polynomial_normaliser;
646 const int orderHalf = order * .5;
648 effectsuite_t interpOut = 0;
649 int intBufferIndex = floor(bufferIndex);
650 int alphaIndex = int(floor((bufferIndex - intBufferIndex) * res));
652 for (
int i = 0; i < order; i++) {
653 int interpIndex = (i + 1 - orderHalf) + intBufferIndex;
655 if (interpIndex < 0) {
692template <
typename effectsuite_t>
703template <
typename effectsuite_t = effectsuite_t_default>
794 virtual effectsuite_t
processFloat(effectsuite_t inputSample)
override {
845 const float cutFreq = (float)cutFreqIn;
846 const float ripple = (float)rippleIn;
854 int order = (int)poles;
861 Es = sqrt(pow(1 / (1 - ripple), 2) - 1);
862 Vx = (1 / poles) * log(1 / Es + sqrt(1 / (pow(Es, 2)) + 1));
863 Kx = (1 / poles) * log(1 / Es + sqrt(1 / (pow(Es, 2)) - 1));
870 const float T = 2.0f * tan(.5f);
871 const float W = 2.0f * (float)
PI * cutFreq;
877 K = sin(.5f - W / 2) / sin(.5f + W / 2);
881 K = -cos(.5f + W / 2) / cos(W / 2 - .5f);
885 for (
int i = 0; i < (order / 2); i++) {
887 const float alpha = (float)
PI / (2 * poles) + (i - 1) * ((
float)
PI / poles);
891 Rp = -cos(alpha) * sinh(Vx) / Kx;
892 Ip = sin(alpha) * cosh(Vx) / Kx;
898 const float M = pow(Rp, 2) + pow(Ip, 2);
899 const float D = 4 - 4 * Rp * T + M * T;
901 const float X0 = (pow(T, 2)) /
D;
902 const float X1 = (2 * pow(T, 2)) /
D;
905 const float Y1 = (8 - (2 * M * pow(T, 2))) /
D;
906 const float Y2 = (-4 - 4 * Rp * T - M * T) /
D;
909 const float _D1 = 1 / (1 + Y1 * K - Y2 * pow(K, 2));
911 const float _A0 = (X0 - X1 * K + X2 * pow(K, 2)) * _D1;
912 float _A1 = (-2 * X0 * K + X1 + X1 * pow(K, 2) - 2 * X2 * K) * _D1;
913 const float _A2 = (X0 * pow(K, 2) - X1 * K + X2) * _D1;
915 float _B1 = (2 * K + Y1 + Y1 * pow(K, 2) - 2 * Y2 * K) * _D1;
916 const float B2 = (-(pow(K, 2)) - Y1 * K + Y2) * _D1;
918 if (shelfType == 1) {
923 for (
int j = 0; j < 22; j++) {
927 for (
int j = 2; j < 22; j++) {
943 if (shelfType == 0) {
949 for (
int j = 0; j < order; j++) {
955 const float gain = SA / (1 - SB);
1083 effectsuite_t
rms(effectsuite_t sample) {
1085 effectsuite_t rmsValue = 0;
1093 rmsValue = sqrt(rmsValue);
1152template <
typename effectsuite_t = effectsuite_t_default>
1184template <
typename effectsuite_t = effectsuite_t_default>
1196 DelayEffectBase<effectsuite_t>(static_cast<int>(0.031 * extSampleRate)),
1217 const effectsuite_t delayAmount =
1222 const effectsuite_t out = .0 * inputSample + 1. * this->
getInterpolatedOut(delayAmount);
1320template <
typename effectsuite_t = effectsuite_t_default>
1382 }
else if (gain < -1.) {
1401template <
typename effectsuite_t = effectsuite_t_default>
1467 const effectsuite_t increment =
delayIncrement * (difference / fabs(difference));
1528 }
else if (gain < -1.) {
1542 const int n0 = floor(bufferIndex);
1545 const effectsuite_t alpha = bufferIndex - n0;
1552 const effectsuite_t d = (-c) * 0.33333;
1553 return a + (b * alpha) + (c * alpha * alpha) + (d * alpha * alpha * alpha);
1587template <
typename effectsuite_t = effectsuite_t_default>
1597 :
DelayEffectBase<effectsuite_t>(static_cast<int>(extSampleRate * 0.02)) {}
1645 const effectsuite_t out = ((1 - fabs(
effectGain * .2)) * (inputSample) +
1669 }
else if (gain < -1.) {
1719template <
typename effectsuite_t = effectsuite_t_default>
#define PI
Definition AudioEffectsSuite.h:28
#define assert(T)
Definition avr.h:10