Electronic – How to build an Audio Spectrum Analyzer/Sensor

analogaudioled stripspectrum analyzer

I am designing a smart RGB LED strip driver based on a Raspberry Pi and an Ardunio. The Ardunio would controll the LED strip, and other LEDs connected to a shift register, while the RPi would manage inputs and a display and would be the I2C master of the Ardunio.

One of the planned features is a kind of 'disco light': the RGB strip would change color based on the Spectral/Frequency input (i.e. blue brightness ~ bass, green ~ treble, red ~ high). There are pretty obivious solutions for this using transistors/mosfets, but I want to have software controll over the colors. What I would need is some kind of audio spectrum sensor:

Option 1: a circuit or microchip that somehow analyzes/interacts with the audio input (without distorting it, of course), and outputs some (preferably 3-5) analog voltage signal for different frequency ranges regarding to their loudness

Option 2: An IC designed/usable for this purpose: it analyzes the spektrum of the input audio and sends the bandwidth data to the Ardunio by SPI.

Option 3: A way to use the Atmega328 itself for the analyzation. The process should not be laggy or 'processor-expensive' since I have other things to do with the Ardunio.

The problem is with me; I have no experience with analog circuits, and even less with audio circuits, and honestly I have no idea how to solve this. Good guy Google did not help me out this time either, so I ask for your help.

Do you know any chip or (considering my near-zero analog experience, preferably as simple as possible) circuit that fits to one of these descriptions?

There is an overall plan of the 'disco part':

enter image description here

Best Answer

There are three ways of doing this.

  1. The Analog Method. Through the use of Op-Amps or discrete amps made from transistors and discrete band pass filters made from Resistors and Capacitors, you can make a three channel Color Organ. No microcontroller or Arduino necessary.

enter image description here

  1. The Software Method. Through the use of FFT (Fast Fourier Transform) algorithms, you can detect arbitrary frequencies in a signal, and use that to provide the LED signal. Runs completely on your microcontroller. Depending on the library you use, might need a beefier one, but there are ones that run on very low power MCUs.

ATMega8 FFT + LCD (Less powerful than Arduino Uno's ATMega328): https://www.youtube.com/watch?v=drhF_F2Xehg

  1. The pay someone to do it method. You offload the FFT on another chip. The MSGEQ7 and it's sister chips will do the FFT and multiplex the data out. The Old school National Semi (Now TI) LM3914/5/6 can be provide a simple VU meter with LED Strips, and with band pass filters could also do Frequencies. The TI LM4970 will parse the audio and will drive the LEDs directly, or with a transistor LED Strips, but can be configured over i2c.

LM3916: https://www.youtube.com/watch?v=vLYpGfShEBo

LM4970: https://www.youtube.com/watch?v=mCvn9v5jyw4