VulcanoLE/src/VulcanoLE/Scripts/Spectral.cpp

41 lines
1.1 KiB
C++

#include <VulcanoLE/Colors/ColorHelper.h>
#include <VulcanoLE/Scripts/Spectral.h>
namespace VIZ {
Spectral::Spectral(AudioGrabber *pGrabber, Vulcan121 *pVulcan121)
: VIZ(pGrabber, pVulcan121) {
double ri = 0;
for (int i = 1; i < keyboardData.num_rows; ++i) {
auto *row = keyboard->getRow(i);
double r = ri / row->count;
for (int j = 0; j < row->count; j++) {
map.key[row->index[j]] = Color::Generator::rgbFromRatio(r, 255);
}
ri++;
}
}
void Spectral::onSetup() {
keyboard->sendToLEDs({0, 0, 0, 0});
grabber->requestMode = AudioGrabber::ReqMode::FFT;
}
void Spectral::onTick(float delta) {
auto *data = grabber->fft.getData();
auto *channel = data->leftChannel;
for (int i = 0; i < keyboardData.num_cols; ++i) {
auto *col = keyboard->getColumn(i);
auto ratio = (channel[i + 1] / 128.0 * -1 + 1) * keyboardData.num_rows;
for (int j = 0; j < col->count; j++) {
map.key[col->index[j]].a = j < ratio ? 0 : channel[j];
}
}
keyboard->sendLedMap(map);
}
const char *Spectral::name() { return m_name.c_str(); }
} // namespace VIZ