Strudelify

Honky Tonk Train Blues

Lewis Meade "lux"

KeyG majorTempo125 bpm
0:00/0:00
// Honky Tonk Train Blues — Lewis Meade "lux"
// 125 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 3 "Piano   (" named as a piano, played on piano (its electric guitar jazz patch is not one)
// note: Full arrangement: all 139 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/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 · acoustic bass · "Bass    ("
const bass = note(`<
  ~ A ~ B@2 C D E F G H I J K L C D C D E F G H I J M N O P O P E F Q R I J M N C D O P E F Q R I J M N O P O P E F Q R
  I J K L O P O P E F G H I J K L C D O P E F G H I J K L O P O P E F Q R I J K L O P O P E F G H I J K L C D C D E F G
  H I J K L O P O P E F G H I J M N B@2 S T
>`.pickRestart({
  A: "d2@3 ~ d2@2 d#2@3 ~ d#2 ~ d2@6 ~@6", B: "g2@3 ~ g2@2 g2@2 ~@2 g2@2 e2@2 ~@2 e2@2 d2@3 ~ d2@2",
  C: "g2@3 ~ g2@2 b2@2 ~@2 b2@2 c3@2 ~@2 c3@2 c#3@2 ~@2 c#3@2", D: "d3@2 ~@2 d3@2 c3@3 ~ c3@2 b2@3 ~ b2@2 a2@3 ~ a2@2",
  E: "g2@3 ~ g2 ~ g2@2 ~@2 g2 ~ g2@3 ~ g2 ~ g2@3 ~ g2 ~", F: "g2@3 ~ g2@2 g2@3 ~ g2@2 e2@2 ~@2 e2@2 d2@3 ~ d2 ~",
  G: "c2@3 ~ c2@2 a#1@2 ~@2 a#1@2 a1@3 ~ a1@2 g1@2 ~@2 g1 ~", H: "c2@3 ~ c2@2 e2@2 ~@2 e2@2 f2@3 ~ f2@2 g2@3 ~ g2@2",
  I: "g2@2 ~@2 g2@2 b2@2 ~@2 b2 ~ c3@2 ~@2 c3@2 d3@2 ~@2 d3@2",
  J: "g2@2 ~@2 g2 ~ g2@2 ~@2 g2@2 e2@2 ~@2 e2@2 d#2@3 ~ d#2@2", K: "d2@3 ~ d2@2 c2@2 ~@2 c2@2 b1@3 ~ b1@2 a1@3 ~ a1 ~",
  L: "d2@3 ~ d2@2 e2@3 ~ e2@2 f2@3 ~ f2@2 f#2@3 ~ f#2@2", M: "d2@2 ~@2 d2 ~ f#2@3 ~ f#2@2 g2@2 ~@2 g2@2 a2@2 ~@2 a2 ~",
  N: "d3@2 ~@2 d3@2 c3@2 ~@2 c3@2 b2@2 ~@2 b2 ~ a2@3 ~ a2 ~", O: "g2@3 ~ g2@2 b1@3 ~ b1@2 c2@3 ~ c2@2 c#2@2 ~@2 c#2@2",
  P: "d2@3 ~ d2@2 e2@3 ~ e2@2 g2@3 ~ g2@2 f#2@3 ~ f#2 ~", Q: "c2@3 ~ c2@2 a#1@2 ~@2 a#1@2 a1@2 ~@2 a1@2 g1@3 ~ g1@2",
  R: "c2@2 ~@2 c2@2 e1@3 ~ e1@2 f1@3 ~ f1@2 g1@3 ~ c2 ~", S: "g2@2 ~@2 g2@2 ~ g2@2 ~ g2 ~ e2@2 ~@2 e2 ~ d#2 ~@3 d#2@2",
  T: "d2@3 ~ e2 ~ f#2@4 g2@3 ~@6 g2@5",
})).s("gm_acoustic_bass").gain(0.43).pan(0)

