Yesterday, I was surfing through the “24” tag on del.icio.us when I found a site that had the ring that CTU uses in several formats. After I remembered that I have the exact same phone at work, I decided to see if I could get this ring on my desk phone.
The first step was to figure out if this was even possible. There are a number of rings already on the phones at work, and they’re apparently fairly programmable, so I wasn’t surprised when a couple quick searches led me to a document explaining how to make custom rings for the Cisco IP phone model 7960. The file format requirements at the bottom were a little challenging, though. I wasn’t sure what to do about “uLaw compression” or “Raw PCM”, But I figured it probably wasn’t going to be extremely hard.
Half an hour later, I had two free applications: wavetools, “a library consisting of 8 programs for manipulating mono WAV files” that let me resample the file to 8000 Hz and cut it to 16080 samples (the maximum length), and AFsp, which then converted it to a raw PCM. When all was said and done, I had my ringtone in the right format. I only hoped that it still sounded right.
The next step was less technological and more political, and I wasn’t kidding myself into thinking it would be easy. The Cisco IP phones use a centralized server to get their configuration information, firmware, and (apparently) ringtones. I sent an email to Paul the phone guy, asking him if it would be a big deal. As I expected, he referred me to a middle-manager, but luckily I knew him pretty well. I asked him if it would be possible, and at first he seemed receptive, but he started to realize that it might be setting a bad precedent. I could only imagine how many people would want to have their own ringtones on there, and chances are they wouldn’t have the skills to convert it to the exactly right format.
I was concerned that this was the end of my 24 ringtone story. I emailed the PCM and the link to the author of the original page, telling him that it was untested but that I was confident it was right. Then I went home.
The next morning, in the shower (as if you doubted it), I realized: the phones just use TFTP to get all of the stuff from the server. TFTP servers are, well, trivial to set up. In fact, I know of at least one of our servers at work that’s currently running a TFTP daemon. The hard part was telling the phone to use a TFTP server other than the one that it was told to use:
- Go to Settings -> Network Configuration
- Hit "* * #". Nothing will happen, but you've just made the settings editable.
- Find the "Alternate TFTP" setting. On my phone it's #32. Set it to "Yes" by hitting the appropriate soft button.
- Go back up to the "TFTP Server 1" setting (#8 on my phone), and hit the "Edit" soft button
- Write down the current TFTP server. We'll need it later, and you should probably store it in a safe place, just in case something dies sometime down the road.
- Type in your new TFTP server IP.
- Save the changes.
Now, it was just a matter of figuring out what files I needed to get from the old TFTP server. I started my new server with verbosity turned way up, and rebooted the phone (well, I unplugged it and plugged it back in). When the phone requested files, I saw them in the log. I then used a TFTP client program to download them from the old server. I modified the RingList.xml and added my raw PCM to the directory, and rebooted my phone again.
When it came up, the ring was on the phone and looked and sounded just like any other ring.