There was a time, in the late 1990s and early 2000s, when ringtones were big, big business. Songs that would play as phone calls came in on your not-so-smartphones cost about $5 to $9, though you couldn't even really play the whole song for fun, depending on your handset. I remember trying an early phone/MP3 player hybrid in the year 2000 (the Napster days) that held about 25 songs, but I couldn't use a single song as a ringtone. I had to get those separately.
By 2010, the ringtone market was falling out, and it never really recovered. But Apple still makes it ridiculously hard for the layman to create them.
For iPhone, the absolute easiest way to get ringtones (beyond the standard bunch that come with iOS) is to purchase them on your iPhone, using the built-in iTunes Store app (not to be confused with the App Store app for buying apps, or the Apple Store app for buying hardware). In the iTunes app, click the More button and then Tones. This is, essentially, a store where Apple can sell re-packaged music, cut down to 30 or 40 seconds, and formatted to instantly become your latest ringtone or text tone for $1.29 or $0.99, respectively.
To be fair, the iTunes Store also has a lot of perfectly timed clips that are great for text alerts, really short snippets of dialog from characters on The Simpsons, Family Guy, Sherlock, Star Wars, Star Trek, Minions, and more. But for the most part, it's a waste of money, especially because you can easily make ringtones yourself if 1) you already own the song (aka, not from a streaming service like Apple Music) or 2) want to buy it.
You also have the option to get ringtones at third-party sites, but this is a hit-or-miss proposition. Looking around the Web for places to download or even buy the sound files, I found most of them to be shady, ad-ware-driven, and best avoided. I wouldn't trust most of them with my credit card.
Create Your Own Tones
There are a few ways to turn music into iPhone-capable ringtones. Note that any sound file you use has to be 40 seconds or shorter to use as a ringtone (in some of the instructions below you set the length so it comes out that way).
You also need to know that tone files for iOS have to be in the M4R format. In actuality, such files are in Apple's AAC format, which generally have the file extension of M4A. You change the A to an R (for ringtone!) and then it will work with iTunes on Mac or Windows for that singular purpose (leave it as M4A and it's just another song to iTunes). The end goal is to sync your iPhone with iTunes, then all the M4R files become available to assign to contacts. You can have a different phone call or text alert for every person you know—you'll know who's getting in touch without ever taking the phone out of your pocket.
MP3 to M4R
Maybe the easiest thing to do is edit an MP3 file with software like Audacity or big commercial audio editing software down to the size you want, then convert the file to M4R. You can do this in iTunes (see below) but it's much simpler to use a quick converter like the site Zamzar. You upload your MP3, pick M4R as the output format, provide your email address, and they'll send you a link where to download the new file. In theory, you could use Zamzar to also convert the audio in a video file to an M4R as well. Then follow the instructions below.
Make M4R in iTunes
This is the tried and true way to create an M4R file, because once done, it's part of iTunes on your desktop or laptop, and thus ready to be synched to your iPhone. Note these instructions were made with iTunes 12.3; as iTunes is upgraded, the steps may vary, but they've been pretty consistent for the last few years.
First, pick a song, right click on it, and select Get Info.
In the Get Info popup, select the Options tab. Pick a start and stop time for your ringtone—you'll probably want to listen to the song a few times to pick a perfect timeframe. The time from start to stop can't be more than 40 seconds—if it is, even if you make an M4R, it won't sync to the iPhone. Put a check mark next to start and stop. Then click okay.
Now, whenever you try to play that song, it'll start and stop at those points so you need to uncheck them later.
Before that, you right-click the song again and select "Create AAC version." (If you don't see that, it probably says "Create MP3 Version." Fix it: go to the Edit menu > Preferences > General tab > Import Settings. Change MP3 Encoder to AAC Encoder.)
Do a search on the song in iTunes, and you'll now see it listed twice. It should be obvious which is meant to be the ringtone—it's shorter. Now, you have to find the file, which is simple: right-click the song in iTunes and select "Show in Windows Explorer" (for Windows) or "Show in Finder" (for MacOS). The new file ends in M4A—change that to M4R. Then double-click it, and it should launch in iTunes if you associated the extension M4R with iTunes, which you should. Or, simply drag the M4R file to iTunes—the software knows where to put it.
Back in iTunes, go into the Tones—you may not see it at first, but in the little toolbar of icons, with a music note (Music), film strip (movies), and flat-screen (TV shows) is an ellipsis menu—click it to access Tones. You'll then see all your hand-created ringtones.
Next you have to get the ringtones to the iPhone. Plug it into the PC or Mac via USB to Lightning cable, and click into the settings for the iPhone in question. On the left side you'll see all the items you can potentially synchronize; click Tones. You have to check the box at the top, then choose either to sync all or just select a few you like. It's possible you could sync ONLY your Tones and nothing else if you so desired. Make the picks, go back to the Summary tab, and select Apply to start synchronization.
Once it's on the iPhone, go into the Contacts app, pick a contact, click edit at the top, and choose either Ringtone or Text Tone. Assign the sound and you've personalized your caller with an audible ID.
Make M4R Files in GarageBand
If you don't use a PC with your iPhone, your only way to make a ringtone is, of course, on the iPhone itself. Apple's GarageBand app can do it—via the most convoluted process you can imagine (I'm sure it's not complicated all to sound engineers). You'll need to have a song physically downloaded to your Music app to be able to do this; naturally, it won't work with streaming songs from Apple Music.
When you open Garageband you're faced with a number of instrument choices. Pick any of them. At the top of the screen you'll see a View button (looks like a bunch of stacked blocks). Click it. On the next screen, at upper right, click the Loop Browser button (looks like a roller-coaster loop).
On the next screen, click Music at the top, then pick to view by album, artist, genre, playlist, or songs to find the song you want to turn into a tone. If it's grayed-out—probably for DRM—you can't use it. You have to then drag the song left or up to import it to GarageBand.
It's only going to let you listen to a few seconds of the song at a time; click the plus sign at the upper right to extend the number of bars available. You may need to re-drag the song back after this initially. Some of this is just going to require experimentation with the way sound gets edited in GarageBand; stick with it and you'll master it. For example, click on the sound clip itself, the borders around it turn yellow—then you can drag the ends back and forth to cut off or extend the start or end of the clip.
When you're happy with the clip, click the arrow at upper left and select My Songs. The clip is saved as "My Song"—tap and hold on the clip to rename it.
Tap and hold the song again until it starts to jiggle; you'll see icons appear at the top tool bar. Select the Share icon (the box with an arrow sticking out the top). You'll see Ringtone as one of the options. Click it and then hit Export. That's enough to get the ringtone saved to your iOS device for use with contacts.
If you click "Use sound as..." you'll get options to turn it into your standard ring, standard text tone, or to assign it to a contact immediately.
Make Ringtones With Apps
There are probably hundreds of apps in the App Store to create ringtones. They vary wildly in quality and abilities, but all have the same basic problem, which is entirely Apple's fault—even if they make a great M4R file for you, you have to export it from the phone, get it into your PC, put it in iTunes, then sync the iPhone and iTunes again to use it. Apple just doesn't let third-party apps get direct access like that. Most of them are very, very advertiser-driven to pay the bills, unless you want to pony up for a full Pro version.
I took my chances and downloaded one called simply Ringtones Freeby Apalon Apps. They have a pro version for $1.99 called Pimp Your Sound, which eschews the ads. It comes with a collection of ringtones and text tones you can use. The important part is the Ringtone Maker, which lets you pick songs from your library, or record sounds with the microphone to use as a tone. I found that it imported songs quickly, but gave me a minimum of 20 seconds in length—not great if you're making a text tone. (That limit didn't happen when I recorded a sound through the mic.) You can turn on a fade-in or fade-out, reverse the sound, or change the pitch.
You click save and give the file a name, and a menu comes up with quick instructions on how to get the sound into iTunes. It also offers a slideshow and video tutorial on YouTube:
The gist is: plug your iPhone into the PC and open iTunes. Click the Apps tab, then scroll down to File Sharing. You'll see a list of apps on the left that allow file sharing—scroll to Ringtones. On the right will appear a list of all the ringtones you've made with the app. Select them and click "Save to..." and put them on your PC (probably on the desktop). Once you see them, double-click to launch them in iTunes, or drag them to iTunes. Back in iTunes, click the Tones section, and you should see them. Sync your iPhone and the tones will become available.
You'll have to follow these steps with any ringtone making app, whether they have a collection of tones to download, or let you editor/create your own.