-- Study: Ableton Learning Music -- https://learningmusic.ableton.com/make-basslines/good-life.html let lineGoodLife = "b3 ~ ~ b3 ~ ~ b3 ~ ~ fs3 ~ ~ fs3 ~ ~ a3 ~ a3 ~ a3 ~ ~ e3 ~ ~ e3 ~ e3 b3 ~ b3 ~" let lineAround0 = "~ ~ ~ ~ a4 ~ ~ ~ a4 ~ ~ ~ a4 ~ b4 c5" -- [0,1,2,3] let lineAround1 = "~ ~ ~ ~ c5 ~ ~ ~ c5 ~ ~ ~ c5 ~ d5 e5" let lineAround2 = "~ ~ ~ ~ e5 ~ ~ ~ e5 ~ ~ ~ e5 ~ ~ ~" let lineAround3 = "fs5 ~ e5 ~ d5 ~ c5 ~ b4 ~ a4 ~ g4@3 a4" let lineTeng = "cs d d d cs d d d cs d d d g ~ fs ~" let lineNever = "<[~ ~ c5 b4 a4 ~ ~ ~] [~ <g4 <~ <g4 d5>>> <a4 ~> <g4 d5> a4 ~ ~ ~]>" let lineOblivion1 = "d4 d4 d5 a4 d4 <d4 d5> <f4 a4> a4" -- [1,1,2,2] let lineOblivion2 = "b4 b4 b5 fs4 b4 <b4 b5> <d4 fs4> fs4" do setcps (148/60/4) let lineLoveTear = "e4@8" d1 $ "jazz" d2 $ "~ clap:2" d4 $ note () # "FMRhodes1" -- Exercise in space do setcps (127/60/4) let lineNever = "<[~ ~ c5 b4 a4 ~ ~ ~] [~ <g4 <~ <g4 d5>>> <a4 ~> <g4 d5> a4 ~ ~ ~]>" d1 $ loopAt 2 $ "break:1" # cut 1 # gain 0.8 d4 $ note (lineNever) # "bass:4" # att 0.1 # rel 2 # lpf 4000 # gain 1.1 do -- Oblivious to your synths let lineOblivion1 = "d4 d4 d5 a4 d4 <d4 d5> <f4 a4> a4" let lineOblivion2 = "b4 b4 b5 fs4 b4 <b4 b5> <d4 fs4> fs4" d4 $ note (cat [lineOblivion1,lineOblivion1,lineOblivion2,lineOblivion2]) # "cs80leadMH" # att 0.1 # rel 1 # room 0.4 # cut 4 do setcps (82/60/4) let gF1 = (# djfbus 1 (range 0.05 0.95 "^49")) let gF2 = (# djfbus 2 (range 0.05 0.95 "^50")) let gF3 = (# djfbus 3 (range 0.05 0.95 "^51")) let gMask = (midiOn "^41" (mask "t . <f t f <f t>> <t f f <t f>>")) let gMute = (midiOn "^73" (mask "f*16")) let gMute2 = (midiOn "^74" (mask "f*16")) let gM = gMask . gMute let gM2 = gMask . gMute2 d1 $ gF1 $ gM $ midiOn "^42" ((<| "k k k k k k <k <~ k*2>> k*<1 2 2 2>") . (# "[jazz:0]")) $ midiOff "^42" (<| "k . <~!4 k!4 k(3,8)!8>") $ "[rootsDrums:0,rootsDrums:4]" -- $ "[techno,jazz,kick:5]*4" # midiG' "^78" 0 1.5 d3 $ gF1 $ gM $ "[~ drum:2]*8" # midiG' "^80" 0 1.5 d4 $ gF2 $ gM2 $ midiOff "^57" ((slow 2) . ( # room 0.5)) $ note (lineTeng) # "rootsBass" # crushbus 41 (range 16 2.5 "^53") # end 0.35 # room 0.3 # legato 2 # gain 1.9 # cut 1 # midiG' "^81" 0 1.5 d8 $ gF1 $ midiOn "^92" (ply "1 2") $ midiOn "^60" (slice 16 (run "<16!8 [16 8]!7 [8 16]> <16!3 <32 [8 32]>>") ) $ chop 8 $ (someCyclesBy "^20" (# n "21")) $ "jungle_breaks:33" # midiG' "^84" 0 1.5 d2 $ gF1 $ whenmod 32 24 (fast "<2!3 [<2 4> 4]>") $ "~ [cp,snare:24]" # pan 0.7 # midiG' "^79" 0 1.4 d3 $ gF1 $ sometimesBy (slow 16 $ range 0 0.5 saw) (mask "t(3,8) t(5,8)") $ "hh*[16 16 16 <8!2 16 12>]" # midiG' "^80" 0 1.6 # room 0.2 # dry 1 # pan (0.4 + 0.2 * (slow 4 perlin)) d4 $ gF2 $ midiOn "^89" (|+ note "c'minPent'2") -- $ midiOn "^57" (<| note lineAround3) $ note (slow 2 $ lineGoodLife) # "bassWarsaw" # octave 4 # crushbus 41 (range 16 2.5 "^53") # octersubbus 42 (range 0 4 "^33") -- # delayfb 0.8 # delayt 0.25 # midiG' "^81" 0 1.4 # pan 0.3 d5 $ midiOn "^90" (sometimesBy "0 1" rev) $ midiOn "^58" (struct "t(<3!3 <5 2>>,<8!7 4>) . t(<5!7 <8 16>>,8)" . arp "pinkyup") $ note ("<[a4,c4,e4] [c4,e4,g4] [e4,g4,b4] [d4,fs4,g4]>") # "moogBass" # midiG' "^82" 0 1.6 d8 $ gF3 $ midiOn "^92" ((# pan 0.4) . (# n "19")) $ sometimesBy "^56" (slice 4 ("0 <1 <1*2 ~> ~ 1> <2 ~> 3*<1 <2 4>>")) -- $ whenmod 4 3 (slice 4 ("0 1 2 3*4")) $ loopAt 2 $ chop 8 $ n "20" # "jungle_breaks" # pan 0.55 # midiG' "^84" 0 1.8