diff --git a/components/led_strip/led_vu.c b/components/led_strip/led_vu.c index 49ba26a1..57098da0 100644 --- a/components/led_strip/led_vu.c +++ b/components/led_strip/led_vu.c @@ -239,7 +239,7 @@ void led_vu_progress_bar(int pct, int bright) { * gain - brightness (0-100), rate - color change speed (0-100) * comet - alternate display mode */ -void led_vu_spin_dial(int gain, int rate, bool comet) +void led_vu_spin_dial(int gain, int rate, int speed, bool comet) { if (!led_display) return; @@ -270,18 +270,20 @@ void led_vu_spin_dial(int gain, int rate, bool comet) uint8_t gp = g * gain / LED_VU_MAX; uint8_t bp = b * gain / LED_VU_MAX; - // set led color_ - led_strip_set_pixel_rgb(led_display, led_pos, rp, gp, bp); + // set led color + speed++; if (comet) { + led_strip_clear(led_display); led_strip_set_pixel_rgb(led_display, led_addr(led_pos-1), rp/2, gp/2, bp/2); led_strip_set_pixel_rgb(led_display, led_addr(led_pos-2), rp/4, gp/4, bp/4); led_strip_set_pixel_rgb(led_display, led_addr(led_pos-3), rp/8, gp/8, bp/8); - led_strip_set_pixel_rgb(led_display, led_addr(led_pos-4), 0, 0, 0); + //led_strip_set_pixel_rgb(led_display, led_addr(led_pos-4), 0, 0, 0); + } + for (int i = 0; i < speed; i++) { + led_strip_set_pixel_rgb(led_display, led_pos, rp, gp, bp); + led_pos = led_addr(++led_pos); } - // next led - led_pos = led_addr(++led_pos); - led_strip_show(led_display); } diff --git a/components/led_strip/led_vu.h b/components/led_strip/led_vu.h index f6c26f12..eedf3b38 100644 --- a/components/led_strip/led_vu.h +++ b/components/led_strip/led_vu.h @@ -23,7 +23,7 @@ extern struct led_strip_t* led_display; uint16_t led_vu_string_length(); void led_vu_progress_bar(int pct, int bright); void led_vu_display(int vu_l, int vu_r, int bright, bool comet); -void led_vu_spin_dial(int gain, int rate, bool comet); +void led_vu_spin_dial(int gain, int rate, int speed, bool comet); void led_vu_spectrum(uint8_t* data, int bright, int length, int style); void led_vu_color_all(uint8_t r, uint8_t g, uint8_t b); void led_vu_data(uint8_t* data, uint16_t offset, uint16_t length); diff --git a/components/squeezelite/displayer.c b/components/squeezelite/displayer.c index c06ca2c6..557d6ca6 100644 --- a/components/squeezelite/displayer.c +++ b/components/squeezelite/displayer.c @@ -1084,14 +1084,12 @@ static void displayer_update(void) { // actualize led_vu if (led_display && led_visu.mode) { - // scale to correct rgb brightness - if (led_visu.mode == VISU_VUMETER) vu_scale(led_visu.bars, led_visu.max, meters.levels); - else spectrum_scale(led_visu.n, led_visu.bars, led_visu.max, meters.samples); - // run built in visualizer effects if (led_visu.mode == VISU_VUMETER) { + vu_scale(led_visu.bars, led_visu.max, meters.levels); led_vu_display(led_visu.bars[0].current, led_visu.bars[1].current, led_visu.max, led_visu.style); } else if (led_visu.mode == VISU_SPECTRUM) { + spectrum_scale(led_visu.n, led_visu.bars, led_visu.max, meters.samples); uint8_t* led_data = malloc(led_visu.n); uint8_t* p = (uint8_t*) led_data; for (int i = 0; i < led_visu.n; i++) { @@ -1101,7 +1099,12 @@ static void displayer_update(void) { led_vu_spectrum(led_data, led_visu.max, led_visu.n, led_visu.style); free(led_data); } else if (led_visu.mode == VISU_WAVEFORM) { - led_vu_spin_dial(led_visu.bars[1].current, led_visu.bars[(led_visu.n/2)+1].current * 50 / led_visu.max , led_visu.style); + spectrum_scale(led_visu.n, led_visu.bars, led_visu.max, meters.samples); + led_vu_spin_dial( + led_visu.bars[1].current, + led_visu.bars[(led_visu.n/2)+1].current * 50 / led_visu.max, + led_visu.bars[led_visu.n-2].current * 5 / led_visu.max, + led_visu.style); } } }