Speakers all over the house

So, Lazyweb, I come to you for assistance. This is one of those posts where I describe what I want, I describe all the ways I’ve thought of of doing it and what’s wrong with them, you my glorious readers come up with a bunch of new ways, and then I reveal all the other conditions that I forgot to mention initially which invalidate your ideas too.

I have my fingers crossed that it’ll work better than that, though. You lot are pretty clever.

So, I have in my house a laptop running Ubuntu, a mobile phone running Meego, and a TV computer running Ubuntu and XBMC. There’s also my daughter’s mobile, running Android. We listen to music and watch TV from those devices. I would like to solve the following problems:

  1. My laptop speakers are a bit crap for listening to good music; I would like to play music from my laptop through some external speakers
  2. When I’m in the kitchen making tea, I can’t hear music being played by my phone over the noise of the kettle boiling
  3. I can’t hear music being played from my phone or sound from the TV computer when I’m in the shower either
  4. My daughter likes playing her music in the living room
  5. If I start playing music or an audiobook on my laptop and then go upstairs for ten minutes I’d like the music to keep playing but from speakers upstairs rather than the ones in my office
  6. I hate plugging cables in and out of things
  7. I don’t want sound to come from all speakers at once always

That’s the problem. Here are solutions I have thought of, along with why I don’t think they’re quite right.

Buy Sonos or Squeezebox gear or something similar

OK. This’d work, but I don’t want to do it. Partially my reasoning for this is that I end up locked in to whoever I go for — it means that I have to continue buying their gear forever if I want new speakers and so on — and partially because my distinct inclination here is to have the speakers be stupid. I don’t want clever speakers; the Sonos or whatever stuff tend to make the speakers be clever devices which know how to connect to Spotify themselves, and then you use the magic protocol to tell a speaker what to do. That’s a bad model; I think that the cleverness should be in the thing that streams the music (my laptop, my phone, Niamh’s phone, whatever) and the speaker is just a dumb speaker which receives audio somehow and plays it and that’s it. I don’t want to configure each speaker to talk to my music repository — a clever speaker has to itself know how to play all the music I want. It won’t very easily do, for example, error sounds from my laptop. I don’t have a Sonos client for my Nokia N9. Etc. Stupid speakers: clever devices. That’s my plan. I don’t want to have to use, for example, a special music player on my phone because that’s the music player which knows how to control a Squeezebox.

Raspberry Pi, pulseaudio, DLNA, and USB wireless audio

