Switch Angel Tutorials
This is a series of tutorials as I learned from the expert, @Switch-Angel. Cool stuff.
setcpm(136/4)
register('acidenv', (x, pat) => pat.lpf(100)
.lpenv(x * 9).lps(.2).lpd(.12)
)
// main melody loop
$: n("<0 4 0 9 7>*16").scale("g:minor").trans(-12)
// change melody to sawtooth, add slider
.octave(3).s("sawtooth").acidenv(slider(0.655))
// visual the melody with pianoroll
._pianoroll()
// Base Loop
$: n("<0>*16").scale("g:minor").trans(-24)
// change melody to sawtooth, add slider
.octave(3).s("supersaw").acidenv(slider(0.632))
// visual the melody with pianoroll
._pianoroll()
// fit top to cycle
$: s("top:1/2").fit().octave(5)
// kickdrum, 4 on the floor
$: s("bd!4")
.duck("3:4:5:6")
.duckdepth(.8)
.duckattack(.16)
._scope()
$: note("<g3bb3d4 bb3d4f4 eb3g3bb3 f3a3c4>*4")
.octave(4)
.gain(1.6)
.room(0.3)
.s("sawtooth")
.acidenv(slider(0.495))
._pianoroll()
Tutorial
setcpm(136/4)
register('acidenv', (x, pat) => pat.lpf(100)
.lpenv(x * 9).lps(.2).lpd(.12)
)
// main melody loop
$: n("<<0 4 0 9 7> <0 4 0 9 7> <0 4 0 9 7> <0 7 4 11 9>>*16").scale("g:minor").trans(-12)
.octave(3).s("sawtooth").acidenv(slider(0.655))
._pianoroll()
// change melody to sawtooth, add slider
.octave(3).s("sawtooth").acidenv(slider(0.655))
// Base Loop
$: n("<0>*16").scale("g:minor").trans(-24)
// change melody to sawtooth, add slider
.octave(3).s("supersaw").acidenv(slider(0.632))
// visual the melody with pianoroll
._pianoroll()
// fit top to cycle
$: s("top:1/2").fit().octave(5)
// kickdrum, 4 on the floor
$: s("bd!4")
.duck("3:4:5:6")
.duckdepth(.8)
.duckattack(.16)
._scope()
1st Attempt
setCpm(140/4)
// basic beat
$: s("<bd:2!4 bd:2!4 [bd:2 bd:2 ~ bd:2 bd:2] [bd:2*2 ~ bd:2 bd:2]>")
.gain(.8)
// Add snare/clap variation
$: s("~ cp:2 ~ <cp:2 [cp:2 cp:2]>").gain(0.3)
// Hi-hat pattern changes
$: s("hh:3*8").gain("<<0.3 0.6 0.4 0.7> <0.3 0.6 0.3 0.6>>")
// 303, walking baseline, swapping instruments
$: n("<[0 [0 3] [5 7] [3 5]] [0 [0 3] [5 7] [3 5]] [[-2 0] [3 5] [7 10] [5 3]] [0 [0 3] [5 7] [3 5]]>").add(-14).scale("g:minor")
.s("<gm_viola gm_cello gm_contrabass>".slow(4))
.lpf("<1500 2500 1000 1800>".slow(4))
.resonance("<1 10 1 5>".slow(4))
.gain(0.4)
Next Attempt
setCpm(140/4)
// Kick with drop
$: s("<bd:2!4!6 [~ ~ ~ [bd:2 bd:2*4]]>")._scope()
// THE DROP - melody silence then BOWWWW
$: n("<[0 [0 3] [5 7] [3 5]]!6 ~ [0!16]>").add(-21).scale("g:minor")
.s("<gm_contrabass!6 ~ supersquare>".slow(8))
.lpf(sine.range(30, 5000).fast(4)) // BOWWWW oscillation
.resonance("<1!6 ~ 35>".slow(8))
.gain("<0.4!6 ~ 1.0>".slow(8))
.room("<0.1!6 ~ 0.9>".slow(8))
// White noise riser before drop
$: s("<~!6 wind ~>").gain("<~!6 [0 0.1 0.3 0.6] ~>".slow(8))
// Simple hi-hats - no crazy speed
$: s("hh:3*8").gain(0.6)
// Basic claps - simple and clean
$: s("~ cp:2 ~ cp:2").gain(0.4)
Variation, Understand Percussion
setCpm(140/4)
// Kick drops out then SLAMS back
$: s("<bd:2!4!6 [~ ~ ~ [bd:2 bd:2*4]]>")._scope()
// ACID BASSLINE - goes silent then DROPS HARD
$: n("<[0 [0 3] [5 7] [3 5]]!6 ~ [[0!8]*2]>").add(-14).scale("g:minor")
.s("<gm_viola!6 ~ sawtooth>".slow(8))
.lpf("<1500!6 ~ [100 4000]>".slow(8)) // Filter SWEEPS on drop
.resonance("<1!6 ~ 25>".slow(8)) // MASSIVE resonance on drop
.gain("<0.4!6 ~ 0.7>".slow(8))
._pianoroll()
// Hi-hats build tension then go crazy
$: s("<[hh:3*8]!6 [hh:3*16] [hh:3*8]>").gain("<0.6!6 0.8 0.7>")
// Claps drop out then SLAM
$: s("<[~ cp:2 ~ cp:2]!6 ~ [cp:2!4]>").gain("<0.4!6 ~ 0.8>")
Final Lesson: Combine
setCpm(140/4)
// basic beat
//$: s("bd:2!4")
// progressive chagnes in beat
//$: s("<bd:2!4 [bd:2!3 bd:2*2] bd:2!4 [bd:2 ~ bd:2 bd:2]>")
$: s("<bd:2!4 bd:2!4 [bd:2 bd:2 ~ bd:2 bd:2] [bd:2*2 ~ bd:2 bd:2]>")
// syncopated fill every 4th
//$: s("<bd:2!4 bd:2!4 bd:2!4 [bd:2*2 bd:2 ~ bd:2]>")
// build tension with doubles
//$: s("<bd:2!4 bd:2!4 bd:2!4 [bd:2!3 bd:2*2]>")
// drops
//$: s("<bd:2!4!6 ~ [bd:2 ~ ~ bd:2]>")
.gain(.8)
// Add snare/clap variation
$: s("~ cp:2 ~ <cp:2 [cp:2 cp:2]>").gain(0.3)
// Hi-hat pattern changes
$: s("hh:3*8").gain("<<0.3 0.6 0.4 0.7> <0.3 0.6 0.3 0.6>>")
// 303, walking baseline, swapping instruments
$: n("<[0 [0 3] [5 7] [3 5]] [0 [0 3] [5 7] [3 5]] [[-2 0] [3 5] [7 10] [5 3]] [0 [0 3] [5 7] [3 5]]>").add(-14).scale("g:minor")
.s("<gm_viola gm_cello gm_contrabass>".slow(4))
.lpf("<1500 2500 1000 1800>".slow(4))
.resonance("<1 10 1 5>".slow(4))
.gain(0.4)