Create ringtones out of WAV and MP3 files on Linux
If you have one of those old Nokia phones that only allows AMR files to be used as ringtones, here's a short recipe to create them.
As long as you have a WAV or MP3 file, the SoX package, and the GStreamer gstreamer-plugins-ugly package installed, you can use these scripts to convert from MP3 or WAV to AMR, and back from AMR to WAV. Perfect for creating ringtones for your mobile phone out of sound clips or favorite songs!
The wavtoamr script:
#!/bin/bash
if [ "$2" == "" ] ; then echo "usage: wavtoamr wavfile amrfile" exit 1 fi
midwav=
mktemp /tmp/wavtoamrXXXXXmidamr=mktemp /tmp/wavtoamrXXXXXsox "$1" -r 8000 -c 1 "$midwav.wav" avg resample && gst-launch-0.10 filesrc location="$midwav.wav" ! wavparse ! amrnbenc ! filesink location="$midamr" && echo '#!AMR' > "$2" && cat "$midamr" >> "$2" rm -f "$midwav.wav" rm -f "$midamr"
The amrtowav script:
#!/bin/bash
if [ "$2" == "" ] ; then echo "usage: amrtowav amrfile wavfile" exit 1 fi
tmpfile=
mktempdd if="$1" of="$tmpfile" bs=1 count=10000000 skip=6 && gst-launch-0.10 filesrc location="$tmpfile" ! amrnbparse ! amrnbdec ! wavenc ! filesink location="$2" rm -f "$tmpfile"
The mp3toamr script:
#!/bin/bash
if [ "$2" == "" ] ; then echo "usage: mp3toamr mp3file amrfile" exit 1 fi
midwav=
mktemp /tmp/mp3toamrXXXXXgst-launch-0.10 filesrc location="$1" ! mad ! audioconvert ! wavenc ! filesink location="$midwav" && wavtoamr "$midwav" "$2"
rm -f "$midwav"
To convert, just run the appropriate command against the file you want converted.
Homework for you: improve error handling and make it work without temporary files -- that is, with standard input and standard output pipes, and redirecting output from the invoked commands to standard error. Don't forget to send me the improvements!