Stream music anywhere in your house with these WiFi speakers

[Rui] needed an easy way to play music in several different zones from one centralized location, but he didn’t want to run any new wiring in the process.

He figured that the best way to do this would be to stream his music directly to his speakers over Ethernet. Earlier this year, he put together a handful of Ethernet-connected speaker nodes using a few Arduinos equipped with both Ethernet and MP3 shields. To interface with these speaker nodes, he wrote an application utilizing VLC’s network streaming engine. This software monitors his network for newly attached speakers, adding them to his inventory automatically. He can choose to play music on any set of speakers using a multicast audio stream.

The setup was pretty slick, but what about locations that didn’t already have Ethernet drops? He thought of that too, revising his design just recently. The newest set of speakers he constructed ditches the Ethernet board for a Wifly shield, all of which he crammed inside the speaker cabinets. Now, he has the ability to stream music anywhere he’d like, no matter what sort of infrastructure is in place.

If you have a need to do this in your home, [Rui] has made his software available for free on his site, so be sure to grab a copy.

27 thoughts on “Stream music anywhere in your house with these WiFi speakers”

I wonder how much much this project costs to stream 32kbps audio? I get that hacks are way more fun than buying something off the shelf, but in this case that would be better and probably cheaper. Apple’s Airport Express is $99 and streams CD-quality audio over Ethernet and wifi, and there are even open-source streaming apps now that will run on your OS of choice.

On the other hand, I can’t point at my Express and say that I built it myself. Doing that was pretty cool. :)

this is one step closer to those commercially available media players that cost…a lot. At some point i wanted to have music in the bathroom and decided to send the music via stereo fm radiov(there is a simple stereo modulator with an avr).
That would be cheaper and simpler. now moving to ether/inter net, there is a way to make aj internet radio receiver with a router. that might still be simpler/cheaper.
anyway, the best way to make things would be to make a device that can read a shared storage and not rely on streaming….

Neat project – but it doesn’t look to be doing much in the way of buffering (unless the Ethernet library handles that). I think it’s actually transferring data from the Ethernet Shield to the MP3 Shield one byte at a time – and using digitalWrite to change the CS lines of the SPI devices.

Using some of the ATMega’s RAM, or maybe adding one of those 32KB Serial SRAMs from Microchip, might help make higher bitrates work. There are probably some serious performance gains to be had replacing digitalWrite with a direct port write as well.

The VLSI VS1053b decoder can handle high bit rates, and I believe the ATmega168 has the beans to move more data from the network shield to the mp3 shield. So, I’m guessing the 32kbps limit is a software issue, either in the PC server code or the Arduino.

He still needs to provide power to the speaker location. I don’t see why it was easier to send the signal wireless and provide power at the speaker than to fish some wire in the attic to power
the speakers.

The first annotation in the video states that the batteries used to power the speakers also power the circuit. Even if it did still require an external power source, this is still a much more portable solution.

from what i remember form some projects with ethernet a data rates of over 100kbps is achievable with an enc28j60, so there shouldnt be any problem achieving better quality. it might be a limitation with the arduino libs, they tend to be poor in terms of serious implementation.

the best way to make things would be to make a device that can read a shared storage and not rely on streaming
Who defines what’s “the best” for a specific location/setup?

I’m using multicast for most of my audio and video, because it just works. This does matter when your streaming 7 TV channels to a network (and 8x radio + 2x ‘MPD’ = 10x radio).

Oh, and the multicast stream can be restarted on the multicast-host (or temp. connection issues), without any issue on most clients. You’d see a flicker or still image for a few microseconds (or ‘no sound’ in case of radio).

The best does not exist. Only the best for YOUR situation/requirements (and maybe knowledge).

How does this deal with the desyncing effect inherent in multiple speakers at various distances all playing the same sound at the same time due to the speed of sound through air, the delay induced by distance and echos / various speeds of sound wave reflection? Disney addressed and fixed that long go – you just hear a constant level of sound no matter where in the park you go (that has speakers). My method of solving the multiple speaker over ethernet problem was solved by using VLC but streaming (multicasting) over to individual atom based PCs. Yes, it somewhat like using an arduino to flash a led but damn it, $120 or so each CPU plus speakers gives you $200 or so per “speaker”. Plus you have the extra CPU available if needed for other things – and a full linux OS to boot. Takes more power to run though.

If I had the time I would still like to try this using a PIC32, that microcontroller can decode MP3’s in software. You would need a wifi chip or use a PIC32 with build in ethernet controller. Output the decoded sound on two PWM channels with some low pass filtering. Cheap and reliable wireless sound. The PIC32 has enough RAM for buffering on chip enough power for decoding at least 192kbps streams.