Excuse me, but did your Cellphone just fart?
Loading WAV files and images onto cellphones for fun and well, ok fun.

So you've got your spiffer SprintPCS phone and know that you can send wav files to it, but you'd be buggered to figure out how. Well, after a bit of poking, scraping and scrounging, I've figured it out.


The first thing you need to do is configure a web server that will be hosting these files. Most webservers run Apache, and frankly that's the one that I'm most familiar with anyway. Your PCS web browser operates a bit differently than your normal one, (Ok, in the same way that a gerbil is able to run a nuclear power plant, but it's possible. Ok, let's not concentrate on that one for too long, it's starting to creep me out)

First off, you need to modify Apache to know how to deliver two types of files. One is the dowload descriptor file (or "*.gcd") and the other is the actual sound file ("*.qcp"). Ah, the true geeks are now scrambling over on Yahoo! looking for what "*.gcd" and "*.qcp" are. Patience grasshopper.

The way to tell Apache is to either modify the apache.conf file or create a .htaccess file containing the following:

AddType audio/vnd.qcelp .qcp
AddType text/x-pcs-gcd .gcd

Go RTM if you don't know how to do this or are using another server.


Now that you've got the server able to deliver the files, it's time to build them.

I've got a Samsung N400 phone from Sprint PCS. It's able to play sound files that have been compressed by Qualcomm PureVoice. So you'll need to get the PureVoice Converter at the very least, but I'd STRONGLY urge you to get the full version so you can play back your sound files before you blow bandwidth on them.

Start with a reasonably clean sound file and save it as a MONO, 8K 16BIT file. That part's surprisingly important. The PureVoice compressor will fail to properly convert any other type of format, and will not tell you it failed. It merely dumps out a crap file suitable by the RIAA to dump onto Gnutella. Play the file using the PureVoice player if you're not certain. It should sound like crap, but be more recognizable than some disjointed burst of static.

Well, unless that's what you're trying to store as your ringtone, but that's beside the point.


Now that you've got a reasonable sound file, you'll need to get it onto your phone. For that, you'll need to build the other file, the .gcd. This is a helper file that describes your whatever file. It's a pure text file and has the following syntax:

Content-Type: audio/vnd.qcelp
Content-Name: Name of the sound file for your phone
Content-Version: Version
Content-Vendor: Your 15 minutes of fame
Content-URL: Full URL to the file in question.
Content-Size: Size of file on disk.

Ok, hopefully you've figured out that you should replace the stuff in italics with the real values, if not, you're a dork. Here's a sample file anyway:

Content-Type: audio/vnd.qcelp
Content-Name: phone ring
Content-Version: 1.5
Content-Vendor: unitedHeroes.net
Content-URL: http://unitedheroes.net/phone/ringin.qcp
Content-Size: 1850

A few comments about this file:

  • Keep the name short, it's what you're phone will show to you as the file name.
  • The version is important, since newer versions replace older, but older DO NOT replace newer.
  • Notice that the url for the file has got the full path. Again, important. Also make sure that the location of the file has the ".htaccess" file in the same directory so that Apache knows how to serve the file.
  • Also important is that the Content Size match the actual size of the file.


Okey-dokey, now comes the fun bit. Copy these files to your server. You may want to also create an index file... excuse me.. You had f'ing better create an index file that contains hrefs to these gcd files. Send the URL to your phone however you deem appropriate.

On your phone, click on one of the links for the sound file. It'll take a few seconds for the phone to actually fetch it (144K my ass) and you'll probably see a warning about how this file is not safe to download. Do it anyway. It's a sound file.

You'll then get one of the following:

  • 406 Invalid Content: this means your browser didn't send the hint file as a text/x-pcs-gcd or the sound file as AddType audio/vnd.qcelp. Check your .htaccess file, apache configuration, etc. or frankly, you're SOL.
  • File Size Mismatch: You goofed on the file size, go recheck it.
  • Server Error: You either goofed the URL for the actual content or the hint file. Go check'em
  • Content Saved: Yay! Miracles really do happen! Since you probably don't want to shop or use it right away (since either option will take you off line or off the page with the other downloads, hit the Back button and get the next one.

To play the file, go to the downloads section, ringtones and prepare to annoy everyone around you. Just remember, regardless of how cute, Cellphone rings are digital farts. They stop conversation all around you, you're generally greeted with looks of distain, and people whisper about how rude you are. At least now you can actually play them.

If you're interested in downloading MIDI files, or animated PNG or JPGs, the process is pretty much the same. Just be sure to use the right content type for the gcd file.

Oh, and since you made it down this far, here's a collection of evil cell phone ringtones you can use.