41 lines
1.1 KiB
C++
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
|