My friend is a DJ and asked me if I can make some lights that flash, change colour etc when the music tempo speeds up, different pitch etc.
I have been researching and I can't determine which will be best. I plan to use neopixels.
Could someone advise which is best for me?
MIDI is for music. You can trigger lights with a MIDI file, but DJs play recorded audio not MIDI.
[u]DMX 512[/u] is a theatrical lighting standard and it's a good way to control lights but that's in addition to making the lights react to the music. If you want to make your lights and/or your lighting controller compatible with existing systems, DMX is the way to go.
With Neopixels, DMX would mean extra hardware and software on the controller-side and on the lighting-side. And there's a limited number of DMX channels, so you might not be able to take full advantage of Neopixels (which I think has an unlimited number of addressable LEDs).
So, you'll probably want to control the Neopixel LEDs directly with the Arduino and skip the DMX.
I've done 3 sound activated lighting effects controlled by the Arduino, but none of them use DMX, and I've never used Neopixels. One of my projects uses shift-register type LED drivers to individually address 48 regular "high brightness' LEDs. Another project uses 7 solid state relays, and the 3rd project uses 4 "homemade" solid state relays (opto-isolators and TRIACs) to control 4 pair of colored floodlights (or 16 smaller white floods).
I might do a DMX project at some time, but for that I would buy a couple of DMX controlled [u]Moving Head Lights[/u] and I'd just build the sound activated DMX controller around an Arduino. (You can buy lights like this with a built-in mic and sound activated effects, but I'd want to program the effects myself.)
If you want to make your lights react to different frequencies, look into the [u]MSGEQ7 chip[/u]. It does the frequency filtering for you and it also takes care of the negative half of the AC audio signal, which the Arduino cannot directly handle.
You can control lights with MIDI. There are two approaches existing on the market:
MIDI controlled devices (like dimmers) which recognize standard MIDI messages like Control Change or Note On/Note Off. Elektor magazine published also a schematic a few years ago for such a device (I was the author of the article...). You generally find this on lighting desks, from middle range to high range
Show Control devices. There is a specific extension of MIDI, called MIDI Show Control (MSC), which describes System Exclusive based protocol, to control Show Control devices, like lighting desks. However, the devices with MSC support are high end (and expensive) devices
You can also build a DMX output for the Arduino. DMX is nothing else than a RS485 serial port running at 250 kbps, with a simple synchronization protocol. You can then control anyhting with DMX input from that.
Now, I understand that you want to make the lighting fixture (using LEDs), not making the controller. That means that you are on the other side of the cable, then you have to talk with your friend to know what he wants to send to you from his setup.
As DVDoug said, if you just get audio, the MSGEQ7 is an easy solution (just note that the description of the MSGEQ7 made by MSi - the maker of the chip - is completely wrong. This chip is ABSOLUTELY NOT a graphic equalizer. It's a 7 band analyzer, not an equalizer)
Thank you very much BenKissBox and DVDdoug , this was extremely useful