The core of NetStereo is the server, which runs on a computer with a sound card and plays music, primarily MP3s. What makes the NetStereo server special is that it accepts commands from remote clients. The clients are stateless and can be connected and disconnected at will. The server continues to play until either it runs out of songs in the playlist or is told to stop. New client connections are fed the current server status so they instantly can see what the server is doing (what playlist is loaded, what song is playing, time elapsed, etc.)
The server is written in Java, with the ability to plug in various methods of playing songs (mpg123 and the Java Media Framework currently) and various methods of communication (network and serial currently).
I do most of the development in Linux, but last I checked both the server (using JMF to play songs) and Java client work fine in Windows.
If you are interested in writing a client, here's the protocol.
I use it in two places. First, I have a PC running Linux in my stereo rack at home. It runs the NetStereo server, and frequently also runs a copy of the NetStereo Java client. The PC has a video card with TV output that I can switch to and control using a wireless Logitech keyboard and trackball. I control this instance of the server either through the Java client running on the box or from the Java client on another computer elsewhere in the house.
The other place I use NetStereo is in my truck. I have a Micron XPE laptop running Linux mounted behind the seat running the server. I control it with the Palm client. More details on this setup coming soon.
All code is licensed under the GNU General Public License.
Related projects maintained by other people:
Java Swing client in Linux
Java Swing client in Windows
Palm client