The enclosure is just a Billy the Bass recovered from St. Vincent De Paul's for $2.30. Surprisingly, it worked perfectly. After removing the screws to get inside, there wasn't much to change. While it's easy to remove the main electronics, it's not necessary. Really, only a little bit of shaving was necessary to get the Echo to fit inside. I also removed the brass plate and repainted it. It's easy to remove with a couple screws, and can be modified however you like.
The electronics are fairly simple. I tried at first to do a purely analog solution, but the behavior logic and the audio processing made it impossible pretty quick, so I opted for an ATTiny on a small PCB I had used for a previous project (LED Icicles). There are 3 sets of wires that go into the fish; one pair for each motor to control the mouth, body, and tail. I put the tail and body wires together so they'd be controlled at the same time, and wired them through an N-Channel MOSFET to the ATTiny. I wired the mouth motor through a second N-Channel MOSFET to the ATTiny.
To connect to the Echo Dot, I tried a variety of sensing methods, but ultimately settled on a photoresistor placed up against the LED ring, wired like a voltage divider, and brought as an analog input into the ATTiny. Finally, I used the speaker out from the Echo Dot as the audio source. This speaker out went to the Billy The Bass speaker, which had great sound. I also piped the output to a cheap audio amplifier. While not necessary, it did make things slightly easier.
The Echo Dot will not fit into the enclosure complete, so I had to take the bottom off of it. This contains the speaker element, but since we're using the Billy the Bass speaker, this doesn't matter. It also allowed me to access a couple of pins which let me draw 5V from the Echo Dot and pipe it to the ATTiny and audio amplifier. This way everything is powered from the single cable coming in to the enclosure.
The code is written in the Arduino IDE and is as simplified as I could get. I relied heavily on an example of a Discrete Fourier Transform from here: http://blog.podkalicki.com/attiny13-dance-lights-with-fft/. I am sad to admit that I don't entirely understand what's happening in the code, specifically with respect to the W(N) array, but after fiddling with some of the thresholds I managed to get everything to work and look pretty decent, so I considered it a good stopping point.
Assembly had the usual frustrating hangups and mistakes. To first insert the Echo Dot into the enclosure, I had to trim some plastic. Most parts are held down with hot glue, and airwired as necessary, since this is only a one-off.
It's awesome that you were able to fit the Dot inside the case on this one. I'm glad you went with just a few holes in the microphone area as it keeps it looking stock and doesn't really give away Alexa's secret ;-)
Great hack Bob!