...I'm home from work.
Would an arduino be able to control this if I had the right code and a sound sensor?
INPUT -
A "sound sensor" would be a microphone.
But if possible, it's better to use a line-level signal from the sound system. A microphone needs a preamp to boost it's few-millivolt output to around 1V (approx. line level). If you want to use a microphone, you can buy a microphone module [u]like this[/u] that has the power supply circuit for an electret mic element, a preamp, and a biased output for the Arduino.
The Arduino can be damaged by negative voltages which means it can't directly handle the negative half of the AC audio waveform (the negative half of the audio signal could be "damaged"/distorted too). The simplest solution is to [u]bias the input[/u] at half the supply voltage (two equal-value resistors and a capacitor).
I use a [u]peak detector circuit[/u] which ignores the negative half of the signal and puts-out a changing DC voltage that follows the peaks. One advantage of this is that my software can read the volume/loudness at about 10 times per second instead of reading the actual audio waveform thousands of times per second. Another advantage is that my software can automatically switch to the optional 1.1V ADC reference if the signal is low. (You can't do that with the input biased at 2.5V.)
If you want to respond to frequency content (one color or one LED strip to the bass, one for the highest frequencies and others for the center frequency bands etc.), the [u]MSGEQ70[/u] that gives you 7 frequency bands time-multiplexed into one Arduino ADC input. It works similarly to a peak detector and it takes care of the negative voltage issue. The software is a little tricky, but not nearly as tricky as programming digital filters (or using FFT).
OUTPUT -
The Arduino outputs can only "power" about one standard little LED each, so you'll generally need a driver circuit.
If your LED strips have a driver built-in and a "control" input, you can directly connect an output pin to that control input.
If your LED strips only have "power" inputs for each color, you'll need a transistor or MOSFET to switch it on & off (or to dim it). Independently dimming 24 channels would be tricky because the Uno only has 6 PWM outputs and the Mega 15.
With serial shift registers you can have on-off control of an almost unlimited number of channels using only 3 Arduino outputs. I've got a serial-controlled lighting effect with 24 individually addressable on the left and 24 on the right.
Another completely different approach for "stage lighting" effects is [u]DMX 512[/u]. With that kind of setup you'd buy DMX controlled lighting and you simply add a DMX shield to your arduino (and program it). DMX is an addressed bus connection so you can control many lights over the same bus connection. (Your LED strips won't work with DMX unless you build a DMX receiver for each strip.)
SOFTWARE -
Again, software is only limited by your imagination...
I've built 3 lighting systems with the Arduino and they all have the same basic "functions". All of these only react to volume (not frequency) and sort-of to "the beat" (derived from volume changes). The modes/functions change randomly about once per minute. All of the effects can be reversed in direction, and/or inverted (where the LEDs get turned-off when they would be otherwise turned-on).
...Just to get your imagination started, here are my effects:
-
I described the flicker effect above.
-
Toggle effect that sets up with a random pattern like the flicker effect, but the lights toggle between two states, and that state is held 'till another beat or loud part comes along to switch it back. (i.e. It has two stable states, whereas the flicker effect has one stable state.)
-
A VU meter effect. It randomly operates in the "dot" mode (with one light on at a time), the "normal" bargraph VU mode, or a "dots" mode with a random number of lights on.
-
Bounce effect (Knight Rider or Larson scanner). The number of lights on is random. The "distance" is random, and the speed is controlled by the volume.
-
Chase effect. A basic chase/sequencing effect. The patterns are random. Speed is controlled by volume. Direction changes by volume/beat or randomly. There's a Johnson Counter mode where the data is inverted as it "loops around".
6 Volume Shooter effect. A sequencing effect where the light sequence "moves" from bottom to top (or left to right, depending on the physical arrangement) and the loudness determines when the effect is triggered and how many lights are triggered-on at any time.
- Beat Shooter effect. This "shooting" sequence is triggered by loudness/beat, and the number of lights-on is randomly set when the effect starts.
Like I said. all 3 of my effect systems have the same 7 basic effects above but the number of channels varies between 4 and 48 (2x24), and the output connection varies between regular LEDs and AC power.
One of my lighting "systems" was conceived as a giant (8-foot tall) stereo VU meter with 24 regular "high brightness" LEDs in a row, spaced a few inches apart on the left & right. But, since I have a microcontroller I added the other effects to keep things interesting. The LEDs are powered/controlled by a serially controlled MAXIM LED drivers.
Another "bigger" effect is a 4-channel setup with solid state relays to run AC powered floodlights. The normal configuration is 4-pair of 100W floods (4 colors). I can also plug-in 16 30W white floods (mostly for chase/sequencing effects.)
The last system is 7-channels running 28 12V lamps that came in the ceiling of my van. (The van came with the lights, and I added the sound activated Arduino controller.) This setup also uses solid state relays, although I could have (should have?) used MOSFETs.