Strudelify

The Way Back Blues

Erroll Garner

KeyB♭ majorTempo73 bpm
0:00/0:00
// The Way Back Blues — Erroll Garner
// 73 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 6 "Bass-James" named as a bass, played on electric bass finger (its pad new age patch is not one)
// note: Full arrangement: all 56 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(73/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.

// chords · piano · "Piano LH-Garner"
const piano = note("<A@2 B@6 C@2 D E F G@7 H I J K L@8 M N@2 ~@3 O@2 ~@5 P Q@8 R@2>".pickRestart({
  A: "~ g2@4 d2@2 f2@6 d2@4 f2@2 bb1@5",
  B: "[~@3 g2@8 d2@4 f2@12 d2@8 ~ f2@4 bb1@12 g2@8 d2@4 f2@12 d2@8 f2@4 bb1@12 ~ g2@8 d2@4 f2@12 d2@8 ~ f2@4 bb1@12 g2@8 ~ d2@4 f2@12 d2@8 ~ f2@4 bb1@12 g2@8 d2@4 f2@12 ~ d2@8 f2@4 bb1@12 g2@8 d2@4 f2@12 ~ d2@8 f2@4 ~@2]/6",
  C: "[~@10 g3@4 bb3@4 d4@4 eb4@3 d4@3 ~ eb4@3 d4@3 eb4@8 d4@4 db4@6 g3@18 db3@6 ~ eb2@18]/2",
  D: "bb1@3 g2@2 d2 f2@3 d2@2 f2", E: "bb1@3 g2@2 d2 f2@3 db2 d2 g2", F: "f2@2 f3 eb4@2 eb4!2 a3 eb4@2 a3 eb4",
  G: "[f2@6 eb4@23 ~ f2@5 f3@6 ~@6 bb1@11 g2@7 d2@4 f2@11 d2@7 f2@4 bb1@12 g2@7 d2@4 f2@12 g2@8 ~@4 [ab3,d4,f4]@12 [ab3,d4,g4]@12 [ab3,d4,f4]@12 [ab3,d4,g4]@12 [g3,db4,f4]@12 [g3,db4,g4]@11 [g3,db4,f4]@12 [g3,db4,g4]@12 [ab3,d4,f4]@12 [ab3,d4,g4]@11 [ab3,d4,f4]@12 [ab3,d4,g4]@12 [ab3,d4,f4]@12 [ab3,d4,g4]@7 ~@4 [d4,f4]@12 [ab3,d4,g4]@12 [g3,d4,f4]@9, ~@299 ab3@16 ~@21]/7", // Ddim G Ddim G Gm7b5 Gdim Gm7b5 Gdim …
  H: "~ [g3,d4,g4]@4 [g3,d4,f4]@4 [g3,d4,g4]@4 [g3,d4,f4]@3", I: "~@3 [g3,d4,g4]@12 g3@12 g3@11 [ab3,d4,f4]@10",
  J: "~@2 [ab3,d4,g4]@12 [ab3,d4,f4]@11 [ab3,d4,g4]@12 [ab3,d4,f4]@11", // G Ddim G Ddim
  K: "~ [ab3,d4,g4]@7 ~@4 [d4,f4]@12 [ab3,d4,g4]@11 [a3,eb4,ab4]@8 [bb3,e4,a4]@4 [a3,eb4,ab4], ~@8 ab3@15 ~@25", // G Dm G Ab A Ab
  L: "[~@7 [a3,eb4,ab4]@4 [g3,db4,gb4]@7 [a3,eb4,ab4]@4 ~@12 [g3,db4,f4]@47 [ab3,d4,f4]@12 [ab3,d4,g4]@12 [ab3,d4,f4]@12 [ab3,d4,g4]@12 [ab3,d4,f4]@12 [ab3,d4,g4]@12 ~ [ab3,d4,f4]@12 [ab3,d4,g4]@12 [gb3,c4,e4]@12 [gb3,c4,e4]@12 [gb3,c4,e4]@12 [gb3,c4,e4]@12 [gb3,c4,e4]@12 [gb3,c4,e4]@12 [gb3,c4,e4]@11 [gb3,c4,e4]@12 [g3,b3,d4]@12 [g3,b3,d4]@12 [g3,b3,d4]@12 [gb3,b3,d4]@12 [f3,b3,d4]@12 [f3,b3,d4]@12 [f3,b3,d4]@12 [f3,b3,d4]@6 d3@3 eb3@3 e3@3 gb3@2 g3@3 bb3@3 c4@3 eb4]/8", // Ab Gb Ab Gm7b5 Ddim G Ddim G …
  M: "~@2 e4@3 gb4@3 g4@6 bb4@6 ~@11 c3@3 eb3@3 e3@3 gb3@3 g3@3 bb3@2",
  N: "[~ eb4@3 e4@3 gb4@3 g4@21 [a3,eb4,g4]@60 ~@5]/2", O: "[~@29 [ab3,d4]@11 [ab3,d4]@12 ~@44, ~@23 f3@12 ~@61]/2",
  P: "~@37 d4@11, ~@24 bb2@13 ~@11, ~@4 f3 ~",
  Q: "[~@14 bb3@12 ~@39 e4@39 ~@9 [bb3,d4,f4]@4 ~@9 [ab3,c4,eb4]@4 ~@9 [b3,d4,f4]@4 ~@9 [g3,b3,d4]@42 ~@24 c2@8 ~ c3@4 d2@8 d3@4 eb2@8 eb3@4 e2@8 e3@4 f2@12 ~@4 f2@19 ~@8 [f2,b2,ab3]@4 [f2,c3,a3]@35 ~@12 bb2 bb1 bb2 ~ bb1 bb2 ~ bb1 bb2 ~ bb1 bb2 ~ bb1 bb2 ~ bb1 bb2 ~ bb1 bb2 bb1 ~, ~ d2@8 f3@8 ~@13 bb2@9 eb4@17 ~ bb2@9 ~@39 f2@13 gb2@13 g2@13 ~@240, ~@5 bb2@8 ~@13 eb2@9 g3@9 ~@8 e2@9 g3@9 ~@73 b1@50 ~@89 f1@19 ~@83]/8", // Bb Ab Bdim G Fdim F
  R: "[bb2 bb1 ~ bb2 bb1 ~ bb2 bb1 ~ bb2 bb1 ~ bb2 bb1 ~ bb2 bb1 bb2 ~ bb1 bb2 ~ bb1 bb0@47 ~@26]/2",
})).s("gm_piano").gain(0.15)

