remove support for old ArduinoFFT library < 1.9.2
there is no reason any more to still use the old arduinoFFT library version.
This commit is contained in:
@@ -381,7 +381,6 @@ constexpr float binWidth = SAMPLE_RATE / (float)samplesFFT; // frequency range o
|
|||||||
|
|
||||||
|
|
||||||
// Create FFT object
|
// Create FFT object
|
||||||
#ifdef UM_AUDIOREACTIVE_USE_NEW_FFT
|
|
||||||
// lib_deps += https://github.com/kosme/arduinoFFT#develop @ 1.9.2
|
// lib_deps += https://github.com/kosme/arduinoFFT#develop @ 1.9.2
|
||||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||||
// these options actually cause slow-down on -S2 (-S2 doesn't have floating point hardware)
|
// these options actually cause slow-down on -S2 (-S2 doesn't have floating point hardware)
|
||||||
@@ -390,13 +389,8 @@ constexpr float binWidth = SAMPLE_RATE / (float)samplesFFT; // frequency range o
|
|||||||
#endif
|
#endif
|
||||||
#define sqrt(x) sqrtf(x) // little hack that reduces FFT time by 10-50% on ESP32 (as alternative to FFT_SQRT_APPROXIMATION)
|
#define sqrt(x) sqrtf(x) // little hack that reduces FFT time by 10-50% on ESP32 (as alternative to FFT_SQRT_APPROXIMATION)
|
||||||
#define sqrt_internal sqrtf // see https://github.com/kosme/arduinoFFT/pull/83
|
#define sqrt_internal sqrtf // see https://github.com/kosme/arduinoFFT/pull/83
|
||||||
#else
|
|
||||||
// around 50% slower on -S2
|
|
||||||
// lib_deps += https://github.com/blazoncek/arduinoFFT.git
|
|
||||||
#endif
|
|
||||||
#include <arduinoFFT.h>
|
#include <arduinoFFT.h>
|
||||||
|
|
||||||
#ifdef UM_AUDIOREACTIVE_USE_NEW_FFT
|
|
||||||
#if defined(FFT_LIB_REV) && FFT_LIB_REV > 0x19
|
#if defined(FFT_LIB_REV) && FFT_LIB_REV > 0x19
|
||||||
// arduinoFFT 2.x has a slightly different API
|
// arduinoFFT 2.x has a slightly different API
|
||||||
static ArduinoFFT<float> FFT = ArduinoFFT<float>( vReal, vImag, samplesFFT, SAMPLE_RATE, true);
|
static ArduinoFFT<float> FFT = ArduinoFFT<float>( vReal, vImag, samplesFFT, SAMPLE_RATE, true);
|
||||||
@@ -405,9 +399,6 @@ constexpr float binWidth = SAMPLE_RATE / (float)samplesFFT; // frequency range o
|
|||||||
static float windowWeighingFactors[samplesFFT] = {0.0f}; // cache for FFT windowing factors
|
static float windowWeighingFactors[samplesFFT] = {0.0f}; // cache for FFT windowing factors
|
||||||
static ArduinoFFT<float> FFT = ArduinoFFT<float>( vReal, vImag, samplesFFT, SAMPLE_RATE, windowWeighingFactors);
|
static ArduinoFFT<float> FFT = ArduinoFFT<float>( vReal, vImag, samplesFFT, SAMPLE_RATE, windowWeighingFactors);
|
||||||
#endif
|
#endif
|
||||||
#else
|
|
||||||
static arduinoFFT FFT = arduinoFFT(vReal, vImag, samplesFFT, SAMPLE_RATE);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Helper functions
|
// Helper functions
|
||||||
|
|
||||||
@@ -618,7 +609,6 @@ void FFTcode(void * parameter)
|
|||||||
if (fabsf(volumeSmth) > 0.25f) { // noise gate open
|
if (fabsf(volumeSmth) > 0.25f) { // noise gate open
|
||||||
if ((skipSecondFFT == false) || (isFirstRun == true)) {
|
if ((skipSecondFFT == false) || (isFirstRun == true)) {
|
||||||
// run FFT (takes 2-3ms on ESP32, ~12ms on ESP32-S2, ~30ms on -C3)
|
// run FFT (takes 2-3ms on ESP32, ~12ms on ESP32-S2, ~30ms on -C3)
|
||||||
#ifdef UM_AUDIOREACTIVE_USE_NEW_FFT
|
|
||||||
if (doDCRemoval) FFT.dcRemoval(); // remove DC offset
|
if (doDCRemoval) FFT.dcRemoval(); // remove DC offset
|
||||||
#if !defined(FFT_PREFER_EXACT_PEAKS)
|
#if !defined(FFT_PREFER_EXACT_PEAKS)
|
||||||
FFT.windowing( FFTWindow::Flat_top, FFTDirection::Forward); // Weigh data using "Flat Top" function - better amplitude accuracy
|
FFT.windowing( FFTWindow::Flat_top, FFTDirection::Forward); // Weigh data using "Flat Top" function - better amplitude accuracy
|
||||||
@@ -628,19 +618,6 @@ void FFTcode(void * parameter)
|
|||||||
FFT.compute( FFTDirection::Forward ); // Compute FFT
|
FFT.compute( FFTDirection::Forward ); // Compute FFT
|
||||||
FFT.complexToMagnitude(); // Compute magnitudes
|
FFT.complexToMagnitude(); // Compute magnitudes
|
||||||
vReal[0] = 0; // The remaining DC offset on the signal produces a strong spike on position 0 that should be eliminated to avoid issues.
|
vReal[0] = 0; // The remaining DC offset on the signal produces a strong spike on position 0 that should be eliminated to avoid issues.
|
||||||
#else
|
|
||||||
FFT.DCRemoval(); // let FFT lib remove DC component, so we don't need to care about this in getSamples()
|
|
||||||
|
|
||||||
//FFT.Windowing( FFT_WIN_TYP_HAMMING, FFT_FORWARD ); // Weigh data - standard Hamming window
|
|
||||||
//FFT.Windowing( FFT_WIN_TYP_BLACKMAN, FFT_FORWARD ); // Blackman window - better side freq rejection
|
|
||||||
#if !defined(FFT_PREFER_EXACT_PEAKS)
|
|
||||||
FFT.Windowing( FFT_WIN_TYP_FLT_TOP, FFT_FORWARD ); // Flat Top Window - better amplitude accuracy
|
|
||||||
#else
|
|
||||||
FFT.Windowing( FFT_WIN_TYP_BLACKMAN_HARRIS, FFT_FORWARD );// Blackman-Harris - excellent sideband rejection
|
|
||||||
#endif
|
|
||||||
FFT.Compute( FFT_FORWARD ); // Compute FFT
|
|
||||||
FFT.ComplexToMagnitude(); // Compute magnitudes
|
|
||||||
#endif
|
|
||||||
|
|
||||||
float last_majorpeak = FFT_MajorPeak;
|
float last_majorpeak = FFT_MajorPeak;
|
||||||
float last_magnitude = FFT_Magnitude;
|
float last_magnitude = FFT_Magnitude;
|
||||||
@@ -651,16 +628,12 @@ void FFTcode(void * parameter)
|
|||||||
vReal[binInd] *= pinkFactors[binInd];
|
vReal[binInd] *= pinkFactors[binInd];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef UM_AUDIOREACTIVE_USE_NEW_FFT
|
|
||||||
#if defined(FFT_LIB_REV) && FFT_LIB_REV > 0x19
|
#if defined(FFT_LIB_REV) && FFT_LIB_REV > 0x19
|
||||||
// arduinoFFT 2.x has a slightly different API
|
// arduinoFFT 2.x has a slightly different API
|
||||||
FFT.majorPeak(&FFT_MajorPeak, &FFT_Magnitude);
|
FFT.majorPeak(&FFT_MajorPeak, &FFT_Magnitude);
|
||||||
#else
|
#else
|
||||||
FFT.majorPeak(FFT_MajorPeak, FFT_Magnitude); // let the effects know which freq was most dominant
|
FFT.majorPeak(FFT_MajorPeak, FFT_Magnitude); // let the effects know which freq was most dominant
|
||||||
#endif
|
#endif
|
||||||
#else
|
|
||||||
FFT.MajorPeak(&FFT_MajorPeak, &FFT_Magnitude);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (FFT_MajorPeak < (SAMPLE_RATE / samplesFFT)) {FFT_MajorPeak = 1.0f; FFT_Magnitude = 0;} // too low - use zero
|
if (FFT_MajorPeak < (SAMPLE_RATE / samplesFFT)) {FFT_MajorPeak = 1.0f; FFT_Magnitude = 0;} // too low - use zero
|
||||||
if (FFT_MajorPeak > (0.42f * SAMPLE_RATE)) {FFT_MajorPeak = last_majorpeak; FFT_Magnitude = last_magnitude;} // too high - keep last peak
|
if (FFT_MajorPeak > (0.42f * SAMPLE_RATE)) {FFT_MajorPeak = last_majorpeak; FFT_Magnitude = last_magnitude;} // too high - keep last peak
|
||||||
|
|||||||
@@ -27,17 +27,9 @@ Currently ESP8266 is not supported, due to low speed and small RAM of this chip.
|
|||||||
There are however plans to create a lightweight audioreactive for the 8266, with reduced features.
|
There are however plans to create a lightweight audioreactive for the 8266, with reduced features.
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
### using customised _arduinoFFT_ library for use with this usermod
|
### using latest _arduinoFFT_ library
|
||||||
Add `-D USERMOD_AUDIOREACTIVE` to your PlatformIO environment `build_flags`, as well as `https://github.com/blazoncek/arduinoFFT.git` to your `lib_deps`.
|
|
||||||
If you are not using PlatformIO (which you should) try adding `#define USERMOD_AUDIOREACTIVE` to *my_config.h* and make sure you have _arduinoFFT_ library downloaded and installed.
|
|
||||||
|
|
||||||
Customised _arduinoFFT_ library for use with this usermod can be found at https://github.com/blazoncek/arduinoFFT.git
|
* `build_flags` = `-D USERMOD_AUDIOREACTIVE`
|
||||||
|
|
||||||
### using latest (develop) _arduinoFFT_ library
|
|
||||||
Alternatively, you can use the latest arduinoFFT development version.
|
|
||||||
ArduinoFFT `develop` library is slightly more accurate, and slightly faster than our customised library, however also needs additional 2kB RAM.
|
|
||||||
|
|
||||||
* `build_flags` = `-D USERMOD_AUDIOREACTIVE` `-D UM_AUDIOREACTIVE_USE_NEW_FFT`
|
|
||||||
* `lib_deps`= `https://github.com/kosme/arduinoFFT#develop @ 1.9.2`
|
* `lib_deps`= `https://github.com/kosme/arduinoFFT#develop @ 1.9.2`
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|||||||
Reference in New Issue
Block a user