#include #include namespace VIZ { TheUnknown::TheUnknown(AudioGrabber *pGrabber, Vulcan121 *vulcan) : VIZ(pGrabber, vulcan) { m_random.setDist(0, 128); for (int i = 0; i < NUM_KEYS; i++) { m_keyHeightMap[i] = std::abs(SimplexNoise::noise(i + 1.0f)) * 0.1; m_keyOffset[i] = m_random.getFast(); } m_random.setDist(0.005, 0.01); } void TheUnknown::onSetup() { keyboard->sendToLEDs({ 0, 0, 0, 0 }); Vulcan121::setColor(map, { 202, 35, 13, 255 }); grabber->requestMode = AudioGrabber::ReqMode::PEAK; } void TheUnknown::onTick(float delta) { auto loudness = grabber->getLoudness(); auto factor = (((loudness.r + loudness.l) / 2.0) * 0.9) + 0.05; for (size_t i = 0; i < keyboardData.num_keys; i++) { auto &color = map.key[i]; auto noise = SimplexNoise::noise(m_keyOffset[i]) * factor; noise = std::abs(noise) + 0.02; auto newAlpha = std::clamp((noise + m_keyHeightMap[i]) * 255, 0.0, 255.0); color.a = (color.a + newAlpha) / 2; auto offset = std::sin(m_angle) * m_random.getFast(); m_keyOffset[i] += (delta * (1.5 * factor)) + offset; m_angle += 0.0005; if (m_keyOffset[i] > 20000000) m_keyOffset[i] = 0.0; if (m_angle > 1.0) m_angle -= 1; } keyboard->sendLedMap(map); } const char *TheUnknown::name() { return "TheUnknown"; } }