#include namespace VIZ { Loudness::Loudness(AudioGrabber *pGrabber, Vulcan121 *pVulcan121) : VIZ(pGrabber, pVulcan121) {} void Loudness::on_setup() { keyboard->send_led_to({ 0, 0, 0, 0 }); grabber->requestMode = AudioGrabber::ReqMode::PEAK; usleep(100000); } void Loudness::on_tick() { auto data = Vulcan121::createEmptyLEDMap(); float val = grabber->getLoudness(); val = val > 1.0f ? 1.0f : val; double newVal = (val + lastVal) * 0.5; int maxCol = newVal * 24; for (int col = 0; col < maxCol; ++col) { for (int i = 0; i < keyboardData.num_rows; ++i) { auto index = col * i; if (col >= maxCol - 1) data[ 0 ].key[ index ] = { 255, 0, 0, 100 }; else data[ 0 ].key[ index ] = { 0, 0, 255, 80 }; } } // delete map! ;) lastVal = val; keyboard->send_led_map(data, true); } const char *Loudness::name() { return m_name.c_str(); } }