When I got my new iPhone 3G last week, the first thing I tried to do was to put a few custom ringtones on it so I could have something different to my coworkers – we’ve all got iPhones thanks to the fact that my company lets us have them at cost, which is nice, but when one phone goes off everyone reaches for their pocket.
Initially I couldn’t see a way to do it. There’s no way you can just right click on a song in iTunes and ‘convert to ringtone,’ and when you search for ringtones on the iTunes store, you get a stack of horrible noises not worth spending money on. Not to mention the commercial software out there to convert tones for you. I ended up Jailbreaking my iPhone so I could scp the files straight to it.
But there is a way to convert your songs. It’s quite simple, and doesn’t require any extra tools or money to be forked out, and doesn’t require jailbreaking.
It’s pretty easy actually. Start by finding the track you want to use in iTunes:

Right click, select ‘Get Info,’ and go to the ‘Options’ tab.

Right. See how the start and end time are 0:00 and 1:02 respectively? Ringtones can only be a maximum of 30 seconds long, so change the 1:02 to 0:30 like this:

You don’t have to set it from 0:00 to 0:30 if you don’t want to. It could be from 3:23 to 3:53 – just as long as it’s no more than 30 seconds long.
Make sure both boxes are checked, and press Ok.
The song looks the same, and has the same total time, but if you were to play it, it’d cut off at 0:30. Now right click on the song and select ‘Create AAC version.’

A new track will be created which will be exactly 30 seconds long. Drag this file out to your desktop, then delete it from iTunes.

Rename it from .m4a to .m4r. Notice how the icon now says ‘ring’.

Now drag the track back in to iTunes, and it’ll appear in the ‘Ringtones’ section like this:

Sync your iPhone, and you’re done!