Strudelify

So What

Ronny Jordan

KeyA minorTempo110 bpm
0:00/0:00
// So What — Ronny Jordan
// 110 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 54 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@5 A B@2 C D E@2 F G B@2 H I J@2 K A L@2 M D N@2 O G L@2 P Q J@2 K A B@2 M R S@2 F A B@2 H ~@5
>`.pickRestart({
  A: "d2 ~ d2 ~@6 d2 ~ d2 ~@5 a1 ~@2 c2 e2@2 c2",
  B: "[d2 ~ d2 ~@6 d2 ~ d2 ~@5 d2 g2@3 f2@2 ~ d2@2 d2 ~@6 d2 ~ d2 ~@5 a1 ~@2 c2 e2 ~ c2, ~@23 c2@2 ~@23]/2",
  C: "d2@2 d2 ~@6 d2@2 d2 ~@5 a#1 ~@2 c#2 f2@2 c#2", D: "d#2@2 d#2 ~@6 d#2@2 d#2 ~@5 a#1 ~@2 c#2 f2 ~ c#2",
  E: "[d#2@2 d#2 ~@6 d#2@2 d#2 ~@5 d#2 g#2@3 f#2@2 ~ d#2 ~ d#2 ~@6 d#2@2 d#2 ~@5 a#1 ~@2 c#2 f2@2 c#2, ~@23 c#2@2 ~@23]/2",
  F: "d#2@3 ~@3 f#1@6 g#1@5 ~ a#1@6, ~@5 d#2@2 ~@17", G: "d2 ~ d2 ~@6 d2 ~ d2 ~@5 a1 ~@2 c2 e2 ~ c2",
  H: "d2@3 ~@3 f1@6 g1@5 ~ a1@6, ~@5 d2@2 ~@17", I: "d2@2 d2 ~@6 d2@2 d2 ~@5 a1 ~@2 c2 e2@2 c2",
  J: "[d2@2 d2 ~@6 d2@2 d2 ~@5 d2 g2@3 f2@2 ~ d2 ~ d2 ~@6 d2@2 d2 ~@5 a1 ~@2 c2 e2@2 c2, ~@23 c2@2 ~@23]/2",
  K: "d2 ~ d2 ~@6 d2@2 d2 ~@5 a1 ~@2 c2 e2@2 c2",
  L: "[d2 ~ d2 ~@6 d2 ~ d2 ~@5 d2 g2@3 f2@2 ~ d2@2 d2 ~@6 d2 ~ d2 ~@5 a1 ~@2 c2 e2@2 c2, ~@23 c2@2 ~@23]/2",
  M: "d2 ~ d2 ~@6 d2@2 d2 ~@5 a#1 ~@2 c#2 f2@2 c#2",
  N: "[d#2@2 d#2 ~@6 d#2@2 d#2 ~@5 d#2 g#2@3 f#2@2 ~ d#2 ~ d#2 ~@6 d#2@2 d#2 ~@5 a1 ~@2 c2 e2@2 c2, ~@23 c#2@2 ~@23]/2",
  O: "d#2 ~ d#2 ~@6 d#2@2 d#2 ~@5 a1 ~@2 c2 e2@2 c2", P: "d2@3 ~@2 d2 f1@6 g1@5 ~ a1@6",
  Q: "d2@2 d2 ~@6 d2@2 d2 ~@5 a1 ~@2 c2 e2 ~ c2", R: "d#2@2 d#2 ~@6 d#2@2 d#2 ~@5 a#1 ~@2 c#2 f2@2 c#2",
  S: "[d#2 ~ d#2 ~@6 d#2@2 d#2 ~@5 d#2 g#2@3 f#2@2 ~ d#2 ~ d#2 ~@6 d#2@2 d#2 ~@5 a#1 ~@2 c#2 f2@2 c#2, ~@23 c#2@2 ~@23]/2",
})).s("gm_fretless_bass").gain(0.31).pan(0.6)

// chords · piano
const piano = note("<~ A@8 B@2 C B A@4 D@3 E D@3 F G@3 H D@3 F A@2 I A@5 B@4 A@4 J K L M ~>".pickRestart({
  A: "~@6 [a3,d4,g4]@4 ~ [g3,d4,f4]@2 ~@11", B: "~@6 [a#3,d#4,g#4]@4 ~ [g#3,d#4,f#4]@2 ~@11",
  C: "~@6 [a#3,d#4,g#4]@4 ~ [g#3,d#4,f#4]@3 ~@10", // D#sus4 G#7
  D: "[[a3,c4,e4]@35 ~ [g3,b3,d4] ~@5 [g3,b3,d4] ~@4 [a3,c4,e4]@24 ~]/3", // Am G Am
  E: "[d3,f3,a3]@4 ~ [e3,a3,c4]@4 [a3,c4,e4]@2 ~ [g3,b3,d4] ~@11", // Dm Am G
  F: "[d3,f3,a3]@3 ~@2 [e3,a3,c4]@4 [a3,c4,e4]@2 ~ [g3,b3,d4] ~@11", // Dm Am G
  G: "[[a#3,c#4,f4]@35 ~ [g#3,c4,d#4] ~@5 [g#3,c4,d#4] ~@4 [a#3,c#4,f4]@24 ~]/3", // A#m G# A#m
  H: "[d#3,f#3,a#3]@4 ~ [f3,a#3,c#4]@4 [a#3,c#4,f4]@2 ~ [g#3,c4,d#4] ~@11", I: "~@6 [a3,d4,g4]@4 ~ [g3,d4,f4]@3 ~@10",
  J: "[a3,c4,f4]@23 ~", K: "[g3,c4,e4]@11 ~", L: "[f3,a#3,d4]@11 ~", M: "[f3,a3,c4]@16 ~@2 [e3,g3,c4]@5 [f3,a3,c4,d4]",
})).s("gm_piano").gain(0.28).pan(0.4)

// chords · flute
const flute = note("<~@17 A B ~@2 C B ~@2 D E ~@2 C F ~@23>".pickRestart({
  A: "~@21 [c5,e5] ~ [c5,e5]", B: "[a4,c5] ~ [a4,c5] ~@21", C: "~@21 [c5,e5]!2 ~", D: "~@21 [c#5,f5]!2 ~",
  E: "[a#4,c#5]!2 ~@22", F: "[a4,c5]!2 ~@22",
})).s("gm_flute").gain(0.22).pan(1)

// drums · kick
const kick = s("bd").struct("<~ [x!4]!51 [x!3 ~] ~>").gain(0.36)

// drums · rim
const rim = s("rim").struct("<~ [~@3 x ~@3 x]!51 [~@3 x ~@4] ~>").gain(0.43)

// drums · snare
const snare = s("sd").struct("<~@9 [~@6 x ~@4 x ~@6 x ~@5]!38 [~@3 x ~ x ~@3 x ~@2] [~@6 x ~@4 x ~@6 x ~@5] ~@5>")
  .gain(0.5)

// drums · clap
const clap = s("cp").struct("<~@9 [~@3 x]!40 ~@5>").gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<~ [~ x ~ x ~ x ~ x]!51 [~ x ~ x ~ x ~@2] ~>").gain(0.29)

// drums · ride
const ride = s("rd").struct(`<
  ~
  [x ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x]!51
  [x ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x ~@6]
  ~
>`).gain(0.29)

stack(bass, piano, flute, kick, rim, snare, clap, hihat, ride)