LED Strip Display Gives You Two Ways to See the Music

What to call this LED strip music visualizer is a puzzler. It lights up and pulsates in time with music similar to the light organs of 1970s psychedelia fame, but it’s more than that. Is it more like the Larson Scanner that graced the front of [David Hasselhoff]’s ride on Knight Rider? A little, but not quite.

description-croppedWhatever you decide to call this thing, it looks pretty cool, and [Scott Lawson] provides not one but two ways to build it. The business end is a simple strip of WS2812b addressable LEDs. It looks like the first incarnation of the project had an ESP8266 driving the LEDs in response to commands sent to it from a PC running the visualization code, written in Python. That setup keeps the computationally intensive visualization code separate from the display, but limits the display to 256 pixels and probably has to deal with network latency. The Raspberry Pi version both crunches the numbers and drives the display, but the Pi doesn’t have the oomph to run both the LEDs and the GUI, which is pretty interesting to look at by itself. The video below shows the different visualization modes available — we’re partial to the “energy effect” at the end.

Take your pick of hardware and throw a couple of these things together for your next rave. And if you need a little more background on the aforementioned Larson Scanner, we’ve got you covered.

[via r/raspberry_pi]

29 thoughts on “LED Strip Display Gives You Two Ways to See the Music

        1. It does more than simple FFT + smoothing, especially if you look at the experimental branch where I am using autocorrelations and more advanced filtering techniques. The most computationally intensive step is constructing the filter bank used to calculate the Mel-frequency cepstrum coefficients. In Python, the filter bank is memoized, but the ESP8266 would quickly run out of memory if it tried to the same thing. If you keep the frequency range fixed then you can work around this but you won’t be able to do adaptive frequency range adjustments.

          In the experimental branch I have made some changes that significantly improve overall performance. I went from 80 FPS to 300 FPS on my laptop. I don’t this will run on micropython, but it might be possible to run on the ESP8266 or Teensy if you ported the code to C++ (without the GUI).

        1. 1 half the leds are wasted displaying mirror image
          2 “running the visualization code, written in Python” is the main reason for the performance. Even bare ESP8266 at stock 80MHz is enough for this whole effect.

          1. “half the leds are wasted displaying mirror image’ The mirror image is, of course, part of the desired effect. But hey—I suppose you could rig up something with a real mirror if you didn’t want to “waste” the LEDs. /s

  1. Neat use of a led-bar. Everybody likes audio responding lights and such (me included!)

    Ive worked on something similiar in the form of Neon Bargraphs as a Visualizer, tough rather than use a PI i used a small ARM board (Teensy) and have it perform a Fast Fourier transformation on the analog signal fed to a ADC pin. Ok granted hardware wise that is a tiny bit more complicated than using ready to use parts (had to use a simple amplifier), but i’m still proud of it!!

    1. You might want an “omnidirectional” microphone. Look for one meant for recording meetings.
      I’m no expert by any means, so try someone at the music store or a drummer. :)

  2. I just got this working tonight. @scottlawsonbc, thank you so much for publishing all of this online!! I can’t even articulate how happy I am to have it going, and your guide on github was very well written.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s