Synthesizing simple chords with sox

SoX can do almost anything with audio files — including synthesize audio from scratch. Unfortunately, SoX’s syntax is more than a bit hard to follow, and the manual page isn’t the most clear. But there is one example in the manual that gives a glimpse of what SoX can do:

play -n synth pl G2 pl B2 pl D3 pl G3 pl D4 pl G4 \ 
     delay 0 .05 .1 .15 .2 .25 remix - fade 0 4 .1 norm -1

While it plays a nice chord, it’s not obvious how to make audio files from this process. I have a project coming up that needs a few simple guitar chords, and with much trial and error I got SoX to spit out audio files. Here’s what I keyed into the shell:

cat guitar.txt | while read chord foo first third fifth
do
  echo "$chord" :
  sox -n \ 
    -r 16000 -b 16 "chord-${chord}.wav" \
    synth pl "$first" pl "$third" pl "$fifth" \
    delay 0 .05 .1 \ 
    remix - \ 
    fade 0 1 .095 \ 
    norm -1
done

with these lines in the file “guitar.txt”

G   :  G2  B2  D3
C   :  C3  E3  G4
D   :  D3  F#4 A3
F   :  F3  A3  C4
A   :  A3  C#4 E4
E   :  E2  G#3 B3
Em  :  E2  G3  B3

How the SoX command line breaks down:

    • -n —use no input file: SoX is going to generate the audio itself
    • -r 16000 -b 16 “chord-${chord}.wav” — with a sample rate of 16 kHz and 16-bits per sample, write to the output file “chord-….wav”
    • synth pl “$first” pl “$third” pl “$fifth” —synthesize three plucked tones read from the file
    • delay 0 .05 .1 —delay the second tone 0.05 s after the first and likewise the third after the second. This simulates the striking of guitar strings very slightly apart.
    • remix – —mix the tones in an internal pipe to the output
    • fade 0 1 .095 —fade the audio smoothly down to nothing in 1 s
    • norm -1 —normalize the volume to -1 dB.

The chords don’t sound great: they’re played on only three strings, so they sound very sparse. As my application will be playing these through a tiny MEMS speaker, I don’t think anyone will notice.

Update: well, now I know how to do it, why not do all 36 autoharp strings and make the “magic ensues” sound of just about every TV show of my childhood?

Glissando up:

sox -n -r 48000 -b 16 autoharp-up.wav synth pl "F2" pl "G2" pl "C3" pl "D3" pl "E3" pl "F3" pl "F#3" pl "G3" pl "A3" pl "A#3" pl "B3" pl "C4" pl "C#4" pl "D4" pl "D#4" pl "E4" pl "F4" pl "F#4" pl "G4" pl "G#4" pl "A4" pl "A#4" pl "B4" pl "C5" pl "C#5" pl "D5" pl "D#5" pl "E5" pl "F5" pl "F#5" pl "G5" pl "G#5" pl "A5" pl "A#5" pl "B5" pl "C6" delay 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1 1.05 1.1 1.15 1.2 1.25 1.3 1.35 1.4 1.45 1.5 1.55 1.6 1.65 1.7 1.75 remix - fade 0 6 .1 norm -1

Glissando down:

sox -n -r 48000 -b 16 autoharp-down.wav synth pl "C6" pl "B5" pl "A#5" pl "A5" pl "G#5" pl "G5" pl "F#5" pl "F5" pl "E5" pl "D#5" pl "D5" pl "C#5" pl "C5" pl "B4" pl "A#4" pl "A4" pl "G#4" pl "G4" pl "F#4" pl "F4" pl "E4" pl "D#4" pl "D4" pl "C#4" pl "C4" pl "B3" pl "A#3" pl "A3" pl "G3" pl "F#3" pl "F3" pl "E3" pl "D3" pl "C3" pl "G2" pl "F2" delay 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1 1.05 1.1 1.15 1.2 1.25 1.3 1.35 1.4 1.45 1.5 1.55 1.6 1.65 1.7 1.75 remix - fade 0 6 .1 norm -1

Could maybe use some reverb in there for the ultimate nostalgic effect.

 

a hand with the circle of fifths

(originally posted on Banjo Hangout)

I’ll give you a hand with this …
a hand, with numbers

Yeah, that’s my right hand. Spare me the tree-frog comments, but note how I’ve carefully numbered the fingers.

You play banjo, so you know stuff in the key of G. So you know three chords: G, C and D7. Musicians are fiddly bunch, with all their sharps and flats and all, but notes go A B C D E F G, then back to A as they go up. If you start with G = 1, you’ll see that C = 4 and D = 5. Let’s not worry about the fact that you (probably) play a D7 chord, but look at the key of G hand:
a hand, in the key of G

For some reason (look up chord theory, or chord progressions) the 1, 4 and 5 chords sound good together. Some people write ’em as I, IV and V if they’re feeling all fancy and classical like.

I hate to break it to you, but not all tunes are in the key of G. I know, it’s hard to take. What if it’s in A? Well, use the hand, with A as the first (or root) chord:
a hand, in the key of A

So to play those nice sounding 1-4-5 chords in A, you need to know A, D and E (or E7, if you’re feeling folky). In this case, the D pretty much has to be the real finger-stretching D chord (hard for us tree-frogs) or it’ll sound naff.

If you’re singing along to your old Pete Seeger 78s, yer traditional folk/gospel/church songs are in C. Hand to the rescue!
a hand, in the key of C

So, for the key of C, you need the chords C, F and G (or G7). F is a nightmare on a guitar, easier on a banjo, easiest of all on an autoharp.

Just in case you ever need a song in D, here’s that hand again:
a hand, in the key of D

You guessed it – D, G and A (or A7).

That’s how Chris Coole taught me it. It’s a bit of a simplification, but it works for me.

banjo chord forms

I’ve been trying to learn banjo chords for a while, and the books I have keep flopping closed. So I resolved to make a blank chord form that I could fill in, like this:

You might wonder why it goes to the 7th fret. If you’re in Double C tuning, you’ll need that if you’re drawing a tuning chart.

So for G tuning, the F chord would look like:

There are 12 fretboard images to a page – that’s enough for four whole folk songs!

Download: stewart’s banjo fretboard / chord grid [PDF].