// chords · piano · "Piano   ("
const piano = note(`<
  ~ A ~ B C D E F@2 G H I@2 J K L@2 M N O@2 P Q O@2 R S O@2 T U V@2 P Q V@2 W X V@2 Y@2 O@2 Z AA V@2 AB@2 V@2 Y@2 V@2 P
  Q O@2 W X O@2 AC AD V@2 P Q V@2 W X O@2 T U V@2 Z AA V@2 R S V@2 Y@2 V@2 AE@2 O@2 AF AG V@2 AH AI AJ@2 AK AL F@2 J K
  F@2 T U O@2 AM AN O@2 AB@2 V@2 AH AI I@2 G H AO AP AQ AR AS AT AU AV
>`.pickRestart({
  A: "~@4 [c6,d6,f#6,a6]@7 ~ [c6,f#6]@6 ~@6", B: "g6@14 [d6,b6] ~ d5 ~ [d6,g6,b6]@3 ~@3, d6@13 ~@11",
  C: "d6@17 ~ d6@4 ~@2, b6@11 ~, b5 ~@23",
  D: "~ d6@2 a6 [b5,c6] [g#6,a6] [c6,f#6] b5 [g5,a5] ~@15, b6 ~@7, ~ g6@5 ~@18, ~ f#6 ~ f#6@2 ~@19", // Cmaj7 Amaj7 Cdim Gsus2
  E: "~@11 [d6,g6] ~@6 [d6,g6]@3 ~@3", F: "[~@34 b5 ~@5 d6 ~@7, [d6,b6]@5 ~]/2",
  G: "[a#5,c6,e6,g6]@21 ~ [a#5,c6,e6,g6]@2", H: "~@10 c5@2 [a#5,c6,e6,g6]@4 c5 ~ [a#5,c6,e6,g6]@4 ~@2",
  I: "[[d6,b6]@30 ~@2 [d6,b6]@3 ~ [d6,b6]@3 ~ d6@3 ~ d6@3 ~, b5 ~@39 b6@7 ~]/2", // G
  J: "[c6,d6,f#6,a6]@21 ~ [c6,d6,f#6,a6]@2", K: "~@10 d5@2 [c6,d6,f#6,a6]@4 d5 ~ [c6,d6,f#6,a6]@4 ~@2",
  L: "[[d6,g6,b6]@33 ~ d5@2 [d6,g6,b6]@4 d5@2 [d6,g6,b6]@4 ~@2]/2", // G
  M: "~@4 [d6,g6,b6]@3 ~ [d6,g6,b6]@3 ~ [d6,g6,b6]@3 ~ [d6,g6,b6]@3 ~ [d6,g6,b6]@2 b5 ~", // G
  N: "[d6,g6,b6]@3 ~ [d6,g6,b6]@3 ~ [d6,g6,b6]@2 b5 ~ [d6,g6,b6]@3 ~ [d6,g6,b6]@3 ~ [d6,g6,b6]@3 ~", // G
  O: "[~@4 [f5,b5,g6]@6 g5 ~ [e5,c6]@5 ~ [d#5,c#6,a#6]@4 [d6,b6]@8 ~@12 [f#5,c6,d#6]@4 ~@2, ~@4 a6 ~@11, ~@12 g6 ~@9 d5@11 ~@15]/2", // G7 C D#7 G Cdim
  P: "[a#5,c6,g6]@21 ~ c6@2, e6, ~@22 a#5 ~", Q: "~@10 c5@3 ~ [a#5,c6,e6] ~ c5 ~ [a#5,c6,e6]@3 ~@3",
  R: "[c6,d6]@16 a5 ~ [c6,d6,a6]@3 ~ [c6,d6] ~, [f#6,a6]@3 f#6, ~@11 a6", // Csus2 D7 Csus2 F#m
  S: "~@10 a5 ~ [c6,d6,f#6,a6]@4 a5 ~ [c6,d6,f#6,a6]@3 ~@3", T: "[d6,g6,b6]@16 b5 ~ [d6,g6,b6]@3 ~ [d6,g6] ~, ~@11 b6",
  U: "~@10 b5 ~ [d6,g6,b6]@3 ~ b5 ~ [d6,g6,b6]@3 ~@3", // G
  V: "[~@2 [g4,g5] [f5,b5,d6,g6]@2 g5 ~@2 g5 [d#5,a5]@2 ~@6 d4@5 ~@2, ~@3 g6@8 ~, ~@2 [e5,a#5,c#6] c6 ~@4, ~@11 [d5,g5,b5]@11 ~@2]/2", // G G7 D#dim A#dim G
  W: "[c6,d6,f#6]@21 ~ [c6,d6] ~, ~@11 a6", X: "~@10 a5 ~ [d6,g6,b6]@4 a5 ~ [d6,g6,b6]@3 ~@3",
  Y: "[b5 ~@23 b5@4 d6@2 b5 ~ [d6,b6]@2 b5@2 [d6,b6]@4 [d6,b6]@4 [d6,b6]@3 ~, b6@31 ~@17, d6@13 ~@11]/2", // G
  Z: "~@4 [a#5,c6,g6]@3 ~ [a#5,c6,g6]@3 ~ [a#5,c6,g6]@3 ~ [a#5,c6,e6,g6]@3 ~ [a#5,c6,e6,g6]@2 g5 ~, ~@4 e6@11 ~@9", // C7
  AA: "[a#5,c6,e6,g6]@3 ~ [a#5,c6,e6,g6]@3 ~ [a#5,c6,e6,g6]@2 g5 ~ [a#5,c6,e6,g6]@3 ~ [a#5,c6,e6,g6]@3 ~ [a#5,c6,e6,g6]@3 ~", // C7
  AB: "[a5 ~@23 a5@4 c6@2 a5 ~ [c6,f#6]@2 a5@2 [c6,f#6]@4 [c6,f#6]@4 [c6,f#6]@3 ~, f#6@31 ~@17, c6@13 ~@11]/2", // Cdim
  AC: "[d6,b6]@21 ~ d6 ~, g6", AD: "~@10 d5@3 ~ [d6,g6] ~ d5 ~ [d6,g6]@3 ~@3",
  AE: "[g5 ~@23 g5@4 a#5@2 g5 ~ [a#5,e6]@2 g5@2 [a#5,e6]@4 [a#5,e6]@4 [a#5,e6]@3 ~, e6@31 ~@17, a#5@13 ~@11]/2", // A#dim
  AF: "~@4 [c6,d6,a6]@3 ~ [c6,d6,a6]@3 ~ [c6,d6,a6]@3 ~ [c6,d6,f#6,a6]@3 ~ [c6,d6,f#6,a6]@2 a5 ~, ~@4 f#6@11 ~@9", // D7
  AG: "[c6,d6,f#6,a6]@3 ~ [c6,d6,f#6,a6]@3 ~ [c6,d6,f#6,a6]@2 a5 ~ [c6,d6,f#6,a6]@3 ~ [c6,d6,f#6,a6]@3 ~ [c6,d6,f#6,a6]@3 ~", // D7
  AH: "[d6,g6,b6]@21 ~ [d6,g6,b6]@2", AI: "~@10 d5@2 [d6,g6,b6]@4 d5 ~ [d6,g6,b6]@4 ~@2",
  AJ: "[[d6,g6,b6]@40 d5@2 [d6,g6,b6]@3 ~@3]/2", // G
  AK: "~ a#5@2 f6 [g5,a5] [c6,c#6,d6] [a5,b5] g5 [e5,f5] ~@15, g6 ~@7, ~ e6@5 ~@18, ~ d#6 ~ d#6@2 ~@19", // Gsus2 Asus2 Fmaj7
  AL: "~@11 [a#5,e6] ~@6 [a#5,e6]@3 ~@3", AM: "[a#5,c6]@16 g5 ~ [a#5,c6,g6]@3 ~ [a#5,c6] ~, [e6,g6]@3 e6, ~@11 g6",
  AN: "~@10 g5 ~ [a#5,c6,e6,g6]@4 g5 ~ [a#5,c6,e6,g6]@3 ~@3", AO: "[d6,g6]@13 ~ [d6,g6] ~ d5@2 [d6,g6]@4 d5 ~",
  AP: "[d6,g6]@16 d5 ~ [d6,g6]@3 ~@3", // G5
  AQ: "~ c6@2 g6 [a5,b5] [d6,d#6,e6] [b5,c#6] a5 [f#5,g5] ~@15, a6 ~@7, ~ f#6@5 ~@18, ~ f6 ~ f6@2 ~@19", // Asus2 Bsus2 Gmaj7
  AR: "~@11 [c6,f#6] ~@6 [c6,f#6]@3 ~@3", AS: "[b5,g6]@23 ~", AT: "~@2 [b5,d6,g6,b6]@9 ~",
  AU: "~@4 g6@2 [g5,b5,d6]@5 ~ [a#5,c#6]@4 g5 ~ [d#5,a5,c6]@4 ~@2, ~@2 e5 ~", // G A#m Adim
  AV: "[d5,g5,b5]@3 ~@3 [g#4,f#5,a#5]@4 [g4,b4,g5,a5]@8 ~@6, ~@3 c5 ~@8", // G D#m G
})).s("gm_piano").gain(0.09).pan(1)

