Explain this lesson in a simpler way for a beginner.
Absolutely — here’s the lesson broken down in a much simpler, beginner-friendly way.
# What this lesson is really about
In **ragga jungle**, the bass usually has 3 jobs:
- **Hold the low end** with a deep clean sub
- **Add attitude** with a rougher mid bass layer
- **Create groove** with syncopated rhythms and little slides
So instead of making **one complicated bass sound**, you make **two simple layers**:
1. **Sub layer** = deep sine wave
2. **Mid layer** = gritty, shorter bass stab
That’s the core of **Ragga Jungle Bassline Theory in Ableton Live 12**.
---
# The basic idea in one sentence
**Long clean sub notes + short off-beat gritty stabs + occasional slides = classic ragga jungle bass feel.**
---
# Step 1: Set up your bass in Ableton
## Create one MIDI track
- Set tempo to **170 BPM**
- Create a **MIDI track**
- Name it something like **Ragga Bass**
## Add an Instrument Rack
- Drag **Instrument Rack** onto the track
Now make **2 chains** inside it:
---
# Step 2: Make the sub layer
## Chain 1 = Sub
- Add **Operator**
- Use only **Oscillator A**
- Set it to a **Sine wave**
- Turn the other oscillators off
- Pitch it down **-1 or -2 octaves**
## Add basic clean-up
After Operator, add:
- **EQ Eight**
- cut below about **20 Hz**
- **Utility**
- set **Width to 0%** so the sub is mono
## What this does
This gives you the clean low-end weight.
This layer should feel **smooth, deep, and simple**.
---
# Step 3: Make the mid layer
## Chain 2 = Mid
- Add **Wavetable**
- Choose a basic darker wave like:
- triangle
- saw
- or any mellow bass waveform
## Shape it
- Put a **low-pass filter** on it
- Make the sound shorter and punchier with the filter envelope:
- short attack
- medium decay
- not too much sustain
## Add character
After Wavetable, add:
- **Saturator**
- **Drum Buss**
- **EQ Eight**
### EQ idea
- high-pass around **40–50 Hz**
- small boost around **200–600 Hz**
## What this does
This is the layer you actually **hear clearly** on smaller speakers.
It adds the **grit, knock, and ragga attitude**.
---
# Step 4: Balance both layers
Use the chain volumes in the Instrument Rack:
- **Sub louder than mid**
- **Mid audible but not overpowering**
A simple rule:
- if the bass sounds weak, raise the **mid**
- if it sounds thin, raise the **sub**
---
# Step 5: Program a very simple jungle pattern
For beginners, keep it easy.
## Start with a 2-bar MIDI clip
### Bar 1
- Hold one long **root note** for the sub
- Add two short mid stabs on off-beats
### Bar 2
- Do the same thing
- Add one short extra note near the end
---
# What “off-beat” means here
At 170 BPM, jungle bass often hits **between** the main beats, not always directly on them.
Instead of only placing notes on:
- 1
- 2
- 3
- 4
you also place short bass stabs on the **“and”** in between.
That creates the bouncy jungle feel.
## Easy beginner pattern
Try this feel:
- long sub note starts on **beat 1**
- short mid stab on **the “and” of 1**
- another short mid stab on **the “and” of 3**
This already sounds much more like jungle than just straight notes.
---
# Step 6: Keep note lengths different
This is very important.
## Sub notes
- make them **long**
- let them **sustain**
## Mid notes
- make them **short**
- more like stabs
Why?
Because ragga jungle bass works best when:
- the **sub fills space**
- the **mid creates rhythm**
---
# Step 7: Add slides later, not first
Slides are a classic ragga jungle sound, but as a beginner, don’t start there.
First get this right:
- good sub
- good mid layer
- good rhythm
Then add slides.
## Simplest slide method in Ableton
Use **Sampler** on a separate chain:
- set it to **Mono**
- turn on **Glide**
- overlap two MIDI notes slightly
That makes one note slide into the next.
## Where to use slides
Best place:
- just before a new bar
- or leading into a strong note
Small slides sound more musical than constant big ones.
---
# Step 8: Mix it so it works in DnB
In Drum & Bass, the bass must hit hard but not kill the kick.
## Important mixing rules
### 1. Keep the sub mono
Use **Utility**
- Width = **0%**
### 2. Don’t distort the sub too much
- keep the sub mostly clean
- put most distortion on the **mid layer**
### 3. Sidechain a little to the kick
Add **Compressor** after the full rack:
- turn on **Sidechain**
- choose the kick
- use light ducking
This helps the kick punch through.
### 4. Check with Spectrum
Use **Spectrum**
- watch the low end
- make sure the bass isn’t too messy around the sub area
---
# Beginner version of the full workflow
Here’s the simplest version of the whole lesson:
## Build
- Operator sine = sub
- Wavetable gritty bass = mid
- put both in an Instrument Rack
## Write
- long root note for the sub
- short off-beat notes for the mid
- repeat over 2 bars
## Improve
- add one chromatic approach note
- add one small slide
- automate mid filter cutoff a little
## Mix
- sub mono
- mid distorted
- sidechain lightly to kick
That’s enough to make a believable beginner ragga jungle bassline.
---
# What makes it sound “ragga jungle” specifically?
Not just the sound — the **rhythm**.
The style comes from:
- **syncopation**
- **off-beat stabs**
- **chromatic approach notes**
- **short slides**
- **reggae-inspired groove**
So if your bass sound is okay but the rhythm is boring, it won’t feel authentic.
---
# Beginner mistakes to avoid
## 1. Making both layers too busy
If sub and mid are both playing lots of short notes, it gets messy.
Better:
- sub = simple
- mid = rhythmic
## 2. Distorting the sub heavily
This often makes the low end weak.
Better:
- clean sub
- dirty mids
## 3. Putting bass too wide
Wide sub usually causes problems.
Better:
- mono low end
- only some width in upper mids if needed
## 4. Overdoing slides
Too many slides can sound cheesy or uncontrolled.
Better:
- use 1 or 2 good slides in a phrase
## 5. Writing everything exactly on the grid
Jungle groove often feels better with tiny timing imperfections.
At first, stay on-grid.
Later, try nudging some mid stabs slightly.
---
# Super simple practice exercise
Try this in Ableton Live 12:
## Sound setup
- Chain 1: Operator sine sub
- Chain 2: Wavetable mid bass with Saturator
## MIDI
At 170 BPM, make 2 bars:
### Bar 1
- root note held the whole bar
- short mid stab on **& of 1**
- short mid stab on **& of 3**
### Bar 2
- root note again
- one short note just before beat 4
- one note sliding into the next bar if you want
## Mixing
- Utility on sub: **0% width**
- Saturator on mid
- light sidechain to kick
This is enough to start hearing the style.
---
# Easy mental model
Think of the bass as:
- **Sub = body**
- **Mid = teeth**
- **Rhythm = personality**
- **Slides = flavor**
If you get those 4 things right, you’re close.
---
# If you want the fastest beginner version
Do this first:
1. Create Instrument Rack
2. Add **Operator sine sub**
3. Add **Wavetable gritty mid**
4. Write a long root note
5. Add 2 short off-beat stabs
6. Make sub mono
7. Saturate only the mid
8. Sidechain lightly to kick
That’s the lesson in its simplest practical form.
If you want, I can also turn this into:
- a **10-step checklist**
- a **beginner 2-bar MIDI example**
- or an **exact Ableton device-by-device setup** you can copy.
How do I make this sound darker, heavier, and more rolling for Drum & Bass?
Yes — for **darker, heavier, more rolling DnB**, you want to change **3 things** from the lesson:
1. **Darker tone**
2. **Heavier bass layering**
3. **More continuous rolling rhythm**
In the context of this **Ragga Jungle Bassline Theory in Ableton Live 12** lesson, that means keeping the same sub + mid idea, but tuning it away from “bright ragga bounce” and more toward **moody, weighty, rolling pressure**.
---
# 1. Make the tone darker
## Darken the mid layer first
Your **mid layer** is where most of the darkness comes from.
### In Wavetable:
- Use a **triangle**, **sine-saw hybrid**, or a duller wavetable
- Lower the filter cutoff
- Use a **24 dB low-pass filter**
- Keep resonance low or moderate
### Good starting point:
- Filter cutoff around **100–300 Hz** to start
- Envelope amount low to medium
- Short attack
- Decay around **150–300 ms**
- Sustain fairly low
This gives you a more **thuddy, muted, chesty** bass instead of a bright stab.
## Remove harsh top-end
After Saturator/Drum Buss on the mid chain:
- Add **EQ Eight**
- Low-pass somewhere around **2–5 kHz**
- Cut a little around **1–2 kHz** if it sounds too nasal
- Boost gently around **150–400 Hz** for weight
That’s a big part of getting “dark.”
---
# 2. Make it heavier
“Heavy” usually means:
- strong clean sub
- controlled low mids
- some harmonic grit
- not too much fizz
## Strengthen the sub
On the **Sub chain**:
### Operator
- Keep it as a **pure sine**
- Try **-2 octaves**
- Keep it clean
### Add:
- **EQ Eight**
- cut below **20 Hz**
- tiny boost around **50–80 Hz** only if needed
- **Utility**
- Width **0%**
## Add a little controlled weight
If the sub feels too polite:
- add **Saturator** very gently
- use soft clipping or analog clip style
- very low drive, like **1–2 dB**
You want a little extra harmonics, not audible distortion.
---
# 3. Make the groove more rolling
Ragga jungle often uses **stabs and syncopation**.
If you want it more **rolling DnB**, make the bass feel like it is **pulling forward constantly**, not just poking holes.
## Change the rhythm
Instead of:
- one long note
- a couple isolated off-beat stabs
Try:
- long sub foundations
- repeated short mid notes between them
- small fills leading into the next bar
## Good rolling idea
### Bar 1
- long sub on beat 1
- short mid notes on:
- **& of 1**
- **a of 2**
- **& of 3**
- small pickup before beat 4
### Bar 2
- repeat the motif
- add a chromatic approach or short slide before the loop resets
This creates a more **constant motion**.
---
# 4. Use shorter, more repeated mid notes
For rolling bass, the **mid layer should “chug” a bit more**.
## In the MIDI clip:
- keep the sub note long
- add more short mid notes at **1/16 length**
- repeat a motif across 2 bars
## Example feel:
- long sub underneath
- mid stabs every few 16ths
- not random — use a repeating pattern
That repetition is what makes it feel **rolling**, not chaotic.
---
# 5. Tighten the envelope for darker pressure
If the bass is too open, it feels brighter and less heavy.
## Mid layer settings
In **Wavetable**:
- Amp attack: very short
- Decay: medium-short
- Sustain: low to medium
- Release: short
In the **filter envelope**:
- Keep it subtle
- Let it open the sound only a little
- Don’t make it plucky and bright
You want **“doof / thud / growl”**, not “wah.”
---
# 6. Saturate the mids, not the sub
This is very important for dark DnB.
## On the Mid chain:
Try this order:
- **Wavetable**
- **Saturator**
- **Drum Buss**
- **EQ Eight**
### Saturator
- Moderate drive
- Don’t overdo highs
- Try soft clipping on
### Drum Buss
- very subtle
- a little **Drive**
- a little **Transient**
- be careful with **Boom**
Too much Boom can blur the sub.
## Goal
You want the mid layer to sound:
- dense
- dirty
- thick
- controlled
Not fizzy.
---
# 7. Emphasize low-mid body
Dark DnB often feels heavy because of the **low-mid area**, not just sub.
## Focus area:
- roughly **120–350 Hz**
- sometimes up to **500 Hz**
On the mid chain EQ:
- small boost around **180–300 Hz**
- cut mud if needed around **250–350 Hz**
- if it disappears on speakers, add a little around **500–700 Hz**
This gives you more **body** and “rolling mass.”
---
# 8. Add subtle movement, not obvious wobble
For darker rolling Drum & Bass, movement should feel **tense and controlled**.
## Good movement options
### Option A: automate filter cutoff slightly
- very small changes over 2 or 4 bars
- don’t make it too obvious
### Option B: velocity to filter envelope
- make harder hits slightly brighter
- softer hits slightly duller
### Option C: tiny pitch drift on mid layer only
- very subtle LFO to pitch
- keep it tiny so it feels unstable, not out of tune
This helps the bass feel alive without becoming a wobble bass.
---
# 9. Use slides more carefully
For darker rolling DnB, don’t use loads of dramatic ragga slides.
Instead:
- shorter slides
- occasional chromatic push
- subtle approach notes before strong beats
## Best use:
- a quick slide into the downbeat
- a semitone approach near the end of bar 2
- one slide every phrase, not every beat
That keeps the groove serious and heavy.
---
# 10. Make the kick and bass work together
Heavy DnB bass only feels heavy if the low end is controlled.
## On the full bass rack / bass bus:
Add **Compressor** with sidechain from kick:
- fast attack
- medium release
- only **2–4 dB** gain reduction
That helps the kick hit cleanly while keeping the bass loud.
## Also:
- keep sub mono
- high-pass the mid layer around **40–50 Hz**
- check in mono
If kick and bass are fighting, the track won’t feel heavy — it’ll just feel muddy.
---
# 11. Easy “darker and heavier” device changes from your current patch
If you already built the lesson patch, do this:
## Sub chain
- Keep Operator sine
- Set octave lower if needed
- Utility Width = 0%
- Add tiny Saturator if needed
## Mid chain
- Lower the filter cutoff
- Use 24 dB low-pass
- Reduce envelope brightness
- Add Saturator
- Add Drum Buss lightly
- EQ:
- high-pass 40–50 Hz
- boost 150–300 Hz a bit
- low-pass 3–5 kHz
## MIDI
- keep the sub simpler
- add more short repeated mid notes
- use fewer big gaps
- add one subtle slide or chromatic approach
That alone should move it toward **dark rolling DnB**.
---
# 12. A simple darker 2-bar idea
Try this approach:
## Sub
- hold root note for most of bar 1
- re-trigger or change note late in bar 2
## Mid
Place short notes on:
- **& of 1**
- **& of 2**
- **& of 3**
- one short note before beat 4
- in bar 2, repeat with one chromatic lead-in
This gives more of a **rolling engine** feeling.
---
# 13. What to avoid if you want dark/heavy
Avoid these:
- too much top-end distortion
- too much resonance
- too many bright filter plucks
- wide stereo low end
- long messy releases
- too many flashy slides
Those things usually make it sound more jump-up or bright jungle, not dark and heavy.
---
# 14. Fastest recipe for darker, heavier, more rolling
If you want the shortest version:
## Sound
- clean sine sub
- darker filtered mid
- more low-mids
- less top-end
## Processing
- saturate mids
- keep sub mono
- low-pass the mids
- sidechain lightly to kick
## MIDI
- long sub
- short repeating 16th-note mid stabs
- small chromatic lead-ins
- subtle slides only
---
# 15. Good mental target
Think:
- **Sub = pressure**
- **Mid = darkness**
- **Rhythm = roll**
- **Slide = tension**
If you want, I can give you either:
1. a **dark rolling 2-bar MIDI pattern** you can draw in by hand, or
2. an **exact Ableton stock device chain** with suggested settings for a darker/heavier bass rack.
give me a ragga style dnb midi fo this 32 bars length
Absolutely — here’s a **32-bar ragga-style DnB bass MIDI plan** you can program directly in **Ableton Live 12**, based on the lesson’s approach:
- **long clean sub**
- **short off-beat mid stabs**
- **chromatic approach notes**
- **occasional slides**
- **call-and-response over 8-bar phrases**
I’ll keep it practical and easy to draw in.
---
# Before you program it
## Project setup
- Tempo: **170 BPM**
- Key: let’s use **F minor**
- Main root note: **F1** for sub
- Build this on your **Ragga Bass Rack** from the lesson:
- **Sub chain** = long notes
- **Mid chain** = short stabs
- optional **Slide chain** = Sampler glide
## Ableton MIDI tip
In one MIDI clip, you can still program everything together, but think like this:
- **Long notes** = sub function
- **Short notes** = mid stab function
- **Overlapping notes** = slide moments if using Sampler legato glide
---
# Note choices for the style
For a ragga jungle / ragga DnB flavor in **F minor**, use mostly:
- **F** = root
- **C** = 5th
- **Eb** = minor 7th
- **E** = chromatic approach into F
- **Gb** = chromatic tension
- **G** = passing tone sometimes
Keep the **lowest sub mostly on F and C**.
Use **E or Gb** as quick approach notes.
---
# 32-bar structure
We’ll divide it into:
- **Bars 1–8** = main groove A
- **Bars 9–16** = variation A2
- **Bars 17–24** = groove B / response
- **Bars 25–32** = final variation / lift
This is the easiest way to make 32 bars feel musical instead of repetitive.
---
# MIDI rhythm legend
I’ll describe rhythm using beat positions:
- **1**
- **1.2**
- **1.3**
- **1.4**
Meaning each beat split into 16ths.
So:
- **1.1** = beat 1
- **1.2** = second 16th
- **1.3** = third 16th = the “&”
- **1.4** = fourth 16th
For ragga style, a lot of the short stabs land on:
- **1.3**
- **2.4**
- **3.3**
- **4.4**
That gives the bounce.
---
# Bars 1–8: Main groove A
This is your core pattern.
Program this first, then duplicate.
## Bar 1
- **F1** — start at **1.1**, hold nearly whole bar
- Short stab **F2** at **1.3**
- Short stab **C2** at **3.3**
## Bar 2
- **F1** — start at **1.1**, hold to about beat 3
- Short stab **Eb2** at **2.3**
- Short stab **F2** at **3.3**
- Very short **E2** at **4.4** as approach into next bar
## Bar 3
- **F1** — hold whole bar
- Short stab **F2** at **1.3**
- Short stab **Gb2** at **2.4**
- Short stab **C2** at **3.3**
## Bar 4
- **C1** — start at **1.1**, hold half bar
- **Eb1** — start at **3.1**, hold to beat 4
- Short stab **C2** at **1.3**
- Short stab **Eb2** at **3.3**
- Very short **E2** at **4.4**
## Bar 5
Repeat **Bar 1**
## Bar 6
Repeat **Bar 2**, but add one more short stab:
- extra **F2** at **4.2**
## Bar 7
Repeat **Bar 3**
## Bar 8
This is your first phrase ending:
- **F1** at **1.1**, hold to beat 2
- **E1** at **2.4**, very short
- **F1** at **3.1**, hold
- Short stab **C2** at **1.3**
- Short stab **Eb2** at **3.3**
- Optional slide: overlap **E2 into F2** from **4.3 to 1.1 of next bar**
---
# Bars 9–16: Variation A2
Now keep the same groove idea, but make it a little busier and more rolling.
## Bar 9
- **F1** hold whole bar
- Stabs:
- **F2** at **1.3**
- **Eb2** at **2.4**
- **C2** at **3.3**
## Bar 10
- **F1** hold to beat 3
- **C1** at **3.4**, short
- Stabs:
- **F2** at **1.3**
- **Gb2** at **2.3**
- **Eb2** at **4.2**
- Very short **E2** at **4.4**
## Bar 11
- **Eb1** at **1.1**, hold half bar
- **F1** at **3.1**, hold rest
- Stabs:
- **Eb2** at **1.3**
- **F2** at **3.3**
- **C2** at **4.2**
## Bar 12
- **C1** hold whole bar
- Stabs:
- **C2** at **1.3**
- **Eb2** at **2.4**
- **Gb2** at **3.3**
- Short **E2** at **4.4** into next bar
## Bar 13
Same as Bar 9
## Bar 14
Same as Bar 10 but add a quicker pickup:
- extra short **F2** at **4.3**
## Bar 15
- **F1** hold whole bar
- Stabs:
- **F2** at **1.3**
- **C2** at **2.4**
- **Eb2** at **3.3**
- **F2** at **4.2**
## Bar 16
Phrase ending / turnaround:
- **E1** at **4.4 of previous feel** or just use:
- **F1** at **1.1**, hold to beat 2
- **Gb1** at **2.4**, short
- **F1** at **3.1**, hold
- Stabs:
- **Eb2** at **1.3**
- **C2** at **3.3**
- Add a **slide from E2 to F2** at the very end
---
# Bars 17–24: Groove B / call-and-response
Now shift the feel a bit so it answers the first half.
Use a slightly more melodic shape, but still keep the sub simple.
## Bar 17
- **C1** hold whole bar
- Stabs:
- **C2** at **1.3**
- **Eb2** at **2.4**
- **F2** at **3.3**
## Bar 18
- **Eb1** hold to beat 3
- Stabs:
- **Eb2** at **1.3**
- **F2** at **2.3**
- **Gb2** at **4.2**
- Short **E2** at **4.4**
## Bar 19
- **F1** hold whole bar
- Stabs:
- **F2** at **1.3**
- **C2** at **2.4**
- **Eb2** at **3.3**
- **F2** at **4.2**
## Bar 20
- **C1** at **1.1**, hold half bar
- **F1** at **3.1**, hold
- Stabs:
- **C2** at **1.3**
- **Eb2** at **3.3**
- Approach **E2** at **4.4**
## Bar 21
Repeat **Bar 17**
## Bar 22
Repeat **Bar 18**, but if using Sampler glide:
- overlap **Gb2 into F2** around beat 4 for a quick downward slide
## Bar 23
- **F1** hold whole bar
- Stabs:
- **F2** at **1.3**
- **Gb2** at **2.4**
- **F2** at **3.3**
- **C2** at **4.2**
## Bar 24
Break-end style turnaround:
- **Eb1** at **1.1**, hold to beat 2
- **E1** at **2.4**, very short
- **F1** at **3.1**, hold
- Stabs:
- **Eb2** at **1.3**
- **F2** at **3.3**
- Optional long slide into next section
---
# Bars 25–32: Final variation / lift
This section should feel like the strongest version of the groove.
Make it a little more active, but don’t overcrowd the sub.
## Bar 25
- **F1** hold whole bar
- Stabs:
- **F2** at **1.3**
- **C2** at **2.4**
- **Eb2** at **3.3**
- **F2** at **4.2**
## Bar 26
- **F1** hold to beat 3
- **E1** at **4.4** short
- Stabs:
- **F2** at **1.3**
- **Gb2** at **2.3**
- **Eb2** at **3.3**
- **C2** at **4.2**
## Bar 27
- **C1** hold whole bar
- Stabs:
- **C2** at **1.3**
- **Eb2** at **2.4**
- **F2** at **3.3**
## Bar 28
- **Eb1** hold half bar
- **F1** hold second half
- Stabs:
- **Eb2** at **1.3**
- **F2** at **3.3**
- **Gb2** at **4.2**
## Bar 29
Repeat **Bar 25**
## Bar 30
Repeat **Bar 26**, but add:
- tiny extra **F2** at **4.3**
## Bar 31
- **F1** hold whole bar
- Stabs:
- **F2** at **1.3**
- **Eb2** at **2.4**
- **C2** at **3.3**
- **Gb2** at **4.2**
## Bar 32
Final turnaround:
- **F1** at **1.1**, hold to beat 2
- **E1** at **2.4**, short
- **F1** at **3.1**, hold to end
- Stabs:
- **F2** at **1.3**
- **C2** at **3.3**
- Optional final **E2 → F2** slide into loop restart
---
# Super simple Ableton method to build this fast
## Step 1
Make an **8-bar MIDI clip**
## Step 2
Draw bars **1–8**
## Step 3
Duplicate it to make **16 bars**
## Step 4
Edit bars **9–16** with the variation notes above
## Step 5
Duplicate that to reach **32 bars**
## Step 6
Edit bars **17–24** and **25–32**
This is much faster than writing all 32 bars from zero.
---
# Note lengths
This part matters a lot for the groove.
## Sub notes
- Usually **1/2 bar to full bar**
- Let them sustain
## Mid stabs
- Usually **1/16** or slightly shorter
- Very tight
- In Ableton, try around **50–120 ms** by ear
## Approach notes
- Very short
- **1/32** or short **1/16**
## Slide notes
- Overlap slightly if using **Sampler Glide**
- Overlap by around **5–30 ms**
---
# How to make it sound more ragga
From the lesson, the key ragga elements are:
- **off-beat accents**
- **chromatic lead-ins**
- **simple root-heavy sub**
- **occasional glide**
- **call-and-response phrasing**
So when programming this in Ableton:
- keep the **sub simple**
- make the **mid rhythmic**
- put the **busy movement mostly near bar endings**
- don’t add too many notes every bar
---
# Ableton-specific workflow tip
Because your lesson patch uses layered bass:
## Option 1: one MIDI clip for all layers
Good if your rack is already balanced.
## Option 2: split MIDI to 2 tracks
If easier for editing:
- Track 1 = **Sub MIDI**
- Track 2 = **Mid/Slide MIDI**
This is often easier for arranging 32 bars because:
- sub stays clean and simple
- mid can get more syncopated
- slides are easier to control
If you want, I’d actually recommend this for intermediate workflow in **Ableton Live 12**.
---
# Quick 8-bar motif version you can loop
If you want the shortest usable version, use this **8-bar core**, then vary it:
### Bar 1
- Sub: **F1 long**
- Mid: **F2 @ 1.3**, **C2 @ 3.3**
### Bar 2
- Sub: **F1 long**
- Mid: **Eb2 @ 2.3**, **F2 @ 3.3**, **E2 @ 4.4**
### Bar 3
- Sub: **F1 long**
- Mid: **F2 @ 1.3**, **Gb2 @ 2.4**, **C2 @ 3.3**
### Bar 4
- Sub: **C1 half**, **Eb1 half**
- Mid: **C2 @ 1.3**, **Eb2 @ 3.3**, **E2 @ 4.4**
### Bar 5
repeat 1
### Bar 6
repeat 2 + extra stab at **4.2**
### Bar 7
repeat 3
### Bar 8
- Sub: **F1 / E1 / F1 turnaround**
- Mid: **C2 @ 1.3**, **Eb2 @ 3.3**, slide into next phrase
That already gives you a solid ragga-style DnB foundation.
---
# Mixing reminder from the lesson
Once the MIDI is in:
- **Sub chain** mostly clean
- **Mid chain** gritty with Saturator / Drum Buss
- **High-pass mid around 40–50 Hz**
- **Sub mono with Utility**
- **light sidechain to kick**
- check **Spectrum** around **40–120 Hz**
If it feels too cheerful and you want it heavier:
- lower the mid filter cutoff
- reduce bright highs
- add more low-mid body around **150–350 Hz**
---
# Best next step
If you want, I can turn this into either:
1. a **clean bar-by-bar MIDI table**
2. an **Ableton piano roll grid version**
3. a **simpler 16-bar version first**, then we expand it to 32 bars
4. a **darker/heavier version** of this exact 32-bar pattern
If you want, I can do the next reply as a **very neat copyable MIDI chart**.
the file please
I can’t directly attach or generate a real `.mid` file in chat, but I can give you the **exact MIDI data in a file-ready format** so you can recreate it fast in **Ableton Live 12**.
## Fastest option
I can format it as either:
1. **CSV-style note list** you can copy manually into Ableton
2. **Piano roll chart** bar-by-bar
3. **Standard MIDI import text format** for easy conversion
4. **Simplified 2-track version**:
- Track 1 = Sub
- Track 2 = Mid/Slides
### Best choice for Ableton:
I recommend **2-track note list format**, because this lesson works best when:
- **Sub stays simple and clean**
- **Mid handles the ragga rhythm**
- **Slides are easier to control**
If you want, I can give you the full **32-bar file-style note chart** in the next message.
## Even better:
If you want a real downloadable file, I can prepare it in one of these formats for you to paste into a MIDI converter tool:
- **MusicXML-style note list**
- **MIDI CSV**
- **Python MIDO script** that exports a `.mid`
- **Ableton-friendly note table**
### Recommended:
Say one of these:
- **“give me the MIDI CSV”**
- **“give me the Python script to make the .mid file”**
- **“give me the Ableton note table”**
If you want, I can do it right now as a **Python script that exports the 32-bar ragga DnB MIDI file**.
Python script that exports the 32-bar ragga DnB MIDI file
lesson chat ragga-jungle-bassline-theory-in-ableton-live-12-intermediate-basslines timed out after 60000ms
lesson chat ragga-jungle-bassline-theory-in-ableton-live-12-intermediate-basslines timed out after 60000ms
lesson chat ragga-jungle-bassline-theory-in-ableton-live-12-intermediate-basslines timed out after 60000ms
Explain this lesson in a simpler way for a beginner.
Absolutely — here’s the lesson explained in a **very simple beginner way**.
# What this lesson is about
This lesson teaches you how to make a **ragga jungle bassline** in **Ableton Live 12**.
The basic idea is:
- **deep clean sub** underneath
- **short dirty bass hits** on top
- **off-beat rhythm**
- **small slides** sometimes
So instead of one bass sound, you build **2 layers**:
1. **Sub layer** = low, clean, smooth
2. **Mid layer** = short, gritty, punchy
That’s the core of **Ragga Jungle Bassline Theory in Ableton Live 12**.
---
# The beginner version in one sentence
**Hold a long sub note, add short off-beat bass stabs, and use a few quick slide notes.**
---
# Step 1: Start your Ableton project
- Set the tempo to **170 BPM**
- Make a new **MIDI track**
- Name it **Ragga Bass**
Drag an **Instrument Rack** onto the track.
---
# Step 2: Make the sub layer
Inside the Instrument Rack, create a chain called **Sub**.
Add **Operator**.
Use these simple settings:
- only **Oscillator A** on
- waveform = **Sine**
- pitch down **-1 or -2 octaves**
Then add:
- **EQ Eight**
- cut below about **20 Hz**
- **Utility**
- set **Width = 0%**
## Why?
This gives you the **clean low-end weight**.
This layer should stay **simple and mono**.
---
# Step 3: Make the mid layer
Create a second chain called **Mid**.
Add **Wavetable**.
Use a simple darker waveform like:
- triangle
- saw
- or a dull bass wave
Then:
- turn on a **low-pass filter**
- make it short and punchy with the envelope
After Wavetable, add:
- **Saturator**
- **Drum Buss**
- **EQ Eight**
Basic EQ idea:
- cut below **40–50 Hz**
- boost a little around **200–600 Hz**
## Why?
This is the part that gives the bass its **character** and helps it be heard on speakers.
---
# Step 4: Understand the rhythm
This style is not just about sound.
It is mostly about **groove**.
Ragga jungle bass usually works like this:
- **sub notes are long**
- **mid notes are short**
- short notes often hit **between the beats**
That “between the beats” feeling is what gives it bounce.
---
# Step 5: Write a very simple 2-bar pattern
Start easy.
## Bar 1
- one long **root note** for the whole bar
- one short mid stab on the **& of 1**
- one short mid stab on the **& of 3**
## Bar 2
- another long root note
- add 2 or 3 short stabs
- put one tiny note just before the next bar
This already sounds much closer to jungle.
---
# Step 6: Keep note lengths different
This is very important.
## Sub notes
- long
- sustained
## Mid notes
- short
- stabby
## Why?
Because:
- the **sub gives weight**
- the **mid gives rhythm**
If both are short and busy, it gets messy.
---
# Step 7: Add chromatic approach notes
A classic ragga jungle trick is to use a note **one semitone away** from the main note right before it.
Example:
- if your main note is **F**
- play **E** very quickly before it
This creates that little **ragga/jungle flavor**.
Keep these notes very short.
---
# Step 8: Add slides later
Slides are important, but don’t start with them first.
First get this right:
- clean sub
- gritty mid
- strong rhythm
Then add a slide.
## Easy slide method in Ableton
Use **Sampler** on another chain:
- set it to **Mono**
- turn on **Glide**
- overlap two MIDI notes slightly
That makes one note slide into the next.
## Best place for slides
- right before a new bar
- into an important note
- at the end of a phrase
Use them **sometimes**, not everywhere.
---
# Step 9: Mix it properly for DnB
In Drum & Bass, the bass must be strong but still leave room for the kick.
## Main rules
### Keep the sub mono
Use **Utility**
- Width = **0%**
### Don’t distort the sub too much
- keep sub mostly clean
- distort the **mid layer**, not the sub
### Sidechain a little to the kick
After the whole rack, add **Compressor**
- turn on **Sidechain**
- choose your kick
- use light ducking
### Check the low end
Use **Spectrum**
- look at the low frequencies
- make sure it’s not messy
---
# What makes it sound like ragga jungle?
Not just the bass sound.
It’s the combination of:
- **off-beat stabs**
- **syncopation**
- **chromatic approach notes**
- **short slides**
- **reggae-style groove**
So if your sound is okay but the rhythm is boring, it won’t feel right.
---
# Common beginner mistakes
## 1. Making the sub too complicated
Keep it simple and stable.
## 2. Distorting the sub too much
This weakens the low end.
## 3. Making everything wide
Sub should stay centered and mono.
## 4. Too many slides
Use only a few.
## 5. Making both layers too busy
Better:
- sub = simple
- mid = rhythmic
---
# The simplest full workflow
## Build
- Operator sine = sub
- Wavetable gritty bass = mid
- put both in Instrument Rack
## Write
- long root note
- short off-beat stabs
- one quick approach note
## Improve
- add one small slide
- automate the mid filter a little
## Mix
- sub mono
- mid saturated
- light sidechain to kick
---
# Easy mental model
Think of it like this:
- **Sub = weight**
- **Mid = grit**
- **Rhythm = groove**
- **Slides = spice**
If you get those 4 things right, you’re doing the lesson correctly.
---
# Super short beginner checklist
- Set project to **170 BPM**
- Make **Instrument Rack**
- Add **Operator sine sub**
- Add **Wavetable mid bass**
- Keep sub **long**
- Keep mid notes **short**
- Put mid stabs on **off-beats**
- Add one quick **approach note**
- Add one small **slide**
- Keep sub **mono**
- Sidechain lightly to kick
---
If you want, I can also turn this into:
1. a **10-step checklist**
2. a **copyable 2-bar MIDI example**
3. an **exact Ableton stock-device setup** for beginners
Turn this lesson into a practical studio checklist.
Absolutely — here’s a **practical studio checklist** for this lesson: **Ragga Jungle Bassline Theory in Ableton Live 12**.
Use this like a step-by-step session guide while producing.
---
# Ragga Jungle Bassline Studio Checklist
## 1) Set up the project
- [ ] Open a new Ableton Live 12 project
- [ ] Set tempo to **170 BPM**
- [ ] Create **1 MIDI track**
- [ ] Name it **Ragga Bass**
- [ ] Drag an **Instrument Rack** onto the track
---
## 2) Build the sub layer
Inside the Instrument Rack:
- [ ] Create a chain called **Sub**
- [ ] Load **Operator**
- [ ] Turn on only **Oscillator A**
- [ ] Set waveform to **Sine**
- [ ] Pitch it down **-1 or -2 octaves**
- [ ] Turn off filter if you want the cleanest sub
Add cleanup after Operator:
- [ ] Add **EQ Eight**
- [ ] High-pass very low rumble around **20 Hz**
- [ ] Add **Utility**
- [ ] Set **Width = 0%** to keep sub mono
### Check:
- [ ] Sub sounds **clean**
- [ ] Sub sounds **deep**
- [ ] Sub is **not distorted too much**
- [ ] Sub feels solid with the kick
---
## 3) Build the mid layer
Inside the same Instrument Rack:
- [ ] Create a chain called **Mid**
- [ ] Load **Wavetable**
- [ ] Choose a darker waveform:
- [ ] triangle
- [ ] saw
- [ ] dull bass wavetable
- [ ] Pitch down **-1 or -2 octaves**
- [ ] Turn on a **low-pass filter**
Shape the sound:
- [ ] Set **short attack**
- [ ] Set **medium-short decay**
- [ ] Keep **sustain low to medium**
- [ ] Keep **release short**
Add processing:
- [ ] Add **Saturator**
- [ ] Add **Drum Buss**
- [ ] Add **EQ Eight**
EQ idea:
- [ ] High-pass around **40–50 Hz**
- [ ] Boost a little around **200–600 Hz**
- [ ] If too bright, low-pass the top end
### Check:
- [ ] Mid layer sounds **gritty**
- [ ] Mid layer sounds **short and punchy**
- [ ] Mid layer does **not fight the sub**
---
## 4) Balance the layers
- [ ] Lower the **Mid** if it is masking the sub
- [ ] Raise the **Mid** if the bass is too hard to hear on small speakers
- [ ] Keep the **Sub** as the foundation
- [ ] Keep the **Mid** as the character
### Quick rule:
- [ ] **Sub = weight**
- [ ] **Mid = attitude**
---
## 5) Program the basic MIDI groove
Create a **2-bar MIDI clip** first.
### Bar 1
- [ ] Draw one long **root note** for the sub
- [ ] Add a short stab on the **& of 1**
- [ ] Add a short stab on the **& of 3**
### Bar 2
- [ ] Draw another long root note
- [ ] Add 2–3 short stabs
- [ ] Put one short note near the end as a lead-in
### Check:
- [ ] Long notes feel like the **sub layer**
- [ ] Short notes feel like the **mid rhythm**
- [ ] Groove feels syncopated, not stiff
---
## 6) Use ragga-jungle note behavior
- [ ] Keep **sub notes long**
- [ ] Keep **mid notes short**
- [ ] Use **off-beat stabs**
- [ ] Leave some **gaps/rests**
- [ ] Repeat a motif so the groove feels musical
### Good habit:
- [ ] Don’t make every note busy
- [ ] Let the rhythm breathe
---
## 7) Add chromatic approach notes
- [ ] Before an important note, add a note **1 semitone above or below**
- [ ] Make it very short
- [ ] Place it near the end of the bar or before a strong beat
### Example:
- [ ] Main note = **F**
- [ ] Approach note = **E** right before it
### Check:
- [ ] Approach note adds tension
- [ ] It sounds musical, not random
---
## 8) Add slides
Only after the groove works.
### Easy Ableton method:
- [ ] Create another chain if needed called **Slide**
- [ ] Load **Sampler**
- [ ] Set it to **Mono**
- [ ] Turn on **Glide**
- [ ] Overlap MIDI notes slightly
### Use slides:
- [ ] At phrase endings
- [ ] Into a downbeat
- [ ] Before an important root note
### Check:
- [ ] Slides are short and controlled
- [ ] Slides add flavor, not chaos
---
## 9) Add Ableton macros
In the Instrument Rack, map these useful controls:
- [ ] **Sub Level**
- [ ] **Mid Level**
- [ ] **Mid Filter Cutoff**
- [ ] **Mid Drive**
### Why:
- [ ] Faster balancing
- [ ] Easy arrangement movement
- [ ] Better live tweaking while looping
---
## 10) Mix the bass for Drum & Bass
After the rack or on a bass bus:
### Kick interaction
- [ ] Add **Compressor**
- [ ] Turn on **Sidechain**
- [ ] Choose the **Kick**
- [ ] Use light ducking:
- [ ] fast attack
- [ ] medium release
- [ ] only a few dB gain reduction
### Low-end control
- [ ] Keep the **sub mono**
- [ ] Make sure the **mid chain is high-passed**
- [ ] Watch low frequencies with **Spectrum**
### Tone control
- [ ] Distort **mid**, not the pure sub
- [ ] Use **Drum Buss** carefully
- [ ] Use **EQ Eight** to remove mud if needed
---
## 11) Check for common mistakes
- [ ] Sub is not too wide
- [ ] Sub is not over-distorted
- [ ] Mid layer is not too bright
- [ ] Mid release is not too long
- [ ] Slides are not everywhere
- [ ] Bass is not clashing with the kick
- [ ] Pattern is not overfilled with notes
---
## 12) Make it feel more authentic
- [ ] Nudge some short mid stabs slightly off-grid if needed
- [ ] Try a little groove from the **Groove Pool**
- [ ] Keep the sub steady
- [ ] Let the mids create the bounce
- [ ] Use small variations every 2 or 4 bars
---
## 13) Arrangement checklist
Once the 2-bar loop works:
- [ ] Duplicate it to 8 bars
- [ ] Change one stab pattern every few bars
- [ ] Add one extra approach note in a variation
- [ ] Add one slide at a phrase ending
- [ ] Automate **Mid Filter Cutoff**
- [ ] Automate **Mid Level** or **Drive** for energy
### Goal:
- [ ] Main groove stays recognizable
- [ ] Small changes keep it alive
---
## 14) Final quality check
- [ ] Listen in **mono**
- [ ] Listen on **headphones**
- [ ] Check if the sub disappears anywhere
- [ ] Check if the kick still punches through
- [ ] Check **Spectrum** around **40–120 Hz**
- [ ] Compare with a reference jungle / ragga DnB track
---
# Super short version
If you want the fastest possible checklist:
- [ ] 170 BPM
- [ ] Instrument Rack
- [ ] Operator sine sub
- [ ] Wavetable gritty mid
- [ ] Sub mono
- [ ] Mid saturated
- [ ] Long sub note
- [ ] Short off-beat stabs
- [ ] One chromatic approach note
- [ ] One small slide
- [ ] Light sidechain to kick
- [ ] Check in mono
---
# Best workflow order
Use this order every time:
1. [ ] Build sub
2. [ ] Build mid
3. [ ] Balance layers
4. [ ] Write 2-bar groove
5. [ ] Add approach notes
6. [ ] Add slides
7. [ ] Sidechain and EQ
8. [ ] Duplicate and arrange
9. [ ] Check mono and reference
---
If you want, I can next turn this into either:
- a **printable one-page checklist**
- a **beginner 2-bar Ableton note chart**
- or a **device-by-device Ableton setup checklist**
yey the cat command should do it
Yep — if you already have the Python script, a simple **cat > file.py** command is enough.
## 1) Save the script
In Terminal:
```bash
cat > ragga_dnb_midi.py
```
Paste the Python script, then press:
- **Ctrl+D** to save and exit
---
## 2) Install the MIDI library
If the script uses **mido**:
```bash
pip install mido
```
If it also needs the backend package:
```bash
pip install python-rtmidi
```
For just exporting a `.mid` file, often **mido** alone is enough.
---
## 3) Run the script
```bash
python ragga_dnb_midi.py
```
or if needed:
```bash
python3 ragga_dnb_midi.py
```
That should create the MIDI file in the same folder, usually something like:
```bash
ragga_dnb_32bar.mid
```
---
## 4) Import into Ableton Live 12
- Open your project at **170 BPM**
- Drag the `.mid` file into Live
- Put it on your **Ragga Bass Rack** track
- If needed, split it into:
- **Sub MIDI**
- **Mid/Slide MIDI**
That fits this lesson better, because in **Ragga Jungle Bassline Theory in Ableton Live 12**, the sub should stay simple and the rhythmic movement should mostly come from the mid layer and slide notes.
---
## 5) Quick Ableton check after import
- **Sub notes** = long
- **Mid notes** = short
- **Approach notes** = very short
- **Slides** = overlap notes only on the slide chain
- **Sub chain** mono with **Utility**
- **Mid chain** gritty with **Saturator / Drum Buss**
- Light **sidechain** to kick
---
## 6) If you want, I can do the next part
If by “the cat command should do it” you mean you’re ready for the actual file content, I can now give you:
- the **full Python script**
- ready to paste into `cat > ragga_dnb_midi.py`
- exporting the **32-bar ragga jungle / ragga DnB MIDI file**
If you want that, just say:
**“paste the script”**
paste the script
- the **full Python script**
- ready to paste into `cat > ragga_dnb_midi.py`
- exporting the **32-bar ragga jungle / ragga DnB MIDI file**
Absolutely — here’s a **full Python script** you can paste into:
```bash
cat > ragga_dnb_midi.py
```
Then press **Ctrl+D** and run it with:
```bash
python3 ragga_dnb_midi.py
```
It will export a MIDI file called:
```bash
ragga_dnb_32bar.mid
```
This script is written around the lesson’s workflow for **Ragga Jungle Bassline Theory in Ableton Live 12**:
- **Track 1 = Sub**
- **Track 2 = Mid / stabs / approach notes / simple slide phrasing**
- **170 BPM**
- **32 bars**
- key center: **F minor**
- long sub + short off-beat ragga/jungle stabs
---
## Python script
```python
from mido import Message, MidiFile, MidiTrack, MetaMessage, bpm2tempo
# ============================================
# Ragga Jungle / Ragga DnB 32-bar MIDI export
# For Ableton Live 12 bassline practice
# Lesson context:
# Ragga Jungle Bassline Theory in Ableton Live 12
# ============================================
mid = MidiFile(ticks_per_beat=480)
tempo = bpm2tempo(170)
# Tracks
meta_track = MidiTrack()
sub_track = MidiTrack()
mid_track = MidiTrack()
mid.tracks.append(meta_track)
mid.tracks.append(sub_track)
mid.tracks.append(mid_track)
# Meta
meta_track.append(MetaMessage('track_name', name='Tempo', time=0))
meta_track.append(MetaMessage('set_tempo', tempo=tempo, time=0))
meta_track.append(MetaMessage('time_signature', numerator=4, denominator=4, clocks_per_click=24, notated_32nd_notes_per_beat=8, time=0))
sub_track.append(MetaMessage('track_name', name='Sub', time=0))
mid_track.append(MetaMessage('track_name', name='Mid_Stabs', time=0))
TPB = 480 # ticks per beat
BAR = TPB * 4
SIXTEENTH = TPB // 4
THIRTYSECOND = TPB // 8
# MIDI note map
NOTES = {
'E1': 28,
'F1': 29,
'Gb1': 30,
'G1': 31,
'C1': 24,
'Eb1': 27,
'E2': 40,
'F2': 41,
'Gb2': 42,
'G2': 43,
'C2': 36,
'Eb2': 39,
}
# --------------------------------------------
# Helpers
# --------------------------------------------
def add_note_abs(events, start, length, note, velocity=100, channel=0):
events.append((start, Message('note_on', note=note, velocity=velocity, time=0, channel=channel)))
events.append((start + length, Message('note_off', note=note, velocity=0, time=0, channel=channel)))
def write_events_to_track(track, events):
events.sort(key=lambda x: x[0])
last_time = 0
for abs_time, msg in events:
delta = abs_time - last_time
msg.time = delta
track.append(msg)
last_time = abs_time
def pos(bar_num, beat, sixteenth=1):
"""
bar_num: 1-based
beat: 1-4
sixteenth: 1-4
"""
return (bar_num - 1) * BAR + (beat - 1) * TPB + (sixteenth - 1) * SIXTEENTH
# --------------------------------------------
# Event storage
# --------------------------------------------
sub_events = []
mid_events = []
# --------------------------------------------
# Pattern builders
# --------------------------------------------
def sub_long(bar, note_name, start_beat=1, start_16=1, end_beat=4, end_16=4, vel=96):
start = pos(bar, start_beat, start_16)
end = pos(bar, end_beat, end_16) + SIXTEENTH
add_note_abs(sub_events, start, end - start, NOTES[note_name], velocity=vel)
def sub_note(bar, beat, sixteenth, length_16ths, note_name, vel=96):
start = pos(bar, beat, sixteenth)
length = length_16ths * SIXTEENTH
add_note_abs(sub_events, start, length, NOTES[note_name], velocity=vel)
def stab(bar, beat, sixteenth, note_name, length_16ths=1, vel=92):
start = pos(bar, beat, sixteenth)
length = length_16ths * SIXTEENTH
add_note_abs(mid_events, start, length, NOTES[note_name], velocity=vel)
def approach_32(bar, beat, sixteenth, note_name, vel=78):
start = pos(bar, beat, sixteenth)
add_note_abs(mid_events, start, THIRTYSECOND, NOTES[note_name], velocity=vel)
def slide_pair(bar, start_beat, start_16, note_a, note_b, first_len_16ths=1, overlap_ticks=20, vel=88):
"""
Creates two overlapping notes on the mid track.
In Ableton, use this on a Sampler/Mono/Legato/Glide chain if you want actual portamento.
"""
start_a = pos(bar, start_beat, start_16)
len_a = first_len_16ths * SIXTEENTH
start_b = start_a + len_a - overlap_ticks
len_b = SIXTEENTH
add_note_abs(mid_events, start_a, len_a, NOTES[note_a], velocity=vel)
add_note_abs(mid_events, start_b, len_b, NOTES[note_b], velocity=vel)
# --------------------------------------------
# Bars 1–8 : Main groove A
# --------------------------------------------
# Bar 1
sub_long(1, 'F1')
stab(1, 1, 3, 'F2')
stab(1, 3, 3, 'C2')
# Bar 2
sub_note(2, 1, 1, 10, 'F1')
stab(2, 2, 3, 'Eb2')
stab(2, 3, 3, 'F2')
stab(2, 4, 4, 'E2', length_16ths=1, vel=76)
# Bar 3
sub_long(3, 'F1')
stab(3, 1, 3, 'F2')
stab(3, 2, 4, 'Gb2')
stab(3, 3, 3, 'C2')
# Bar 4
sub_note(4, 1, 1, 8, 'C1')
sub_note(4, 3, 1, 8, 'Eb1')
stab(4, 1, 3, 'C2')
stab(4, 3, 3, 'Eb2')
stab(4, 4, 4, 'E2', length_16ths=1, vel=76)
# Bar 5
sub_long(5, 'F1')
stab(5, 1, 3, 'F2')
stab(5, 3, 3, 'C2')
# Bar 6
sub_note(6, 1, 1, 10, 'F1')
stab(6, 2, 3, 'Eb2')
stab(6, 3, 3, 'F2')
stab(6, 4, 2, 'F2')
stab(6, 4, 4, 'E2', length_16ths=1, vel=76)
# Bar 7
sub_long(7, 'F1')
stab(7, 1, 3, 'F2')
stab(7, 2, 4, 'Gb2')
stab(7, 3, 3, 'C2')
# Bar 8
sub_note(8, 1, 1, 4, 'F1')
sub_note(8, 2, 4, 1, 'E1', vel=88)
sub_note(8, 3, 1, 8, 'F1')
stab(8, 1, 3, 'C2')
stab(8, 3, 3, 'Eb2')
slide_pair(8, 4, 3, 'E2', 'F2', first_len_16ths=2)
# --------------------------------------------
# Bars 9–16 : Variation A2
# --------------------------------------------
# Bar 9
sub_long(9, 'F1')
stab(9, 1, 3, 'F2')
stab(9, 2, 4, 'Eb2')
stab(9, 3, 3, 'C2')
# Bar 10
sub_note(10, 1, 1, 11, 'F1')
sub_note(10, 3, 4, 1, 'C1', vel=90)
stab(10, 1, 3, 'F2')
stab(10, 2, 3, 'Gb2')
stab(10, 4, 2, 'Eb2')
stab(10, 4, 4, 'E2', length_16ths=1, vel=76)
# Bar 11
sub_note(11, 1, 1, 8, 'Eb1')
sub_note(11, 3, 1, 8, 'F1')
stab(11, 1, 3, 'Eb2')
stab(11, 3, 3, 'F2')
stab(11, 4, 2, 'C2')
# Bar 12
sub_long(12, 'C1')
stab(12, 1, 3, 'C2')
stab(12, 2, 4, 'Eb2')
stab(12, 3, 3, 'Gb2')
stab(12, 4, 4, 'E2', length_16ths=1, vel=76)
# Bar 13
sub_long(13, 'F1')
stab(13, 1, 3, 'F2')
stab(13, 2, 4, 'Eb2')
stab(13, 3, 3, 'C2')
# Bar 14
sub_note(14, 1, 1, 11, 'F1')
sub_note(14, 3, 4, 1, 'C1', vel=90)
stab(14, 1, 3, 'F2')
stab(14, 2, 3, 'Gb2')
stab(14, 4, 2, 'Eb2')
stab(14, 4, 3, 'F2')
stab(14, 4, 4, 'E2', length_16ths=1, vel=76)
# Bar 15
sub_long(15, 'F1')
stab(15, 1, 3, 'F2')
stab(15, 2, 4, 'C2')
stab(15, 3, 3, 'Eb2')
stab(15, 4, 2, 'F2')
# Bar 16
sub_note(16, 1, 1, 4, 'F1')
sub_note(16, 2, 4, 1, 'Gb1', vel=88)
sub_note(16, 3, 1, 8, 'F1')
stab(16, 1, 3, 'Eb2')
stab(16, 3, 3, 'C2')
slide_pair(16, 4, 3, 'E2', 'F2', first_len_16ths=2)
# --------------------------------------------
# Bars 17–24 : Groove B / response
# --------------------------------------------
# Bar 17
sub_long(17, 'C1')
stab(17, 1, 3, 'C2')
stab(17, 2, 4, 'Eb2')
stab(17, 3, 3, 'F2')
# Bar 18
sub_note(18, 1, 1, 10, 'Eb1')
stab(18, 1, 3, 'Eb2')
stab(18, 2, 3, 'F2')
stab(18, 4, 2, 'Gb2')
stab(18, 4, 4, 'E2', length_16ths=1, vel=76)
# Bar 19
sub_long(19, 'F1')
stab(19, 1, 3, 'F2')
stab(19, 2, 4, 'C2')
stab(19, 3, 3, 'Eb2')
stab(19, 4, 2, 'F2')
# Bar 20
sub_note(20, 1, 1, 8, 'C1')
sub_note(20, 3, 1, 8, 'F1')
stab(20, 1, 3, 'C2')
stab(20, 3, 3, 'Eb2')
stab(20, 4, 4, 'E2', length_16ths=1, vel=76)
# Bar 21
sub_long(21, 'C1')
stab(21, 1, 3, 'C2')
stab(21, 2, 4, 'Eb2')
stab(21, 3, 3, 'F2')
# Bar 22
sub_note(22, 1, 1, 10, 'Eb1')
stab(22, 1, 3, 'Eb2')
stab(22, 2, 3, 'F2')
slide_pair(22, 4, 2, 'Gb2', 'F2', first_len_16ths=2)
stab(22, 4, 4, 'E2', length_16ths=1, vel=72)
# Bar 23
sub_long(23, 'F1')
stab(23, 1, 3, 'F2')
stab(23, 2, 4, 'Gb2')
stab(23, 3, 3, 'F2')
stab(23, 4, 2, 'C2')
# Bar 24
sub_note(24, 1, 1, 4, 'Eb1')
sub_note(24, 2, 4, 1, 'E1', vel=88)
sub_note(24, 3, 1, 8, 'F1')
stab(24, 1, 3, 'Eb2')
stab(24, 3, 3, 'F2')
slide_pair(24, 4, 3, 'E2', 'F2', first_len_16ths=2)
# --------------------------------------------
# Bars 25–32 : Final variation / lift
# --------------------------------------------
# Bar 25
sub_long(25, 'F1')
stab(25, 1, 3, 'F2')
stab(25, 2, 4, 'C2')
stab(25, 3, 3, 'Eb2')
stab(25, 4, 2, 'F2')
# Bar 26
sub_note(26, 1, 1, 12, 'F1')
sub_note(26, 4, 4, 1, 'E1', vel=88)
stab(26, 1, 3, 'F2')
stab(26, 2, 3, 'Gb2')
stab(26, 3, 3, 'Eb2')
stab(26, 4, 2, 'C2')
# Bar 27
sub_long(27, 'C1')
stab(27, 1, 3, 'C2')
stab(27, 2, 4, 'Eb2')
stab(27, 3, 3, 'F2')
# Bar 28
sub_note(28, 1, 1, 8, 'Eb1')
sub_note(28, 3, 1, 8, 'F1')
stab(28, 1, 3, 'Eb2')
stab(28, 3, 3, 'F2')
stab(28, 4, 2, 'Gb2')
# Bar 29
sub_long(29, 'F1')
stab(29, 1, 3, 'F2')
stab(29, 2, 4, 'C2')
stab(29, 3, 3, 'Eb2')
stab(29, 4, 2, 'F2')
# Bar 30
sub_note(30, 1, 1, 12, 'F1')
sub_note(30, 4, 4, 1, 'E1', vel=88)
stab(30, 1, 3, 'F2')
stab(30, 2, 3, 'Gb2')
stab(30, 3, 3, 'Eb2')
stab(30, 4, 2, 'C2')
stab(30, 4, 3, 'F2')
# Bar 31
sub_long(31, 'F1')
stab(31, 1, 3, 'F2')
stab(31, 2, 4, 'Eb2')
stab(31, 3, 3, 'C2')
stab(31, 4, 2, 'Gb2')
# Bar 32
sub_note(32, 1, 1, 4, 'F1')
sub_note(32, 2, 4, 1, 'E1', vel=88)
sub_note(32, 3, 1, 8, 'F1')
stab(32, 1, 3, 'F2')
stab(32, 3, 3, 'C2')
slide_pair(32, 4, 3, 'E2', 'F2', first_len_16ths=2)
# --------------------------------------------
# Write events to MIDI tracks
# --------------------------------------------
write_events_to_track(sub_track, sub_events)
write_events_to_track(mid_track, mid_events)
# End of tracks
meta_track.append(MetaMessage('end_of_track', time=0))
sub_track.append(MetaMessage('end_of_track', time=0))
mid_track.append(MetaMessage('end_of_track', time=0))
# Save
filename = 'ragga_dnb_32bar.mid'
mid.save(filename)
print(f"Saved MIDI file: {filename}")
```
---
## Install and run
If you don’t already have `mido`:
```bash
pip install mido
```
Then run:
```bash
python3 ragga_dnb_midi.py
```
---
## How to use it in Ableton Live 12
### 1. Import the MIDI
- Drag `ragga_dnb_32bar.mid` into Ableton
- It should come in as **2 MIDI tracks**
- **Sub**
- **Mid_Stabs**
### 2. Put them onto your lesson-style bass setup
Best workflow from this lesson:
- **Track 1 / Sub** → your **Operator sine sub**
- **Track 2 / Mid_Stabs** → your **Wavetable mid grit** or **Sampler glide chain**
### 3. Use the lesson patch ideas
For **Sub**:
- Operator
- sine only
- mono with Utility
- keep it clean
For **Mid**:
- Wavetable or Sampler
- low-pass filter
- Saturator
- Drum Buss
- EQ Eight high-pass around 40–50 Hz
---
## Important note about the slide notes
The script creates **overlapping MIDI notes** in a few phrase endings.
That means:
- if you use a normal poly synth, you’ll just hear overlap
- if you use **Sampler in Mono + Legato + Glide**, you’ll get the proper ragga/jungle slide behavior from the lesson
### In Ableton:
On your slide-capable chain:
- load **Sampler**
- set **Voices = 1**
- enable **Glide**
- enable **Legato**
- start with glide around **30–80 ms**
That matches the lesson’s **slides/portamento** section.
---
## Quick musical summary of what this file does
It follows the lesson’s theory pretty closely:
- **long root-heavy sub notes**
- **short off-beat stabs**
- **chromatic E → F approach movement**
- **occasional Gb tension notes**
- **32-bar call-and-response phrasing**
- simple enough to fit classic jungle / ragga DnB
---
## After import: make it sound better fast
Do these 5 things:
- **Shorten the mid notes by ear** if they feel too long
- **Keep the sub mono**
- **Sidechain the bass bus lightly to the kick**
- **Low-pass the mid layer** if it feels too bright
- **Automate mid cutoff / drive** every 8 bars for movement
---
## If you want, next I can also give you:
1. a **darker/heavier version of this same Python script**
2. a **version with drums included**
3. a **single-track version** for quick drag-and-drop into one Instrument Rack
4. an **Ableton setup guide** for mapping this MIDI to your Sub / Mid / Slide chains
If you want the best next step, ask for:
**“make a darker heavier version of the script”**
make a jungle version of the script
Absolutely — here’s a more **jungle-focused version** of the script.
This version shifts away from the more obvious **ragga bass stab feel** and leans more into **classic jungle movement**:
- simpler, heavier **sub phrasing**
- more **space**
- more **call-and-response**
- more **chromatic pickups**
- less “busy mid riffing”
- phrase endings that suit **jungle breaks** better
It still fits the lesson, because it keeps the same core ideas from **Ragga Jungle Bassline Theory in Ableton Live 12**:
- **clean sub + character mids**
- **syncopation**
- **approach notes**
- **slides**
- **stock-device-friendly Ableton workflow**
---
# What’s different in this jungle version
Compared to the earlier script, this one has:
- **more stripped-back sub**
- **fewer stabs per bar**
- **stronger phrase turnarounds**
- more emphasis on:
- **root**
- **fifth**
- **minor 7th**
- **chromatic E into F**
- a slightly more **rolling old-school jungle** feel
This should sit better with:
- chopped **Amen**
- **Think break**
- **Apache-style edits**
- more classic jungle arrangements
---
# Paste this into:
```bash
cat > jungle_dnb_midi.py
```
Then press **Ctrl+D**
Run with:
```bash
python3 jungle_dnb_midi.py
```
It will export:
```bash
jungle_dnb_32bar.mid
```
---
# Python script
```python
from mido import Message, MidiFile, MidiTrack, MetaMessage, bpm2tempo
# ============================================
# Jungle DnB 32-bar MIDI export
# For Ableton Live 12 bassline practice
# Based on:
# Ragga Jungle Bassline Theory in Ableton Live 12
# ============================================
mid = MidiFile(ticks_per_beat=480)
tempo = bpm2tempo(170)
meta_track = MidiTrack()
sub_track = MidiTrack()
mid_track = MidiTrack()
mid.tracks.append(meta_track)
mid.tracks.append(sub_track)
mid.tracks.append(mid_track)
meta_track.append(MetaMessage('track_name', name='Tempo', time=0))
meta_track.append(MetaMessage('set_tempo', tempo=tempo, time=0))
meta_track.append(MetaMessage('time_signature', numerator=4, denominator=4, clocks_per_click=24, notated_32nd_notes_per_beat=8, time=0))
sub_track.append(MetaMessage('track_name', name='Sub', time=0))
mid_track.append(MetaMessage('track_name', name='Mid_Jungle', time=0))
TPB = 480
BAR = TPB * 4
SIXTEENTH = TPB // 4
THIRTYSECOND = TPB // 8
NOTES = {
'C1': 24,
'Eb1': 27,
'E1': 28,
'F1': 29,
'Gb1': 30,
'G1': 31,
'C2': 36,
'Eb2': 39,
'E2': 40,
'F2': 41,
'Gb2': 42,
'G2': 43,
}
def add_note_abs(events, start, length, note, velocity=100, channel=0):
events.append((start, Message('note_on', note=note, velocity=velocity, time=0, channel=channel)))
events.append((start + length, Message('note_off', note=note, velocity=0, time=0, channel=channel)))
def write_events_to_track(track, events):
events.sort(key=lambda x: x[0])
last_time = 0
for abs_time, msg in events:
delta = abs_time - last_time
msg.time = delta
track.append(msg)
last_time = abs_time
def pos(bar_num, beat, sixteenth=1):
return (bar_num - 1) * BAR + (beat - 1) * TPB + (sixteenth - 1) * SIXTEENTH
sub_events = []
mid_events = []
def sub_note(bar, beat, sixteenth, length_16ths, note_name, vel=96):
start = pos(bar, beat, sixteenth)
length = length_16ths * SIXTEENTH
add_note_abs(sub_events, start, length, NOTES[note_name], velocity=vel)
def sub_long(bar, note_name, vel=96):
add_note_abs(sub_events, pos(bar, 1, 1), BAR, NOTES[note_name], velocity=vel)
def stab(bar, beat, sixteenth, note_name, length_16ths=1, vel=88):
start = pos(bar, beat, sixteenth)
length = length_16ths * SIXTEENTH
add_note_abs(mid_events, start, length, NOTES[note_name], velocity=vel)
def approach_32(bar, beat, sixteenth, note_name, vel=76):
start = pos(bar, beat, sixteenth)
add_note_abs(mid_events, start, THIRTYSECOND, NOTES[note_name], velocity=vel)
def slide_pair(bar, start_beat, start_16, note_a, note_b, first_len_16ths=1, overlap_ticks=20, vel=86):
start_a = pos(bar, start_beat, start_16)
len_a = first_len_16ths * SIXTEENTH
start_b = start_a + len_a - overlap_ticks
len_b = SIXTEENTH
add_note_abs(mid_events, start_a, len_a, NOTES[note_a], velocity=vel)
add_note_abs(mid_events, start_b, len_b, NOTES[note_b], velocity=vel)
# ------------------------------------------------
# Bars 1–8 : Main jungle groove A
# ------------------------------------------------
# Bar 1
sub_long(1, 'F1')
stab(1, 1, 3, 'F2')
stab(1, 3, 3, 'C2')
# Bar 2
sub_note(2, 1, 1, 8, 'F1')
sub_note(2, 3, 1, 4, 'C1')
stab(2, 2, 4, 'Eb2')
approach_32(2, 4, 4, 'E2')
# Bar 3
sub_long(3, 'F1')
stab(3, 1, 3, 'F2')
stab(3, 2, 4, 'Gb2')
# Bar 4
sub_note(4, 1, 1, 8, 'Eb1')
sub_note(4, 3, 1, 4, 'F1')
stab(4, 1, 3, 'Eb2')
stab(4, 3, 3, 'F2')
slide_pair(4, 4, 3, 'E2', 'F2', first_len_16ths=2)
# Bar 5
sub_long(5, 'F1')
stab(5, 1, 3, 'F2')
stab(5, 3, 3, 'C2')
# Bar 6
sub_note(6, 1, 1, 8, 'F1')
sub_note(6, 3, 1, 4, 'C1')
stab(6, 2, 4, 'Eb2')
stab(6, 4, 2, 'F2')
approach_32(6, 4, 4, 'E2')
# Bar 7
sub_long(7, 'F1')
stab(7, 1, 3, 'F2')
stab(7, 2, 4, 'Gb2')
# Bar 8
sub_note(8, 1, 1, 4, 'F1')
sub_note(8, 2, 4, 1, 'E1', vel=84)
sub_note(8, 3, 1, 8, 'F1')
stab(8, 1, 3, 'C2')
stab(8, 3, 3, 'Eb2')
slide_pair(8, 4, 3, 'E2', 'F2', first_len_16ths=2)
# ------------------------------------------------
# Bars 9–16 : Variation A2
# ------------------------------------------------
# Bar 9
sub_long(9, 'F1')
stab(9, 1, 3, 'F2')
stab(9, 3, 3, 'Eb2')
# Bar 10
sub_note(10, 1, 1, 8, 'C1')
sub_note(10, 3, 1, 4, 'F1')
stab(10, 1, 3, 'C2')
stab(10, 2, 4, 'Eb2')
approach_32(10, 4, 4, 'E2')
# Bar 11
sub_note(11, 1, 1, 8, 'Eb1')
sub_note(11, 3, 1, 8, 'F1')
stab(11, 1, 3, 'Eb2')
stab(11, 3, 3, 'F2')
# Bar 12
sub_long(12, 'C1')
stab(12, 1, 3, 'C2')
stab(12, 3, 3, 'Gb2')
approach_32(12, 4, 4, 'E2')
# Bar 13
sub_long(13, 'F1')
stab(13, 1, 3, 'F2')
stab(13, 2, 4, 'Eb2')
stab(13, 3, 3, 'C2')
# Bar 14
sub_note(14, 1, 1, 8, 'F1')
sub_note(14, 3, 1, 4, 'C1')
stab(14, 2, 3, 'Gb2')
stab(14, 4, 2, 'Eb2')
approach_32(14, 4, 4, 'E2')
# Bar 15
sub_long(15, 'F1')
stab(15, 1, 3, 'F2')
stab(15, 3, 3, 'Eb2')
stab(15, 4, 2, 'C2')
# Bar 16
sub_note(16, 1, 1, 4, 'F1')
sub_note(16, 2, 4, 1, 'Gb1', vel=84)
sub_note(16, 3, 1, 8, 'F1')
stab(16, 1, 3, 'Eb2')
slide_pair(16, 4, 3, 'E2', 'F2', first_len_16ths=2)
# ------------------------------------------------
# Bars 17–24 : Response section B
# ------------------------------------------------
# Bar 17
sub_long(17, 'C1')
stab(17, 1, 3, 'C2')
stab(17, 3, 3, 'F2')
# Bar 18
sub_note(18, 1, 1, 8, 'Eb1')
sub_note(18, 3, 1, 4, 'F1')
stab(18, 1, 3, 'Eb2')
stab(18, 2, 4, 'Gb2')
approach_32(18, 4, 4, 'E2')
# Bar 19
sub_long(19, 'F1')
stab(19, 1, 3, 'F2')
stab(19, 3, 3, 'C2')
# Bar 20
sub_note(20, 1, 1, 8, 'C1')
sub_note(20, 3, 1, 8, 'F1')
stab(20, 1, 3, 'C2')
stab(20, 3, 3, 'Eb2')
# Bar 21
sub_long(21, 'C1')
stab(21, 1, 3, 'C2')
stab(21, 3, 3, 'F2')
# Bar 22
sub_note(22, 1, 1, 8, 'Eb1')
sub_note(22, 3, 1, 4, 'F1')
stab(22, 1, 3, 'Eb2')
slide_pair(22, 4, 2, 'Gb2', 'F2', first_len_16ths=2)
approach_32(22, 4, 4, 'E2')
# Bar 23
sub_long(23, 'F1')
stab(23, 1, 3, 'F2')
stab(23, 2, 4, 'Gb2')
stab(23, 3, 3, 'Eb2')
# Bar 24
sub_note(24, 1, 1, 4, 'Eb1')
sub_note(24, 2, 4, 1, 'E1', vel=84)
sub_note(24, 3, 1, 8, 'F1')
stab(24, 1, 3, 'Eb2')
stab(24, 3, 3, 'F2')
slide_pair(24, 4, 3, 'E2', 'F2', first_len_16ths=2)
# ------------------------------------------------
# Bars 25–32 : Final lift
# ------------------------------------------------
# Bar 25
sub_long(25, 'F1')
stab(25, 1, 3, 'F2')
stab(25, 3, 3, 'C2')
stab(25, 4, 2, 'Eb2')
# Bar 26
sub_note(26, 1, 1, 8, 'F1')
sub_note(26, 3, 1, 4, 'C1')
stab(26, 2, 4, 'Gb2')
approach_32(26, 4, 4, 'E2')
# Bar 27
sub_long(27, 'C1')
stab(27, 1, 3, 'C2')
stab(27, 3, 3, 'F2')
# Bar 28
sub_note(28, 1, 1, 8, 'Eb1')
sub_note(28, 3, 1, 8, 'F1')
stab(28, 1, 3, 'Eb2')
stab(28, 3, 3, 'F2')
stab(28, 4, 2, 'Gb2')
# Bar 29
sub_long(29, 'F1')
stab(29, 1, 3, 'F2')
stab(29, 2, 4, 'Eb2')
stab(29, 3, 3, 'C2')
# Bar 30
sub_note(30, 1, 1, 8, 'F1')
sub_note(30, 3, 1, 4, 'C1')
stab(30, 2, 3, 'Gb2')
stab(30, 4, 2, 'Eb2')
approach_32(30, 4, 4, 'E2')
# Bar 31
sub_long(31, 'F1')
stab(31, 1, 3, 'F2')
stab(31, 3, 3, 'Eb2')
stab(31, 4, 2, 'C2')
# Bar 32
sub_note(32, 1, 1, 4, 'F1')
sub_note(32, 2, 4, 1, 'E1', vel=84)
sub_note(32, 3, 1, 8, 'F1')
stab(32, 1, 3, 'F2')
stab(32, 3, 3, 'C2')
slide_pair(32, 4, 3, 'E2', 'F2', first_len_16ths=2)
write_events_to_track(sub_track, sub_events)
write_events_to_track(mid_track, mid_events)
meta_track.append(MetaMessage('end_of_track', time=0))
sub_track.append(MetaMessage('end_of_track', time=0))
mid_track.append(MetaMessage('end_of_track', time=0))
filename = 'jungle_dnb_32bar.mid'
mid.save(filename)
print(f"Saved MIDI file: {filename}")
```
---
# How to use this in Ableton Live 12
## Import
- drag `jungle_dnb_32bar.mid` into Live
- you’ll get:
- **Sub**
- **Mid_Jungle**
## Put it on your lesson rack
Use the same lesson structure:
- **Sub track** → Operator sine
- **Mid track** → Wavetable or Sampler grit layer
## Best patch setup from the lesson
### Sub
- Operator
- sine only
- EQ Eight low cut around 20 Hz
- Utility Width = 0%
### Mid
- Wavetable
- darker wave
- LP filter
- short env
- Saturator
- Drum Buss
- EQ Eight high-pass around 40–50 Hz
---
# If you want it to feel more jungle than ragga after import
Do these in Ableton:
- **reduce mid distortion a bit**
- make the **sub louder relative to mid**
- shorten the mid notes slightly
- add more movement from **break edits**, not from too many bass notes
- keep the bass more repetitive and hypnotic
That’s a big jungle tip:
- **breaks do more of the excitement**
- **bass does more of the weight and phrasing**
---
# Good Ableton tweaks for this version
## 1. Groove Pool
Try adding a little groove to the **mid track only**:
- subtle timing amount
- not too much
## 2. Slide chain
For the overlap notes to glide properly:
- use **Sampler**
- **Mono**
- **Legato**
- **Glide on**
- around **20–60 ms** first
## 3. Bass bus
Group sub + mid and add:
- Compressor or Glue Compressor
- light saturation
- Spectrum
## 4. Mono check
Very important from the lesson:
- keep the low end mono
- check in mono before committing
---
# Why this version fits the lesson
This is still the same lesson logic, just pushed more toward **jungle**:
- **rhythm first**
- **simple sub foundation**
- **short syncopated upper bass hits**
- **chromatic approach notes**
- **occasional slide movement**
- **mix around the kick and breaks**
So it’s basically the **more jungle side** of **Ragga Jungle Bassline Theory in Ableton Live 12**.
---
# If you want, next I can also make one of these:
1. **a darker old-school jungle version**
2. **a more ragga vocal-style bouncy version**
3. **a version with drums included**
4. **a single-track Ableton rack version**
If you want the best next step, say:
**“make it darker old-school jungle”**