You’ve heard of boom bap and maybe mod bap, but have you heard of boom zap?
This track has two tempos: a halftime feel and a boom bap (or boom zap) section at 150% speed. Everything except for the kick drums comes from glitch sound design, taking little snippets and using them as percussion.
I’ve been experimenting with the wchoose function, which will pick a weighted random value. For instance:
wchoose[(8,0.5),(4,0.8),(19,0.2),(16,0.3)])
4 will get chosen the most frequently, then 8, then 16, and finally 19 the least.
I used that for the kicks here. I used 3 kick samples, the first getting chosen the most frequently:
wchoose [("kicks:22",0.9),("kicks:25",0.6),("kicks:59",0.5)])
kicks:25 is a classic boom bap kick, the others are a little more modern.
I recorded Tidal’s output into Reaper, then used various plugins to glitch it up even more. (Destroy FX plugins, going on 30 years or so, are still some of my favorites.)
Tidalcycles is amazing. If you have an inkling to try it, do it! It might seem impenetrable but it really is simpler than it looks. Even if you don’t have any experience with coding, there are tons of great tutorials.
As always, here’s the full Tidalcycles code for this track:
bpm 140 do let rip a b = stut a 0.2 b let faster = whenmod 60 49 p "s" $ whenmod 60 49 (fast 1.5) -- BOOM BAP -- $ swingBy (wchoose[(0,0.1),(0.1,1),(0.2,0.2)]) (wchoose[(4,0.1),(8,1)]) $ swingBy 0.1 8 -- $ whenmod 19 18 ((within (0.25,1) (# scram (choose [0,0.2,0.5,0.9,2])) . (# lpf 800))) $ every 31 (within (0,0.25) (|* gain 0)) $ every 39 (within (0,0.75) (scramble 8)) $ foldEvery [32,27] (within (0,1) (bite 4 "{0 0 2 3 1 0 1 0 3 3 2 2 2 1 2 1 1 0 0 }%4")) $ every 29 (within (0,1) (bite 4 "{0 0 2 3 1 0 3 3 2 2 2 1 2 1 1 0 0 2 3 0 0 2 3 1 1 2 }%8")) $ every 35 (within (0.25,0.75)( (# imag 1) . (|* gain 0.9) )) $ whenmod 25 19 ( (# real 0.5) . (|* gain 1.2)) $ stack [ whenmod 60 49 (const $ st "[[t~t~] [~~~~t]]" $ s "kicks:25" # o 1 ) -- IT'S BOOM BAP TIME $ (99~>) $ sb 0.1 (rev . stut 9 0.2 (1/32)) $ sb 0.2 (scramble 4) $ st "[<t [tt?~~] [t~t]> [<t~>]~[~~t~]]" $ s (wchoose [("kicks:22",0.9),("kicks:25",0.6),("kicks:59",0.5)]) # gain 0.8 # o 1, -- 11 18 22 every 11 (within (0.25,0.75) (ply 2)) $ stack [ st "t*2" $ s "g3" # n 123 # legato 1 # gain 0, db "<1 1 1 1 1 0 0 0 0>/4" $ stack [ st "t*2" $ s "g4" # n 123 # legato 1, st "t*2" $ s "<g7:20 g3:123>/4" # legato 1 # gain 1 ] |* gain 0, (11~>)$ whenmod 10 7 (sb 0.2 (ply (wchoose[(8,0.5),(4,0.8),(19,0.2),(16,0.3)]))) $ fast 2 $ db 0.45 $ st "t" $ s (wrandcat ([("g5:1092",0.6),("g5:278",0.2),("g7:267",0.2),("g7:2667",0.2),("g7:22",0.2),("g7:23",0.2)])) # legato 1 # gain 1 # speed "<1 2>/9" # cut 421, st "[~ ~ t ~]" $ s "g3:101" # legato 1 # sus 0.1, -- 48 db "<1 0 1 1 0>/6" $ st "[~ ~ t ~]" $ s "g3:21" # legato 1 # sus 0.4 # gain 0.9, -- 48 st "[~ ~ <~t> ~]" $ s "g3:229" # legato 1 # sus 0.1 # gain 0.9, whenmod 18 15 (# gain 0.7) $ st "t*2" $ s "g3" # n 116 # legato 1 # gain 0, (18~>) $ sb 0.1 (ply 8) $ db "<1 0.88 0.73>/4" $ st "t*8" $ s (wrandcat ([("g6:230",0.25),("g6:21",0.25),("g7:266",0.2),("g7:120",0.2)])) # legato 1 # hpf 200 # pan (perlin) # cut 420, (29~>) $ whenmod 15 7 (db 1) $ sb 0.4 (rev . stut 9 0.2 (1/32)) $ sb 0.5 (ply (wchoose [(0,0.8),(2,0.6),(4,0.3),(8,0.1)])) $ db 0.78 $ s "g5*4" # n (irand 250) # legato 1 # hpf 200 # pan (perlin) # cut 420, (56~>) $ whenmod 33 21 (db 1) $ every 7 (bite 4 "{0 0 1 2 0 3 2 1 1 0 0 0 2 0 0}%4") $ db 0.5 $ "db*16" # n (irand 50) # gain 0.8 # sus 0.05 # begin 0.2# speed 0.5, (78~>) $ db "<1 1 0 0 0>/7" $ st "t*16" $ s "dilla_hats:10" # gain 0.8 # legato 1 ], -- stack [ (18~>) $ s "g5*4" # n 16 # legato 1 # hpf 200 # begin 0.1 # speed 1 # gain 1.4 ] |* gain 0.7 ] hush