SoundWire: Android as a remote speaker
I was having issues with my desktop PC and connection of Bluetooth headphones via a generic dongle. This was probably caused by poor driver support of those Bluetooth dongles in Linux, I tried two of them but the result was always the same – the headset would get disconnected unexpectedly. For some time, I was able to work around this by restarting the Bluetooth daemon and pulseaudio, after which the headset would reconnect, but what a nuisance that is. (It’s just the desktop PC that does this, all my laptops with their integrated BT worked just fine).
Unrelated to that, somebody recently pointed me out to a project called Droidcam, which essentially turns your Android phone into a camera that gets attached to your PC through wi-fi. An interesting idea, I liked the project, but apart from testing it out, I never found any use for it.
Now, it occurred to me, perhaps there’s a similar project that, in a similar fashion, turns your Android into a remote speaker – you could connect Bluetooth headset to Android phone to avoid the generic BT dongle issues. And sure enough, after just a little bit of DuckDuckGoing, it turned out that probably the most mature solution was SoundWire.
The server part, which you need to install on your PC, is not really installed in the usual way, it doesn’t seem to be packaged by any distro. In fact, it’s just a binary that you run, you only need to make sure that the dependencies that are mentioned in the INSTALL.TXT file are met first. Then you need a client that connects your phone to the PC. It can be found on Google Play (no F-Droid).
I was not getting any sound through at first, but after some amount of tweaking in the GUI volume control on the server side, I was able to find the right configuration (in my case, it was a matter of turning off webcamera device, which acted as a sound device on its own).
So, I don’t need a Bluetooth dongle to play audio now. The audio link is stable and that’s good enough for me. But one additional benefit, or maybe even a killer feature, is that when you take the phone with you, you can walk around the premises as long as you stay connected to wi-fi. It can be especially handy when you’re on a long video call (as it’s the case in these Covid-work-from-home times) and you want to grab a coffee from the kitchen, which in my case happens to be far beyond the reach of Bluetooth. The SoundWire app comes in a free and paid version, in my case this ability to walk beyond the normal Bluetooth range definitely makes it worth this small fee for the paid version of the app.
Of course, nothing is perfect and there are some limitations, too. For one, the Bluetooth headset controls like pausing or forwarding playback don’t seem to work. Also, there’s some latency, when I tried out something on Netflix, there seemed to be a lag between the video and audio. But the SoundWire documentation says this can be addressed by playing around with latency and buffer settings on the Android app side. For my use cases (listening to music or an audio call), small latency is not such a big issue.