// chords · acoustic guitar steel · "Guitar  ("
const acoustic_guitar_steel = note(`<
  ~ A ~ B C D E D E F G H I J K L M N O H I P Q N O R S I T I T H I U V N O W X D E D E L M Y Z D E AA AB H I N O D E Y
  Z H I AC AD N O D E N O Y Z D E AC AD N O L M D E Y Z D E AC AD H I H I@2 T P Q N O AE AC L M D E I T G AF N O AA AB D
  E D E H I Y Z H I AC AD H I L M I T P Q D E R S I B ~@2
>`.pickRestart({
  A: "[c4,d4,f#4,a4] ~@3 [c4,d4,f#4,a4] ~@3", B: "[g3,b3,d4]@3 ~@13 g3@2 b3@2 d4@2 g4@2",
  C: "[g3,b3,d4]@5 ~@11 g2 ~ [g3,b3,d4]@2 ~@4", D: "[g3,b3,d4]@3 ~@15 [g3,c4,e4]@3 ~ g2 ~",
  E: "[g3,b3,d4]@3 ~@11 [g3,c4,e4] ~ g2 ~ [g3,c4,e4]@2 ~@4", F: "[a#3,c4,e4,g4]@2 ~@14 c3@2 [c4,f4,a4]@3 ~ c3 ~",
  G: "[a#3,c4,e4,g4] ~@7", H: "[g3,b3,d4]@2 ~@14 g2@2 [g3,c4,e4]@3 ~ g2 ~", I: "[g3,b3,d4] ~@7",
  J: "[a3,c4,d4,f#4]@3 ~@13 d3@2 [b3,d4,g4]@3 ~ d3@2", // D7 G
  K: "[a3,c4,d4,f#4]@3 ~@3 [b3,d4,g4]@3 ~@3 [a3,c4,d4,f#4]@4 d3 ~ [b3,d4,g4]@2 ~@4", L: "[g3,b3,d4] ~@11",
  M: "~@9 [g3,c4,e4] ~@2", N: "[g3,b3,d4]@3 ~@13 g2@2 [g3,c4,e4]@3 ~ g2@2",
  O: "[g3,b3,d4]@3 ~@3 [g3,c4,e4]@3 ~@3 [g3,b3,d4]@4 g2 ~ [g3,c4,e4]@2 ~@4", // G C G C
  P: "[a#3,c4,e4,g4]@3 ~@13 c3@2 [c4,f4,a4]@3 ~ c3@2", // C7 F
  Q: "[a#3,c4,e4,g4]@3 ~@3 [c4,f4,a4]@3 ~@3 [a#3,c4,e4,g4]@4 c3 ~ [c4,f4,a4]@2 ~@4", // C7 F C7 F
  R: "[c4,d4,f#4,a4]@3 ~@15 [d4,g4,b4]@3 ~ d3 ~", S: "[c4,d4,f#4,a4]@3 ~@11 [d4,g4,b4] ~ d3 ~ [d4,g4,b4]@2 ~@4",
  T: "~@16 g2 ~ [g3,c4,e4]@3 ~@3", U: "[a#3,c4,e4,g4]@3 ~@15 [c4,f4,a4]@3 ~ c3 ~",
  V: "[a#3,c4,e4,g4]@3 ~@11 [c4,f4,a4] ~ c3 ~ [c4,f4,a4]@2 ~@4", W: "[c4,d4,f#4,a4]@3 ~@13 d3@2 [d4,g4,b4]@3 ~ d3@2",
  X: "[c4,d4,f#4,a4]@3 ~@3 [d4,g4,b4]@3 ~@3 [c4,d4,f#4,a4]@4 d3 ~ [d4,g4,b4]@2 ~@4", Y: "[a#3,c4,e4,g4] ~@11",
  Z: "~@9 [c4,f4,a4] ~@2", AA: "[c4,d4,f#4,a4] ~@11", AB: "~@9 [d4,g4,b4] ~@2", AC: "[c4,d4,f#4,a4] ~@7",
  AD: "~@16 d3 ~ [d4,g4,b4]@3 ~@3", AE: "[c4,d4,f#4,a4]@2 ~@14 d3@2 [d4,g4,b4]@3 ~ d3 ~",
  AF: "~@16 c3 ~ [c4,f4,a4]@3 ~@3", // F
})).s("gm_acoustic_guitar_steel").gain(0.15).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  ~ A ~ A@2 B@2 C A C D C@2 A@2 C A B A@3 D C A@2 C A C@4 A C@2 D@2 A C A B C B@2 C A C@6 A C B@2 A E D B D C A@4 D A@4
  C A@2 C A D A@2 C D C A@4 C D A C@2 A C A@2 C@2 A@3 C@3 D C A D A D E B@2 D E B C@2 A C@2 B A C D@2 C@4 A C D B A@2
  D@2 C F G