// chords · piano · "Piano LH-Garner" · soft notes
const piano_soft = note("<~@7 A@2 ~@12 B ~@13 C@4 D@3 E F G H ~@10>".pickRestart({
  A: "[~@23 eb2@6 ~@19]/2", B: "~@5 [d4,f4]@4 [d4,g4]@4 ~@3",
  C: "[~@30 [f3,bb3,d4]@12 [eb3,a3,db4]@12 [d3,ab3,c4]@12 [d3,ab3,c4]@12 [g3,bb3,db4]@12 [g3,bb3,db4]@12 [g3,bb3,db4]@11 [g3,bb3,db4]@12 [f3,bb3,d4]@12 [f3,bb3,d4]@12 [f3,bb3,d4]@12 [f3,bb3,d4]@6 ~@25]/4", // Bb Ebm7b5 Dm7b5 Gdim Bb
  D: "[~@4 [ab3,d4]@12 [ab3,d4]@12 [g3,bb3,db4]@12 [g3,bb3,db4]@12 [g3,bb3,db4]@11 [g3,bb3,db4]@12 [g3,bb3,db4]@12 [g3,bb3,db4]@4 ~@4 [g3,bb3,db4]@4 [g3,bb3,db4]@12 [g3,bb3,db4]@12 [f3,bb3,d4]@11 [f3,bb3,d4]@10]/3", // Abdim Gdim Bb
  E: "~ [g3,bb3,db4]@6 [g3,bb3,db4]@6 [f3,bb3,d4]@6 [f3,bb3,d4]@5", // Gdim Bb
  F: "~@2 [f3,b3,d4]@11 [f3,b3,d4]@12 [e3,bb3,d4]@12 [e3,bb3,d4]@11", // Bdim Em7b5
  G: "~ [e3,bb3,d4]@12 [e3,bb3,d4]@12 [eb3,a3,d4]@11 [eb3,a3,d4]@12", H: "[eb3,a3,d4]!2 ~@2",
})).s("gm_piano").gain(0.05)

