I also have this LED strip with Controller .
Are those red, blue, and green LEDs spaced-out so they can be chase-sequenced? The LEDs are not individually addressable, right?
I've done 3 sound activated lighting projects with the Arduino. They are all similar, but one runs 4 channels of AC floodlights (4 colors), one is 7-channels and it runs 8 strings of 7-lamp rope lamps in the ceiling of my van. The 3rd one is stereo with 2 x 24-channels running two "strings" of LEDs (each of the 48 LEDs is individually addressable via serial shift-register control).
All of these effects are activated by "loudness" (not frequency). I use a [u]peak detector[/u] to convert the audio signal into a varying DC voltage that follows the peaks. The RC time constant is about 1/10th of a second and I read the voltage about 10 times per second or faster. (With the peak detector I don't have to read the actual audio waveform at thousands of times per second.) The peak detector also throws-away the negative half of the waveform so you don't have to worry about negative voltages, which the Arduino can't handle.
I power the op-amp circuit with dual (positive and negative) power supplies so that the output of the peak detector goes all the way to zero (when there is no signal or a very small signal).
There are other ways of handling audio and the negative half of the waveform. The simplest solution is to bias the input to 2.5V with two equal-value resistors, and isolate the bias from your audio circuit with a capacitor.
...like and Aux cable or stored music.
Line level (or loud-headphone level) is about 1V, and that's about right. I switch automatically between the default 5V reverence an the optional 1.1V reference depending on what the ADC is reading. (You can't use the 1.1V ADC reference it you bias the input at 2.5V. ;) )
I also save a reading once per second in a 20 element circular buffer (see the smoothing example). I find the peak and average in that array/buffer once per second every time it's updated. Depending on the particular lighting effect, I use either the average or the peak as a software reference.
My simplest lighting effect sets-up a random pattern and then changes (or toggles) the state whenever the loudness is greater than average. This will also work with only one LED/light. There are two options, in one mode the LED is on whenever it's louder than average (or off when the logic is inverted) The other option/mode "flickers" the LED on & off when louder than average and then just stops and holds in the on or off state when below average.
I have a couple of different chase-sequencing effects. In general, I just throw-out a random pattern (neither all-on or all-off) and then I shift it left or right. Sometimes the speed is controlled by the loudness, and sometimes I change direction with the loudness (or approximate beat). The state of the LEDs is stored in a byte with each bit representing the state of one light/LED. Shifting simply is done by bit-shifting (and "rotating" which takes a couple of extra steps).
Here are a couple of examples of 4-channel bit-shifting...
Or the same thing with a different starting pattern...
There is also something called a Johnson Counter that looks like this...
I've got an effect that "injects" a zero of one into the start of the sequence depending on the loudness... If there is "lots of loudness" most of the LEDs are on as the patter sequences from one end to the other, and when it's quiet most (or all) of the LEDs are off as the sequence moves-through.
I've got a "bounce" or "ping-pong" effect, and a "Knight Rider" effect where there is constant back-and-forth motion, but the speed depends on loudness. There can be one or more LEDs/lights on at a time with any of these back-and-forth effects.
All of these effects (plus a couple more) run randomly, changing every minute or so to keep things from getting too boring.