Question

I have a directory with about 50 wav files that I need to convert to caf, because AudioServicesCreateSystemSoundID() returns an error for some of them (but not all).

Here's an example of the command I've used successfully for a single file:

afconvert -f caff -d LEI16@44100 -c 1 whistle.wav whistle.caf

How do I do this quickly - not one-by-one for each file?

Was it helpful?

Solution

On Windows, use the %~ni syntax.

for %i in (*.wav) do afconvert -f caff -d LEI16@44100 -c 1 %i %~ni.caf

OTHER TIPS

Similar approach for bash: for i in *.wav; do afconvert -f caff -d LEI16@44100 -c 1 $i ${i%.wav}.caf; done

found this:

##
## Shell script to batch convert all files in a directory to caf sound format for iPhone
## Place this shell script a directory with sound files and run it: 'sh converttocaf.sh'
## Any comments to 'support@ezone.com'
##

for f in *; do
    if  [ "$f" != "converttocaf.sh" ]
    then
        /usr/bin/afconvert -f caff -d LEI16 "$f"
        echo "$f converted"
    fi
done

Customize the aconvert options then save it as a text file called 'converttocaf.sh', place it in the directory of files you want to convert and run it from Terminal.

It works with files with spaces in their names.

for file in *.wav; do afconvert -f caff -d LEI16@44100 -c 1 "$file"; done

Hit the Return key directly after done.

Simple :)

For the people who are using OSX and are a bit afraid of Terminal scripts I created a little application with Automator, this application converts the files you select.

Download here

If you are dealing with filenames that contain spaces on Linux, try the following code:

SAVEIFS=$IFS 
IFS=$(echo -en "\n\b"); for i in *.wav; do afconvert -f caff -d LEI16@44100 -c 1 $i ${i%.wav}.caf; done

Python script on OSX. Default data format of the .caf is ima4. Default directory is '.'

Make a file called wav2caf.py, put it in your path, make it executable, fill it with:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import os
import argparse
import glob

def main():
    # handle command line args
    parser = argparse.ArgumentParser(description='A program that converts .wav to .caf files.', formatter_class=argparse.RawTextHelpFormatter)
    parser.add_help = True
    parser.add_argument('-f', '--folder', dest='folder', type=str, default='.', help='folder of files to convert')
    parser.add_argument('-d', '--data', dest='data', type=str, default='ima4', help='data format of .caf')
    args = parser.parse_args()

    # process files in folder
    os.chdir(args.folder)
    for filename in glob.glob("*.wav"):
        name, ext = os.path.splitext(filename)
        command = 'afconvert -f caff -d ' + args.data + ' ' + filename + ' ' + name + '.caf'
        os.system(command)

if __name__ == "__main__":
    main()

Converts all .wav to .caf in current directory:

wav2caf.py

Converts all .wav to .caf in specified directory:

wav2caf.py -f Desktop/wavs/

Converts all .wav to .caf with data type 'aac ':

wav2caf.py -d 'aac '
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top