2021-02-21 23:22:01 +01:00
|
|
|
#include <VulcanoLE/Scripts/PoliceLike.h>
|
2021-02-20 18:13:51 +01:00
|
|
|
|
|
|
|
namespace VIZ {
|
2021-02-21 23:22:01 +01:00
|
|
|
PoliceLike::PoliceLike(AudioGrabber *pGrabber, Vulcan121 *pVulcan121) : VIZ(pGrabber, pVulcan121) {
|
2021-02-20 18:13:51 +01:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2021-02-22 14:27:34 +01:00
|
|
|
void PoliceLike::onSetup() {
|
|
|
|
keyboard->sendToLEDs({ 0, 0, 0, 0 });
|
2021-02-20 18:13:51 +01:00
|
|
|
grabber->requestMode = AudioGrabber::ReqMode::FFT;
|
|
|
|
usleep(100000);
|
|
|
|
}
|
|
|
|
|
2021-02-22 14:27:34 +01:00
|
|
|
void PoliceLike::onTick(float delta) {
|
2021-12-30 18:06:04 +01:00
|
|
|
led_map map{};
|
2021-02-20 18:13:51 +01:00
|
|
|
auto data = grabber->fft.getData()->leftChannel;
|
|
|
|
auto val = 0.0;
|
2021-05-02 17:25:03 +02:00
|
|
|
for (int i = 1; i < 3; ++i) {
|
2021-02-20 20:19:21 +01:00
|
|
|
if (data[i] > val) {
|
|
|
|
val = data[i];
|
2021-02-20 18:13:51 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
switchOnPeak(val);
|
|
|
|
tick++;
|
|
|
|
int colorInd = left ? 0 : 1;
|
2021-02-20 20:19:21 +01:00
|
|
|
colors[colorInd].a = val;
|
|
|
|
int colOff = left ? 0 : 9;
|
|
|
|
int max = left ? 10 : 12;
|
|
|
|
for (int i = 0; i < max; ++i) {
|
|
|
|
auto col = keyboard->getColumn(i + colOff);
|
|
|
|
for (int j = 0; j < col->count; ++j) {
|
2021-12-30 18:06:04 +01:00
|
|
|
map.key[col->index[j]] = colors[colorInd];
|
2021-02-20 18:13:51 +01:00
|
|
|
}
|
|
|
|
}
|
2021-12-30 18:06:04 +01:00
|
|
|
keyboard->sendLedMap(map);
|
2021-02-20 18:13:51 +01:00
|
|
|
}
|
|
|
|
|
2021-02-21 23:22:01 +01:00
|
|
|
void PoliceLike::switchOnPeak(double peak) {
|
2021-02-20 18:13:51 +01:00
|
|
|
if (tick < 3) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (peak < 20) {
|
|
|
|
lastPeak = -1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
// we dont have any data! reset ;)
|
|
|
|
if (lastPeak == -1) {
|
|
|
|
lastPeak = peak;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
lastPeak -= decayRate;
|
|
|
|
if (peak > 100 && peak > lastPeak + threshold) {
|
|
|
|
left = !left;
|
|
|
|
lastPeak = peak;
|
|
|
|
tick = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-02-21 23:22:01 +01:00
|
|
|
const char *PoliceLike::name() {
|
2021-02-20 18:13:51 +01:00
|
|
|
return m_name.c_str();
|
|
|
|
}
|
|
|
|
}
|