961 {
963 const int numRawBins = N / 2 + 1;
964
966
967
969 s.re.resize(numRawBins);
970 s.im.resize(numRawBins);
971 s.mag.resize(numRawBins);
972 s.windowed.resize(N);
974
975
977
979
981 batchMag(s.re.data(), s.im.data(), s.mag.data(), numRawBins);
982
984
985
987
988
993
994
995 int workLen = N;
996 for (int i = 0; i < N; i++) {
998 (i < static_cast<int>(buffer.size())) ? buffer[i] : 0;
999 }
1001 workLen /= 2;
1003 workLen /= 2;
1004
1005
1008 int midRawBins = midFftN / 2 + 1;
1009 s.windowed.resize(midFftN);
1013 s.windowed[i] = 0;
1014 }
1018 batchMag(s.re.data(), s.im.data(), s.mag.data(), midRawBins);
1019
1024 }
1025
1026
1028 workLen /= 2;
1029
1030
1039 batchMag(s.re.data(), s.im.data(), s.mag.data(), bassRawBins);
1044 }
1045
1046
1047 fl::vector<float> &rawBins = out->raw_mut();
1050 rawBins[i] = static_cast<float>(s.rawBinsI[i]);
1051 }
1052
1053
1055 }
fl::vector< alpha16 > mHybridBassWindow
static void batchMag(const kiss_fft_scalar *re, const kiss_fft_scalar *im, u16 *mag, int n) FL_NO_EXCEPT
void computeLinearBins(const u16 *mag, int, Bins *out) FL_NO_EXCEPT
void logRebinRange(const u16 *mag, int fftN, float fs, int binStart, int binEnd, u32 *rawBinsI, const fl::vector< u8 > &lut) FL_NO_EXCEPT
fl::vector< kiss_fft_scalar > mWorkBuf
fl::vector< alpha16 > mWindowBuf
fl::vector< alpha16 > mHybridMidWindow
fl::vector< kiss_fft_cpx > mHybridMidFftOut
fl::vector< u8 > mLogBinLutMid
fl::vector< kiss_fft_cpx > mHybridSmallFftOut
static FftScratch & scratch() FL_NO_EXCEPT
static void deinterleave(const kiss_fft_cpx *cpx, kiss_fft_scalar *re, kiss_fft_scalar *im, int n) FL_NO_EXCEPT
fl::vector< u8 > mLogBinLutBass
static void applyWindow(const kiss_fft_scalar *samples, const alpha16 *win, kiss_fft_scalar *out, int N) FL_NO_EXCEPT
fl::vector< u8 > mLogBinLut
fl::vector< kiss_fft_cpx > mFftOut
kiss_fftr_cfg mHybridMidFft
static void decimateBy2(kiss_fft_scalar *buf, int len) FL_NO_EXCEPT
fl::vector< float > mHybridMergedNorm
kiss_fftr_cfg mHybridSmallFft
void resize(fl::size n) FL_NO_EXCEPT
void kiss_fftr(kiss_fftr_cfg st, const kiss_fft_scalar *timedata, kiss_fft_cpx *freqdata)
FASTLED_FORCE_INLINE void * memset(void *s, int c, size_t n) FL_NO_EXCEPT