#include #include namespace VIZ { BassHistory::BassHistory(AudioGrabber *pGrabber, Vulcan121 *pVulcan121) : VIZ(pGrabber, pVulcan121){ for (auto &item : map.key) { item.a = 0; } m_history.resize(keyboardData.num_cols); } void BassHistory::onSetup() { keyboard->sendToLEDs({ 0, 0, 0, 0 }); grabber->requestMode = AudioGrabber::ReqMode::FFT; } void BassHistory::onTick(float delta) { auto data = grabber->fft.getData()->leftChannel; auto val = 0.0; for (int i = 1; i < 4; ++i) { if (data[i] > val) { val = data[i]; } } pushNew(val); for (int i = 0; i < keyboardData.num_cols; ++i) { auto col = keyboard->getColumn(i); for (int j = 0; j < col->count; j++) { auto& color = map.key[col->index[j]]; color.a = m_history[i]; auto newColor = Color::Generator::rgbFromHSV({ m_history[i] / 255 * 360, 1, 1 }); color.r = int16_t(newColor.r * 255); color.g = int16_t(newColor.g * 255); color.b = int16_t(newColor.b * 255); } } keyboard->sendLedMap(map); } const char *BassHistory::name() { return m_name.c_str(); } void BassHistory::pushNew(double val) { for (int i = 1; i < m_history.size(); ++i) { m_history[i - 1] = m_history[i]; } m_history[m_history.size()-1] = val; } }