The Problem
After about a year of enjoying how well my Ubuntu Linux home server downloads, organizes, and serves video files to my TV, I started to think harder about serving up music to devices around the house, and to my phone and/or PC while I’m at work. In the past, I’ve made my music library available on my home network via MediaTomb, minidlna, and Samba, but I never made use of it. Instead, I always used iTunes, which is good software, but very limiting.
In December, I realized two things:
- I almost never sync my iPods to my computer anymore, because they charge in my car or in my home stereo’s dock.
- I also never use my Android phone to listen to music, even though it is perfectly capable, because I never wanted to bother to get the USB cable out for my phone, and I haven’t found any software that I like to sync with.
My problem: syncing. I hate it. It is passé and worthless when everything is network connected and your music collection is vastly larger than what a reasonably-priced amount of flash memory will hold.
Around the same time, I received a Cr-48 from Google. It runs Chrome OS, which can play audio via the browser (Flash or HTML 5), but that’s it. I thought it would be an interesting challenge to find a good way to play my music library on it. I also wanted to store my library on my power-efficient Ubuntu Linux server, so I wouldn’t have to leave my power-hungry desktop on all day.
Searching for a Solution
I found two highly respected options that would allow me to stream music to a browser or other device: Ampache and Subsonic. Ampache is built on top of the LAMP stack, so it requires Apache, MySQL, and PHP, which a ton of Linux servers have installed on them. It has a good number of features, too, including an Android client and front-end support in Amarok and WinAmp. I ended up not liking it, however, for two main reasons: The system requirements are rather high, mostly because it depends on MySQL as a data store. Also, indexing my 80 GB music library was very slow.
What I ended up preferring, and falling in love with, was Subsonic. Subsonic is a Java app, which you can install either as a standalone Debian package in Ubuntu, or as a WAR file that you can run under TomCat or another Java Server. It runs on any host OS that supports Java, so Windows and Mac users can run it too. Subsonic scanned my music library surprisingly quickly, looks great, and worked right away. I have it installed under TomCat, and configured to use SSL (for security and to disguise my music downloading/streaming from network administrators).
Subsonic
Subsonic offers a somewhat complex, but attractive and skinnable, web interface. It offers playlist support (though not smart playlists as in iTunes), random playlists, search, and support for album art and metadata (including a tag editor). It is far more album-oriented than song oriented, which took some getting used to moving from iTunes. For example, albums can be rated, but not individual songs. Also, the home page on the interface defaults to random albums, which looks nice and pretty, but differs greatly from how I use iTunes. I really like the feature, though, because it allows me to rediscover music that has long been buried by my iTunes smart playlists.
Playback in the browser is done via an open-source Flash plugin, which works fine. Album art must be embedded in the files, or at least stored at the folder level, which was initially a challenge for me due to the way iTues handles album art in its library. I used MediaMonkey to help get my album art into shape. The server can be set up to transcode music in formats such as Flac to MP3 or AAC to support the client player’s capabilities and to limit bandwidth.
Subsonic doesn’t really stream your music; it downloads and caches it. The browser client caches the song you are playing, while the iOS, Android, and Windows Phone 7 clients will cache a number of songs ahead of the current one. Caching is way better than streaming, because you don’t need a constant connection to the server. It works really well. The server has a “Status” window in which you can review all the connected clients and the bandwidth they are using, which is pretty cool.
Subsonic is free and open source software, though it does have a somewhat controversial donation requirement if you wish to use it via a phone app. You can connect to it via a web browser indefinitely, but if you use the Android app, as I do, it will tell you that you must donate to the project/developer after 30 days, or it will refuse to access the server. After seeing how well the Android app worked, I donated right away. Remember, even in the open source world, it is a good idea to support good developers.
By creating multiple user accounts, you can also use Subsonic to share music with friends and family. If you configure the server with SSL, you can do so securely and privately as well. Users can be given access to download and upload music, so it could become a music sharing platform for you and your close friends that flies under the radar.
All in all, I love Subsonic and recommend it to anyone who has a large music library that they wish to bring with them and share with close friends.

