thanks to recent nautilus (I assume is responsible – as seen in Ubuntu Lucid Lynx) ability to view the iPhones file paths, we can try this (typing this as I go, so this is draft on-the-fly quality notes)
* create an m4a file (I made mine exactly 40seconds according to audacity and saved as a .wav, then used faac to convert to m4a (faac in.wav –title “ringtone experiment” -o tone.m4a ; mv tone.m4a tone.m4r)
* copy tone into iPhone://iTunes_Control/Ringtones/tone.m4r
* edit iPhone://iTunes_Control/iTunes/Ringtones.plist to add in the details of the new ringtone. Fortunately I had an existing one already, so I just copied that – updating the GUID (I changed one character), the Name (“funky new ringtone”) and the Total Time (40000) fields.
…and bingo, the ringtone is visible in the settings (selectable, plays), but does not lock in as the ringtone to use! ok, clearly some work needed.
incidentally, this is a 32GB iPhone 3Gs with iOS4.0.2, never been jailbroken or anything underhanded done to it before. It was unlocked from the carrier a few days ago (thanks .au law) and that required a lengthy restore, but otherwise smooth.
…ok, so back to it: plugged it into iTunes (Mac) – it couldn’t read from the device (an error!)
…rebooted phone – and the new ring tone now works correctly. YAY! =) is this success?
…plugging it into iTunes again and… it’s all “Verifying iPhone” at me – something I don’t generally recall. …ok, it’s backing up as normal now…
and the ringtone tab in iTunes tells me it doesn’t know about the tone I added in, it’s syncing, so I suspect it’ll delete my added tone…
…and checking in my iPhone after it’s done, what do you know – my custom added ringtone is all gone. Checking back via linux – and the tone.m4r file has been deleted, Ringtones.plist has been completely rewritten.
So, I assume (not surprisingly at all) that iTunes needs to know about it, as the authorative master, and tell the iPhone how it’s gonna be. This fits with my observed philosophy of the iPhone – as an adjunct to the master information on the computer.
so, round 2… I add the m4r into the iTunes library – it automatically adds it in as a ringtone – that’s nice. I assume iTunes assumed it was a ringtone by the file extension. And in the iPhone tab it shows up as available to be sync’d… and bingo. it works.
ok, so not a pure linux solution – unless you never sync your phone to iTunes anyway – but it DOES let you make a custom ringtone without requiring garageband. That’s something isn’t it?
And I assume the method would work under windows too… anyone want to give it a go and get back to me?