FastLED 3.9.15
Loading...
Searching...
No Matches

◆ mapFFTBinsToFrequencyChannels()

void fl::AudioReactive::mapFFTBinsToFrequencyChannels ( )
private

Definition at line 72 of file audio_reactive.cpp.

72 {
73 // Copy FFT results to frequency bins array
74 for (int i = 0; i < 16; ++i) {
75 if (i < static_cast<int>(mFFTBins.bins_raw.size())) {
76 mCurrentData.frequencyBins[i] = mFFTBins.bins_raw[i];
77 } else {
78 mCurrentData.frequencyBins[i] = 0.0f;
79 }
80 }
81
82 // Apply pink noise compensation (from WLED)
83 for (int i = 0; i < 16; ++i) {
84 mCurrentData.frequencyBins[i] *= PINK_NOISE_COMPENSATION[i];
85 }
86
87 // Find dominant frequency
88 float maxMagnitude = 0.0f;
89 int maxBin = 0;
90 for (int i = 0; i < 16; ++i) {
91 if (mCurrentData.frequencyBins[i] > maxMagnitude) {
92 maxMagnitude = mCurrentData.frequencyBins[i];
93 maxBin = i;
94 }
95 }
96
97 // Convert bin index to approximate frequency
98 // Rough approximation based on WLED frequency mapping
99 const float binCenterFrequencies[16] = {
100 64.5f, // Bin 0: 43-86 Hz
101 107.5f, // Bin 1: 86-129 Hz
102 172.5f, // Bin 2: 129-216 Hz
103 258.5f, // Bin 3: 216-301 Hz
104 365.5f, // Bin 4: 301-430 Hz
105 495.0f, // Bin 5: 430-560 Hz
106 689.0f, // Bin 6: 560-818 Hz
107 969.0f, // Bin 7: 818-1120 Hz
108 1270.5f, // Bin 8: 1120-1421 Hz
109 1658.0f, // Bin 9: 1421-1895 Hz
110 2153.5f, // Bin 10: 1895-2412 Hz
111 2713.5f, // Bin 11: 2412-3015 Hz
112 3359.5f, // Bin 12: 3015-3704 Hz
113 4091.5f, // Bin 13: 3704-4479 Hz
114 5792.5f, // Bin 14: 4479-7106 Hz
115 8182.5f // Bin 15: 7106-9259 Hz
116 };
117
118 mCurrentData.dominantFrequency = binCenterFrequencies[maxBin];
119 mCurrentData.magnitude = maxMagnitude;
120}
static constexpr float PINK_NOISE_COMPENSATION[16]

References mCurrentData, mFFTBins, and PINK_NOISE_COMPENSATION.

Referenced by processFFT().

+ Here is the caller graph for this function: