#include #include 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