# Jazz Swing — "Spang-a-Lang" ride cymbal pattern # Reference: Jimmy Cobb (Miles Davis), Art Blakey, Elvin Jones # The ride hits on quarter beats (X) and the swing "trip" (x at odd steps, delayed by # swing_hard engine so they land ~2/3 of a beat after the downbeat — triplet feel). # GM notes: 36=kick (feathered), 38=snare (comping ghosts), 42=HH foot, 51=ride # # ── Step grid notation ──────────────────────────────────────────────────────── # Each character in a step grid represents one subdivision of the bar. # Resolution controls how many steps per bar (16 = 16th notes in 4/4; 12 = 16th notes in 6/8). # # X Strong accent — velocity = base_velocity × 1.00 (full hit / downbeat) # x Medium accent — velocity = base_velocity × 0.75 (firm stroke / upbeat) # o Soft hit — velocity = base_velocity × 0.55 (brush / light touch) # g Ghost note — velocity = base_velocity × 0.28 (barely audible, mostly felt) # . Rest — no note fired at this step # # Beat positions — 4/4 at resolution 16 (one char per 16th note): # pos 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 1 e1 +1 a1 2 e2 +2 a2 3 e3 +3 a3 4 e4 +4 a4 # (1/+/2/+/3/+/4/+ = quarter beats; e = "e of"; a = "and-a of") # # Beat positions — 6/8 at resolution 12 (one char per 16th note): # pos 0 1 2 3 4 5 6 7 8 9 10 11 # C1 . e1 . a1 . C2 . e2 . a2 . # (C1/C2 = compound beat downbeats; each compound beat = 3 eighth notes = 6 steps) # # Swing / feel: the 'feel' field shifts odd-indexed steps (1,3,5,7…) forward in time. # straight — no shift (all steps exactly on the grid) # swing_soft — odd steps delayed ~16 % of a step (light swing) # swing_hard — odd steps delayed ~34 % of a step (jazz/shuffle triplet feel) # laid_back — same as straight with slower humanisation envelope # ───────────────────────────────────────────────────────────────────────────── name: Jazz Swing family: jazz bpm_range: [100, 260] time_signature: [4, 4] resolution: 16 feel: swing_hard instruments: kick: { note: 36, base_velocity: 65, velocity_range: 20, timing_jitter: 0.025, rush: -0.01, duration_beats: 0.12 } snare: { note: 38, base_velocity: 72, velocity_range: 22, timing_jitter: 0.028, duration_beats: 0.10 } hihat_foot: { note: 44, base_velocity: 75, velocity_range: 10, timing_jitter: 0.015, duration_beats: 0.07 } ride: { note: 51, base_velocity: 88, velocity_range: 14, timing_jitter: 0.022, duration_beats: 0.10 } ride_bell: { note: 53, base_velocity: 100, velocity_range: 10, timing_jitter: 0.018, duration_beats: 0.08 } crash: { note: 49, base_velocity: 90, velocity_range: 10, timing_jitter: 0.012, duration_beats: 0.22 } tom_hi: { note: 48, base_velocity: 85, velocity_range: 18, timing_jitter: 0.025, duration_beats: 0.10 } tom_lo: { note: 41, base_velocity: 80, velocity_range: 18, timing_jitter: 0.025, duration_beats: 0.12 } humanization: timing_jitter: 0.025 velocity_jitter: 18 velocity_drift: 0.10 sections: intro: type: count_in hits: 4 note: 42 groove: bars: 1 variations: - name: ride_spang weight: 4 # Spang-a-lang: quarter beats (X at 0,4,8,12) + swing "trip" (x at 3,7,11,15) # With swing_hard the "trip" steps are delayed ~0.085 beats → triplet approximation ride: "X..xX..xX..xX..x" hihat_foot: "....x.......x..." kick: "x.......x......." snare: ".....gg.......gg" - name: ride_comp weight: 2 # More active comping with ghost notes on additional off-beats ride: "X..xX..xX..xX..x" hihat_foot: "....x.......x..." kick: "x..............." snare: "..g...g.....g..." - name: ride_bell weight: 1 # Bell of the ride for an energetic section — louder, brighter tone ride_bell: "X..xX..xX..xX..x" hihat_foot: "....x.......x..." kick: "x.......x......." snare: ".....g........g." fill: bars: 1 variations: - name: bebop # Jazz-style fill: light snare run then accent into next bar snare: "....x.x.x.X.X.X." tom_hi: "............X..." tom_lo: "..............X." kick: "X..............." - name: ride_dense # Ride-heavy fill: double-time feel on the ride ride: "XxXxXxXxXxXxXxXx" snare: "..............X." kick: "X..............." crash: bars: 1 variations: - name: standard crash: "X..............." ride: "...xX..xX..xX..x" hihat_foot: "....x.......x..." structure: fill_every: 16 break_every: 0 break_length: 1 crash_after_fill: true dynamic_build: false