How are you planning to receive the audio? Naturally, you'll want a way to feed in pure audio like from an mp3 player or perhaps a phonograph, but any plans to build in a microphone? That way you could have it displaying ambient sound if there was no direct line-in audio source connected. Plus if you had music playing it would still pick that up, albeit not as good of quality as a direct input. The major downside I see with a microphone is the audio will only be as good as the microphone you choose, and they can get pretty expensive when you start to consider things like consistent frequency response and having a -3dB bandwidth in the full audible range.
Really looking forward to seeing how this project turns out, and have enjoyed reading parts 1 and 2. Will stay tuned for part 3...
Depending on whether you decide to go mono or stereo, and how many bands you want to display, something like the MSGEQ7 graphics equalizer display filter IC seems like a popular option though it only handles seven pre-defined frequency bands. Another possibility would be compute as many bands as you like via a FFT but that takes quite a bit of processing power either in software or hardware. It might be practical to create your own set of bandpass filters if you want more bands than a pre-built filter like the MSGEQ7, though that could get expensive too.
You've already been working with NeoPixels (and have zapped a few yourself) so I don't have to tell you they can be somewhat tedious to use and are quite timing sensitive. They are spectacularly bright too, so if you're going to drive them with a full 60mA you may need folks to wear sunglasses.
@Disquisitioner: Really looking forward to seeing how this project turns out, and have enjoyed reading parts 1 and 2. Will stay tuned for part 3...
I'm looking forward to seeing how it turns out also LOL.
Re your suggestions, it's like you are reading my mind... I'm bouncing around all sorts of ideas.
I plan on posting Part 3 either tomorrow or Wednesday -- also I'm going to be hosting an online chat this coming Friday at 10:00am Pacific (noon my time) and thsi will be one of the main topics of conversation -- I'll be posting a blog about that chat later today -- I hope you can join us for it.
Regarding a question in Part 1, the "floating dot" type of display is called a "peak hold" display in the audio engineering world, typically in reference to a broadband level measurement (i.e., one meter for each channel, e.g., L & R for stereo). Quite a few digital audio workstation (DAW) apps implement something like this (with hold times that may vary in length, or "infinite" with a manual reset of the hold); even more audio plug-ins implement it. The latter use nontrivial algorithms to compute the perceived broadband loudness (the nontriviality is in both the spectral weighting and the time averaging); there has been quite a lot of recent work on coming up with good algorithms (do a web search on "loudness" at AES.org to get some idea of this). Again, this is usually in reference to broadband measurement.
You may find it amusing to know that some of the plug-ins that do this with just one bargraph per channel cost as much as (or even more than) the hardware unit that inspired your BADASS adventure. Two well-regarded examples are:
There are also some freeware (and possibly open source) plug-ins for this that might offer algorithm ideas for borrowing.
Regarding getting the levels without an FFT, if you are willing to work in the analog realm, Rohm makes chips with multiple bandpass filters specifically for this kind of thing. Their web site doesn't list them (the ones I knew about appear to be out of production), but their 2014 Audio-Video product listing PDF file lists two parts (BA3834F, BA3835F); the PDF is here:
@TomAtMuse: You may find it amusing to know that some of the plug-ins that do this with just one bargraph per channel cost as much as (or even more than) the hardware unit that inspired your BADASS adventure.
Teffifying, more like :-) One of the solutions I've been pondering is to make something on a per-channel basis so someone could implement as few or as many channels as they desired ... watch for Part 3 (I'm really hoping to find the time to write that today)
@Disquisitioner: You've already been working with NeoPixels (and have zapped a few yourself) so I don't have to tell you they can be somewhat tedious to use and are quite timing sensitive....
Zapping them was my bad for not taking ESD precautions -- but I have to say that they do seem to be a tad sensitive in this regard. Using them has proven to be really easy with the help of the Adafruit libraries and examples. However, I wish Adafruit hadn't used low-level Atmel CPU calls in their code -- by doing so they've locked things down so you can only use Arduino Unos aor Megas with the 16MHz clock -- I really wish I could use a chipKIT equivalent with a 32-bit processor and an 80MHz clock and oodles of memory.
It's the same story with theor motor controller shield -- it's a great shield that allows me to drive 4 DC motors ... but even though it's I2C it only works with Unos or Megas because they use low-level Atmel CPU bit twiddling in their code (sad face)
@SandorD: Mentioning retro, you could use one (or two for stereo) magic eye/cat's eye/tuning eye tubes. You can't go much more retro than that!! :-)
They do look tasty (as seen in this video) -- these woudl have been so amazingly cool "back in the day" -- but I have a different vision in mind for the first incarnation of my display ... watch this space LOL