Or at least part of it.

Imagine that you are watching a movie on your laptop and have a 5.1 Surround Sound setup on your desktop. You would use EsounD to use the desktop's sound card and speaker and enjoy the experience much more.

Now imagine you feel like going down to the kitchen to make some popcorn. You'd have to pause the movie, go down, make the popcorn, go back upstairs and resume the movie by which time you've already forgotten what was happening. You have a laptop, so you decide to take it to the kitchen. The problem now is that the sound is still coming out of your desktop[0] and even if you turn the volume up, it will sound distorted.

Now you think about changing the output device to be your laptop's speakers, but they're bad and it'd require you to change the EsounD server to be used, restarting the movie and seeking to where you were.

At this point you either put a microwave oven in your room or look for a way to change the EsounD server on the fly. This is where my newest project comes in.

It consists of a pass-through EsounD-compatible daemon which changes the final server on demand and several control programs from which you select where you want the sound to come out of. You could put a computer in the kitchen and not lose sound quality whilst still being able to move around. It's also a good way to annoy the hell out of someone by making sounds come out of random parts of the house. It'd be expensive, but may be worth it.

It's not a new idea, in fact I got the idea from someone in planet #lugradio, but I don't know of any program that actually does this.

At the moment I have the GUI and part of the server. The GUI is ugly and its code a mess, and not just because it's written in Perl. It still doesn't talk to the server, but I haven't finished writing the control module, and I may still change my mind about the control protocol. It will definitely need to be enhanced with some authentication, but I need to get it to work first. The server has about 1/4 of the control module written and nothing else, but I have ideas on how the rest should work. I may need to add some filtering to the listener module, but that's once I figure out how the ESD protocol works.

In related (in that it concerns me) news, I passed my driving test and am now waiting to receive my full license in the post. Now I'm off to bed and I'll explain the horrible things I'm planning to do with semaphores some other day.

[0] This assumes your laptop is connected to the network via a wireless link (or you have a really long network cable or a really small flat).