Browse Source

imporve wavefom effect

Wizmo2 2 years ago
parent
commit
3f4bba2443
3 changed files with 18 additions and 13 deletions
  1. 9 7
      components/led_strip/led_vu.c
  2. 1 1
      components/led_strip/led_vu.h
  3. 8 5
      components/squeezelite/displayer.c

+ 9 - 7
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);
 }
 

+ 1 - 1
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);

+ 8 - 5
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);
 		} 
 	}
 }