diff --git a/CMakeLists.txt b/CMakeLists.txt index 37cd72f..5f8e689 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -95,6 +95,9 @@ add_plugin(UltrasonicLite) add_plugin(UltrasonicMed) add_plugin(Vibrato) +set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsingle-precision-constant -std=gnu99 -Wno-implicit-fallthrough -Werror=incompatible-pointer-types") +set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsingle-precision-constant") + configure_file(src/manifest.ttl.in ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/manifest.ttl) if(APPLE OR UNIX) diff --git a/src/ADClip7/ADClip7.c b/src/ADClip7/ADClip7.c index e502a66..9f0c763 100644 --- a/src/ADClip7/ADClip7.c +++ b/src/ADClip7/ADClip7.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define ADCLIP7_URI "https://hannesbraun.net/ns/lv2/airwindows/adclip7" @@ -26,8 +27,6 @@ typedef struct { const float* enhance; const float* mode; - uint32_t fpdL; - uint32_t fpdR; //default stuff double lastSampleL; double lastSampleR; @@ -46,7 +45,7 @@ typedef struct { static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -106,11 +105,6 @@ static void activate(LV2_Handle instance) adclip7->iirLowsAR = 0.0; adclip7->iirLowsBL = 0.0; adclip7->iirLowsBR = 0.0; - - adclip7->fpdL = 1.0; - while (adclip7->fpdL < 16386) adclip7->fpdL = rand() * UINT32_MAX; - adclip7->fpdR = 1.0; - while (adclip7->fpdR < 16386) adclip7->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -169,9 +163,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { inputSampleL = *in1; inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = adclip7->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = adclip7->fpdR * 1.18e-17; - if (inputGain != 1.0) { inputSampleL *= inputGain; @@ -517,20 +508,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) if (inputSampleR < -adclip7->refclipR) inputSampleR = -adclip7->refclipR; //final iron bar - //begin 32 bit stereo floating point dither - int expon; - frexpf((float) inputSampleL, &expon); - adclip7->fpdL ^= adclip7->fpdL << 13; - adclip7->fpdL ^= adclip7->fpdL >> 17; - adclip7->fpdL ^= adclip7->fpdL << 5; - inputSampleL += (((double) adclip7->fpdL - (uint32_t) 0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float) inputSampleR, &expon); - adclip7->fpdR ^= adclip7->fpdR << 13; - adclip7->fpdR ^= adclip7->fpdR >> 17; - adclip7->fpdR ^= adclip7->fpdR << 5; - inputSampleR += (((double) adclip7->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Acceleration/Acceleration.c b/src/Acceleration/Acceleration.c index d6af6c5..f4366a0 100644 --- a/src/Acceleration/Acceleration.c +++ b/src/Acceleration/Acceleration.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define ACCELERATION_URI "https://hannesbraun.net/ns/lv2/airwindows/acceleration" @@ -22,8 +23,6 @@ typedef struct { const float* limit; const float* drywet; - uint32_t fpdL; - uint32_t fpdR; //default stuff double ataLastOutL; double s1L; @@ -50,7 +49,7 @@ typedef struct { static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -108,11 +107,6 @@ static void activate(LV2_Handle instance) acceleration->m1R = 0.0; acceleration->m2R = 0.0; acceleration->desR = 0.0; - - acceleration->fpdL = 1.0; - while (acceleration->fpdL < 16386) acceleration->fpdL = rand() * UINT32_MAX; - acceleration->fpdR = 1.0; - while (acceleration->fpdR < 16386) acceleration->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -145,8 +139,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { inputSampleL = *in1; inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = acceleration->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = acceleration->fpdR * 1.18e-17; drySampleL = inputSampleL; drySampleR = inputSampleR; @@ -205,20 +197,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleR = (inputSampleR * wet) + (drySampleR * (1.0 - wet)); } - //begin 32 bit stereo floating point dither - int expon; - frexpf((float) inputSampleL, &expon); - acceleration->fpdL ^= acceleration->fpdL << 13; - acceleration->fpdL ^= acceleration->fpdL >> 17; - acceleration->fpdL ^= acceleration->fpdL << 5; - inputSampleL += (((double) acceleration->fpdL - (uint32_t) 0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float) inputSampleR, &expon); - acceleration->fpdR ^= acceleration->fpdR << 13; - acceleration->fpdR ^= acceleration->fpdR >> 17; - acceleration->fpdR ^= acceleration->fpdR << 5; - inputSampleR += (((double) acceleration->fpdR - (uint32_t) 0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Acceleration2/Acceleration2.c b/src/Acceleration2/Acceleration2.c index 3cdf047..88b5f03 100644 --- a/src/Acceleration2/Acceleration2.c +++ b/src/Acceleration2/Acceleration2.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define ACCELERATION2_URI "https://hannesbraun.net/ns/lv2/airwindows/acceleration2" @@ -36,14 +37,11 @@ typedef struct { double biquadB[11]; //note that this stereo form doesn't require L and R forms! //This is because so much of it is coefficients etc. that are the same on both channels. //So the stored samples are in 7-8 and 9-10, and freq/res/coefficients serve both. - - uint32_t fpdL; - uint32_t fpdR; } Acceleration2; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -95,11 +93,6 @@ static void activate(LV2_Handle instance) acceleration2->biquadA[x] = 0.0; acceleration2->biquadB[x] = 0.0; } - - acceleration2->fpdL = 1.0; - while (acceleration2->fpdL < 16386) acceleration2->fpdL = rand() * UINT32_MAX; - acceleration2->fpdR = 1.0; - while (acceleration2->fpdR < 16386) acceleration2->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -145,8 +138,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = acceleration2->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = acceleration2->fpdR * 1.18e-17; double drySampleL = inputSampleL; double drySampleR = inputSampleR; @@ -194,20 +185,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleR = (inputSampleR * wet) + (drySampleR * (1.0 - wet)); } - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - acceleration2->fpdL ^= acceleration2->fpdL << 13; - acceleration2->fpdL ^= acceleration2->fpdL >> 17; - acceleration2->fpdL ^= acceleration2->fpdL << 5; - inputSampleL += (((double)acceleration2->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - acceleration2->fpdR ^= acceleration2->fpdR << 13; - acceleration2->fpdR ^= acceleration2->fpdR >> 17; - acceleration2->fpdR ^= acceleration2->fpdR << 5; - inputSampleR += (((double)acceleration2->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Baxandall/Baxandall.c b/src/Baxandall/Baxandall.c index 263b1ca..82d7f52 100644 --- a/src/Baxandall/Baxandall.c +++ b/src/Baxandall/Baxandall.c @@ -4,6 +4,7 @@ #include #include #include +#include "../optimizations.h" #define BAXANDALL_URI "https://hannesbraun.net/ns/lv2/airwindows/baxandall" @@ -25,8 +26,6 @@ typedef struct { const float* bass; const float* outputGain; - uint32_t fpdL; - uint32_t fpdR; //default stuff double trebleAL[9]; double trebleBL[9]; @@ -42,7 +41,7 @@ typedef struct { static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -94,10 +93,6 @@ static void activate(LV2_Handle instance) baxandall->bassBR[x] = 0.0; } baxandall->flip = false; - baxandall->fpdL = 1.0; - while (baxandall->fpdL < 16386) baxandall->fpdL = rand() * UINT32_MAX; - baxandall->fpdR = 1.0; - while (baxandall->fpdR < 16386) baxandall->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -183,8 +178,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = baxandall->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = baxandall->fpdR * 1.18e-17; if (output != 1.0) { inputSampleL *= output; @@ -258,20 +251,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleR = asin(inputSampleR); //amplitude aspect - //begin 32 bit stereo floating point dither - int expon; - frexpf((float) inputSampleL, &expon); - baxandall->fpdL ^= baxandall->fpdL << 13; - baxandall->fpdL ^= baxandall->fpdL >> 17; - baxandall->fpdL ^= baxandall->fpdL << 5; - inputSampleL += (((double) baxandall->fpdL - (uint32_t) 0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float) inputSampleR, &expon); - baxandall->fpdR ^= baxandall->fpdR << 13; - baxandall->fpdR ^= baxandall->fpdR >> 17; - baxandall->fpdR ^= baxandall->fpdR << 5; - inputSampleR += (((double) baxandall->fpdR - (uint32_t) 0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/BitShiftGain/BitShiftGain.c b/src/BitShiftGain/BitShiftGain.c index 4c5a5d1..1235099 100644 --- a/src/BitShiftGain/BitShiftGain.c +++ b/src/BitShiftGain/BitShiftGain.c @@ -2,6 +2,7 @@ #include #include +#include "../optimizations.h" #define BITSHIFTGAIN_URI "https://hannesbraun.net/ns/lv2/airwindows/bitshiftgain" @@ -21,7 +22,7 @@ typedef struct { static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { diff --git a/src/Capacitor/Capacitor.c b/src/Capacitor/Capacitor.c index 907c2d3..fe0d466 100644 --- a/src/Capacitor/Capacitor.c +++ b/src/Capacitor/Capacitor.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define CAPACITOR_URI "https://hannesbraun.net/ns/lv2/airwindows/capacitor" @@ -62,14 +63,11 @@ typedef struct { double lastLowpass; double lastHighpass; double lastWet; - - uint32_t fpdL; - uint32_t fpdR; } Capacitor; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -145,11 +143,6 @@ static void activate(LV2_Handle instance) capacitor->lastLowpass = 1000.0; capacitor->lastHighpass = 1000.0; capacitor->lastWet = 1000.0; - - capacitor->fpdL = 1.0; - while (capacitor->fpdL < 16386) capacitor->fpdL = rand() * UINT32_MAX; - capacitor->fpdR = 1.0; - while (capacitor->fpdR < 16386) capacitor->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -186,8 +179,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { inputSampleL = *in1; inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = capacitor->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = capacitor->fpdR * 1.18e-17; drySampleL = inputSampleL; drySampleR = inputSampleR; @@ -365,20 +356,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleL = (drySampleL * dry) + (inputSampleL * capacitor->wet); inputSampleR = (drySampleR * dry) + (inputSampleR * capacitor->wet); - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - capacitor->fpdL ^= capacitor->fpdL << 13; - capacitor->fpdL ^= capacitor->fpdL >> 17; - capacitor->fpdL ^= capacitor->fpdL << 5; - inputSampleL += (((double)capacitor->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - capacitor->fpdR ^= capacitor->fpdR << 13; - capacitor->fpdR ^= capacitor->fpdR >> 17; - capacitor->fpdR ^= capacitor->fpdR << 5; - inputSampleR += (((double)capacitor->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Capacitor2/Capacitor2.c b/src/Capacitor2/Capacitor2.c index 111ff8a..53050eb 100644 --- a/src/Capacitor2/Capacitor2.c +++ b/src/Capacitor2/Capacitor2.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define CAPACITOR2_URI "https://hannesbraun.net/ns/lv2/airwindows/capacitor2" @@ -65,14 +66,11 @@ typedef struct { double lastLowpass; double lastHighpass; double lastWet; - - uint32_t fpdL; - uint32_t fpdR; } Capacitor2; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -152,11 +150,6 @@ static void activate(LV2_Handle instance) capacitor2->lastLowpass = 1000.0; capacitor2->lastHighpass = 1000.0; capacitor2->lastWet = 1000.0; - - capacitor2->fpdL = 1.0; - while (capacitor2->fpdL < 16386) capacitor2->fpdL = rand() * UINT32_MAX; - capacitor2->fpdR = 1.0; - while (capacitor2->fpdR < 16386) capacitor2->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -185,8 +178,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = capacitor2->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = capacitor2->fpdR * 1.18e-17; double drySampleL = inputSampleL; double drySampleR = inputSampleR; @@ -377,20 +368,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleL = (drySampleL * (1.0 - capacitor2->wet)) + (inputSampleL * nonLinTrim * capacitor2->wet); inputSampleR = (drySampleR * (1.0 - capacitor2->wet)) + (inputSampleR * nonLinTrim * capacitor2->wet); - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - capacitor2->fpdL ^= capacitor2->fpdL << 13; - capacitor2->fpdL ^= capacitor2->fpdL >> 17; - capacitor2->fpdL ^= capacitor2->fpdL << 5; - inputSampleL += (((double)capacitor2->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - capacitor2->fpdR ^= capacitor2->fpdR << 13; - capacitor2->fpdR ^= capacitor2->fpdR >> 17; - capacitor2->fpdR ^= capacitor2->fpdR << 5; - inputSampleR += (((double)capacitor2->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Channel8/Channel8.c b/src/Channel8/Channel8.c index 5130655..80e75a7 100644 --- a/src/Channel8/Channel8.c +++ b/src/Channel8/Channel8.c @@ -4,6 +4,7 @@ #include #include #include +#include "../optimizations.h" #define CHANNEL8_URI "https://hannesbraun.net/ns/lv2/airwindows/channel8" @@ -25,8 +26,6 @@ typedef struct { const float* drive; const float* outputGain; - uint32_t fpdL; - uint32_t fpdR; //default stuff double iirSampleLA; double iirSampleRA; @@ -45,7 +44,7 @@ typedef struct { static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -87,10 +86,6 @@ static void activate(LV2_Handle instance) { Channel8* channel8 = (Channel8*) instance; - channel8->fpdL = 1.0; - while (channel8->fpdL < 16386) channel8->fpdL = rand() * UINT32_MAX; - channel8->fpdR = 1.0; - while (channel8->fpdR < 16386) channel8->fpdR = rand() * UINT32_MAX; channel8->iirSampleLA = 0.0; channel8->iirSampleRA = 0.0; channel8->iirSampleLB = 0.0; @@ -150,8 +145,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = channel8->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = channel8->fpdR * 1.18e-17; double dielectricScaleL = fabs(2.0 - ((inputSampleL + nonLin) / nonLin)); double dielectricScaleR = fabs(2.0 - ((inputSampleR + nonLin) / nonLin)); @@ -236,20 +229,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleR *= output; } - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - channel8->fpdL ^= channel8->fpdL << 13; - channel8->fpdL ^= channel8->fpdL >> 17; - channel8->fpdL ^= channel8->fpdL << 5; - inputSampleL += (((double)channel8->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - channel8->fpdR ^= channel8->fpdR << 13; - channel8->fpdR ^= channel8->fpdR >> 17; - channel8->fpdR ^= channel8->fpdR << 5; - inputSampleR += (((double)channel8->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Channel9/Channel9.c b/src/Channel9/Channel9.c index 5e18790..da51ecd 100644 --- a/src/Channel9/Channel9.c +++ b/src/Channel9/Channel9.c @@ -4,6 +4,7 @@ #include #include #include +#include "../optimizations.h" #define CHANNEL9_URI "https://hannesbraun.net/ns/lv2/airwindows/channel9" @@ -25,8 +26,6 @@ typedef struct { const float* drive; const float* outputGain; - uint32_t fpdL; - uint32_t fpdR; //default stuff double iirSampleLA; double iirSampleRA; @@ -48,7 +47,7 @@ typedef struct { static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -94,10 +93,6 @@ static void activate(LV2_Handle instance) channel9->biquadA[x] = 0.0; channel9->biquadB[x] = 0.0; } - channel9->fpdL = 1.0; - while (channel9->fpdL < 16386) channel9->fpdL = rand() * UINT32_MAX; - channel9->fpdR = 1.0; - while (channel9->fpdR < 16386) channel9->fpdR = rand() * UINT32_MAX; channel9->iirSampleLA = 0.0; channel9->iirSampleRA = 0.0; channel9->iirSampleLB = 0.0; @@ -188,8 +183,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = channel9->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = channel9->fpdR * 1.18e-17; double tempSample; if (channel9->biquadA[0] < 0.49999) { @@ -313,20 +306,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) channel9->biquadB[13] = inputSampleR; //DF1 right } - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - channel9->fpdL ^= channel9->fpdL << 13; - channel9->fpdL ^= channel9->fpdL >> 17; - channel9->fpdL ^= channel9->fpdL << 5; - inputSampleL += (((double)channel9->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - channel9->fpdR ^= channel9->fpdR << 13; - channel9->fpdR ^= channel9->fpdR >> 17; - channel9->fpdR ^= channel9->fpdR << 5; - inputSampleR += (((double)channel9->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/ClipOnly/ClipOnly.c b/src/ClipOnly/ClipOnly.c index 2d83605..94f0ef8 100644 --- a/src/ClipOnly/ClipOnly.c +++ b/src/ClipOnly/ClipOnly.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define CLIPONLY_URI "https://hannesbraun.net/ns/lv2/airwindows/cliponly" @@ -28,7 +29,7 @@ typedef struct { static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { diff --git a/src/ClipOnly2/ClipOnly2.c b/src/ClipOnly2/ClipOnly2.c index eec1237..7f28c8c 100644 --- a/src/ClipOnly2/ClipOnly2.c +++ b/src/ClipOnly2/ClipOnly2.c @@ -4,6 +4,7 @@ #include #include #include +#include "../optimizations.h" #define CLIPONLY2_URI "https://hannesbraun.net/ns/lv2/airwindows/cliponly2" @@ -31,7 +32,7 @@ typedef struct { static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { diff --git a/src/Console7Buss/Console7Buss.c b/src/Console7Buss/Console7Buss.c index f6f006e..2cd7e8b 100644 --- a/src/Console7Buss/Console7Buss.c +++ b/src/Console7Buss/Console7Buss.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define CONSOLE7BUSS_URI "https://hannesbraun.net/ns/lv2/airwindows/console7buss" @@ -25,14 +26,11 @@ typedef struct { double biquadA[15]; double biquadB[15]; - - uint32_t fpdL; - uint32_t fpdR; } Console7Buss; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -74,10 +72,6 @@ static void activate(LV2_Handle instance) console7Buss->biquadA[x] = 0.0; console7Buss->biquadB[x] = 0.0; } - console7Buss->fpdL = 1.0; - while (console7Buss->fpdL < 16386) console7Buss->fpdL = rand() * UINT32_MAX; - console7Buss->fpdR = 1.0; - while (console7Buss->fpdR < 16386) console7Buss->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -118,8 +112,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = console7Buss->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = console7Buss->fpdR * 1.18e-17; double outSampleL = console7Buss->biquadA[2] * inputSampleL + console7Buss->biquadA[3] * console7Buss->biquadA[7] + console7Buss->biquadA[4] * console7Buss->biquadA[8] - console7Buss->biquadA[5] * console7Buss->biquadA[9] - console7Buss->biquadA[6] * console7Buss->biquadA[10]; console7Buss->biquadA[8] = console7Buss->biquadA[7]; @@ -176,20 +168,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) } //we re-amplify after the distortion relative to how much we cut back previously. - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - console7Buss->fpdL ^= console7Buss->fpdL << 13; - console7Buss->fpdL ^= console7Buss->fpdL >> 17; - console7Buss->fpdL ^= console7Buss->fpdL << 5; - inputSampleL += (((double)console7Buss->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - console7Buss->fpdR ^= console7Buss->fpdR << 13; - console7Buss->fpdR ^= console7Buss->fpdR >> 17; - console7Buss->fpdR ^= console7Buss->fpdR << 5; - inputSampleR += (((double)console7Buss->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Console7Cascade/Console7Cascade.c b/src/Console7Cascade/Console7Cascade.c index 2f5f8ee..e4fd69d 100644 --- a/src/Console7Cascade/Console7Cascade.c +++ b/src/Console7Cascade/Console7Cascade.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define CONSOLE7CASCADE_URI "https://hannesbraun.net/ns/lv2/airwindows/console7cascade" @@ -28,14 +29,11 @@ typedef struct { double biquadC[15]; double biquadD[15]; double biquadE[15]; - - uint32_t fpdL; - uint32_t fpdR; } Console7Cascade; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -80,10 +78,6 @@ static void activate(LV2_Handle instance) console7Cascade->biquadD[x] = 0.0; console7Cascade->biquadE[x] = 0.0; } - console7Cascade->fpdL = 1.0; - while (console7Cascade->fpdL < 16386) console7Cascade->fpdL = rand() * UINT32_MAX; - console7Cascade->fpdR = 1.0; - while (console7Cascade->fpdR < 16386) console7Cascade->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -150,8 +144,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = console7Cascade->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = console7Cascade->fpdR * 1.18e-17; double outSampleL = console7Cascade->biquadA[2] * inputSampleL + console7Cascade->biquadA[3] * console7Cascade->biquadA[7] + console7Cascade->biquadA[4] * console7Cascade->biquadA[8] - console7Cascade->biquadA[5] * console7Cascade->biquadA[9] - console7Cascade->biquadA[6] * console7Cascade->biquadA[10]; console7Cascade->biquadA[8] = console7Cascade->biquadA[7]; @@ -292,20 +284,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) } //we re-amplify after the distortion relative to how much we cut back previously. - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - console7Cascade->fpdL ^= console7Cascade->fpdL << 13; - console7Cascade->fpdL ^= console7Cascade->fpdL >> 17; - console7Cascade->fpdL ^= console7Cascade->fpdL << 5; - inputSampleL += (((double)console7Cascade->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - console7Cascade->fpdR ^= console7Cascade->fpdR << 13; - console7Cascade->fpdR ^= console7Cascade->fpdR >> 17; - console7Cascade->fpdR ^= console7Cascade->fpdR << 5; - inputSampleR += (((double)console7Cascade->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Console7Channel/Console7Channel.c b/src/Console7Channel/Console7Channel.c index 9d531c4..e76936a 100644 --- a/src/Console7Channel/Console7Channel.c +++ b/src/Console7Channel/Console7Channel.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define CONSOLE7CHANNEL_URI "https://hannesbraun.net/ns/lv2/airwindows/console7channel" @@ -24,14 +25,11 @@ typedef struct { double chasespeed; double biquadA[15]; - - uint32_t fpdL; - uint32_t fpdR; } Console7Channel; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -71,10 +69,6 @@ static void activate(LV2_Handle instance) for (int x = 0; x < 15; x++) { console7Channel->biquadA[x] = 0.0; } - console7Channel->fpdL = 1.0; - while (console7Channel->fpdL < 16386) console7Channel->fpdL = rand() * UINT32_MAX; - console7Channel->fpdR = 1.0; - while (console7Channel->fpdR < 16386) console7Channel->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -109,8 +103,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = console7Channel->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = console7Channel->fpdR * 1.18e-17; double outSampleL = console7Channel->biquadA[2] * inputSampleL + console7Channel->biquadA[3] * console7Channel->biquadA[7] + console7Channel->biquadA[4] * console7Channel->biquadA[8] - console7Channel->biquadA[5] * console7Channel->biquadA[9] - console7Channel->biquadA[6] * console7Channel->biquadA[10]; console7Channel->biquadA[8] = console7Channel->biquadA[7]; @@ -155,20 +147,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) } //we re-amplify after the distortion relative to how much we cut back previously. - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - console7Channel->fpdL ^= console7Channel->fpdL << 13; - console7Channel->fpdL ^= console7Channel->fpdL >> 17; - console7Channel->fpdL ^= console7Channel->fpdL << 5; - inputSampleL += (((double)console7Channel->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - console7Channel->fpdR ^= console7Channel->fpdR << 13; - console7Channel->fpdR ^= console7Channel->fpdR >> 17; - console7Channel->fpdR ^= console7Channel->fpdR << 5; - inputSampleR += (((double)console7Channel->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Console7Crunch/Console7Crunch.c b/src/Console7Crunch/Console7Crunch.c index 8f3049e..7d51bb7 100644 --- a/src/Console7Crunch/Console7Crunch.c +++ b/src/Console7Crunch/Console7Crunch.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define CONSOLE7CRUNCH_URI "https://hannesbraun.net/ns/lv2/airwindows/console7crunch" @@ -28,14 +29,11 @@ typedef struct { double biquadC[15]; double biquadD[15]; double biquadE[15]; - - uint32_t fpdL; - uint32_t fpdR; } Console7Crunch; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -80,10 +78,6 @@ static void activate(LV2_Handle instance) console7Crunch->biquadD[x] = 0.0; console7Crunch->biquadE[x] = 0.0; } - console7Crunch->fpdL = 1.0; - while (console7Crunch->fpdL < 16386) console7Crunch->fpdL = rand() * UINT32_MAX; - console7Crunch->fpdR = 1.0; - while (console7Crunch->fpdR < 16386) console7Crunch->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -150,8 +144,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = console7Crunch->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = console7Crunch->fpdR * 1.18e-17; double outSampleL = console7Crunch->biquadA[2] * inputSampleL + console7Crunch->biquadA[3] * console7Crunch->biquadA[7] + console7Crunch->biquadA[4] * console7Crunch->biquadA[8] - console7Crunch->biquadA[5] * console7Crunch->biquadA[9] - console7Crunch->biquadA[6] * console7Crunch->biquadA[10]; console7Crunch->biquadA[8] = console7Crunch->biquadA[7]; @@ -292,20 +284,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) } //we re-amplify after the distortion relative to how much we cut back previously. - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - console7Crunch->fpdL ^= console7Crunch->fpdL << 13; - console7Crunch->fpdL ^= console7Crunch->fpdL >> 17; - console7Crunch->fpdL ^= console7Crunch->fpdL << 5; - inputSampleL += (((double)console7Crunch->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - console7Crunch->fpdR ^= console7Crunch->fpdR << 13; - console7Crunch->fpdR ^= console7Crunch->fpdR >> 17; - console7Crunch->fpdR ^= console7Crunch->fpdR << 5; - inputSampleR += (((double)console7Crunch->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/DCVoltage/DCVoltage.c b/src/DCVoltage/DCVoltage.c index 18f904e..8d17086 100644 --- a/src/DCVoltage/DCVoltage.c +++ b/src/DCVoltage/DCVoltage.c @@ -2,6 +2,7 @@ #include #include +#include "../optimizations.h" #define DCVOLTAGE_URI "https://hannesbraun.net/ns/lv2/airwindows/dcvoltage" @@ -21,7 +22,7 @@ typedef struct { static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { diff --git a/src/DeBess/DeBess.c b/src/DeBess/DeBess.c index 54a84d6..85ec475 100644 --- a/src/DeBess/DeBess.c +++ b/src/DeBess/DeBess.c @@ -4,6 +4,7 @@ #include #include #include +#include "../optimizations.h" #define DEBESS_URI "https://hannesbraun.net/ns/lv2/airwindows/debess" @@ -43,13 +44,11 @@ typedef struct { bool flip; - uint32_t fpdL; - uint32_t fpdR; } DeBess; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -115,10 +114,6 @@ static void activate(LV2_Handle instance) debess->iirSampleBR = 0.0; debess->flip = false; - debess->fpdL = 1.0; - while (debess->fpdL < 16386) debess->fpdL = rand() * UINT32_MAX; - debess->fpdR = 1.0; - while (debess->fpdR < 16386) debess->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -145,8 +140,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = debess->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = debess->fpdR * 1.18e-17; debess->sL[0] = inputSampleL; //set up so both [0] and [1] will be input sample debess->sR[0] = inputSampleR; //set up so both [0] and [1] will be input sample @@ -208,20 +201,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) } //sense monitoring - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - debess->fpdL ^= debess->fpdL << 13; - debess->fpdL ^= debess->fpdL >> 17; - debess->fpdL ^= debess->fpdL << 5; - inputSampleL += (((double)debess->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - debess->fpdR ^= debess->fpdR << 13; - debess->fpdR ^= debess->fpdR >> 17; - debess->fpdR ^= debess->fpdR << 5; - inputSampleR += (((double)debess->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Dyno/Dyno.c b/src/Dyno/Dyno.c index ed028dd..cbbdf58 100644 --- a/src/Dyno/Dyno.c +++ b/src/Dyno/Dyno.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define DYNO_URI "https://hannesbraun.net/ns/lv2/airwindows/dyno" @@ -18,14 +19,11 @@ typedef struct { const float* input[2]; float* output[2]; const float* gain; - - uint32_t fpdL; - uint32_t fpdR; } Dyno; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -56,14 +54,7 @@ static void connect_port(LV2_Handle instance, uint32_t port, void* data) } } -static void activate(LV2_Handle instance) -{ - Dyno* dyno = (Dyno*) instance; - dyno->fpdL = 1.0; - while (dyno->fpdL < 16386) dyno->fpdL = rand() * UINT32_MAX; - dyno->fpdR = 1.0; - while (dyno->fpdR < 16386) dyno->fpdR = rand() * UINT32_MAX; -} +static void activate(LV2_Handle instance) {} static void run(LV2_Handle instance, uint32_t sampleFrames) { @@ -79,8 +70,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = dyno_instance->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = dyno_instance->fpdR * 1.18e-17; if (gain != 1.0) { inputSampleL *= gain; @@ -94,20 +83,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) if (dyno > 0.0) inputSampleR = (sin(inputSampleR * dyno) / dyno) * 1.1654321; //dyno is the one that tries to raise peak energy - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - dyno_instance->fpdL ^= dyno_instance->fpdL << 13; - dyno_instance->fpdL ^= dyno_instance->fpdL >> 17; - dyno_instance->fpdL ^= dyno_instance->fpdL << 5; - inputSampleL += (((double)dyno_instance->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - dyno_instance->fpdR ^= dyno_instance->fpdR << 13; - dyno_instance->fpdR ^= dyno_instance->fpdR >> 17; - dyno_instance->fpdR ^= dyno_instance->fpdR << 5; - inputSampleR += (((double)dyno_instance->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/EdIsDim/EdIsDim.c b/src/EdIsDim/EdIsDim.c index 9fb5f2d..3a2d982 100644 --- a/src/EdIsDim/EdIsDim.c +++ b/src/EdIsDim/EdIsDim.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define EDISDIM_URI "https://hannesbraun.net/ns/lv2/airwindows/edisdim" @@ -18,14 +19,11 @@ typedef struct { const float* input[2]; float* output[2]; const float* edisdim; - - uint32_t fpdL; - uint32_t fpdR; } EdIsDim; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -56,14 +54,7 @@ static void connect_port(LV2_Handle instance, uint32_t port, void* data) } } -static void activate(LV2_Handle instance) -{ - EdIsDim* edisdim = (EdIsDim*) instance; - edisdim->fpdL = 1.0; - while (edisdim->fpdL < 16386) edisdim->fpdL = rand() * UINT32_MAX; - edisdim->fpdR = 1.0; - while (edisdim->fpdR < 16386) edisdim->fpdR = rand() * UINT32_MAX; -} +static void activate(LV2_Handle instance) {} static void run(LV2_Handle instance, uint32_t sampleFrames) { @@ -85,8 +76,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { inputSampleL = *in1; inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = edisdim->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = edisdim->fpdR * 1.18e-17; inputSampleL *= midgain; inputSampleR *= sidegain; @@ -94,22 +83,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) mid = (inputSampleL + inputSampleR) / 2.0; side = (inputSampleL - inputSampleR) / 2.0; - //begin 32 bit floating point dither - int expon; - frexpf((float)mid, &expon); - edisdim->fpdL ^= edisdim->fpdL << 13; - edisdim->fpdL ^= edisdim->fpdL >> 17; - edisdim->fpdL ^= edisdim->fpdL << 5; - mid += (((double)edisdim->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit floating point dither - //begin 32 bit floating point dither - frexpf((float)side, &expon); - edisdim->fpdR ^= edisdim->fpdR << 13; - edisdim->fpdR ^= edisdim->fpdR >> 17; - edisdim->fpdR ^= edisdim->fpdR << 5; - side += (((double)edisdim->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit floating point dither - *out1 = (float) mid; *out2 = (float) side; diff --git a/src/EveryTrim/EveryTrim.c b/src/EveryTrim/EveryTrim.c index d22e1b9..58f8c57 100644 --- a/src/EveryTrim/EveryTrim.c +++ b/src/EveryTrim/EveryTrim.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define EVERYTRIM_URI "https://hannesbraun.net/ns/lv2/airwindows/everytrim" @@ -26,14 +27,11 @@ typedef struct { const float* mid; const float* side; const float* master; - - uint32_t fpdL; - uint32_t fpdR; } EveryTrim; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -76,14 +74,7 @@ static void connect_port(LV2_Handle instance, uint32_t port, void* data) } } -static void activate(LV2_Handle instance) -{ - EveryTrim* everytrim = (EveryTrim*) instance; - everytrim->fpdL = 1.0; - while (everytrim->fpdL < 16386) everytrim->fpdL = rand() * UINT32_MAX; - everytrim->fpdR = 1.0; - while (everytrim->fpdR < 16386) everytrim->fpdR = rand() * UINT32_MAX; -} +static void activate(LV2_Handle instance) {} static void run(LV2_Handle instance, uint32_t sampleFrames) { @@ -111,8 +102,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { inputSampleL = *in1; inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = everytrim->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = everytrim->fpdR * 1.18e-17; mid = inputSampleL + inputSampleR; side = inputSampleL - inputSampleR; @@ -122,20 +111,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleR = (mid - side) * rightgain; //contains mastergain and the gain trim fixing the mid/side - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - everytrim->fpdL ^= everytrim->fpdL << 13; - everytrim->fpdL ^= everytrim->fpdL >> 17; - everytrim->fpdL ^= everytrim->fpdL << 5; - inputSampleL += (((double)everytrim->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - everytrim->fpdR ^= everytrim->fpdR << 13; - everytrim->fpdR ^= everytrim->fpdR >> 17; - everytrim->fpdR ^= everytrim->fpdR << 5; - inputSampleR += (((double)everytrim->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Galactic/Galactic.c b/src/Galactic/Galactic.c index 4629372..e38e881 100644 --- a/src/Galactic/Galactic.c +++ b/src/Galactic/Galactic.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define GALACTIC_URI "https://hannesbraun.net/ns/lv2/airwindows/galactic" @@ -48,7 +49,7 @@ typedef struct { double aML[3111]; double aMR[3111]; - double vibML, vibMR, depthM, oldfpd; + double vibML, vibMR, depthM; double feedbackAL; double feedbackBL; @@ -101,14 +102,12 @@ typedef struct { double vibM; - uint32_t fpdL; - uint32_t fpdR; //default stuff } Galactic; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -253,13 +252,6 @@ static void activate(LV2_Handle instance) galactic->cycle = 0; galactic->vibM = 3.0; - - galactic->oldfpd = 429496.7295; - - galactic->fpdL = 1; - while (galactic->fpdL < 16386) galactic->fpdL = rand() * UINT32_MAX; - galactic->fpdR = 1; - while (galactic->fpdR < 16386) galactic->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -308,15 +300,12 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = galactic->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = galactic->fpdR * 1.18e-17; double drySampleL = inputSampleL; double drySampleR = inputSampleR; - galactic->vibM += (galactic->oldfpd * drift); + galactic->vibM += drift; if (galactic->vibM > (3.141592653589793238 * 2.0)) { galactic->vibM = 0.0; - galactic->oldfpd = 0.4294967295 + (galactic->fpdL * 0.0000000000618); } galactic->aML[galactic->countM] = inputSampleL * attenuate; @@ -496,20 +485,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleR = (inputSampleR * wet) + (drySampleR * (1.0 - wet)); } - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - galactic->fpdL ^= galactic->fpdL << 13; - galactic->fpdL ^= galactic->fpdL >> 17; - galactic->fpdL ^= galactic->fpdL << 5; - inputSampleL += ((((double) galactic->fpdL) - (uint32_t) 0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - galactic->fpdR ^= galactic->fpdR << 13; - galactic->fpdR ^= galactic->fpdR >> 17; - galactic->fpdR ^= galactic->fpdR << 5; - inputSampleR += ((((double) galactic->fpdL) - (uint32_t) 0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/HermeTrim/HermeTrim.c b/src/HermeTrim/HermeTrim.c index 1f2d728..fd754f4 100644 --- a/src/HermeTrim/HermeTrim.c +++ b/src/HermeTrim/HermeTrim.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define HERMETRIM_URI "https://hannesbraun.net/ns/lv2/airwindows/hermetrim" @@ -26,14 +27,11 @@ typedef struct { const float* mid; const float* side; const float* master; - - uint32_t fpdL; - uint32_t fpdR; } HermeTrim; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -76,14 +74,7 @@ static void connect_port(LV2_Handle instance, uint32_t port, void* data) } } -static void activate(LV2_Handle instance) -{ - HermeTrim* hermetrim = (HermeTrim*) instance; - hermetrim->fpdL = 1.0; - while (hermetrim->fpdL < 16386) hermetrim->fpdL = rand() * UINT32_MAX; - hermetrim->fpdR = 1.0; - while (hermetrim->fpdR < 16386) hermetrim->fpdR = rand() * UINT32_MAX; -} +static void activate(LV2_Handle instance) {} static void run(LV2_Handle instance, uint32_t sampleFrames) { @@ -111,8 +102,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { inputSampleL = *in1; inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = hermetrim->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = hermetrim->fpdR * 1.18e-17; mid = inputSampleL + inputSampleR; side = inputSampleL - inputSampleR; @@ -122,20 +111,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleR = (mid - side) * rightgain; //contains mastergain and the gain trim fixing the mid/side - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - hermetrim->fpdL ^= hermetrim->fpdL << 13; - hermetrim->fpdL ^= hermetrim->fpdL >> 17; - hermetrim->fpdL ^= hermetrim->fpdL << 5; - inputSampleL += (((double)hermetrim->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - hermetrim->fpdR ^= hermetrim->fpdR << 13; - hermetrim->fpdR ^= hermetrim->fpdR >> 17; - hermetrim->fpdR ^= hermetrim->fpdR << 5; - inputSampleR += (((double)hermetrim->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Hypersonic/Hypersonic.c b/src/Hypersonic/Hypersonic.c index 68e8a7e..4f9daa7 100644 --- a/src/Hypersonic/Hypersonic.c +++ b/src/Hypersonic/Hypersonic.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define HYPERSONIC_URI "https://hannesbraun.net/ns/lv2/airwindows/hypersonic" @@ -40,15 +41,12 @@ typedef struct { double fixE[fix_total]; double fixF[fix_total]; double fixG[fix_total]; - - uint32_t fpdL; - uint32_t fpdR; //default stuff } Hypersonic; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -89,10 +87,6 @@ static void activate(LV2_Handle instance) hypersonic->fixF[x] = 0.0; hypersonic->fixG[x] = 0.0; } - hypersonic->fpdL = 1.0; - while (hypersonic->fpdL < 16386) hypersonic->fpdL = rand() * UINT32_MAX; - hypersonic->fpdR = 1.0; - while (hypersonic->fpdR < 16386) hypersonic->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -182,8 +176,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = hypersonic->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = hypersonic->fpdR * 1.18e-17; double outSample = (inputSampleL * hypersonic->fixA[fix_a0]) + hypersonic->fixA[fix_sL1]; hypersonic->fixA[fix_sL1] = (inputSampleL * hypersonic->fixA[fix_a1]) - (outSample * hypersonic->fixA[fix_b1]) + hypersonic->fixA[fix_sL2]; @@ -248,20 +240,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) hypersonic->fixG[fix_sR2] = (inputSampleR * hypersonic->fixG[fix_a2]) - (outSample * hypersonic->fixG[fix_b2]); inputSampleR = outSample; //fixed biquad filtering ultrasonics - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - hypersonic->fpdL ^= hypersonic->fpdL << 13; - hypersonic->fpdL ^= hypersonic->fpdL >> 17; - hypersonic->fpdL ^= hypersonic->fpdL << 5; - inputSampleL += (((double)hypersonic->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - hypersonic->fpdR ^= hypersonic->fpdR << 13; - hypersonic->fpdR ^= hypersonic->fpdR >> 17; - hypersonic->fpdR ^= hypersonic->fpdR << 5; - inputSampleR += (((double)hypersonic->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Infrasonic/Infrasonic.c b/src/Infrasonic/Infrasonic.c index 82c2d71..7288316 100644 --- a/src/Infrasonic/Infrasonic.c +++ b/src/Infrasonic/Infrasonic.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define INFRASONIC_URI "https://hannesbraun.net/ns/lv2/airwindows/infrasonic" @@ -22,13 +23,11 @@ typedef struct { double biquadC[15]; double biquadD[15]; double biquadE[15]; - uint32_t fpdL; - uint32_t fpdR; } Infrasonic; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -66,10 +65,6 @@ static void activate(LV2_Handle instance) infrasonic->biquadD[x] = 0.0; infrasonic->biquadE[x] = 0.0; } - infrasonic->fpdL = 1.0; - while (infrasonic->fpdL < 16386) infrasonic->fpdL = rand() * UINT32_MAX; - infrasonic->fpdR = 1.0; - while (infrasonic->fpdR < 16386) infrasonic->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -136,8 +131,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = infrasonic->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = infrasonic->fpdR * 1.18e-17; double outSampleL = infrasonic->biquadA[2] * inputSampleL + infrasonic->biquadA[3] * infrasonic->biquadA[7] + infrasonic->biquadA[4] * infrasonic->biquadA[8] - infrasonic->biquadA[5] * infrasonic->biquadA[9] - infrasonic->biquadA[6] * infrasonic->biquadA[10]; infrasonic->biquadA[8] = infrasonic->biquadA[7]; @@ -209,20 +202,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) infrasonic->biquadE[14] = infrasonic->biquadE[13]; infrasonic->biquadE[13] = inputSampleR; //DF1 right - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - infrasonic->fpdL ^= infrasonic->fpdL << 13; - infrasonic->fpdL ^= infrasonic->fpdL >> 17; - infrasonic->fpdL ^= infrasonic->fpdL << 5; - inputSampleL += (((double)infrasonic->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - infrasonic->fpdR ^= infrasonic->fpdR << 13; - infrasonic->fpdR ^= infrasonic->fpdR >> 17; - infrasonic->fpdR ^= infrasonic->fpdR << 5; - inputSampleR += (((double)infrasonic->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Interstage/Interstage.c b/src/Interstage/Interstage.c index 885ef83..2d4df77 100644 --- a/src/Interstage/Interstage.c +++ b/src/Interstage/Interstage.c @@ -4,6 +4,7 @@ #include #include #include +#include "../optimizations.h" #define INTERSTAGE_URI "https://hannesbraun.net/ns/lv2/airwindows/interstage" @@ -33,14 +34,12 @@ typedef struct { double iirSampleER; double iirSampleFR; double lastSampleR; - uint32_t fpdL; - uint32_t fpdR; bool flip; } Interstage; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -86,10 +85,6 @@ static void activate(LV2_Handle instance) interstage->iirSampleER = 0.0; interstage->iirSampleFR = 0.0; interstage->lastSampleR = 0.0; - interstage->fpdL = 1.0; - while (interstage->fpdL < 16386) interstage->fpdL = rand() * UINT32_MAX; - interstage->fpdR = 1.0; - while (interstage->fpdR < 16386) interstage->fpdR = rand() * UINT32_MAX; interstage->flip = true; } @@ -113,8 +108,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = interstage->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = interstage->fpdR * 1.18e-17; double drySampleL = inputSampleL; double drySampleR = inputSampleR; @@ -174,20 +167,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) interstage->lastSampleL = inputSampleL; interstage->lastSampleR = inputSampleR; - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - interstage->fpdL ^= interstage->fpdL << 13; - interstage->fpdL ^= interstage->fpdL >> 17; - interstage->fpdL ^= interstage->fpdL << 5; - inputSampleL += (((double)interstage->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - interstage->fpdR ^= interstage->fpdR << 13; - interstage->fpdR ^= interstage->fpdR >> 17; - interstage->fpdR ^= interstage->fpdR << 5; - inputSampleR += (((double)interstage->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/LeftoMono/LeftoMono.c b/src/LeftoMono/LeftoMono.c index bd0b49d..8fedca5 100644 --- a/src/LeftoMono/LeftoMono.c +++ b/src/LeftoMono/LeftoMono.c @@ -2,6 +2,7 @@ #include #include +#include "../optimizations.h" #define LEFTOMONO_URI "https://hannesbraun.net/ns/lv2/airwindows/leftomono" @@ -22,7 +23,7 @@ typedef struct { static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { diff --git a/src/MV/MV.c b/src/MV/MV.c index 8d57a06..25f7b82 100644 --- a/src/MV/MV.c +++ b/src/MV/MV.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define MV_URI "https://hannesbraun.net/ns/lv2/airwindows/mv" @@ -27,9 +28,6 @@ typedef struct { const float* gain; const float* drywet; - uint32_t fpdL; - uint32_t fpdR; - double aAL[15150]; double aBL[14618]; double aCL[14358]; @@ -173,7 +171,7 @@ typedef struct { static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -433,11 +431,6 @@ static void activate(LV2_Handle instance) mv->feedbackL = 0.0; mv->feedbackR = 0.0; - - mv->fpdL = 1.0; - while (mv->fpdL < 16386) mv->fpdL = rand() * UINT32_MAX; - mv->fpdR = 1.0; - while (mv->fpdR < 16386) mv->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -468,8 +461,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = mv->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = mv->fpdR * 1.18e-17; double drySampleL = inputSampleL; double drySampleR = inputSampleR; @@ -1314,20 +1305,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) } //Dry/Wet control, defaults to the last slider - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - mv->fpdL ^= mv->fpdL << 13; - mv->fpdL ^= mv->fpdL >> 17; - mv->fpdL ^= mv->fpdL << 5; - inputSampleL += (((double)mv->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - mv->fpdR ^= mv->fpdR << 13; - mv->fpdR ^= mv->fpdR >> 17; - mv->fpdR ^= mv->fpdR << 5; - inputSampleR += (((double)mv->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Mackity/Mackity.c b/src/Mackity/Mackity.c index 5250dd8..933d3a7 100644 --- a/src/Mackity/Mackity.c +++ b/src/Mackity/Mackity.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define MACKITY_URI "https://hannesbraun.net/ns/lv2/airwindows/mackity" @@ -28,14 +29,11 @@ typedef struct { double iirSampleBR; double biquadA[15]; double biquadB[15]; - - uint32_t fpdL; - uint32_t fpdR; } Mackity; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -82,11 +80,6 @@ static void activate(LV2_Handle instance) mackity->biquadA[x] = 0.0; mackity->biquadB[x] = 0.0; } - - mackity->fpdL = 1.0; - while (mackity->fpdL < 16386) mackity->fpdL = rand() * UINT32_MAX; - mackity->fpdR = 1.0; - while (mackity->fpdR < 16386) mackity->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -132,8 +125,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = mackity->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = mackity->fpdR * 1.18e-17; if (fabs(mackity->iirSampleAL) < 1.18e-37) mackity->iirSampleAL = 0.0; mackity->iirSampleAL = (mackity->iirSampleAL * (1.0 - iirAmountA)) + (inputSampleL * iirAmountA); @@ -194,20 +185,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleR *= outPad; } - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - mackity->fpdL ^= mackity->fpdL << 13; - mackity->fpdL ^= mackity->fpdL >> 17; - mackity->fpdL ^= mackity->fpdL << 5; - inputSampleL += (((double)mackity->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - mackity->fpdR ^= mackity->fpdR << 13; - mackity->fpdR ^= mackity->fpdR >> 17; - mackity->fpdR ^= mackity->fpdR << 5; - inputSampleR += (((double)mackity->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/MidSide/MidSide.c b/src/MidSide/MidSide.c index 4c27ce7..7ee0c90 100644 --- a/src/MidSide/MidSide.c +++ b/src/MidSide/MidSide.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define MIDSIDE_URI "https://hannesbraun.net/ns/lv2/airwindows/midside" @@ -18,14 +19,11 @@ typedef struct { const float* input[2]; float* output[2]; const float* midside; - - uint32_t fpdL; - uint32_t fpdR; } MidSide; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -56,14 +54,7 @@ static void connect_port(LV2_Handle instance, uint32_t port, void* data) } } -static void activate(LV2_Handle instance) -{ - MidSide* midside = (MidSide*) instance; - midside->fpdL = 1.0; - while (midside->fpdL < 16386) midside->fpdL = rand() * UINT32_MAX; - midside->fpdR = 1.0; - while (midside->fpdR < 16386) midside->fpdR = rand() * UINT32_MAX; -} +static void activate(LV2_Handle instance) {} static void run(LV2_Handle instance, uint32_t sampleFrames) { @@ -86,8 +77,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { inputSampleL = *in1; inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = midside->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = midside->fpdR * 1.18e-17; mid = inputSampleL + inputSampleR; side = inputSampleL - inputSampleR; @@ -95,21 +84,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) mid *= midgain; side *= sidegain; - //begin 32 bit floating point dither - int expon; - frexpf((float)mid, &expon); - midside->fpdL ^= midside->fpdL << 13; - midside->fpdL ^= midside->fpdL >> 17; - midside->fpdL ^= midside->fpdL << 5; - mid += (((double)midside->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit floating point dither - frexpf((float)side, &expon); - midside->fpdR ^= midside->fpdR << 13; - midside->fpdR ^= midside->fpdR >> 17; - midside->fpdR ^= midside->fpdR << 5; - side += (((double)midside->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit floating point dither - *out1 = (float) mid; *out2 = (float) side; diff --git a/src/MoNoam/MoNoam.c b/src/MoNoam/MoNoam.c index 8c9a33b..b59a4bc 100644 --- a/src/MoNoam/MoNoam.c +++ b/src/MoNoam/MoNoam.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define MONOAM_URI "https://hannesbraun.net/ns/lv2/airwindows/monoam" @@ -27,14 +28,11 @@ typedef struct { const float* input[2]; float* output[2]; const float* monotor; - - uint32_t fpdL; - uint32_t fpdR; } MoNoam; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -65,14 +63,7 @@ static void connect_port(LV2_Handle instance, uint32_t port, void* data) } } -static void activate(LV2_Handle instance) -{ - MoNoam* moNoam = (MoNoam*) instance; - moNoam->fpdL = 1.0; - while (moNoam->fpdL < 16386) moNoam->fpdL = rand() * UINT32_MAX; - moNoam->fpdR = 1.0; - while (moNoam->fpdR < 16386) moNoam->fpdR = rand() * UINT32_MAX; -} +static void activate(LV2_Handle instance) {} static void run(LV2_Handle instance, uint32_t sampleFrames) { @@ -93,8 +84,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = moNoam->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = moNoam->fpdR * 1.18e-17; double mid; mid = inputSampleL + inputSampleR; @@ -117,20 +106,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleR = *in2; } - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - moNoam->fpdL ^= moNoam->fpdL << 13; - moNoam->fpdL ^= moNoam->fpdL >> 17; - moNoam->fpdL ^= moNoam->fpdL << 5; - inputSampleL += (((double)moNoam->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - moNoam->fpdR ^= moNoam->fpdR << 13; - moNoam->fpdR ^= moNoam->fpdR >> 17; - moNoam->fpdR ^= moNoam->fpdR << 5; - inputSampleR += (((double)moNoam->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Mojo/Mojo.c b/src/Mojo/Mojo.c index ee39090..d8ef7cf 100644 --- a/src/Mojo/Mojo.c +++ b/src/Mojo/Mojo.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define MOJO_URI "https://hannesbraun.net/ns/lv2/airwindows/mojo" @@ -18,14 +19,11 @@ typedef struct { const float* input[2]; float* output[2]; const float* gain; - - uint32_t fpdL; - uint32_t fpdR; } Mojo; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -56,14 +54,7 @@ static void connect_port(LV2_Handle instance, uint32_t port, void* data) } } -static void activate(LV2_Handle instance) -{ - Mojo* mojo = (Mojo*) instance; - mojo->fpdL = 1.0; - while (mojo->fpdL < 16386) mojo->fpdL = rand() * UINT32_MAX; - mojo->fpdR = 1.0; - while (mojo->fpdR < 16386) mojo->fpdR = rand() * UINT32_MAX; -} +static void activate(LV2_Handle instance) {} static void run(LV2_Handle instance, uint32_t sampleFrames) { @@ -79,8 +70,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = mojoInstance->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = mojoInstance->fpdR * 1.18e-17; if (gain != 1.0) { inputSampleL *= gain; @@ -94,20 +83,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) if (mojo > 0.0) inputSampleR = (sin(inputSampleR * mojo * M_PI * 0.5) / mojo) * 0.987654321; //mojo is the one that flattens WAAAAY out very softly before wavefolding - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - mojoInstance->fpdL ^= mojoInstance->fpdL << 13; - mojoInstance->fpdL ^= mojoInstance->fpdL >> 17; - mojoInstance->fpdL ^= mojoInstance->fpdL << 5; - inputSampleL += (((double)mojoInstance->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - mojoInstance->fpdR ^= mojoInstance->fpdR << 13; - mojoInstance->fpdR ^= mojoInstance->fpdR >> 17; - mojoInstance->fpdR ^= mojoInstance->fpdR << 5; - inputSampleR += (((double)mojoInstance->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Nikola/Nikola.c b/src/Nikola/Nikola.c index 772fbe2..0a5a274 100644 --- a/src/Nikola/Nikola.c +++ b/src/Nikola/Nikola.c @@ -4,6 +4,7 @@ #include #include #include +#include "../optimizations.h" #define NIKOLA_URI "https://hannesbraun.net/ns/lv2/airwindows/nikola" @@ -29,14 +30,11 @@ typedef struct { int framenumberR; bool wasNegativeR; double outlevelR; - - uint32_t fpdL; - uint32_t fpdR; } Nikola; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -80,11 +78,6 @@ static void activate(LV2_Handle instance) nikola->wasNegativeR = false; nikola->outlevelR = 0.0; nikola->framenumberR = 0; - - nikola->fpdL = 1.0; - while (nikola->fpdL < 16386) nikola->fpdL = rand() * UINT32_MAX; - nikola->fpdR = 1.0; - while (nikola->fpdR < 16386) nikola->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -103,8 +96,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = nikola->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = nikola->fpdR * 1.18e-17; double drySampleL = inputSampleL; double drySampleR = inputSampleR; @@ -2965,20 +2956,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleR = (inputSampleR * wet) + (drySampleR * (1.0 - wet)); } - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - nikola->fpdL ^= nikola->fpdL << 13; - nikola->fpdL ^= nikola->fpdL >> 17; - nikola->fpdL ^= nikola->fpdL << 5; - inputSampleL += (((double)nikola->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - nikola->fpdR ^= nikola->fpdR << 13; - nikola->fpdR ^= nikola->fpdR >> 17; - nikola->fpdR ^= nikola->fpdR << 5; - inputSampleR += (((double)nikola->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/PocketVerbs/PocketVerbs.c b/src/PocketVerbs/PocketVerbs.c index 694321a..df4be1f 100644 --- a/src/PocketVerbs/PocketVerbs.c +++ b/src/PocketVerbs/PocketVerbs.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define POCKETVERBS_URI "https://hannesbraun.net/ns/lv2/airwindows/pocketverbs" @@ -245,14 +246,11 @@ typedef struct { int countdown; double peakL; double peakR; - - uint32_t fpdL; - uint32_t fpdR; } PocketVerbs; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -831,10 +829,6 @@ static void activate(LV2_Handle instance) pocketverbs->countdown = -1; pocketverbs->peakL = 1.0; pocketverbs->peakR = 1.0; - pocketverbs->fpdL = 1.0; - while (pocketverbs->fpdL < 16386) pocketverbs->fpdL = rand() * UINT32_MAX; - pocketverbs->fpdR = 1.0; - while (pocketverbs->fpdR < 16386) pocketverbs->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -1778,9 +1772,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = pocketverbs->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = pocketverbs->fpdR * 1.18e-17; - double drySampleL = inputSampleL; double drySampleR = inputSampleR; @@ -13590,20 +13581,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleR += drySampleR; //here we combine the tanks with the dry signal - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - pocketverbs->fpdL ^= pocketverbs->fpdL << 13; - pocketverbs->fpdL ^= pocketverbs->fpdL >> 17; - pocketverbs->fpdL ^= pocketverbs->fpdL << 5; - inputSampleL += (((double)pocketverbs->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - pocketverbs->fpdR ^= pocketverbs->fpdR << 13; - pocketverbs->fpdR ^= pocketverbs->fpdR >> 17; - pocketverbs->fpdR ^= pocketverbs->fpdR << 5; - inputSampleR += (((double)pocketverbs->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Pressure5/Pressure5.c b/src/Pressure5/Pressure5.c index 0ea5c79..e16c291 100644 --- a/src/Pressure5/Pressure5.c +++ b/src/Pressure5/Pressure5.c @@ -4,6 +4,7 @@ #include #include #include +#include "../optimizations.h" #define PRESSURE5_URI "https://hannesbraun.net/ns/lv2/airwindows/pressure5" @@ -70,14 +71,11 @@ typedef struct { bool wasNegClipR; //Stereo ClipOnly2 double slewMax; //to adust mewiness - - uint32_t fpdL; - uint32_t fpdR; } Pressure5; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -149,11 +147,6 @@ static void activate(LV2_Handle instance) pressure5->intermediateR[x] = 0.0; } pressure5->slewMax = 0.0; - - pressure5->fpdL = 1.0; - while (pressure5->fpdL < 16386) pressure5->fpdL = rand() * UINT32_MAX; - pressure5->fpdR = 1.0; - while (pressure5->fpdR < 16386) pressure5->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -202,8 +195,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = pressure5->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = pressure5->fpdR * 1.18e-17; double drySampleL = inputSampleL; double drySampleR = inputSampleR; @@ -373,20 +364,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) //end ClipOnly2 stereo as a little, compressed chunk that can be dropped into code //final clip runs AFTER the Dry/Wet. It serves as a safety clip even if you're not full wet - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - pressure5->fpdL ^= pressure5->fpdL << 13; - pressure5->fpdL ^= pressure5->fpdL >> 17; - pressure5->fpdL ^= pressure5->fpdL << 5; - inputSampleL += (((double)pressure5->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - pressure5->fpdR ^= pressure5->fpdR << 13; - pressure5->fpdR ^= pressure5->fpdR >> 17; - pressure5->fpdR ^= pressure5->fpdR << 5; - inputSampleR += (((double)pressure5->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/PurestConsole2Buss/PurestConsole2Buss.c b/src/PurestConsole2Buss/PurestConsole2Buss.c index bd444ec..75c6163 100644 --- a/src/PurestConsole2Buss/PurestConsole2Buss.c +++ b/src/PurestConsole2Buss/PurestConsole2Buss.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define PURESTCONSOLE2BUSS_URI "https://hannesbraun.net/ns/lv2/airwindows/purestconsole2buss" @@ -19,13 +20,11 @@ typedef struct { float* output[2]; double biquadA[15]; - uint32_t fpdL; - uint32_t fpdR; } PurestConsole2Buss; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -60,10 +59,6 @@ static void activate(LV2_Handle instance) for (int x = 0; x < 15; x++) { purestConsole2Buss->biquadA[x] = 0.0; } - purestConsole2Buss->fpdL = 1.0; - while (purestConsole2Buss->fpdL < 16386) purestConsole2Buss->fpdL = rand() * UINT32_MAX; - purestConsole2Buss->fpdR = 1.0; - while (purestConsole2Buss->fpdR < 16386) purestConsole2Buss->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -89,8 +84,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = purestConsole2Buss->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = purestConsole2Buss->fpdR * 1.18e-17; if (purestConsole2Buss->biquadA[0] < 0.49999) { double tempSample = purestConsole2Buss->biquadA[2] * inputSampleL + purestConsole2Buss->biquadA[3] * purestConsole2Buss->biquadA[7] + purestConsole2Buss->biquadA[4] * purestConsole2Buss->biquadA[8] - purestConsole2Buss->biquadA[5] * purestConsole2Buss->biquadA[9] - purestConsole2Buss->biquadA[6] * purestConsole2Buss->biquadA[10]; @@ -117,20 +110,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleR = asin(inputSampleR); //amplitude aspect - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - purestConsole2Buss->fpdL ^= purestConsole2Buss->fpdL << 13; - purestConsole2Buss->fpdL ^= purestConsole2Buss->fpdL >> 17; - purestConsole2Buss->fpdL ^= purestConsole2Buss->fpdL << 5; - inputSampleL += (((double)purestConsole2Buss->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - purestConsole2Buss->fpdR ^= purestConsole2Buss->fpdR << 13; - purestConsole2Buss->fpdR ^= purestConsole2Buss->fpdR >> 17; - purestConsole2Buss->fpdR ^= purestConsole2Buss->fpdR << 5; - inputSampleR += (((double)purestConsole2Buss->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/PurestConsole2Channel/PurestConsole2Channel.c b/src/PurestConsole2Channel/PurestConsole2Channel.c index 32c7d35..37ed37a 100644 --- a/src/PurestConsole2Channel/PurestConsole2Channel.c +++ b/src/PurestConsole2Channel/PurestConsole2Channel.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define PURESTCONSOLE2CHANNEL_URI "https://hannesbraun.net/ns/lv2/airwindows/purestconsole2channel" @@ -19,13 +20,11 @@ typedef struct { float* output[2]; double biquadA[15]; - uint32_t fpdL; - uint32_t fpdR; } PurestConsole2Channel; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -61,10 +60,6 @@ static void activate(LV2_Handle instance) for (int x = 0; x < 15; x++) { purestConsole2Channel->biquadA[x] = 0.0; } - purestConsole2Channel->fpdL = 1.0; - while (purestConsole2Channel->fpdL < 16386) purestConsole2Channel->fpdL = rand() * UINT32_MAX; - purestConsole2Channel->fpdR = 1.0; - while (purestConsole2Channel->fpdR < 16386) purestConsole2Channel->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -90,8 +85,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = purestConsole2Channel->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = purestConsole2Channel->fpdR * 1.18e-17; if (purestConsole2Channel->biquadA[0] < 0.49999) { double tempSample = purestConsole2Channel->biquadA[2] * inputSampleL + purestConsole2Channel->biquadA[3] * purestConsole2Channel->biquadA[7] + purestConsole2Channel->biquadA[4] * purestConsole2Channel->biquadA[8] - purestConsole2Channel->biquadA[5] * purestConsole2Channel->biquadA[9] - purestConsole2Channel->biquadA[6] * purestConsole2Channel->biquadA[10]; @@ -117,20 +110,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleR = sin(inputSampleR); //amplitude aspect - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - purestConsole2Channel->fpdL ^= purestConsole2Channel->fpdL << 13; - purestConsole2Channel->fpdL ^= purestConsole2Channel->fpdL >> 17; - purestConsole2Channel->fpdL ^= purestConsole2Channel->fpdL << 5; - inputSampleL += (((double)purestConsole2Channel->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - purestConsole2Channel->fpdR ^= purestConsole2Channel->fpdR << 13; - purestConsole2Channel->fpdR ^= purestConsole2Channel->fpdR >> 17; - purestConsole2Channel->fpdR ^= purestConsole2Channel->fpdR << 5; - inputSampleR += (((double)purestConsole2Channel->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/PurestConsoleBuss/PurestConsoleBuss.c b/src/PurestConsoleBuss/PurestConsoleBuss.c index 663ff27..a8cae6c 100644 --- a/src/PurestConsoleBuss/PurestConsoleBuss.c +++ b/src/PurestConsoleBuss/PurestConsoleBuss.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define PURESTCONSOLEBUSS_URI "https://hannesbraun.net/ns/lv2/airwindows/purestconsolebuss" @@ -16,14 +17,11 @@ typedef enum { typedef struct { const float* input[2]; float* output[2]; - - uint32_t fpdL; - uint32_t fpdR; } PurestConsoleBuss; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -51,14 +49,7 @@ static void connect_port(LV2_Handle instance, uint32_t port, void* data) } } -static void activate(LV2_Handle instance) -{ - PurestConsoleBuss* purestConsoleBuss = (PurestConsoleBuss*) instance; - purestConsoleBuss->fpdL = 1.0; - while (purestConsoleBuss->fpdL < 16386) purestConsoleBuss->fpdL = rand() * UINT32_MAX; - purestConsoleBuss->fpdR = 1.0; - while (purestConsoleBuss->fpdR < 16386) purestConsoleBuss->fpdR = rand() * UINT32_MAX; -} +static void activate(LV2_Handle instance) {} static void run(LV2_Handle instance, uint32_t sampleFrames) { @@ -75,8 +66,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { inputSampleL = *in1; inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = purestConsoleBuss->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = purestConsoleBuss->fpdR * 1.18e-17; if (inputSampleL > 1.0) inputSampleL = 1.0; if (inputSampleL < -1.0) inputSampleL = -1.0; @@ -88,20 +77,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleR = asin(inputSampleR); //amplitude aspect - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - purestConsoleBuss->fpdL ^= purestConsoleBuss->fpdL << 13; - purestConsoleBuss->fpdL ^= purestConsoleBuss->fpdL >> 17; - purestConsoleBuss->fpdL ^= purestConsoleBuss->fpdL << 5; - inputSampleL += (((double)purestConsoleBuss->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - purestConsoleBuss->fpdR ^= purestConsoleBuss->fpdR << 13; - purestConsoleBuss->fpdR ^= purestConsoleBuss->fpdR >> 17; - purestConsoleBuss->fpdR ^= purestConsoleBuss->fpdR << 5; - inputSampleR += (((double)purestConsoleBuss->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/PurestConsoleChannel/PurestConsoleChannel.c b/src/PurestConsoleChannel/PurestConsoleChannel.c index cee3dcb..29f7187 100644 --- a/src/PurestConsoleChannel/PurestConsoleChannel.c +++ b/src/PurestConsoleChannel/PurestConsoleChannel.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define PURESTCONSOLECHANNEL_URI "https://hannesbraun.net/ns/lv2/airwindows/purestconsolechannel" @@ -16,14 +17,11 @@ typedef enum { typedef struct { const float* input[2]; float* output[2]; - - uint32_t fpdL; - uint32_t fpdR; } PurestConsoleChannel; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -51,14 +49,7 @@ static void connect_port(LV2_Handle instance, uint32_t port, void* data) } } -static void activate(LV2_Handle instance) -{ - PurestConsoleChannel* purestConsoleChannel = (PurestConsoleChannel*) instance; - purestConsoleChannel->fpdL = 1.0; - while (purestConsoleChannel->fpdL < 16386) purestConsoleChannel->fpdL = rand() * UINT32_MAX; - purestConsoleChannel->fpdR = 1.0; - while (purestConsoleChannel->fpdR < 16386) purestConsoleChannel->fpdR = rand() * UINT32_MAX; -} +static void activate(LV2_Handle instance) {} static void run(LV2_Handle instance, uint32_t sampleFrames) { @@ -75,27 +66,11 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { inputSampleL = *in1; inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = purestConsoleChannel->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = purestConsoleChannel->fpdR * 1.18e-17; inputSampleL = sin(inputSampleL); inputSampleR = sin(inputSampleR); //amplitude aspect - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - purestConsoleChannel->fpdL ^= purestConsoleChannel->fpdL << 13; - purestConsoleChannel->fpdL ^= purestConsoleChannel->fpdL >> 17; - purestConsoleChannel->fpdL ^= purestConsoleChannel->fpdL << 5; - inputSampleL += (((double)purestConsoleChannel->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - purestConsoleChannel->fpdR ^= purestConsoleChannel->fpdR << 13; - purestConsoleChannel->fpdR ^= purestConsoleChannel->fpdR >> 17; - purestConsoleChannel->fpdR ^= purestConsoleChannel->fpdR << 5; - inputSampleR += (((double)purestConsoleChannel->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/PurestGain/PurestGain.c b/src/PurestGain/PurestGain.c index 97c9925..b06c780 100644 --- a/src/PurestGain/PurestGain.c +++ b/src/PurestGain/PurestGain.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define PURESTGAIN_URI "https://hannesbraun.net/ns/lv2/airwindows/purestgain" @@ -22,8 +23,6 @@ typedef struct { const float* gain; const float* slowfade; - uint32_t fpdL; - uint32_t fpdR; //default stuff double gainchase; double settingchase; @@ -33,7 +32,7 @@ typedef struct { static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -75,10 +74,6 @@ static void activate(LV2_Handle instance) purestGain->settingchase = -90.0; purestGain->gainBchase = -90.0; purestGain->chasespeed = 350.0; - purestGain->fpdL = 1.0; - while (purestGain->fpdL < 16386) purestGain->fpdL = rand() * UINT32_MAX; - purestGain->fpdR = 1.0; - while (purestGain->fpdR < 16386) purestGain->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -143,8 +138,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleL = *in1; inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = purestGain->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = purestGain->fpdR * 1.18e-17; if (1.0 == outputgain) { *out1 = *in1; @@ -152,19 +145,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) } else { inputSampleL *= outputgain; inputSampleR *= outputgain; - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - purestGain->fpdL ^= purestGain->fpdL << 13; - purestGain->fpdL ^= purestGain->fpdL >> 17; - purestGain->fpdL ^= purestGain->fpdL << 5; - inputSampleL += (((double)purestGain->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - purestGain->fpdR ^= purestGain->fpdR << 13; - purestGain->fpdR ^= purestGain->fpdR >> 17; - purestGain->fpdR ^= purestGain->fpdR << 5; - inputSampleR += (((double)purestGain->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; } diff --git a/src/RightoMono/RightoMono.c b/src/RightoMono/RightoMono.c index 03acec9..e6eb262 100644 --- a/src/RightoMono/RightoMono.c +++ b/src/RightoMono/RightoMono.c @@ -2,6 +2,7 @@ #include #include +#include "../optimizations.h" #define RIGHTOMONO_URI "https://hannesbraun.net/ns/lv2/airwindows/rightomono" @@ -22,7 +23,7 @@ typedef struct { static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { diff --git a/src/Sidepass/Sidepass.c b/src/Sidepass/Sidepass.c index 0e99ac2..b55f35e 100644 --- a/src/Sidepass/Sidepass.c +++ b/src/Sidepass/Sidepass.c @@ -4,6 +4,7 @@ #include #include #include +#include "../optimizations.h" #define SIDEPASS_URI "https://hannesbraun.net/ns/lv2/airwindows/sidepass" @@ -24,13 +25,11 @@ typedef struct { double iirSampleA; double iirSampleB; bool flip; - uint32_t fpdL; - uint32_t fpdR; } Sidepass; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -68,10 +67,6 @@ static void activate(LV2_Handle instance) sidepass->iirSampleA = 0.0; sidepass->iirSampleB = 0.0; sidepass->flip = true; - sidepass->fpdL = 1.0; - while (sidepass->fpdL < 16386) sidepass->fpdL = rand() * UINT32_MAX; - sidepass->fpdR = 1.0; - while (sidepass->fpdR < 16386) sidepass->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -95,8 +90,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { inputSampleL = *in1; inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = sidepass->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = sidepass->fpdR * 1.18e-17; mid = inputSampleL + inputSampleR; side = inputSampleL - inputSampleR; @@ -113,20 +106,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleL = (mid + side) / 2.0; inputSampleR = (mid - side) / 2.0; - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - sidepass->fpdL ^= sidepass->fpdL << 13; - sidepass->fpdL ^= sidepass->fpdL >> 17; - sidepass->fpdL ^= sidepass->fpdL << 5; - inputSampleL += (((double)sidepass->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - sidepass->fpdR ^= sidepass->fpdR << 13; - sidepass->fpdR ^= sidepass->fpdR >> 17; - sidepass->fpdR ^= sidepass->fpdR << 5; - inputSampleR += (((double)sidepass->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Slew/Slew.c b/src/Slew/Slew.c index e23ad33..97fe6fb 100644 --- a/src/Slew/Slew.c +++ b/src/Slew/Slew.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define SLEW_URI "https://hannesbraun.net/ns/lv2/airwindows/slew" @@ -22,13 +23,11 @@ typedef struct { double lastSampleL; double lastSampleR; - uint32_t fpdL; - uint32_t fpdR; } Slew; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -91,8 +90,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { inputSampleL = *in1; inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = slew->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = slew->fpdR * 1.18e-17; clamp = inputSampleL - slew->lastSampleL; outputSampleL = inputSampleL; diff --git a/src/SlewOnly/SlewOnly.c b/src/SlewOnly/SlewOnly.c index d2de114..2148b40 100644 --- a/src/SlewOnly/SlewOnly.c +++ b/src/SlewOnly/SlewOnly.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define SLEWONLY_URI "https://hannesbraun.net/ns/lv2/airwindows/slewonly" @@ -19,13 +20,11 @@ typedef struct { double lastSampleL; double lastSampleR; - uint32_t fpdL; - uint32_t fpdR; } SlewOnly; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -78,8 +77,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { inputSampleL = *in1; inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = slewonly->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = slewonly->fpdR * 1.18e-17; outputSampleL = (inputSampleL - slewonly->lastSampleL) * trim; outputSampleR = (inputSampleR - slewonly->lastSampleR) * trim; diff --git a/src/Spiral/Spiral.c b/src/Spiral/Spiral.c index 05a3361..619b60a 100644 --- a/src/Spiral/Spiral.c +++ b/src/Spiral/Spiral.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define SPIRAL_URI "https://hannesbraun.net/ns/lv2/airwindows/spiral" @@ -16,14 +17,11 @@ typedef enum { typedef struct { const float* input[2]; float* output[2]; - - uint32_t fpdL; - uint32_t fpdR; } Spiral; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -51,14 +49,7 @@ static void connect_port(LV2_Handle instance, uint32_t port, void* data) } } -static void activate(LV2_Handle instance) -{ - Spiral* spiral = (Spiral*) instance; - spiral->fpdL = 1.0; - while (spiral->fpdL < 16386) spiral->fpdL = rand() * UINT32_MAX; - spiral->fpdR = 1.0; - while (spiral->fpdR < 16386) spiral->fpdR = rand() * UINT32_MAX; -} +static void activate(LV2_Handle instance) {} static void run(LV2_Handle instance, uint32_t sampleFrames) { @@ -73,28 +64,10 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = spiral->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = spiral->fpdR * 1.18e-17; - - //clip to 1.2533141373155 to reach maximum output inputSampleL = sin(inputSampleL * fabs(inputSampleL)) / ((fabs(inputSampleL) == 0.0) ? 1 : fabs(inputSampleL)); inputSampleR = sin(inputSampleR * fabs(inputSampleR)) / ((fabs(inputSampleR) == 0.0) ? 1 : fabs(inputSampleR)); - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - spiral->fpdL ^= spiral->fpdL << 13; - spiral->fpdL ^= spiral->fpdL >> 17; - spiral->fpdL ^= spiral->fpdL << 5; - inputSampleL += (((double)spiral->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - spiral->fpdR ^= spiral->fpdR << 13; - spiral->fpdR ^= spiral->fpdR >> 17; - spiral->fpdR ^= spiral->fpdR << 5; - inputSampleR += (((double)spiral->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/StarChild/StarChild.c b/src/StarChild/StarChild.c index c45f41d..e16f9ef 100644 --- a/src/StarChild/StarChild.c +++ b/src/StarChild/StarChild.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define STARCHILD_URI "https://hannesbraun.net/ns/lv2/airwindows/starchild" @@ -23,8 +24,6 @@ typedef struct { const float* grain; const float* drywet; - uint32_t fpdL; - uint32_t fpdR; //default stuff double d[45102]; @@ -47,7 +46,7 @@ typedef struct { static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -303,11 +302,6 @@ static void activate(LV2_Handle instance) starchild->pitchCounter = 2; starchild->increment = 1; starchild->dutyCycle = 1; - - starchild->fpdL = 1.0; - while (starchild->fpdL < 16386) starchild->fpdL = rand() * UINT32_MAX; - starchild->fpdR = 1.0; - while (starchild->fpdR < 16386) starchild->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -437,8 +431,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { inputSampleL = *in1; inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = starchild->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = starchild->fpdR * 1.18e-17; drySampleL = inputSampleL; drySampleR = inputSampleR; @@ -1058,20 +1050,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) inputSampleR += drySampleR; //here we combine the tanks with the dry signal - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - starchild->fpdL ^= starchild->fpdL << 13; - starchild->fpdL ^= starchild->fpdL >> 17; - starchild->fpdL ^= starchild->fpdL << 5; - inputSampleL += (((double)starchild->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - starchild->fpdR ^= starchild->fpdR << 13; - starchild->fpdR ^= starchild->fpdR >> 17; - starchild->fpdR ^= starchild->fpdR << 5; - inputSampleR += (((double)starchild->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/SubsOnly/SubsOnly.c b/src/SubsOnly/SubsOnly.c index 886ae22..e649464 100644 --- a/src/SubsOnly/SubsOnly.c +++ b/src/SubsOnly/SubsOnly.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define SUBSONLY_URI "https://hannesbraun.net/ns/lv2/airwindows/subsonly" @@ -71,14 +72,11 @@ typedef struct { double iirSampleXR; double iirSampleYR; double iirSampleZR; - - uint32_t fpdL; - uint32_t fpdR; } SubsOnly; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -188,8 +186,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { inputSampleL = *in1; inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = subsonly->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = subsonly->fpdR * 1.18e-17; gain = gaintarget; diff --git a/src/Ultrasonic/Ultrasonic.c b/src/Ultrasonic/Ultrasonic.c index 57b2398..6aacb3b 100644 --- a/src/Ultrasonic/Ultrasonic.c +++ b/src/Ultrasonic/Ultrasonic.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define ULTRASONIC_URI "https://hannesbraun.net/ns/lv2/airwindows/ultrasonic" @@ -22,13 +23,11 @@ typedef struct { double biquadC[15]; double biquadD[15]; double biquadE[15]; - uint32_t fpdL; - uint32_t fpdR; } Ultrasonic; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -66,10 +65,6 @@ static void activate(LV2_Handle instance) ultrasonic->biquadD[x] = 0.0; ultrasonic->biquadE[x] = 0.0; } - ultrasonic->fpdL = 1.0; - while (ultrasonic->fpdL < 16386) ultrasonic->fpdL = rand() * UINT32_MAX; - ultrasonic->fpdR = 1.0; - while (ultrasonic->fpdR < 16386) ultrasonic->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -136,8 +131,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = ultrasonic->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = ultrasonic->fpdR * 1.18e-17; double outSampleL = ultrasonic->biquadA[2] * inputSampleL + ultrasonic->biquadA[3] * ultrasonic->biquadA[7] + ultrasonic->biquadA[4] * ultrasonic->biquadA[8] - ultrasonic->biquadA[5] * ultrasonic->biquadA[9] - ultrasonic->biquadA[6] * ultrasonic->biquadA[10]; ultrasonic->biquadA[8] = ultrasonic->biquadA[7]; @@ -209,20 +202,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) ultrasonic->biquadE[14] = ultrasonic->biquadE[13]; ultrasonic->biquadE[13] = inputSampleR; // DF1 right - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - ultrasonic->fpdL ^= ultrasonic->fpdL << 13; - ultrasonic->fpdL ^= ultrasonic->fpdL >> 17; - ultrasonic->fpdL ^= ultrasonic->fpdL << 5; - inputSampleL += (((double)ultrasonic->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - ultrasonic->fpdR ^= ultrasonic->fpdR << 13; - ultrasonic->fpdR ^= ultrasonic->fpdR >> 17; - ultrasonic->fpdR ^= ultrasonic->fpdR << 5; - inputSampleR += (((double)ultrasonic->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/UltrasonicLite/UltrasonicLite.c b/src/UltrasonicLite/UltrasonicLite.c index f73d3f5..ef932f2 100644 --- a/src/UltrasonicLite/UltrasonicLite.c +++ b/src/UltrasonicLite/UltrasonicLite.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define ULTRASONICLITE_URI "https://hannesbraun.net/ns/lv2/airwindows/ultrasoniclite" @@ -18,13 +19,11 @@ typedef struct { const float* input[2]; float* output[2]; double biquadA[15]; - uint32_t fpdL; - uint32_t fpdR; } UltrasonicLite; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -58,10 +57,6 @@ static void activate(LV2_Handle instance) for (int x = 0; x < 15; x++) { ultrasoniclite->biquadA[x] = 0.0; } - ultrasoniclite->fpdL = 1.0; - while (ultrasoniclite->fpdL < 16386) ultrasoniclite->fpdL = rand() * UINT32_MAX; - ultrasoniclite->fpdR = 1.0; - while (ultrasoniclite->fpdR < 16386) ultrasoniclite->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -90,8 +85,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = ultrasoniclite->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = ultrasoniclite->fpdR * 1.18e-17; double outSampleL = ultrasoniclite->biquadA[2] * inputSampleL + ultrasoniclite->biquadA[3] * ultrasoniclite->biquadA[7] + ultrasoniclite->biquadA[4] * ultrasoniclite->biquadA[8] - ultrasoniclite->biquadA[5] * ultrasoniclite->biquadA[9] - ultrasoniclite->biquadA[6] * ultrasoniclite->biquadA[10]; ultrasoniclite->biquadA[8] = ultrasoniclite->biquadA[7]; @@ -107,20 +100,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) ultrasoniclite->biquadA[14] = ultrasoniclite->biquadA[13]; ultrasoniclite->biquadA[13] = inputSampleR; //DF1 right - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - ultrasoniclite->fpdL ^= ultrasoniclite->fpdL << 13; - ultrasoniclite->fpdL ^= ultrasoniclite->fpdL >> 17; - ultrasoniclite->fpdL ^= ultrasoniclite->fpdL << 5; - inputSampleL += (((double)ultrasoniclite->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - ultrasoniclite->fpdR ^= ultrasoniclite->fpdR << 13; - ultrasoniclite->fpdR ^= ultrasoniclite->fpdR >> 17; - ultrasoniclite->fpdR ^= ultrasoniclite->fpdR << 5; - inputSampleR += (((double)ultrasoniclite->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/UltrasonicMed/UltrasonicMed.c b/src/UltrasonicMed/UltrasonicMed.c index 2231697..29d91be 100644 --- a/src/UltrasonicMed/UltrasonicMed.c +++ b/src/UltrasonicMed/UltrasonicMed.c @@ -3,6 +3,7 @@ #include #include #include +#include "../optimizations.h" #define ULTRASONICMED_URI "https://hannesbraun.net/ns/lv2/airwindows/ultrasonicmed" @@ -19,13 +20,11 @@ typedef struct { float* output[2]; double biquadA[15]; double biquadB[15]; - uint32_t fpdL; - uint32_t fpdR; } UltrasonicMed; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -61,10 +60,6 @@ static void activate(LV2_Handle instance) ultrasonicMed->biquadA[x] = 0.0; ultrasonicMed->biquadB[x] = 0.0; } - ultrasonicMed->fpdL = 1.0; - while (ultrasonicMed->fpdL < 16386) ultrasonicMed->fpdL = rand() * UINT32_MAX; - ultrasonicMed->fpdR = 1.0; - while (ultrasonicMed->fpdR < 16386) ultrasonicMed->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -105,8 +100,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = ultrasonicMed->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = ultrasonicMed->fpdR * 1.18e-17; double outSampleL = ultrasonicMed->biquadA[2] * inputSampleL + ultrasonicMed->biquadA[3] * ultrasonicMed->biquadA[7] + ultrasonicMed->biquadA[4] * ultrasonicMed->biquadA[8] - ultrasonicMed->biquadA[5] * ultrasonicMed->biquadA[9] - ultrasonicMed->biquadA[6] * ultrasonicMed->biquadA[10]; ultrasonicMed->biquadA[8] = ultrasonicMed->biquadA[7]; @@ -136,20 +129,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) ultrasonicMed->biquadB[14] = ultrasonicMed->biquadB[13]; ultrasonicMed->biquadB[13] = inputSampleR; //DF1 right - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - ultrasonicMed->fpdL ^= ultrasonicMed->fpdL << 13; - ultrasonicMed->fpdL ^= ultrasonicMed->fpdL >> 17; - ultrasonicMed->fpdL ^= ultrasonicMed->fpdL << 5; - inputSampleL += (((double)ultrasonicMed->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - ultrasonicMed->fpdR ^= ultrasonicMed->fpdR << 13; - ultrasonicMed->fpdR ^= ultrasonicMed->fpdR >> 17; - ultrasonicMed->fpdR ^= ultrasonicMed->fpdR << 5; - inputSampleR += (((double)ultrasonicMed->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/Vibrato/Vibrato.c b/src/Vibrato/Vibrato.c index 8f63069..551d6d1 100644 --- a/src/Vibrato/Vibrato.c +++ b/src/Vibrato/Vibrato.c @@ -4,6 +4,7 @@ #include #include #include +#include "../optimizations.h" #define VIBRATO_URI "https://hannesbraun.net/ns/lv2/airwindows/vibrato" @@ -44,13 +45,11 @@ typedef struct { double airFactorR; bool flip; - uint32_t fpdL; - uint32_t fpdR; } Vibrato; static LV2_Handle instantiate( const LV2_Descriptor* descriptor, - double rate, + realdouble rate, const char* bundle_path, const LV2_Feature* const* features) { @@ -115,11 +114,6 @@ static void activate(LV2_Handle instance) vibrato->airFactorR = 0.0; vibrato->flip = false; - - vibrato->fpdL = 1.0; - while (vibrato->fpdL < 16386) vibrato->fpdL = rand() * UINT32_MAX; - vibrato->fpdR = 1.0; - while (vibrato->fpdR < 16386) vibrato->fpdR = rand() * UINT32_MAX; } static void run(LV2_Handle instance, uint32_t sampleFrames) @@ -141,8 +135,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) while (sampleFrames-- > 0) { double inputSampleL = *in1; double inputSampleR = *in2; - if (fabs(inputSampleL) < 1.18e-23) inputSampleL = vibrato->fpdL * 1.18e-17; - if (fabs(inputSampleR) < 1.18e-23) inputSampleR = vibrato->fpdR * 1.18e-17; double drySampleL = inputSampleL; double drySampleR = inputSampleR; @@ -219,20 +211,6 @@ static void run(LV2_Handle instance, uint32_t sampleFrames) } //Inv/Dry/Wet control - //begin 32 bit stereo floating point dither - int expon; - frexpf((float)inputSampleL, &expon); - vibrato->fpdL ^= vibrato->fpdL << 13; - vibrato->fpdL ^= vibrato->fpdL >> 17; - vibrato->fpdL ^= vibrato->fpdL << 5; - inputSampleL += (((double)vibrato->fpdL - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - frexpf((float)inputSampleR, &expon); - vibrato->fpdR ^= vibrato->fpdR << 13; - vibrato->fpdR ^= vibrato->fpdR >> 17; - vibrato->fpdR ^= vibrato->fpdR << 5; - inputSampleR += (((double)vibrato->fpdR - (uint32_t)0x7fffffff) * 5.5e-36l * pow(2, expon + 62)); - //end 32 bit stereo floating point dither - *out1 = (float) inputSampleL; *out2 = (float) inputSampleR; diff --git a/src/optimizations.h b/src/optimizations.h new file mode 100644 index 0000000..1f6516b --- /dev/null +++ b/src/optimizations.h @@ -0,0 +1,25 @@ +#include +#include +#include + +// force doubles into floats +typedef double realdouble; +#define double float +#define asin asinf +#define atan2 atan2f +#define cos cosf +#define exp expf +#define exp2 exp2f +#define fabs fabsf +#define log2 log2f +#define log10 log10f +#define pow powf +#define sin sinf +#define tan tanf + +// ensure denormal things is unused +#define fpdL error-if-fpdL-is-used +#define fpdR error-if-fpdR-is-used + +// ensure 32bit dithering is unused +#define frexpf error-if-frexpf-is-used