>`.pickRestart({
  A: "x!2", B: "x ~@2 x!2 ~", C: "x ~@5 x ~@4 x", D: "x ~@5 x ~ x ~@2 x", E: "x", F: "x ~ x", G: "~ x ~ x",
})).gain(0.19).pan(1)

// drums · snare
const snare = s("sd").struct(`<
  ~ A ~ B C D@2 E C D F D G D@2 F H I@3 C I@3 J I K@2 G K I@2 L I@2 K H I@2 K L K@2 I J K I@2 L I@3 M I@3 N K I@2 L I K
  I H I@2 K B K I K C K I K B I@3 M K I@2 B K I K L I@3 H I@2 K H I K@2 G E F D H D@2 E N D@3 N I@3 H I K I B K@2 I L
  D@3 C D@2 F C D@2 F M O P
>`.pickRestart({
  A: "~@3 x ~ x ~@6", B: "x ~@3 x!2 ~@6", C: "x!12", D: "~@3 x ~@5 x ~ x", E: "~@3 x ~@4 x!2 ~@2",
  F: "~@3 x ~@4 x!2 ~ x", G: "x!10 ~@2", H: "x ~@3 x!8", I: "~@3 x ~ x ~@3 x ~ x", J: "x ~@2 x ~ x!3 ~ x!3",
  K: "~@3 x ~ x ~@3 x ~@2", L: "x ~@2 x!3 ~@2 x!2 ~@2", M: "x!3 ~ x!6 ~@2", N: "~@2 x!3 ~ x!2 ~ x ~@2",
  O: "~@2 x ~@2 x!2 ~@2 x ~@2", P: "x ~ x ~@2 x ~@6",
})).gain(0.13).pan(1)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~ A ~@3 B@2 C ~ B C B ~ B@2 C ~ D@3 ~ D@3 ~ D@3 ~ D@3 ~ D@3 ~ D@3 ~ D@3 ~ D@3 ~ D@3 ~ D@3 ~ D@3 ~ D@3 ~ D@3 ~ D@3 ~
  D@3 ~ D@3 ~ D@3 ~ D@3 ~ D@3 ~ D@3 ~ D@3 ~ C@2 B ~ B@2 C ~ B@3 ~ D@3 ~ D@3 ~ D@3 ~ B@3 ~ B@2 C ~ B@2 C ~@3
>`.pickRestart({
  A: "~ x ~@4", B: "~@2 x ~@2 x ~@2 x ~@3", C: "~@2 x ~@2 x ~@6", D: "~ x ~@2 x ~",
})).gain(0.06).pan(1)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3 A ~@8 B ~@15 B ~@23 C ~@3 D ~@11 A ~@7 A ~@3 C ~@3 A ~@15 B ~@7 D ~@3 D ~@7 A ~@15 C ~@2
>`.pickRestart({
  A: "~@10 x!2", B: "~@11 x", C: "~@3 x ~@7 x", D: "~@5 x ~@5 x",
})).gain(0.25).pan(1)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@5 A B C ~ D E F ~ E D B ~@85 A D@2 ~ D@2 A ~ D@3 ~@13 B@2 G ~ B D@2 ~ E D@2 ~@3
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~@2 x!2 ~", B: "x ~@2 x ~@2 x ~@2 x ~ x", C: "x ~ x!2 ~@2 x!2 ~ x ~ x", D: "x!4",
  E: "x ~ x!2 ~@2 x ~@2 x ~@2", F: "x!4 ~@2 x ~@2 x ~@2", G: "x ~@2 x ~@2 x!2 ~ x ~@2",
})).gain(0.25).pan(1)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@3 A ~@24 B ~@27 B ~@11 A ~@7 A ~@3 B ~@3 A ~@15 B ~@7 B ~@3 B ~@7 A ~@15 B ~@2
>`.pickRestart({
  A: "~@2 x", B: "~@5 x",
})).gain(0.25).pan(1)

