Music Visualizer with Arduino Uno

A few weeks ago I had the idea of creating a music visualizer which I could implement in either my room or the footwells of my car. A friend recommended that I use an Arduino to help me along with my project. So I'm still pretty new as to how everything works. That being said here's what i have so far and the issues i'm running into.

First off, I'm using a MAX9814 electret mic w/ AGC for my input. ( I already set the analog input prescaler to 16 in order to read data much faster and reduce the amount of time the process takes.) Is there any way to turn off the AGC? because when music is not playing, it picks up extremely remote sounds causing noise. (perhaps i can filter out data less that a certain amplitude?)

I started off by playing around with the arduinoFFT library wich seems to do quite well. however, i couldn't help but notice that i could only easily get the 'Peak' frequency or the most dominant one at any time. I was hoping to get a peak frequency in the high / mid / lows so i can have some more options to play around with. is there any way to get the peak for a certain frequency range? thus the possibility for multiple 'peak' frequencies?

Next off, when it comes to visualizing, i'm using an LED strip of 300 WS2812B. I'm currently playing around with 10 LEDs so i don't necessarily need an external power source to allow testing. However, I did hook up a 120 Watt DC power supply to a buck converter which converts to 5V @ 20A (Lighting up the whole LED strip (which requires 90W). I assumed this would work but it causes a whole bunch of jittering in the lights (still trying figure out why).

This is where i'm sitting at the moment with quite a few questions and not many answer so I really appreciate any help and I'm hoping to be able to talk with any of you to make this project from an idea into a reality!

You can subdivide the FFT result vector into a number of frequency ranges (bands), and find the peak value from each frequency inside a band. You can map the peak values of every band differently, to get a reasonably high output swing for each band.

DrDiettrich:
You can subdivide the FFT result vector into a number of frequency ranges (bands), and find the peak value from each frequency inside a band. You can map the peak values of every band differently, to get a reasonably high output swing for each band.

Thanks for the reply!
That does make sense. I just did a little dig into the arduinoFFT's functions to try and find just how the values are stored within the vector. Its been a while so i hope i understood it correctly.

From what I've understood(correctly i hope), i'm under the impression that after calculating and reordering, the vector values are the 'amplitudes' of each frequency and that the frequencies are more or less in order (20-20KHz). so if i had a vector with 128 samples, i could divide that 128 into whatever 'sub-ranges' I want and then find the peak of each of those.

Are there any flaws in what I'm assuming / thinking of doing?

You're right :slight_smile: