742 {
743 float logRatio =
logf(fmax / fmin);
744
745
747 for (int i = 0; i < bands; i++) {
748 centerFreqs[i] =
749 fmin *
expf(logRatio *
static_cast<float>(i) /
750 static_cast<float>(bands - 1));
751 }
752
753
754
755
756 float bassMidFreq = fmin * 4.0f;
757 float midUpperFreq = fmin * 8.0f;
758
759
760 if (midUpperFreq >= fmax) midUpperFreq = fmax * 0.5f;
761 if (bassMidFreq >= midUpperFreq) bassMidFreq = midUpperFreq * 0.5f;
762
763
765 for (int i = 0; i < bands; i++) {
766 if (centerFreqs[i] < bassMidFreq)
768 }
771 if (centerFreqs[i] < midUpperFreq)
773 }
774
775
781
782
784 if (bands <= 1) {
787 } else {
788 float denom = 2.0f * static_cast<float>(bands - 1);
790 for (int i = 1; i < bands; i++) {
792 fmin *
expf(logRatio *
793 (2.0f * static_cast<float>(i) - 1.0f) / denom);
794 }
796 }
797
798
799 float nyquist = static_cast<float>(sr) / 2.0f;
802 }
803
805
806
808
809
810
816
817
824
825
828
829
831 static_cast<float>(sr),
840
841
843 samples, static_cast<float>(sr),
851
852
854 for (int i = 0; i < bands; ++i) {
861 } else {
863 }
864 }
865 }
#define FASTLED_STACK_ARRAY(TYPE, NAME, SIZE)
Stack-allocated array with automatic zero-initialization.
void computeLogRebinNormFactors(fl::vector< float > &normFactors, const fl::vector< u8 > &lut, int fftN, float fs, int binStart, int binEnd)
fl::vector< alpha16 > mHybridBassWindow
void buildLogBinLut(fl::vector< u8 > &lut, int fftN, float fs, int binStart, int binEnd)
fl::vector< kiss_fft_scalar > mWorkBuf
void computeBinEdgesQ16()
fl::vector< u8 > mLinearBinLut
fl::vector< alpha16 > mHybridMidWindow
fl::vector< kiss_fft_cpx > mHybridMidFftOut
fl::vector< float > mLogBinEdges
fl::vector< u8 > mLogBinLutMid
fl::vector< kiss_fft_cpx > mHybridSmallFftOut
void buildLinearBinLut(fl::vector< u8 > &lut, int fftN)
fl::vector< float > mHybridNormUpper
fl::vector< u8 > mLogBinLutBass
fl::vector< u8 > mLogBinLut
fl::vector< kiss_fft_cpx > mFftOut
kiss_fftr_cfg mHybridMidFft
fl::vector< float > mHybridNormBass
fl::vector< float > mHybridMergedNorm
kiss_fftr_cfg mHybridSmallFft
fl::vector< float > mHybridNormMid
static void computeWindow(fl::vector< alpha16 > &win, int N, Window type)
kiss_fftr_cfg kiss_fftr_alloc(int nfft, int inverse_fft, void *mem, size_t *lenmem) FL_NOEXCEPT
float expf(float value) FL_NOEXCEPT
float logf(float value) FL_NOEXCEPT