// drums · open hat
const open_hat = s("oh").struct("<~@7 [~@11 x] ~@93 [~@11 x] ~@5 [~@11 x] ~@31>").gain(0.19).pan(1)

// drums · high tom
const high_tom = s("ht").struct("<~@3 A ~@8 B ~@39 B ~@3 C ~@11 A ~@7 A ~@7 A ~@23 C ~@3 C ~@7 A ~@18>".pickRestart({
  A: "~ x", B: "~@5 x", C: "~@2 x",
})).gain(0.25).pan(1)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2 A@2 ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2 A@2 ~@2 A@2 ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@4 B
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.22).pan(1)

// drums · ride
const ride = s("rd").struct(`<
  ~ A ~@15 B C@2 ~ B@3 ~ B D E ~ D B@2 ~ B@2 F ~ B C D ~ D@2 C ~ D B C ~ B@2 C ~ B G@2 ~ D C@2 ~ B F C ~ B@2 F ~ D C D ~
  D B D ~ B@3 ~ D G B ~ D B F ~ B@3 ~ B@2 D ~ B F D ~@13 B@3 ~ B F B ~ D F C ~@15
>`.pickRestart({
  A: "x!3 ~", B: "x!4", C: "x ~@2 x ~@3 x ~ x ~@2", D: "x ~@2 x ~@2 x ~@2 x ~ x", E: "x ~@2 x ~@3 x ~ x ~ x",
  F: "x ~@2 x ~ x ~ x ~ x ~ x", G: "x ~@2 x ~ x ~ x ~ x ~@2",
})).gain(0.25).pan(1)

stack(
  bass, piano, acoustic_guitar_steel, kick, snare, snare_soft, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride
)