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

◆ mapFFTBinsToFrequencyChannels()

void fl::AudioReactive::mapFFTBinsToFrequencyChannels ( )
private

Definition at line 102 of file audio_reactive.cpp.

102 {
103 // Copy FFT results to frequency bins array
104 for (int i = 0; i < 16; ++i) {
105 if (i < static_cast<int>(mFFTBins.bins_raw.size())) {
106 mCurrentData.frequencyBins[i] = mFFTBins.bins_raw[i];
107 } else {
108 mCurrentData.frequencyBins[i] = 0.0f;
109 }
110 }
111
112 // Apply pink noise compensation (from WLED)
113 for (int i = 0; i < 16; ++i) {
114 mCurrentData.frequencyBins[i] *= PINK_NOISE_COMPENSATION[i];
115 }
116
117 // Find dominant frequency
118 float maxMagnitude = 0.0f;
119 int maxBin = 0;
120 for (int i = 0; i < 16; ++i) {
121 if (mCurrentData.frequencyBins[i] > maxMagnitude) {
122 maxMagnitude = mCurrentData.frequencyBins[i];
123 maxBin = i;
124 }
125 }
126
127 // Convert bin index to approximate frequency
128 // Rough approximation based on WLED frequency mapping
129 const float binCenterFrequencies[16] = {
130 64.5f, // Bin 0: 43-86 Hz
131 107.5f, // Bin 1: 86-129 Hz
132 172.5f, // Bin 2: 129-216 Hz
133 258.5f, // Bin 3: 216-301 Hz
134 365.5f, // Bin 4: 301-430 Hz
135 495.0f, // Bin 5: 430-560 Hz
136 689.0f, // Bin 6: 560-818 Hz
137 969.0f, // Bin 7: 818-1120 Hz
138 1270.5f, // Bin 8: 1120-1421 Hz
139 1658.0f, // Bin 9: 1421-1895 Hz
140 2153.5f, // Bin 10: 1895-2412 Hz
141 2713.5f, // Bin 11: 2412-3015 Hz
142 3359.5f, // Bin 12: 3015-3704 Hz
143 4091.5f, // Bin 13: 3704-4479 Hz
144 5792.5f, // Bin 14: 4479-7106 Hz
145 8182.5f // Bin 15: 7106-9259 Hz
146 };
147
148 mCurrentData.dominantFrequency = binCenterFrequencies[maxBin];
149 mCurrentData.magnitude = maxMagnitude;
150}
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: