SuperCollider, Pure Data, ChucK, CSound, Nyquist, Overtone, TidalCycles, Bipscript, oh my
Moderators: MattKingUSA , khz
delete000
Established Member
Posts: 45 Joined: Fri Dec 31, 2021 7:48 pm
Has thanked: 12 times
Been thanked: 2 times
Post
by delete000 » Sun Jan 28, 2024 2:16 am
I have a bunch of single tone samples (all in C) and would like to build a chord from each sample (say, CMaj7) by simply transposing and overlaying each sample to itself. The samples are properly cropped to begin and end at zero-crossings, so they can be seamlessly looped.
Anyone know what sox magic I can use to automate the process?
Context: I want to make chord samples for my Digitakt. I know I can just resample on the Digitakt, but the prospect of doing this for dozens of samples doesn't seem too appealing....
Chibchan
Established Member
Posts: 67 Joined: Wed Jun 19, 2013 6:56 am
Location: Brooklyn
Has thanked: 1 time
Been thanked: 9 times
Post
by Chibchan » Mon Feb 12, 2024 7:46 am
Nice!
just learned something.
this little bit of code will create AND delete a folder called "sox_chord" along with the 3 wav files to create chord.
save script as "C_chord", make executable and run again if needed.
Very easy to modify and create new chords.
Code: Select all
#!/bin/bash
mkdir -p sox_chord
sox -n -r 8000 sox_chord/C_output.wav synth 3 sine 261.6
sox -n -r 8000 sox_chord/E_output.wav synth 3 sine 329.63
sox -n -r 8000 sox_chord/G_output.wav synth 3 sine 392
sox -m sox_chord/*.wav C_chord.wav
rm -r sox_chord
delete000
Established Member
Posts: 45 Joined: Fri Dec 31, 2021 7:48 pm
Has thanked: 12 times
Been thanked: 2 times
Post
by delete000 » Sun Mar 03, 2024 11:51 pm
@Chibchan thanks.
In the end it was simpler than I thought. I had seen how to do it with the sox synth, I just needed to figure out how to do it with samples.
Here's a quick and dirty bash script that generates most common triads and 7th chords from a wav file:
Code: Select all
wv=$1
fn=${wv:0:-4}
# Major triads
sox ${wv} 2nd-voice.wav pitch 400
sox ${wv} 3rd-voice.wav pitch 700
sox -m ${wv} 2nd-voice.wav 3rd-voice.wav ${fn}M.wav
rm -rf 2nd-voice.wav 3rd-voice.wav
# Minor triads
sox ${wv} 2nd-voice.wav pitch 300
sox ${wv} 3rd-voice.wav pitch 700
sox -m ${wv} 2nd-voice.wav 3rd-voice.wav ${fn}m.wav
rm -rf 2nd-voice.wav 3rd-voice.wav
# Diminished triads
sox ${wv} 2nd-voice.wav pitch 300
sox ${wv} 3rd-voice.wav pitch 600
sox -m ${wv} 2nd-voice.wav 3rd-voice.wav ${fn}o.wav
rm -rf 2nd-voice.wav 3rd-voice.wav
# Augmented triads
sox ${wv} 2nd-voice.wav pitch 400
sox ${wv} 3rd-voice.wav pitch 800
sox -m ${wv} 2nd-voice.wav 3rd-voice.wav ${fn}+.wav
rm -rf 2nd-voice.wav 3rd-voice.wav
# Major 7th
sox ${wv} 2nd-voice.wav pitch 400
sox ${wv} 3rd-voice.wav pitch 700
sox ${wv} 4th-voice.wav pitch 1100
sox -m ${wv} 2nd-voice.wav 3rd-voice.wav 4th-voice.wav ${fn}M7.wav
rm -rf 2nd-voice.wav 3rd-voice.wav 4th-voice.wav
# Minor 7th
sox ${wv} 2nd-voice.wav pitch 300
sox ${wv} 3rd-voice.wav pitch 700
sox ${wv} 4th-voice.wav pitch 1000
sox -m ${wv} 2nd-voice.wav 3rd-voice.wav 4th-voice.wav ${fn}m7.wav
rm -rf 2nd-voice.wav 3rd-voice.wav 4th-voice.wav
# Dominant 7th
sox ${wv} 2nd-voice.wav pitch 400
sox ${wv} 3rd-voice.wav pitch 700
sox ${wv} 4th-voice.wav pitch 1000
sox -m ${wv} 2nd-voice.wav 3rd-voice.wav 4th-voice.wav ${fn}7.wav
rm -rf 2nd-voice.wav 3rd-voice.wav 4th-voice.wav
# Minor 7b5
sox ${wv} 2nd-voice.wav pitch 300
sox ${wv} 3rd-voice.wav pitch 600
sox ${wv} 4th-voice.wav pitch 1000
sox -m ${wv} 2nd-voice.wav 3rd-voice.wav 4th-voice.wav ${fn}7b5.wav
rm -rf 2nd-voice.wav 3rd-voice.wav 4th-voice.wav
# Minor major 7th
sox ${wv} 2nd-voice.wav pitch 300
sox ${wv} 3rd-voice.wav pitch 700
sox ${wv} 4th-voice.wav pitch 1100
sox -m ${wv} 2nd-voice.wav 3rd-voice.wav 4th-voice.wav ${fn}mM7.wav
rm -rf 2nd-voice.wav 3rd-voice.wav 4th-voice.wav
# Augmented major 7th
sox ${wv} 2nd-voice.wav pitch 400
sox ${wv} 3rd-voice.wav pitch 800
sox ${wv} 4th-voice.wav pitch 1100
sox -m ${wv} 2nd-voice.wav 3rd-voice.wav 4th-voice.wav ${fn}+M7.wav
rm -rf 2nd-voice.wav 3rd-voice.wav 4th-voice.wav
# Diminished 7th
sox ${wv} 2nd-voice.wav pitch 300
sox ${wv} 3rd-voice.wav pitch 600
sox ${wv} 4th-voice.wav pitch 900
sox -m ${wv} 2nd-voice.wav 3rd-voice.wav 4th-voice.wav ${fn}o7.wav
rm -rf 2nd-voice.wav 3rd-voice.wav 4th-voice.wav
If the sample is single cycle and needs to be looped, the above can be preceded by: