← JamDojo Hip-Hop

Hip-Hop

Hip-hop production is built on drums, bass, and samples. From the breakbeat origins of DJ Kool Herc in 1970s Bronx to modern trap and drill, hip-hop has always been about making something fresh from existing sounds. This guide covers the essential techniques for creating hip-hop beats in Strudel.

The Foundation: Drums First

Hip-hop beats center on the relationship between kick, snare, and hi-hat. Unlike EDM’s four-on-the-floor, hip-hop drums are syncopated—kicks land off the grid, snares crack on 2 and 4, and hi-hats weave between them.

The Basic Pattern:

stack(
sound("bd ~ ~ ~ bd ~ bd ~"),
sound("~ ~ ~ ~ sd ~ ~ ~"),
sound("hh hh hh hh hh hh hh hh")
).cpm(22.5)

The Roland TR-808: Hip-Hop’s Heartbeat

The Roland TR-808 drum machine, released in 1980, became the defining sound of hip-hop. Its booming kick, snappy snare, and crisp hi-hats appear on countless classics:

sound("bd").bank("RolandTR808").cpm(22.5)

Building a Hip-Hop Beat

Step 1: The Kick Pattern

Hip-hop kicks are punchy and syncopated. They don’t just land on 1—they bounce:

sound("bd ~ ~ ~ bd ~ bd ~").bank("RolandTR808").cpm(22.5)

Variation with more bounce:

sound("bd ~ bd ~ ~ bd ~ bd").bank("RolandTR808").cpm(22.5)

Step 2: Snare on 2 and 4

The snare is the backbone—always on beats 2 and 4:

stack(
sound("bd ~ ~ ~ bd ~ bd ~").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808")
).cpm(22.5)

With claps layered:

stack(
sound("bd ~ ~ ~ bd ~ bd ~").bank("RolandTR808"),
sound("~ ~ ~ ~ [sd,cp] ~ ~ ~").bank("RolandTR808")
).cpm(22.5)

Step 3: Hi-Hat Patterns

Closed hi-hats drive the groove. Start simple, then add variations:

Basic eighth notes:

stack(
sound("bd ~ ~ ~ bd ~ bd ~").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("hh hh hh hh hh hh hh hh").bank("RolandTR808").gain(0.6)
).cpm(22.5)

Sixteenth notes for energy:

stack(
sound("bd ~ ~ ~ bd ~ bd ~").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("hh*16").bank("RolandTR808").gain(0.5)
).cpm(22.5)

With open hi-hat accents:

stack(
sound("bd ~ ~ ~ bd ~ bd ~").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("hh hh oh hh hh hh oh hh").bank("RolandTR808").gain(0.6)
).cpm(22.5)

Step 4: The Complete Kit

Layer everything together:

stack(
sound("bd ~ ~ ~ bd ~ bd ~").bank("RolandTR808"),
sound("~ ~ ~ ~ [sd,cp] ~ ~ ~").bank("RolandTR808"),
sound("hh hh oh hh hh hh oh hh").bank("RolandTR808").gain(0.6)
).cpm(22.5)

808 Bass Design

The 808 bass is hip-hop’s signature sound—a deep, booming sub that you feel in your chest. It’s created with a sine wave and careful envelope shaping.

Basic 808 Bass

note("c1 ~ ~ ~ c1 ~ c1 ~")
.s("sine")
.decay(0.3)
.sustain(0.2)
.gain(0.8)
.cpm(22.5)

Long Sustain 808

For notes that ring out:

note("c1 ~ ~ ~ ~ ~ ~ ~")
.s("sine")
.attack(0.01)
.decay(0.1)
.sustain(0.8)
.release(0.5)
.gain(0.7)
.cpm(22.5)

Short Punchy 808

For tight, punchy patterns:

note("c1 ~ c1 ~ c1 ~ c1 c1")
.s("sine")
.decay(0.15)
.sustain(0)
.gain(0.8)
.cpm(22.5)

808 with Pitch Slide

The signature “808 glide”—notes sliding into each other:

note("c1 ~ ~ ~ eb1 ~ c1 ~")
.s("sine")
.decay(0.4)
.sustain(0.3)
.slide(0.1)
.gain(0.7)
.cpm(22.5)

Distorted 808

Add warmth and presence with distortion:

note("c1 ~ ~ ~ c1 ~ c1 ~")
.s("sine")
.decay(0.3)
.sustain(0.2)
.distort(1.2)
.lpf(150)
.gain(0.7)
.cpm(22.5)

Layering 808 with Kick

For maximum impact, layer the 808 with the kick:

stack(
sound("bd ~ ~ ~ bd ~ bd ~").bank("RolandTR808"),
note("c1 ~ ~ ~ c1 ~ c1 ~")
  .s("sine")
  .decay(0.3)
  .sustain(0.2)
  .gain(0.7),
sound("~ ~ ~ ~ [sd,cp] ~ ~ ~").bank("RolandTR808"),
sound("hh hh oh hh hh hh oh hh").bank("RolandTR808").gain(0.5)
).cpm(22.5)

Sampling & Chopping

Sampling is at the heart of hip-hop—taking existing recordings and transforming them into something new. Strudel offers several ways to work with samples.

Loading Sample Libraries

To use breakbeats and other samples, first load a sample library:

samples('github:tidalcycles/dirt-samples')

sound("breaks165").cpm(22.5)

Slicing Loops

Use .slice() to chop a sample into pieces and rearrange them:

samples('github:tidalcycles/dirt-samples')

sound("breaks165")
.slice(8, "0 1 2 3 4 5 6 7")
.cpm(22.5)

Rearranged chops:

samples('github:tidalcycles/dirt-samples')

sound("breaks165")
.slice(8, "0 0 3 2 4 6 5 7")
.cpm(22.5)

With repeats and stutters:

samples('github:tidalcycles/dirt-samples')

sound("breaks165")
.slice(8, "0 0 0 0 4 4 6 7")
.cpm(22.5)

Pitch Shifting Samples

Change the pitch to create new textures:

samples('github:tidalcycles/dirt-samples')

sound("breaks165")
.note(-5)
.cpm(22.5)

Speed/Time Stretching

Slow down or speed up samples:

samples('github:tidalcycles/dirt-samples')

sound("breaks165")
.speed(0.8)
.cpm(22.5)

Lo-fi Vinyl Effect

Add warmth and texture with filtering and effects:

samples('github:tidalcycles/dirt-samples')

sound("breaks165")
.lpf(2000)
.hpf(200)
.room(0.2)
.gain(0.8)
.cpm(22.5)

Chops Over a Beat

Layer chopped samples over your drums:

samples('github:tidalcycles/dirt-samples')

stack(
sound("bd ~ ~ ~ bd ~ bd ~").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("hh*8").bank("RolandTR808").gain(0.4),
sound("breaks165")
  .slice(8, "0 2 4 6")
  .lpf(3000)
  .gain(0.5)
).cpm(22.5)

Genre Deep Dives

Boom Bap (85-95 BPM)

Boom bap is the classic East Coast sound—punchy kicks, cracking snares, and jazzy samples. The name comes from the sound: “boom” (kick) and “bap” (snare). Pioneered by producers like DJ Premier, Pete Rock, and J Dilla.

Classic Tracks:

Characteristics: 85-95 BPM, sampled drums, jazzy chords, minimal layers

Basic Boom Bap Beat:

stack(
sound("bd ~ ~ ~ bd ~ ~ bd"),
sound("~ ~ ~ ~ sd ~ ~ ~"),
sound("hh hh hh hh hh hh hh hh").gain(0.5)
).cpm(22.5)

With 808 Bass:

stack(
sound("bd ~ ~ ~ bd ~ ~ bd").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("hh hh hh hh hh hh hh hh").bank("RolandTR808").gain(0.5),
note("c2 ~ ~ ~ f2 ~ ~ c2")
  .s("sine")
  .decay(0.25)
  .sustain(0.1)
  .gain(0.6)
).cpm(22.5)

Boom Bap with Rhodes Chords:

stack(
sound("bd ~ ~ ~ bd ~ ~ bd").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("hh hh hh hh hh hh hh hh").bank("RolandTR808").gain(0.4),
note("c2 ~ ~ ~ f2 ~ ~ c2")
  .s("sine")
  .decay(0.25)
  .sustain(0.1)
  .gain(0.5),
note("<c3,eb3,g3,bb3> ~ <f3,ab3,c4,eb4> ~")
  .s("sawtooth")
  .lpf(1200)
  .attack(0.02)
  .decay(0.3)
  .sustain(0.2)
  .room(0.2)
  .gain(0.3)
).cpm(22.5)

Trap (140 BPM, Half-Time)

Trap emerged from Atlanta in the early 2000s, characterized by rapid hi-hats, 808 bass, and dark atmospheres. Producers like Lex Luger, Metro Boomin, and Zaytoven defined the sound.

Classic Tracks:

Characteristics: 140 BPM (felt as 70 half-time), rolling hi-hats, 808 slides, snare on beat 3

Basic Trap:

stack(
sound("bd ~ ~ ~ ~ ~ bd ~").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("hh*16").bank("RolandTR808").gain(0.5)
).cpm(35)

With Hi-Hat Rolls:

The signature trap sound—hi-hats that speed up:

stack(
sound("bd ~ ~ ~ ~ ~ bd ~").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("hh").bank("RolandTR808").fast("<8 8 8 16>").gain(0.5)
).cpm(35)

With 808 Bass:

stack(
sound("bd ~ ~ ~ ~ ~ bd ~").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("hh").bank("RolandTR808").fast("<8 8 8 16>").gain(0.4),
note("c1 ~ ~ ~ ~ ~ c1 eb1")
  .s("sine")
  .decay(0.4)
  .sustain(0.3)
  .slide(0.08)
  .gain(0.7)
).cpm(35)

Full Trap Beat:

stack(
sound("bd ~ ~ ~ ~ ~ bd ~").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("~ ~ ~ ~ ~ ~ ~ oh").bank("RolandTR808").gain(0.4),
sound("hh").bank("RolandTR808").fast("<8 8 8 16>").gain(0.4),
note("c1 ~ ~ ~ ~ ~ c1 eb1")
  .s("sine")
  .decay(0.4)
  .sustain(0.3)
  .slide(0.08)
  .distort(1.1)
  .gain(0.6)
).cpm(35)

Lo-fi Hip-Hop (75-90 BPM)

Lo-fi hip-hop emerged in the 2010s, influenced by J Dilla’s soulful production and the “beats to study to” aesthetic. It features dusty textures, jazz samples, and a relaxed swing.

Key Producers:

  • Nujabes — Japanese producer who pioneered the jazzy, melodic style (Feather)
  • J Dilla — “Donuts” (2006) influenced the entire genre
  • Madlib — intricate sampling on Madvillainy (2004)

Characteristics: 75-90 BPM, swing/shuffle feel, vinyl crackle, jazz samples, mellow

Basic Lo-fi Beat:

stack(
sound("bd ~ ~ bd ~ ~ bd ~"),
sound("~ ~ ~ ~ sd ~ ~ ~").gain(0.8),
sound("hh ~ hh ~ hh ~ hh ~").gain(0.4)
).cpm(20)

With Swing:

stack(
sound("bd ~ ~ bd ~ ~ bd ~"),
sound("~ ~ ~ ~ sd ~ ~ ~").gain(0.8),
sound("hh ~ hh ~ hh ~ hh ~").gain(0.4)
).cpm(20).swing(0.1)

Lo-fi with Rhodes:

stack(
sound("bd ~ ~ bd ~ ~ bd ~").gain(0.9),
sound("~ ~ ~ ~ sd ~ ~ ~").gain(0.7),
sound("hh ~ hh ~ hh ~ hh ~").gain(0.3),
note("<c3,eb3,g3> <bb2,d3,f3> <ab2,c3,eb3> <g2,bb2,d3>")
  .s("sawtooth")
  .lpf(800)
  .attack(0.02)
  .decay(0.3)
  .sustain(0.2)
  .room(0.3)
  .gain(0.25)
).cpm(20).swing(0.1)

Full Lo-fi Track:

stack(
sound("bd ~ ~ bd ~ ~ bd ~").gain(0.9),
sound("~ ~ ~ ~ sd ~ ~ ~").gain(0.7),
sound("hh ~ hh ~ hh ~ hh ~").gain(0.3),
note("c2 ~ ~ ~ g1 ~ ~ ~")
  .s("sine")
  .decay(0.3)
  .sustain(0.1)
  .gain(0.5),
note("<c3,eb3,g3> <bb2,d3,f3> <ab2,c3,eb3> <g2,bb2,d3>")
  .s("sawtooth")
  .lpf(800)
  .attack(0.02)
  .decay(0.3)
  .sustain(0.2)
  .room(0.3)
  .gain(0.2)
).cpm(20).swing(0.1)

Drill (140-145 BPM)

Drill originated in Chicago around 2010, later spreading to the UK and Brooklyn. It features dark, aggressive 808s, sliding bass, and sparse, menacing arrangements.

Classic Tracks:

Characteristics: 140-145 BPM, sliding 808s, minimal melodies, dark atmosphere, sparse hats

Chicago Drill:

stack(
sound("bd ~ ~ ~ ~ ~ ~ bd").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("hh ~ hh ~ hh ~ hh ~").bank("RolandTR808").gain(0.4)
).cpm(36)

With Sliding 808:

stack(
sound("bd ~ ~ ~ ~ ~ ~ bd").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("hh ~ hh ~ hh ~ hh ~").bank("RolandTR808").gain(0.4),
note("c1 ~ ~ ~ ~ ~ eb1 c1")
  .s("sine")
  .decay(0.5)
  .sustain(0.3)
  .slide(0.15)
  .distort(1.3)
  .gain(0.6)
).cpm(36)

UK Drill Style:

UK drill has a bouncier, more rhythmic feel:

stack(
sound("bd ~ ~ bd ~ ~ ~ bd").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("hh ~ hh hh ~ hh hh ~").bank("RolandTR808").gain(0.4),
note("c1 ~ ~ c1 ~ ~ eb1 c1")
  .s("sine")
  .decay(0.4)
  .sustain(0.2)
  .slide(0.12)
  .distort(1.2)
  .gain(0.6)
).cpm(35.5)

Afrobeats / Afro-Swing (95-110 BPM)

Afrobeats blends West African rhythms with hip-hop and R&B production. It features bouncy, polyrhythmic drums and melodic hooks.

Key Artists:

  • Burna Boy, Wizkid, Davido — Nigerian afrobeats pioneers
  • J Hus, Not3s — UK afro-swing sound

Classic Tracks:

Characteristics: 95-110 BPM, polyrhythmic percussion, log drums, bouncy feel

Basic Afrobeats:

stack(
sound("bd ~ bd ~ bd ~ bd ~"),
sound("~ ~ ~ ~ sd ~ ~ sd").gain(0.8),
sound("hh hh hh hh hh hh hh hh").gain(0.4)
).cpm(26)

With Percussion Layers:

stack(
sound("bd ~ bd ~ bd ~ bd ~"),
sound("~ ~ ~ ~ sd ~ ~ sd").gain(0.8),
sound("hh hh hh hh hh hh hh hh").gain(0.4),
sound("~ rim ~ rim ~ rim rim ~").gain(0.5)
).cpm(26)

With Melodic Elements:

stack(
sound("bd ~ bd ~ bd ~ bd ~"),
sound("~ ~ ~ ~ sd ~ ~ sd").gain(0.8),
sound("hh hh hh hh hh hh hh hh").gain(0.3),
sound("~ rim ~ rim ~ rim rim ~").gain(0.4),
note("c2 ~ g2 ~ c2 ~ g2 ~")
  .s("sine")
  .decay(0.2)
  .sustain(0.1)
  .gain(0.5),
note("c4 ~ eb4 ~ g4 ~ eb4 c4")
  .s("sawtooth")
  .lpf(2000)
  .decay(0.1)
  .sustain(0)
  .gain(0.3)
).cpm(26)

Phonk (130-145 BPM)

Phonk is a subgenre blending Memphis rap with modern trap. It features distorted samples, cowbells, and a dark, aggressive aesthetic.

Key Producers:

  • DJ Smokey, SpaceGhostPurrp — early pioneers
  • Kordhell, DVRST — modern drift phonk

Classic Tracks:

Characteristics: 130-145 BPM, cowbells, distorted 808s, vocal samples, dark atmosphere

Basic Phonk:

stack(
sound("bd ~ ~ ~ bd ~ ~ ~").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("hh*8").bank("RolandTR808").gain(0.4),
sound("~ cb ~ cb ~ cb cb ~").bank("RolandTR808").gain(0.6)
).cpm(34)

With Heavy 808:

stack(
sound("bd ~ ~ ~ bd ~ ~ ~").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("hh*8").bank("RolandTR808").gain(0.4),
sound("~ cb ~ cb ~ cb cb ~").bank("RolandTR808").gain(0.5),
note("c1 ~ ~ ~ c1 ~ eb1 ~")
  .s("sine")
  .decay(0.4)
  .sustain(0.2)
  .distort(2)
  .gain(0.6)
).cpm(34)

Drift Phonk Style:

stack(
sound("bd ~ ~ ~ bd ~ bd ~").bank("RolandTR808").distort(1.5),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808").distort(1.3),
sound("hh*16").bank("RolandTR808").gain(0.35),
sound("~ cb ~ cb ~ cb cb cb").bank("RolandTR808").gain(0.5),
note("c1 ~ c1 ~ c1 ~ c1 eb1")
  .s("sine")
  .decay(0.3)
  .sustain(0.2)
  .distort(2.5)
  .lpf(120)
  .gain(0.6)
).cpm(35)

Effects & Processing

Sidechain Compression

Create the pumping effect where other elements duck when the kick hits:

stack(
sound("bd ~ ~ ~ bd ~ bd ~").bank("RolandTR808"),
note("c2")
  .s("sawtooth")
  .lpf(400)
  .gain(perlin.range(0.2, 0.7).fast(4))
).cpm(22.5)

Lo-fi Textures

Add warmth by filtering and adding room:

stack(
sound("bd ~ ~ ~ bd ~ bd ~"),
sound("~ ~ ~ ~ sd ~ ~ ~"),
sound("hh*8").gain(0.4),
note("<c3,eb3,g3>")
  .s("sawtooth")
  .lpf(1500)
  .hpf(200)
  .room(0.3)
  .gain(0.3)
).cpm(22.5)

Reverb for Atmosphere

Add space and depth:

stack(
sound("bd ~ ~ ~ bd ~ bd ~").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808").room(0.4),
sound("hh hh oh hh hh hh oh hh").bank("RolandTR808").gain(0.4).room(0.2)
).cpm(22.5)

Delay Throws

Add rhythmic interest with delay:

note("c4 ~ eb4 ~")
.s("sawtooth")
.lpf(2000)
.decay(0.1)
.sustain(0)
.delay(0.4)
.delaytime(0.25)
.delayfeedback(0.3)
.cpm(22.5)

Distortion & Saturation

Add grit and aggression to 808s:

note("c1 ~ ~ ~ c1 ~ c1 ~")
.s("sine")
.decay(0.3)
.sustain(0.2)
.distort(2)
.lpf(150)
.gain(0.6)
.cpm(22.5)

Arrangement & Structure

Hip-hop tracks typically follow this structure:

Intro → Verse → Hook → Verse → Hook → Bridge → Hook → Outro

Building Energy with Filtering

Start filtered and open up:

stack(
sound("bd ~ ~ ~ bd ~ bd ~").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("hh*8").bank("RolandTR808").gain(0.4),
note("c2 ~ ~ ~ c2 ~ c2 ~")
  .s("sine")
  .decay(0.3)
  .sustain(0.2)
  .lpf(sine.range(100, 400).slow(8))
  .gain(0.6)
).cpm(22.5)

Drop Techniques

Remove elements and bring them back:

stack(
sound("bd ~ ~ ~ bd ~ bd ~").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808").gain("<1 1 1 0>"),
sound("hh*8").bank("RolandTR808").gain("<0.4 0.4 0.4 0>"),
note("c1 ~ ~ ~ c1 ~ c1 ~")
  .s("sine")
  .decay(0.3)
  .sustain(0.2)
  .gain("<0 0 0 0.8>")
).cpm(22.5)

Layering and Building

Add elements gradually:

stack(
sound("bd ~ ~ ~ bd ~ bd ~").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("hh*8").bank("RolandTR808").gain(0.4),
sound("oh").bank("RolandTR808").euclidRot(2, 8, 2).gain("<0 0 0.3 0.3>"),
note("c1 ~ ~ ~ c1 ~ c1 ~")
  .s("sine")
  .decay(0.3)
  .sustain(0.2)
  .gain(0.6),
note("<c3,eb3,g3>")
  .s("sawtooth")
  .lpf(1200)
  .attack(0.02)
  .decay(0.2)
  .sustain(0.2)
  .gain("<0 0.2 0.2 0.3>")
).cpm(22.5)

Complete Tracks

Boom Bap Track

stack(
// Drums
sound("bd ~ ~ ~ bd ~ ~ bd").bank("RolandTR808"),
sound("~ ~ ~ ~ [sd,cp] ~ ~ ~").bank("RolandTR808"),
sound("hh hh oh hh hh hh oh hh").bank("RolandTR808").gain(0.4),

// Bass
note("c2 ~ ~ ~ f2 ~ ~ c2")
  .s("sine")
  .decay(0.25)
  .sustain(0.1)
  .gain(0.55),

// Chords
note("<c3,eb3,g3,bb3> ~ <f3,ab3,c4,eb4> ~")
  .s("sawtooth")
  .lpf(1000)
  .attack(0.02)
  .decay(0.25)
  .sustain(0.15)
  .room(0.25)
  .gain(0.25)
).cpm(22.5)

