Tira LED neopixel no funciona al ritmo de la música

Buenas!! Sigo liado con el Vúmetro. Estoy tratando de hacer que el último valor de pico de la señal se mantenga encendido y vaya bajando lentamente hasta el nuevo valor leído. He realizado unas pocas de pruebas y la más "fiable" que me ha salido por ahora es esta:

#include <Adafruit_NeoPixel.h>

const byte pin_LED = 6; 
const byte pinJack = A0;
const byte numero_led = 30; 
const byte BRILLO = 255;
unsigned long tiempoAhora = 0;
//byte a;
//byte b;
//byte a_ant=0;
//byte b_ant=255;

Adafruit_NeoPixel tira_LED(numero_led, pin_LED, NEO_GRB + NEO_KHZ800);

void setup() {
  tira_LED.begin();
}

void loop() {
  static byte valorAnterior;
  static int valorPico= 1;

  int valorADC = analogRead (pinJack) ;
  if(valorADC > valorPico) valorPico = valorADC;  // ajuste de "ganancia" según señal máxima

  byte valorActual = map(valorADC, 0, valorPico, 0, numero_led);  // ajustar el valor a la cantidad de leds
// primero apaga "los que sobran"
  for(int i = valorAnterior; i >= valorActual ; i--) {
    tira_LED.setPixelColor(i, tira_LED.Color(0, 0, 0));
  }
  
  //////-----Efecto rebote-----/////
  for(int i = valorAnterior; i >= valorActual ; i--) {
    tiempoAhora=millis();
    bool unaVez = true;
    while(millis()-tiempoAhora <100){
      tira_LED.setPixelColor(i, tira_LED.Color(0, 0, BRILLO));
      if(unaVez){
        tira_LED.show();
        unaVez = false;
      }
      if(valorActual>valorAnterior) break;
    }
    tira_LED.setPixelColor(i, tira_LED.Color(0, 0, 0));
    tira_LED.show();
    //if(valorActual>valorAnterior) break;
  }

// ahora enciende los que sean necesarios y que ya no estén encendidos
  if(valorAnterior < valorActual){
  
    for (int i = valorAnterior; i <= valorActual ; i++) {
      if(i < 10){
        tira_LED.setPixelColor(i, tira_LED.Color(0, BRILLO, 0));
      }
      else if (i<20){
        tira_LED.setPixelColor(i, tira_LED.Color(BRILLO, BRILLO, 0));
      }
      else tira_LED.setPixelColor(i, tira_LED.Color(BRILLO, 0, 0));  
    }
  }
  tira_LED.show();
  valorAnterior = valorActual; 

}

void mostrarPicos (){
  
}

Sin embargo, tal y como se podrá ver en el vídeo que voy a añadir, no funciona como debería. Tengo que arreglar esto y buscar como hacer la medición en dB para representar en el vúmetro logarítmicamente la señal leída por el pin analógico en vez de linealmente. Aún queda mucho trabajo por hacer y muchas cosas que afinar. @anon90500195 me quedé con eso de que eras sonidista, por lo que si tienes alguna sugerencia para hacer lo más fiel posible a la realidad el vúmetro, dispara! Será bienvenida cualquier información que puedas aportar para que esto no quede en un simple "efecto bonito". La realidad es que en temas de sonido ando bastante perdido, pero estoy intentando meter cabeza a toda costa!
Video funcionamiento del vúmetro actualemente.