I'm definitely loving the whole podcast thing. There is a wealth of good stuff (and some not so good stuff) available out there. When listening to a file on the iPod, if the file is an audio book (an AAC file with an m4b extension) the iPod will allow you to accelerate the file. That's definitely a handy feature. Unfortunately, you can't control how much faster you're listening to the file. I want to be able to control the amount of the time compression as well as have the pitch adjusted to compensate (not that I don't like hearing Alvin and the Chipmunks talk about IT issues). Also, if you want to use something other than an iPod, you'd probably have to do what I'm about to do as well.
Thanks to Coté I'm using iPodder to grab all of my podcasts and dump them in a directory that iTunes will pick up so I can just synch my iPod in the morning and get all that delicious content. Well, iPodder will let you run a script after downloading each file. That seemed like a good opportunity to add a script to automatically accelerate each podcast to my liking. It would also allow me to convert any MP3s to AACs if I wanted (since people tell me you can bookmark audiobooks).
I did very little research and found that SoX would allow me to speed up a WAV file and correct the pitch. It has a command line interface, thank the gods, and even a Windows binary available. I found binaries for FAAD and FAAC to decode and encode AAC files over at RareWares. I also decided to use madplay (the Windows command line for MAD) and lame to decode / encode MP3s respectively. So the plan is to take an encoded audio file, convert it to WAV, optionally accelerate it, and encode it (possibly to a new format). I'd write a script (probably a batch file since I'm on Windows) and have iPodder call it after each download. I grabbed each of the aforementioned tools and dumped them all in a directory under c:\speedster (oh, aren't I funny) and wrote speed.bat to be called from iPodder.
It took way too much effort to do this using a batch file. Batch files suck. They're a non-programmer's idea of a scripting language. It seems to be necessary to jump through all kinds of hoops to get the functionality you need. There are also terrible compatibility issues between different versions of Windows. That being said, I still wrote my glue script as a batch file. It was a learning process. I learned that batch files suck. The script should work on Windows 2000 and above as long as you have shell extensions enabled (the default) I believe.
Anyway, the resulting script can be found here. For the time being, I'm testing it in iPodder using the command c:\speedster\speed.bat .8 "%f" .m4b -short which take an audio file that is either MP3 or AAC, time compresses / pitch adjusts to 80% (seems like a reasonable value) of the original length then encodes it to audiobook format (m4b) and dumps the file back out as the original file name plus "-short" appended to the end. If all goes well I'll change that line to c:\speedster\speed.bat .8 "%f" .m4b remove -short which will do all of the above plus remove the original (only in cases where the original file differs from the output file.
If anyone wants to do the same, knock yourself out. If you have trouble getting my file to work or find corrections, by all means email me or post a comment. Unfortunately, Mac and Linux people are on their own. I'm sure Linux people won't have any problems (since their OS doesn't "just work" either) and will probably happily point out an easier way to accomplish what I've done.
I realize converting from lossy to lossless to lossy is going to amount in a lot of quality loss, but hey, as Matt Ray pointed out to me (and I think I agree), "It's just voice anyway." If you want to use this to listen to your music files even faster, you probably need help. I'm sure the batch file could work a lot better, probably doesn't handle all of the possible errors, and isn't really that well thought out / designed. Up yours, too.
Update
I think I'll drop madplay and try out the decoding built into lame–I didn't realize lame would also handle the decoding (duh). I also need to find a way to copy/edit the ID3 tags on the output file; right now there aren't any tags on the output file. If I find something, I'll probably hardcode the genre on the output file to "Speech" for easier organizing of these podcasts. If I drop the requirement to copy the existing tags, I could just do the genre tag using FAAC's or lame's built-in tagging capabilities.