Audio Editing

Sox Cheat Sheet
Note double dashes, even on single-letter parameters: sox --i file.wav                 # get info sox in.wav out.wav trim 48000s 48000s # out.wav is in.wav trimmed to [48000;96000] samples # note that in.wav and out.wav cannot be the same file! Copy samples [48000;96000] to [0;48000] using two temporary files: sox input.wav tmp1.wav trim 48000s 48000s sox input.wav tmp2.wav trim 0s 48000s sox tmp1.flac tmp2.flac output.wav

Remove DC offset using highpass filter: sox input.wav output.wav highpass 10 # 10 Hz, 12dB/octave

Sample-Accurate Editing with Audacity
When exporting loops from a DAW such as Ableton Live, glitches may occur when either unsynchronized sample loops or unsynchronized time-varying effects are used. For example, Ableton effects such as Chorus or Reverb that uses Spin or Chorus will often result in imperfect loops. To obtain glitch-free loops, we can either ensure that we only use time-invariant effects such as delay, or we can fix the loop in post-processing.

Looping Using Sync Point
If a looped waveform has a point where all loops are audibly the same, for example a point with complete silence, we can use this point to loop the waveform perfectly. We call such a point a sync point.

We want to create a glitch-free loop from a waveform that has a sync point. The input waveform must at least contain a full loop followed by the part until the sync point.

We create the glitch-free loop by copying from the start of the second loop to the sync point to the start of the first loop.

In this example, we assume that there is a sync point after exactly 2 beats. We then want to copy the first 2 beats of the second loop to the first 2 beats of the first loop. We need the input waveform to contain at least 2 beats more than a full loop.

Example, assuming a sample rate of 44100 smp/s: loop tempo       : 140 BPM beat_duration(140): 18900 smp loop length      : 24*4 beats = 24*4*60*44100/140 smp = 1814400 smp 2 beats length   : 2*18900 smp = 37800 smp

To be specific, we want to copy the range [1814400;1814400+37800] to [0;37800].



We manually enter the selection and copy: Selection Start: 1814400 samples Length        :   37800 samples



Then change the selection: Selection Start:      0 samples Length        :   37800 samples



And paste. We can finalize the loop by selecting [0;1814400]: Selection Start:      0 samples Length        : 1814400 samples



And Trim. We now have a perfectly loopable waveform of exactly 24*4 beats.



We can accomplish the same using Sox: sox input-26bars.flac tmp\input-start.flac trim 1814400s 37800s sox input-26bars.flac tmp\input-end.flac  trim 37800s 1776600s sox tmp\input-start.flac tmp\input-end.flac output-24bars.wav