Trap Track

stack(
// Drums
sound("bd ~ ~ ~ ~ ~ bd ~").bank("RolandTR808"),
sound("~ ~ ~ ~ sd ~ ~ ~").bank("RolandTR808"),
sound("~ ~ ~ ~ ~ ~ ~ oh").bank("RolandTR808").gain(0.35),
sound("hh").bank("RolandTR808").fast("<8 8 8 16>").gain(0.4),

// 808 Bass
note("c1 ~ ~ ~ ~ ~ c1 eb1")
  .s("sine")
  .decay(0.45)
  .sustain(0.3)
  .slide(0.1)
  .distort(1.2)
  .gain(0.6),

// Melody
note("c4 ~ eb4 ~ g4 ~ eb4 ~")
  .s("sawtooth")
  .lpf(2500)
  .attack(0.01)
  .decay(0.15)
  .sustain(0)
  .room(0.2)
  .gain(0.25)
).cpm(35)

Lo-fi Track

stack(
// Drums
sound("bd ~ ~ bd ~ ~ bd ~").gain(0.85),
sound("~ ~ ~ ~ sd ~ ~ ~").gain(0.7),
sound("hh ~ hh ~ hh ~ hh ~").gain(0.3),

// Bass
note("c2 ~ ~ ~ g1 ~ ~ ~")
  .s("sine")
  .decay(0.3)
  .sustain(0.1)
  .gain(0.45),

// Rhodes Chords
note("<c3,eb3,g3,bb3> <bb2,d3,f3,ab3> <ab2,c3,eb3,g3> <g2,bb2,d3,f3>")
  .s("sawtooth")
  .lpf(900)
  .attack(0.03)
  .decay(0.35)
  .sustain(0.15)
  .room(0.35)
  .gain(0.22)
).cpm(20).swing(0.1)

Hip-Hop Quick Reference

SubgenreBPMFeelKey Elements
Boom Bap85-95StraightPunchy kicks, snare on 2&4, jazzy samples
Trap140Half-timeFast hi-hats, 808 slides, sparse
Lo-fi75-90SwungDusty, jazzy, mellow
Drill140-145Half-timeSliding 808s, dark, sparse
Afrobeats95-110BouncyPolyrhythmic, log drums
Phonk130-145Half-timeCowbells, distorted 808s, dark

Common Drum Patterns

StyleKickSnareHi-Hat
Boom Bapbd ~ ~ ~ bd ~ ~ bd~ ~ ~ ~ sd ~ ~ ~Eighth notes
Trapbd ~ ~ ~ ~ ~ bd ~~ ~ ~ ~ sd ~ ~ ~16ths + rolls
Lo-fibd ~ ~ bd ~ ~ bd ~~ ~ ~ ~ sd ~ ~ ~Sparse 8ths
Drillbd ~ ~ ~ ~ ~ ~ bd~ ~ ~ ~ sd ~ ~ ~Sparse 8ths

Effect Settings

EffectLightMediumHeavy
Distort1.0-1.31.5-2.02.5-4.0
Room0.1-0.20.3-0.40.5+
Decay (808)0.15-0.250.3-0.40.5+

What You Learned

  • The TR-808 is hip-hop’s essential drum machine
  • Hip-hop kicks are syncopated, not on every beat like EDM
  • Snares anchor the groove on beats 2 and 4
  • 808 bass uses s("sine") with .decay() and .sustain()
  • .slide() creates the signature 808 pitch slide
  • .distort() adds warmth and presence to 808s
  • .slice() chops samples into rearrangeable pieces
  • Boom bap (85-95 BPM) uses punchy drums and jazzy chords
  • Trap (140 BPM) uses fast hi-hats with .fast() for rolls
  • Lo-fi uses .swing() for laid-back grooves
  • Drill features dark, sliding 808s with heavy .slide()
  • Afrobeats layers polyrhythmic percussion patterns
  • Phonk adds cowbells and heavy distortion
  • Filter automation (.lpf() with sine.range()) builds energy
  • Each subgenre has distinct BPM ranges and sonic characteristics