// bass · electric bass finger · "Bass-James"
const bass = note("<~@3 A@7 B C D E@7 F G H I ~@3 J@5 ~ K@2 L@4 M N@2 O P Q R S T ~@2 U@4 ~@2>".pickRestart({
  A: "[~@41 bb2@12 g3@8 d3@4 f3@12 ~ d3@8 f3@4 bb2@12 g3@8 ~ d3@4 f3@12 d3@8 ~ f3@4 bb2@12 g3@8 ~ d3@4 f3@12 d3@8 f3@4 bb2@12 g3@8 ~ d3@4 f3@12 d3@8 f3@4 eb3@12 g4@4 bb4@4 d5@4 ~ eb5@3 d5@3 eb5@3 d5@3 eb5@8 d5@4 db5@6 g4@18 ~ db4@6 eb3@18]/7",
  B: "bb2@3 g3@2 d3 f3@3 d3@2 f3", C: "bb2@12 g3@8 d3@4 f3@12 ~ db3@4 d3@4 g3@3",
  D: "~ f3@8 f4@4 eb5@8 eb5@4 eb5@4 a4@4 eb5@8 a4@4 eb5@3",
  E: "[~ f3@6 eb5@23 f3@6 f4@6 ~@5 bb2@11 g3@7 ~ d3@3 f3@11 d3@7 ~ f3@3 bb2@12 g3@8 d3@4 f3@11 g3@8 ~@4 bb2@12 f2@12 d3@12 ab2@12 g2@12 bb2@12 eb3@4 eb2@7 db3@12 bb2@12 f2@12 d3@11 ab2@12 bb2@12 f2@12 d3@11 ab2@12 g2@9]/7",
  F: "~@3 bb2@12 eb3@4 eb2@8 db3@12 g2@9", G: "~@3 bb2@12 eb3@4 eb2@8 db3@12 bb2@9", H: "~@2 f2@12 d3@12 ab2@11 bb2@11",
  I: "~ f2@11 d3@12 ab2@12 ~@12",
  J: "[~@34 d4@12 a3@12 d3@12 gb3@12 d3@12 e3@12 gb3@12 d3@12 g3@7 g3@5 d3@7 b2@5 g3@7 f2@5 g2@12 b2@11 db3@7 ~ d3@4 f3@12 g3@12 ~@15]/5",
  K: "[~@31 f4@4 eb4@4 a3@4 g3@8 db4@4 f3@16 e4@4 db4@4 f4@12 ~@5]/2",
  L: "[~@30 bb4@12 bb3@12 d4@12 f4@12 eb4@4 eb3@8 g3@11 bb3@12 db4@12 bb3@12 bb2@12 d3@12 f3@11 ab3@12 g3@4 f3@4]/4",
  M: "eb3 d3 c3 d3 bb2@3 eb3@2 bb2 c3@2",
  N: "[d3@3 bb3@4 g3@4 eb3@4 eb2@8 g2@4 bb2@8 db3@4 eb3@8 db3@4 bb2@12 eb3@11 bb2@12 d3@10]/2",
  O: "~ e3@6 g3@6 bb2@6 bb2@5", P: "~@2 b2@11 g3@12 e3@12 c3@11", Q: "~ d3@12 g2@12 a2@11 c3@12",
  R: "f3@12 d3@12 bb2@13 ~@11", S: "~ bb2@13 ~@12 eb3@13 ~@9", T: "~@4 e3@13 ~@31",
  U: "[~@26 c4@8 ~ bb3@4 d4@8 bb3@4 eb4@8 bb3@4 e4@12 f3@12 ~@7 f3@16 ~@8 f3@39 ~@35]/4",
})).s("gm_electric_bass_finger").gain(0.24)

// drums · open hat
const open_hat = s("oh").struct("<~@47 [~@17 x ~@30] ~@8>").gain(0.55)

// drums · ride
const ride = s("rd").struct(`<
  ~@3 A B C D E F G H I J K L M N O P Q R S T U V W@5 X Y Z AA AB AC ~@3 AD AE AF AG AH AI AJ AK AL ~@8
>`.pickRestart({
  A: "~@28 x ~@8 x ~@3 x ~@6", B: "~ x ~@3 x ~@7 x ~@3 x ~@7 x ~@4 x ~@7 x ~@3 x ~@5",
  C: "~@2 x ~@3 x ~@8 x ~@3 x ~@7 x ~@3 x ~@8 x ~@3 x ~@3", D: "~@4 x ~@3 x ~@8 x ~@3 x ~@7 x ~@3 x ~@7 x ~@3 x ~@2",
  E: "~@5 x ~@3 x ~@8 x ~@3 x ~@7 x ~@3 x ~@7 x ~@3 x ~", F: "~@6 x ~@3 x ~@8 x ~@3 x ~@7 x ~@3 x ~@7 x ~@3 x",
  G: "~@7 x ~@4 x ~@7 x ~@3 x ~@7 x ~@3 x ~@7 x ~@3", H: "x ~ x!2 ~ x!2 ~ x!2 ~ x",
  I: "x ~@7 x ~@3 x ~@7 x ~@3 x ~@7 x ~@4 x ~@7 x ~@2", J: "~ x ~@7 x ~@3 x ~@7 x ~@3 x ~@7 x ~@3 x ~@7 x ~@2",
  K: "~ x ~@6 x ~@3 x ~@7 x ~@3 x ~@7 x ~@3 x ~@6 x ~@3 x", L: "~@7 x ~@2 x ~@7 x ~@2 x ~@7 x ~@2 x ~@7 x ~@2 x ~@4",
  M: "~@3 x ~@3 x ~@7 x ~@3 x ~@6 x ~@3 x ~@7 x ~@3 x ~@5", N: "~ x ~ x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x ~@2",
  O: "~@2 x ~@3 x ~@7 x ~@3 x ~@6 x ~@3 x ~@7 x ~@3 x ~@6", P: "~ x ~@3 x ~@7 x ~@3 x ~@6 x ~@3 x ~@7 x ~@3 x ~@7",
  Q: "x ~@3 x ~@7 x ~@3 x ~@7 x ~@2 x ~@7 x ~@3 x ~@7 x", R: "~@3 x ~@7 x ~@3 x ~@7 x ~@3 x ~@7 x ~@3 x ~@7 x",
  S: "~@3 x ~@7 x ~@3 x ~@7 x ~@3 x ~@7 x ~@3 x ~@6 x ~", T: "~@2 x ~@7 x ~@3 x ~@7 x ~@3 x ~@7 x ~@2 x ~@7 x ~@2",
  U: "~ x ~@7 x ~@2 x ~@7 x ~@3 x ~@7 x ~@3 x ~@6 x ~@3 x", V: "~@7 x ~@3 x ~@7 x ~@3 x ~@6 x ~@3 x ~@7 x ~@3 x ~",
  W: "~@3 x ~ x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x", X: "~@6 x ~@3 x ~@7 x ~@3 x ~@7 x ~@3 x ~@6 x ~@3 x ~@2",
  Y: "~@5 x ~@3 x ~@7 x ~@3 x ~@7 x ~@3 x ~@7 x ~@3 x ~@2", Z: "~ x ~@6 x ~ x!2", AA: "~@3 x ~@27 x ~@7 x ~@3 x ~@4",
  AB: "~@3 x ~@3 x ~@7 x ~@3 x ~@7 x ~@3 x ~@7 x ~@3 x ~@4", AC: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@21",
  AD: "~@7 x ~ x!2 ~", AE: "x ~@2 x ~@7 x ~@3 x ~@7 x ~@3 x ~@7 x ~@3 x ~@7 x",
  AF: "~@3 x ~@7 x ~@3 x ~@7 x ~@2 x ~@7 x ~@3 x ~@7 x ~", AG: "~ x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x ~@3 x",
  AH: "~@2 x ~@6 x ~@3 x ~@7 x ~@3 x ~@7 x ~@3 x ~@7 x ~@2", AI: "~ x ~@7 x ~@3 x ~@7 x ~@3 x ~@6 x ~@3 x ~@7 x ~@3",
  AJ: "x ~@7 x ~@3 x ~@7 x ~@3 x ~@7 x ~@3 x ~@8 x ~@2", AK: "~ x ~@7 x ~@3 x ~@8 x ~@3 x ~@8 x ~@3 x ~@8",
  AL: "x!2 ~@10",
})).gain(0.44)

stack(piano, piano_soft, bass, open_hat, ride)

More by Erroll Garner