What is SoX?
SoX (Sound eXchange) is, as the author calls it, "the Swiss Army knife of sound processing programs". It is free, open source and runs under Windows, Mac and Linux.
SoX can play, record, convert, edit, split, join and apply various effects to audio files of many different formats.
Supported File Formats
In a default installation of SoX in Slackware 13.37, the supported formats are as follows:
8svx, aif, aifc, aiff, aiffc, al, amb, au, avr, caf, cdda, cdr, cvs, cvsd, cvu, dat, dvms, f32, f4, f64, f8, fap, flac, fssd, gsm, gsrt, hcom, htk, ima, ircam, la, lpc, lpc10, lu, mat, mat4, mat5, maud, mp2, mp3, nist, ogg, paf, prc, pvf, raw, s1, s16, s2, s24, s3, s32, s4, s8, sb, sd2, sds, sf, sl, smp, snd, sndfile (formats supported by the Libsndfile library), sndr, sndt, sou, sox (internal format), sph, sw, txw, u1, u16, u2, u24, u3, u32, u4, u8, ub, ul, uw, vms, voc, vorbis, vox, w64, wav, wavpcm, wv, wve, xa, xi
And there can be some more if the associated libraries are installed.
Some of the supported effects:
bandpass (band-pass filter), chorus, delay, echo, equalizer, fade (fade in and out), highpass (high-pass filter), lowpass (low-pass filter), pitch (changes only the pitch), reverb, reverse, riaa (RIAA vinyl effect), speed (changes speed and pitch), synth (generates basic waveforms), tempo (changes only the speed), tremolo, trim, vocoder
For a complete list of formats, effects and other features, go here.
For Windows and Mac, get it from the official download page. For Linux, it can be installed by compiling the source code (available on the same page), or via distribution specific package repositories. In the case of Slackware (the Linux distribution that I use), it is installed by default although support for MP3 file generation is disabled, which is solved just by rerunning the (SlackBuild) script to compile it, then reinstalling it.
SoX is a command line tool and comes with a few mini programs (commands) for executing different tasks:
Plays audio files in the supported formats, applying effects during playback if desired.
Records from the microphone, the sound card, etc., to a file in one of the supported formats.
Shows information about audio files in the supported formats.
Commonly used to process file(s) and save the results to another file, but actually it is the core of "play", "rec" and "soxi".
Basic Usage Examples
Note: these examples were executed under Linux, I don't know if there is any difference in the commands for other systems.
Displaying Information About Files
Displays information such as size, length (duration), encoding, bitrate, number of channels, sample rate, comments etc. of a file called "music.mp3":
$ soxi music.mp3
Displays only the length (duration) of the file above:
$ soxi -d music.mp3
Plays a file called "example.mp3":
$ play example.mp3
Plays a file called "example.mp3" with a reverb effect:
$ play example.mp3 reverb
Plays the file "example.mp3" backwards:
$ play example.mp3 reverse
Plays only the first five seconds of "example.mp3":
$ play example.mp3 trim 0 5
Plays "example.mp3", from the fifth second to the end:
$ play example.mp3 trim 5
Note: there are options to control the parameters of reverb, trim etc., as well as various other effects. Read the "Getting Help" section below for more information.
Records from your default recording source (for example, a microphone) to a file called "example.wav".
$ rec example.wav
Note: you must set the recording source first (for example, in the sound configuration in Windows, or with software like "alsamixer" or "aumix" in Linux).
Pausing and Resuming
To pause while playing or recording, press Control-z. SoX will pause and stay in the background. To resume and put it back in the foreground, type the command:
Note: I don't know if this works in the same way (or how/whether it works) on Windows.
Processing and Converting Files
These commands process a file and save the result to another file, even converting the output to a different format.
Converts a file called "example.wav" into "example.mp3":
$ sox example.wav example.mp3
Applies a reverb effect (with SoX's default parameters) to "example1.wav" and saves the result to "example2.wav":
$ sox example1.wav example2.wav reverb
Joins "example-part1.flac" and "example-part2.flac" to form "example-full.flac":
$ sox example-part1.flac example-part2.flac example-full.flac
Save the first fifty seconds of "example1.mp3" to "example2.ogg":
$ sox example1.mp3 example2.ogg trim 0 50
Merges (mixes) a background music ("music.mp3") with a voice recording ("speech.wav"), producing "presentation.ogg":
$ sox -m music.mp3 speech.wav presentation.ogg
Merges the background ("music.mp3") at half the volume and the voice ("speech.wav") at double the volume, producing "presentation.ogg":
$ sox -m -v0.5 music.mp3 -v2 speech.wav presentation.ogg
Tip: if you want to "preview" (or should I say "prelisten"?) the effects without altering the file, you can use "play" to apply the effects and listen:
$ play -m -v0.5 music.mp3 -v2 speech.wav
Adjust the parameters (in this example, the volume factor, which is the number after the "-v" option), until you find the values that you like, then replace the "play" command by "sox" and specify an output file. Example:
$ sox -m -v0.5 music.mp3 -v1.2 speech.wav presentation.ogg
SoX can also generate basic forms of audio like sine, triangular, square and sawtooth waves, as well as some other things such as "white", "brown" and "pink" noise.
This plays a sine wave in 440hz (the "a4" note) for one second. The gain (and audio volume) is decreased a little so as not to be too high:
$ play -n synth 1 sine 440 gain -10
This does the same thing, but uses the note's name instead of the frequency:
$ play -n synth 1 sine A4 gain -10
This saves the sound to a file called "sine.wav" instead of playing it:
$ sox -n sine.wav synth 1 sine A4 gain -10
If the amount of text shown on the screen bothers you, you can use the "-q" option so that SoX does not show any information to the screen, except for warnings and errors. This works with "play", "rec" and "sox". Example:
$ play -q music.mp3
To show all of the SoX commands, supported formats and effects, type:
$ sox --help
For play, rec and soxi, type "play --help", "rec --help" and "soxi --help" respectively.
Note: the help is practically the same for "sox", "play" and "rec", except for the order of input/output files and effects.
There are also the user manuals, with more detailed explanations of commands, effect parameters and examples. In Linux, if the manuals are installed, you can read them offline be typing
$ man sox
for the "sox", "play" and "rec" manuals,
$ man soxformat
for all options related to the supported file formats and
$ man soxi
for "soxi"'s manual. There is also
$ man libsox
for those who want to tinker with code and SoX's engine library.
You can also read the manuals online at the SoX documentation page.