The idea here is that you have one computer — in my case it’d be a Raspberry Pi, because I’ve got one already — connected to the network. All the other devices — phones, laptops, whatever — stream their sound output to the RasPi, either using pulseaudio’s network stuff or by DLNA. The RasPi then has something like an Audioengine W3 USB wireless audio device plugged into it — the W3 is a USB transmitter and separate receiver, where the transmitter is a little USB dongle and the receiver is a powered box with a 3.5mm audio jack output on it. In essence, this is a USB-audio-to-headphone-jack adapter, it’s just wireless. So phones and laptops stream audio to the RasPi; the RasPi then plays audio over USB, and the W3 takes care of wirelessly sending that audio to speakers. This is a nice idea; it means that I can buy any speakers I like and as long as I plug a W3 receiver into them, they’ll work fine for this plan, and it means that any device in the house can play through the speakers as long as it can do either pulseaudio or DLNA, and I think anything I care about can. The flaw with this plan is that although a W3 can transmit to up to three speakers at once, I don’t believe that it can be paired with three speakers but only transmit to two of them. So this would play sound through all the speakers at once. I could avoid that by buying one W3 transmitter/receiver pair for each speaker (and then running a little web app on the RasPi which allows you to select which USB audio thing to output through, but that’s bloody expensive, and W3 transmitters are meant to be six inches apart which they wouldn’t be if plugged into a RasPi, even with a USB hub.

Many RasPis

You have one RasPi, as above, which everyone streams music to. Then you have one more RasPi per speaker; the central-RasPi then pulseaudio-streams music to a chosen speaker-RasPi over wifi. This would work fine, except that the RasPi isn’t great in this sort of environment for wifi. I’m fine with the one central RasPi being wired ethernet — I can just stick it next to the router — but the speaker RasPis would need to be wireless, and that means a wireless USB dongle. Wireless dongles draw more power than the RasPis USB port can provide, which means that each speaker would need a powered hub as well, meaning that each speaker now needs its own power cable, the RasPi’s power cable, and the powered hub’s power cable. That’s a lot of messy cables. I’m sure it’d be possible to do something clever to avoid this by taking power from multiple places or doing soldering or a bunch of USB Y-cables or something, but that sounds pretty hard.

AirPlay

I could buy Apple AirPlay-compatible speakers. Pulseaudio can stream to them, and that’d work. I’m not very keen on this idea; open source support for Apple stuff has a habit of stopping working when Apple invent a new protocol version deliberately to break third-party support for it, it’s not at all clear how I’d stream from, say, my phone’s audiobook player to them (see above about “I don’t want to have to use a special music client”), and it means that I’m locked in to buying AirPlay stuff for ever.

…other ideas

So, as you can see, I’m not totally happy with any of these. If there were a wifi-capable RasPi then I’d probably go the “many RasPis” route. Failing that, I’m not really sure, so I’m coming to the Lazyweb for ideas. Tell me how you think I should do it, and I’ll happily listen!

PS. Wouldn’t it be cool if you could just buy a little box that you plug into the speaker with a 3.5mm jack cable, and if you have five of these little boxes they coordinate amongst themselves and offer one web UI to select which speakers are powered on, and one of them becomes the “leader” and appears on the network as a DLNA and pulseaudio destination and takes care of streaming to the others? That would even be doable, and they’d be sweet — it’s basically “many RasPis”, above, as a commercial product. Sounds like a thing that might go down well on Kickstarter…

32 thoughts on “Speakers all over the house

  1. John Lenton says:

    You throw a bunch of bluetooth speakers around (or bluetooth thingamabobs for the speakers you already have), pair your devices to all of them, and make them autoconnect to the ones in range? Pulseaudio is smart enough to do the right thing wrt continuing playback, you’d probably have to write a little script for the autoconnect, but that’s fairly easy (I remember I wrote a script that auto-locked my notebook when my phone was out of range, and it wasn’t at all hard).

  2. sil says:

    I do not believe Bluetooth has the range to throw audio around the whole house, with walls in the way. Sorry, should have put that in the main post as something else that was considered. If someone knows differently — that is, that I can put a BT device in a room and then another BT device in another room two floors and a bunch of walls away and have them reliably stream audio — then that’s a great solution, but I don’t think it’ll work :(

  3. John Lenton says:

    So the device you want to stream from is not following you around the house? Ah well.

  4. Thinking out loud here as I have a current paperweight from Google I/O (NexusQ) that I need to work out someway of achieving broadly similar to you, as Google Music is rubbish in the UK, so we might need to discuss over a beer at some point!

    Assuming what ever is driving XBMC is on 24/7

    XBMC is airplay + pretty much everything else compatible, so without to much faff you should be able to use an Apple Airport express for your speakers upstairs and stream to them via XBMC (negating the Apple lock-in as you can use a cable to from Airport express to the speakers), though this does involve cables

    Get whatever else you wish to stream via to act as a media source to XBMC, such as the Android phone and let XBMC handle the room zoning

    Another option is have some NFC tags + use an Android or N9 phone that you touch as you enter the room to send some commands to your media server to turn on the relevant rooms settings

  5. Other option that involves slightly less tech and will save you a boat load of time + hassle, get a pair of wireless headphones, preferably waterproof to solve the shower use case ;)

  6. sil says:

    John, ah, I see what you’re saying. My idea was: set up everything to be able to stream to one place, then have a way to tell the one place to stream to particular speakers. That is, it’s a hub-and-spoke topology. What you’re suggesting is having a bunch of independent speakers around the house, pair all devices with all speakers, and just play from device direct to appropriate speaker with no hub at all, a sort of peer-to-peer approach. I hadn’t actually thought of that. If stuff can reliably do the handoff between speakers as I move around the house, then that actually might work really well…

  7. sil says:

    Kieran: no wireless headphones :)

    Bouncing stuff off XBMC works for music, but I can’t see how it’ll work sensibly for, say, error sounds on my laptop?

  8. Oli Warner says:

    I can’t recommend Squeezebox enough for music. Near-useless for getting system sounds out of your computer (you *could* set up a icecast radio station from your computer but ffs, just let the laptop play system sounds).

    I largely agree with what you say about wanting dumb speakers and that’s still an option (as it is with Sonos). We have a couple of SB Receivers (part of the Duet pack); one in the TV’s AV receiver and the other in a dedicated music amp. They sound superb because you can put your money where it matters.

    Of course they’re completely static so we also have some “smart” speakers. The SB Boom is a very solid (and loud) package but no battery. The Radio is a little more subtle but sounds excellent and has a battery that lasts hours. Plus Bose-levels of base out of a tiny little plastic thing.

    Unless you buy a SB Touch, you also need a server running 24/7. This controls all the players, arranges sync, proxies internet streams, etc. The RasPi can probably handle it but it might run out of RAM. It’s cross-platform Perl so runs on anything. They even publish packages for Netgear NASes.

    Additionally you can run SqueezePlay or SqueezeSlave on Ubuntu (et al) to build your own hardware. In my experience SqueezeSlave is easier but sync with real SBs is a little rusty.

    Oh yeah. Full control from Android/iOS or anything with a browser, but the N9/N900 package
    admittedly looks extremely rough.

    If you’re ever in Norfolk and want to play with it, let me know. And that’s the dodgiest sentence I’ve written all week.

  9. Thibaut says:

    Hi.

    Why not pair those speakers to openwrt devices.
    I have created a little mpd server via a little device costing less than 30 pounds Tp-Link TL-MR3020 http://ecx.images-amazon.com/images/I/21gJE18mFvL._SL500_AA300_.jpg. I think it might cost 40 pounds overall to add an extra usb sound card, a usb key of 2Go, and a usb hub. After you can do what you want. I am very happy with it because it can connect to all my music and mpd is controllable via every platform ( even windows phone). I followed the following blog to do it even if its a little bit outdated.
    http://mpd.wikia.com/wiki/OpenWRT_FullInstall

    Good luck

  10. D. Rimron says:

    I’ve been having a similar dilemma myself…

    After reading all this I think I am going to go for a homebrew solution based on SqueezeSlave with the option to add in dedicated hardware later.

    Thanks for saving me a “Lazyweb”, btw… :-)

    -Dx

  11. Peter Oliver says:

    There’s a plugin for Squeezebox Server that captures whatever’s playing out through ALSA at the time. I use this for Spotify. You probably don’t want to use this for system sounds, though. http://forums.slimdevices.com/showthread.php?49584-Announce-WaveInput-for-Linux

    Last time I tried, Squeezeplay for N900 had sufficient latency that you could only use it for playback when you were out of earshot of your other speakers. Don’t know if that would apply to the N9.

  12. Ben says:

    The Nexus Q is what you want.

  13. sil says:

    Ben: how do I stream from non-Android devices to it?

  14. Ben says:

    I don’t know if it works with non-Android devices at this time. But even if not, its just a matter of time till it will. It didn’t even take 24h till the first hack was announced.
    Its at least a far better option then the apple tv, maybe the best you can find out there.

  15. Johan says:

    How about going the “many RasPis” route, but with some other device that does have wifi?

    The MK802 for instance, or the cheapest router you can find that runs OpenWRT and has a USB port?

  16. Luke says:

    I am looking to do something similar and read about the possibility to set up RasPi to stream to a TP-Link TL-WR703N, one of the smallest, cheapest ($20), wireless, USB, Linux machines. Should be possible to plug in USB audio card ($2) or USB speakers directly. Problem is it does not seem to be stable/running yet and I cant code :(
    In theory it sounds great, if anyone wants to tackle the RasPi – TPLink setup would be great! To get started maybe have a look here:
    http://forum.xbmc.org/showthread.php?tid=113824&pid=1143183

  17. sil says:

    Johan: that is, indeed, an interesting concept. I was looking at RasPis because I *have* two, but maybe that’s the way, as Luke says with the TP-Link.

    Also, https://github.com/albertz/shairport/ is relevant to my interests, perhaps.

  18. sil says:

    Are there “USB speakers” — that is, speakers which take *sound* off USB?

  19. Steve says:

    The orbit iML227 is usb for power AND sound input. I’m looking at using Virtual Audio Cable for a very similar setup on Windows, but would prefer a linux solution using my RPi. Let me know if you come up with a good solution to multiple speakers

  20. fizzoi says:

    I think you can use X10 (http://en.wikipedia.org/wiki/X10_(industry_standard)) to make your lights and music follow you round the house. I think this is expensive, and have no more information than that!!

  21. Tolan says:

    There are usb wifi dongles that the rpi provides enough power for. I had a random cheapy G one kicking around and it works fine. Google for rpi compatibility lists.

  22. Jez Merchant-Locke says:

    Here is a guide on installing a wifi dongle that is capable of being powered by the raspi…

    http://blog.modmypi.com/2012/09/installing-wireless-usb-11n-nano.html

  23. übermusik says:

    “audio|acacia” might solve a majority of your problems (though its still in beta at the time of this post). Its essentially a software equivalent to Sonos/Squeezebox where you can use your own hardware. Looks like it should be capable of running on a raspberry pi too. Runs on Mac OS, Windows, Linux, iOS, Android, etc. No Meego though. Can even play to AirPlay devices.

    http://www.plethra.com/software

  24. anj says:

    I second that comment on using WiFi-enabled RasPis… I bought dirt-cheap Wifi dongles (bought it from this auction: http://www.ebay.co.uk/itm/New-802-11n-Mini-Nano-WIFI-LAN-USB-Dongle-150Mbps-Wireless-Network-Adapter-HOT-/290744333018?ssPageName=ADME:L:OC:DE:3160), plugged it into my RasPis and installed Squeezeplug on one and OpenELEC/XBMC on the other. Works like a charm. Only had to run the WiFi setup and the dongles worked out-of-the-box on both systems. I had a Squeezebox before and now use Squeezeplug to sync and stream audio to various rooms. The OpenELEC/XBMC system has capabilities as both a Squeezebox player (via an add-on) and for AirPlay. Very easy and unproblematic setup, only problem I ran into was that at first I used no-name power supplies that put out to little power to drive the dongle. But with any brand-name cell phone charger it works fine over WiFi, even fast enough to stream movies.
    Highly recommended, the whole setup cost me under 40 GBP per RasPi and works flawlessly.

  25. Aie says:

    I am planning to do something similar. I would like to go the Android stick way with Airplay. I like this way because the sticks are small and have wifi integrated plus they are very affordable. I already have an Apple TV I stream music (and video) to and really like how simple it is to use. Bluetooth is not convenient if you stream from different devices. There are then two possible solutions:

    - Android stick like MK802 running Android with Airbubble app to receive Airplay streams.
    - Android stick like MK802 with running Linux with Shairport to receive Airplay streams.

    The problems:
    - These sticks don’t have analogue audio out, and it is difficult to find information about USB audio working or not. Mini Xplus has analogue audio out, but I read in some forums people complaining about noise on it.
    - There are some Linux distributions available, but USB audio support has been removed from them. It seems some people have managed to add it, but I just have basic Linux knowledge and I don’t want to go that way unless there is a distro for one of these sticks that includes USB audio.

    Is there anyone out there that has managed to get something similar working?

  26. Johan says:

    Wow, this is exactly what I am struggling with at the moment… I this you are ABSOLUTELY correct in the idea with stupid speakers – the same way a TV should be stupid, if it should be smart then connect a XBMC/PS3/BOXEE/whatever to it and make it smart, that way you can easily update the smartness if needed without having to update the TV itself.

    Right now I am leaning towards solution “Many RPis”. To the best of my understanding this (sadly I have lost all links to this information, but should you want to read them it should be easy with google, I think most of it was even from the RPi forum…):

    1. Puts some limits on what speakers one can use. So far the safest bet seems to be speakers using a 3.5 mm plug, USB speakers are not always to be trusted with RPi – at least that is what I understand, eg. XBMC is not suporting them even (at this moment).

    2. There seems to be some issues with “popping” between songs when playing with “just” the RPi. Several solutions were suggested: i) The popping might be due to de/re-activating the soundcard between songs – try to allways have it ON might decrease this. ii) Use a cheap external soundcard, this seems to solve the porblem for most people.

    3. As far as I understand it I could also, in principle, buy a cheap amplifier, connect it to the RPi and then connect my existing (real – not computer) speakers to that amplifier, then I could even make use of my rather ok speakers that was connected to my HUGE stereo… This would be a cheap way of mimicing Sonos Connect:AMP, although with a much MUCH cheaper amplifier – but since I am not an audio BUFF this might work… This I have not read about anywhere, but I cannot see why it should not work…

    4. I saw that XBMC got some basic (advanced?) support for DNLA with the new release (for the benefit of those reading this in the future – that would be the Frodo release, #12), this combined with Skifta could realy be a nice solution… but since I am still waiting for my RPi I cannot test this yet (well, I guess I could try it on different computers… but I think I will wait for the RPi to show up…

    What did you end up doing? I hope that you did try the Many RPi solution in the end to let us (me) know how it worked out – perhaps you also bought a cheap (expencive?) amplifier and tried #3 above… if so did that work out as you wanted it to?

    Hoping for some feedback :)
    Johan

  27. zoomi says:

    An R-pi with USB WiFi (edimax dongle), creative x-fi usb audio and gmedia render make for an almost perfect upnp client with only two wires, power in and audio out and pretty reasonable sound quality – no pops or crackles…

    I’ve got this set up to be controlled by jriver media centre running as a server. This has the concept of zones to allow you to play different music to different devices at once or link them all to together to play the same across the house (squeeze has similar I think…)

    There’s also a nice iPad app to control it all from one place, or web based controls that work from a mobile…

  28. Cabe says:

    My current plan/plot/scheme/scam is to try and bring my RasPi into my existing AirPlay environment.

    Check out Airfoil by Rogue Amoeba. They have a $25 server app and free “Airfoil Speaker” apps for Win/OSX/iOS/Droid and most importantly *nix.

    The software is Windows/OSX and “hooks” into your apps WaveOut to then shove it over the network to your waiting speakers.

  29. Kristian Z says:

    As far as dumb speakers go, why not go “full retard” and pull speaker wire from each room in which you want audio to a “hub” where a computer and one or several amps feed the speakers? This is a really simple solution: No having to rely on several computers (RPis), no having to rely on unreliable Wifi connections (what’s more reliable than a speaker cable?).

  30. Eoin says:

    Hi Sil,

    How did this work out for you? I’m starting to plan the same kind of improvement. Very early days for me, just set up raspbmc last night for first time and learning how things might fit together.

    Which suggestions did you try and what worked/failed?

    Thx

  31. JUMARIE MOCON says:

    i have a question sir… i have a laptop and i want to play a music from it..but i want to use the speaker of my desktop

    is it possible that i could play a music from my laptop but using the speaker or my Desktop using router?
    thanks..:D

    j_mocon@yahoo.com

  32. Ray says:

    I am in the process of setting up a multiroom audio system and love getting new ideas. I’m currently running Logitech media server on my PC but plan on building a Vortex box with an old Shuttle PC I have laying around. I currently have one RaspPi with Squeezeplug (wifi) acting as a squeezebox with audio out to an old pair of computer speakers. I have just bought 2 more RaspPi’s to play with and use one as an XBMC. Trying to use anything I have laying around, I have found that my old Android phone can be great Squeezeplayer to another pair of powered computer speakers, bose sound dock (with audio in), or any other device with an audio in. I had 2 original Samsung galaxy 1 phones collecting dust and I was able to install Squeezeplayer for Android on them. I just leave them plugged in at all times and they are connected to wifi. Although this isn’t as elegant as a Sonos system, it is much cheaper and allowed me to use devices I already had laying around. With a SqueezeBox controller app on my current Android I can control the whole system.

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>