MP3 Geekery and Modem Lessons
I keep all of my music in MP3 files (when I get a CD I rip it and put the original CD away). With the right playback software this makes it much easier to listen to my collection. Otherwise I’d have to flip through about 500 CD’s to find anything. It also lets me listen to the music on a variety of players, from my iPod to my Slim Devices Squeezeboxes.
I bought the original wireless version a little over three years ago. Since then I’ve upgraded to the latest version (the v3), but the original one still lives in the bedroom for streaming net radio. The thing about the Squeezebox is that it’s highly expandable. The Squeezebox itself is just some decoder hardware with a CPU, networking hardware, and a display. The main logic is handled in the server. Slimserver is written in Perl, has multiple API’s for expanding its function, and is open-source so you can modify it as much as you like. In fact, you can use it even if you don’t have a Squeezebox. It does basic MP3 streaming to any player that can connect to it (such as WinAmp, iTunes, or Windows Media Player). If you set up your home firewall right, you can access your Slimserver from anywhere you have Internet access and stream your music to that location (I’ve done this on business trips, using WinAmp on my laptop through the hotel’s Internet connection).
Anyhow, by adding plugins to Slimserver, you can stream other information on the Squeezebox while it’s idle, such as stock quotes, sports scores, or weather. I do this for the one in the living room, which is constantly streaming current weather conditions and the forecast for the next day using the SuperDateTime plugin:
Another neat feature is that they also provide a Java-based software version of the Squeezebox, called SoftSqueeze, which you can use as an emulator. I used SoftSqueeze for the above screenshot.
Early this week I was fiddling around on the site and came across instructions from someone who used Linux and a modem to get Caller ID on his Squeezebox display. Since I had a couple of old modems laying around and a Linux system running for my scanner stream, I figured this should be pretty easy to get going. Since the COM ports were already being used by the UPS and the scanner, I plugged in a USB-Serial adapter. I was amazed and how easy it was, as SuSE 10.1 auto-detected the device as /dev/ttyUSB0 and I was quickly communicating with the modem using minicom. This is where I ran into a lesson on modem chipsets and how they’re implemented in various modems.
There is a fairly standard AT command for enabling Caller ID, and almost all chipsets support it. Unfortunately, they also require some special circuitry on the modem’s board. Without that circuitry the chipset can’t read the CID information without taking the line off hook. So even if you query the chipset for CID support, it effectively lies to you by saying that it’s available, even if it isn’t. Since neither of my old modems would work, that put a bit of a snag in my plans for quick and free CID display. After some confusing research into which modems really support Caller ID, I found a model on eBay for $15 including shipping.
Once I had the new modem, I decided I didn’t like the idea of having a mgetty running on the line, and since I don’t need to use it for calling out, I decided it’d be easier to just use a dedicated program to monitor the modem. I found a script online that someone wrote using Perl and modified it slightly to format the Caller ID info and invoke the script that was used in the mgetty example.
So now my Squeezebox players display the Caller ID when someone calls and they automatically lower the volume:
My next project will be to add the IRBlaster that lets the Squeezebox control my receiver. This will allow me to set up the Squeezebox (through an IR plugin in the Slimserver) so that when I turn it on it automatically turns on the receiver and changes to the correct input (and turns the receiver off when I turn off the Squeezebox).