SoundWire is a nifty little app that lets you listen to sound that normally comes out of your Windows (or Linux) PC on an Android device. The main use of this for me is as “wireless headphones” for listening to YouTube or movies that the PC can play without really purchasing actual wireless headphones. The data is streamed over Wi-Fi, something that has pros and cons. One of the main advantages of using Wi-Fi as transport is a large wireless range.
What you will need to have for this setup is a PC, an Android smartphone, a pair of your favorite wired headphones and free SoundWire software on the PC and smartphone. If your use involves listening to sound and watching the corresponding video on the screen (as opposed to just streaming music), then you will need to make few additional adjustments. The purpose of this is to reduce any delay (lag) between the video and sound, in such a way that they are in sync. First, make sure your Wi-Fi is working well and that you can transfer moderate amounts of data over Wi-Fi without issues. Second, in SoundWire app, click settings, “Audio buffer size” and then change the buffer size to 8k. Working with low latency will also require an Android device that supports low-latency audio (Android 4.2+ versions do that). More on why latency is important later.
The reason I decided to write about this setup is that is has a few advantages over the alternatives. The main alternative to consider in this case is wireless Bluetooth headphones or a Bluetooth adapter for regular headphones (such as Jumbl™ Bluetooth 4.0 adapter, etc). I have decided not to consider any analog solutions that were popular in the past. These are just too sensitive to interference than I would like. Here is a quick comparison between the options:
|Price||0-3$||~35$ for an adapter or ~100$ for wireless headphones|
|Prerequisite||Wi-Fi network, Android smartphone, headphones||Bluetooth support or Bluetooth dongle in the PC|
|Size||The size of the smartphone||The size of a key-chain|
|Battery lifetime||As much as you have on your phone including indication||Considerable, but can run out suddenly|
|Reception range||Everywhere you have Wi-Fi in your home||Few meters from your transmitter|
|Flexibility||Can choose your own headphones||Can use as headphones for other devices than just your PC|
Given the comparison above, SoundWire is now my preferred method of wirelessly listening to audio. The free version of SoundWire is pretty accommodating. There are ads and from time-to-time a sound notice will be injected into the audio stream. Those who find that unacceptable are more than welcome to shell 3$ for this handy app.
And now some babble on the issue of latency for the technically curious. Transferring data over the local network introduces very little latency and is not the source of a possible delay. Most of the latency is caused by having buffers in the low level and high level systems. SoundWire maintains its own buffer of configurable size. The buffer enables “hiding” any small issues of throughput drop. If there is a momentary network issue at some point, the buffer will have some data to play such that the listener doesn’t notice the issue while the system is waiting for more. Once the network is back to normal, the buffer will be filled again. On the other hand, the buffer introduces latency because data needs to be accumulated first. If you don’t accumulate anything how can you have an “extra” for later, right? For the purpose of streaming audio that needs to be in sync with video which is played without latency, we need to have a pretty short latency, this forces us to use small buffers and accept higher sensitivity to network issues. What is the ideal buffer size we should use?
Based on broadcast television standards, the recommended latency for audio to video synchronization is within +40 ms and −60 ms (audio before/after video, respectively). The audio streams that we work with in this case are uncompressed 44.1 / 48 kHz stereo 16-bit. Most audio compression algorithms will increase latency, so using uncompressed streams is preferred, although it increases throughput. A 48 kHz stereo 16-bit stream has 192KB/sec or 7.68KB per 40ms. Meaning that a 8KB buffer will bring us to a latency that is close to 40ms and is within the accepted audio to video sync. Conveniently, 8KB is also the smallest option available in SoundWire. 😉