If you have Verizon like i do, what u can do is this:
1. Find a dope mp3 u dig and cut it down to 20 seconds (usually the hook) and export it as a new file.
(The phone will have a limit to 500k so keep the file below that)
2. Next either send the mp3 to your phone via bluetooth from your computer or through a usb cable and transfer the file to your microSD card.
3. Make sure to put the mp3 in the "Sounds" folder inside your SD card.
4. Next, send your yourself a PICTURE MESSAGE.
5. If you scroll down in the picture message dialog there is a spot for "sounds".
6. Navigate to where your sound is on your card and place it in your text message.
7. Send the message to your self and wait for it to arrive.
8. Once you recieve the message a new option will appear in your OPTIONS dialog while viewing your message that says "SAVE AS RINGTONE". (This is the only way to get this option in the options menu and is limited to only the newer phones they offer to my knowledge).
9. Save the file and you got a new ringtone virtually free of charge minus the very small fee for data transfer across your network!
You can prob do this with other networks too, but this is the only way i know how to get free ringtones with Verizon since their shysty bastards.