This past week I set up Crouchhouse Radio, which is a network / internet-accessible music portal for my family. Our music (ripped CDs, downloaded MP3s, bootlegged shows, original recordings) are all available on any computer, Mac or PC, on our network. In addition, by setting up a dynamic DNS subdomain on crouchhouse.com, we can stream our music from work or on our mobile devices.
Why not just use iTunes or Apple Music?
iTunes provides pretty easy music sharing across PC, Mac, and iOS devices. Using Family Sharing, you can supposedly make your iTunes library available on other computers on the same local network. However, when I moved our entire music collection to a single computer that I intended to leave on all the time with iTunes open and sharing, it just didn’t work that well. Client computers, both PC and Mac, often didn’t see the shared iTunes library in the shared libraries dropdown.
To try and get around this, I tried sharing my iTunes library music folder as a network drive across computers and then having iTunes load this library locally. This didn’t work very well when networking between Windows and OS X computers. I suppose I could have put the music folder on Dropbox and locally read the music library on each computer, but I didn’t like the idea of putting that music media in my Dropbox and necessarily running Dropbox on each client computer. It seemed brute force instead of elegant, not to mention super clunky on a mobile device.
Apple also offers Apple Music as a service ($15/mo) where iTunes will scan your computer and allow access to all of the songs you own from the Apple Music library. This is a cool option because it’s available over an internet connection, unlike regular Family Sharing. However, I didn’t like two things about this service:
- It costs $15/mo. That’s not a small fee. That’s two Netflixes
- The music files you can access over Apple Music need to exist in the global iTunes library. This means original recordings, bootlegged concerts, or crappily-tagged music files you already own will not be accessible through the interface. As a musician with lots of not-commercially-available music files from fellow musicians, this was a deal breaker.
So what’d I do instead?
Instead of using an Apple solution, I set up Crouchhouse Radio in a few hours. It is a Subsonic media server running on one of our home PCs. With a readily-accessible web interface, all it took to customize a personalized radio for our house was to style the CSS & images (logo, background image, etc) in the interface. Once the web interface was looking like I wanted it, I created a Google Chrome Hosted Web App so that the radio could have its own desktop icon for both PC and Mac. As you can see from some of the screenshots, the chrome app lets me save Crouchhouse Radio to the launchpad on a Mac or the taskbar in Windows.
So how’d I set Crouchhouse Radio up?
- The first step was to get all my media (music & videos) onto one computer. This seemed a little scary in case that harddrive met its end, so I set up a RAID-like HDD array using Windows’ built-in (and very cool) Storage Spaces feature. This way if one harddrive dies, the files will keep existing / being served.
- One the library was centralized, I installed a Subsonic server on that computer. The installer also installed Java, which Subsonic needs in order to run.
- With the server running on a local PC, I tested reaching the Subsonic interface over the local network from another PC. The path was http://local-ip-of-server:4040
- Next, to keep the IP address of the media server the same, I switched that PC from having a DHCP-assigned IP to a static IP.
- Then, I created a few port-forwarding routes in my LAN router to allow internet traffic to reach this media server.
- At this point, the Subsonic web interface was accessible on the internet at the address: http://my-comcast-ip-address:4040
- Since I have a dynamic internet IP address, I set up a subdomain of crouchhouse.com, radio.crouchhouse.com, that forwards to this IP address. In order to do this, I created an .HTACCESS file that uses mod_rewrite to forward traffic to our Comcast IP. The IP gets updated by the Crouchhouse pinger script to stay up-to-date with dynamic IP address changes (For more on that, see the post: Introduction to Crouchhouse.).
- Finally, with a subdomain URL pointed to the Subsonic interface, I styled the Subsonic interface. To see where the files were to edit, I downloaded some custom Subsonic themes and looked at their structure. On the Windows computer I’d installed the server on, the java and image files were located here: C:/subsonic/jetty/4428/webapp
- Next I created a Chrome unpacked extension so that Crouchhouse Radio could have its own icon and run independently of the rest of Chrome. To do this, I installed the Chrome Dev Editor plugin and made a simple Hosted Web App extension. You can download this extension as a start for your own here: CrouchhouseRadioExtension.zip
- Finally, I installed the Chrome extension on the computers I wanted to have access to the radio, and set up some user accounts (the house, me, my wife, etc).
Cool things about Subsonic
- It’s free, and if you want the premium version it’s only $1/month
- You can manage users and permissions, and give people fun avatars
- You can sync multiple music streams up across devices to create a “whole house” radio
- You can play music on other connected devices through the web interface. So from Room A you could start/stop music in Room B without using any VNC software. In addition to controlling other web players, I think it can also control Sonos hardware.
- Seems to work really well out of the box
For a few days I’ve listened to music files at work that are streaming from my home network. It’s pretty cool! I’d love to hear about your similar projects / questions below in the comments!