Skip to content

Commit dcca803

Browse files
committed
Better calibration ideas for mic
1 parent c42932d commit dcca803

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

usermods/audioreactive/audio_reactive.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,13 +1145,15 @@ static void postProcessFFTResults(bool noiseGateOpen, int numberOfChannels, bool
11451145

11461146
// Some attempt to auto-calibrate mics
11471147
if (TROYHACKS_PINKY) {
1148-
fftBinAverage[i] = fftBinAverage[i] * 0.99 + (0.01 * fftCalc[i] * FFT_DOWNSCALE * (soundAgc ? multAgc : ((float)sampleGain/40.0f * (float)inputLevel/128.0f + 1.0f/16.0f)));
1148+
float calced = fftCalc[i] * FFT_DOWNSCALE * (soundAgc ? multAgc : ((float)sampleGain/40.0f * (float)inputLevel/128.0f + 1.0f/16.0f));
1149+
fftBinAverage[i] = fftBinAverage[i] * 0.99 + (0.01 * calced);
1150+
// if (calced > fftBinAverage[i]) fftBinAverage[i] = calced;
11491151
}
11501152
// Adjustment for frequency curves.
11511153
if (fftBinAverage[0] != 0 && !TROYHACKS_PINKY) {
11521154
fftCalc[i] *= fftBinAverage[i];
11531155
} else {
1154-
fftCalc[i] *= fftResultPink[pinkIndex][i];
1156+
fftCalc[i] *= fftResultPink[pinkIndex][i]; // if we aren't calibrat[ing/ed], use the menu choice.
11551157
}
11561158
// End auto calibration
11571159

wled00/wled_serial.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,11 @@ static um_data_t* getAudioData() {
100100
return um_data;
101101
}
102102

103+
static float mapf(float x, float in_min, float in_max, float out_min, float out_max){
104+
if (in_max == in_min) return (out_min); // WLEDMM avoid div/0
105+
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
106+
}
107+
103108
void handleSerial()
104109
{
105110
if (pinManager.isPinAllocated(hardwareRX)) return;
@@ -229,13 +234,16 @@ void handleSerial()
229234
min = fftBinAverage[i];
230235
}
231236
}
232-
// 5.53, 8.10 = 1.70, 1.83, 1.82, 1.85, 1.78, 1.82, 1.76, 1.79, 1.79, 1.79, 1.79, 1.79, 1.79, 1.79, 1.89, 2.17
237+
// 5.53, 8.10 = 1.70, 1.83, 1.82, 1.85, 1.78, 1.82, 1.76, 1.79, 1.79, 1.79, 1.79, 1.79, 1.79, 1.79, 1.89, 2.17
238+
// 10.05,95.22 = 7.78, 6.95, 5.15, 3.73, 1.70, 2.20, 4.86, 3.95, 5.92, 7.45, 7.64, 7.52, 6.84, 7.14, 6.90, 6.06,
239+
// 2.11, 16.77 = 9.67, 8.97, 6.87, 4.89, 3.36, 1.70, 4.69, 2.71, 6.73, 8.85, 9.01, 8.53, 7.10, 7.86, 5.23, 4.26,
240+
// 2.62,19.27 = 7.34, 6.64, 4.99, 3.76, 1.39, 1.00, 3.20, 1.23, 5.07, 6.63, 6.75, 6.37, 5.26, 5.72, 2.73, 2.74,
233241
USER_PRINT(min);
234242
USER_PRINT(",");
235243
USER_PRINT(max);
236244
USER_PRINT(" = ");
237245
for (int i=0; i < 16; i++) {
238-
fftBinAverage[i] = (max/fftBinAverage[i]) + 0.7f;
246+
fftBinAverage[i] = mapf(fftBinAverage[i],min,max,(max/min),1.00f);
239247
USER_PRINTF("%1.2f, ", fftBinAverage[i]);
240248
}
241249
USER_PRINTLN();

0 commit comments

Comments
 (0)