Strudelify

A Little Less Talk and a Lot More Action

Hank Williams

KeyA majorTempo125 bpm
0:00/0:00
// A Little Less Talk and a Lot More Action — Hank Williams
// 125 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): OVERDRIVE.
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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@16 A B A B A B A C D E A@2 F G H ~ D E A B F G H ~ A B A C D E A@2 F G A B A B A C D E A@2 F G H ~ D E A B F G A C D
  E A B F G A B F G I J@2 I
>`.pickRestart({
  A: "a1 ~ a1@2 c2@2 c#2@2 e2@2 a1@2 f#2@2 e2@2", B: "a1 ~ a1@2 c2@2 c#2@2 e2@2 a1@2 f#2@2 a2@2",
  C: "a1 a2 b1 b2 c2 c3 c#2 c#3", D: "d2 ~ d2@2 f2@2 f#2@2 a2@2 d2@2 b2@2 a2@2",
  E: "d2 ~ d2@2 f2@2 f#2@2 a2@2 d2@2 b2@2 d3@2", F: "e1 ~ e1@2 g1@2 g#1@2 b1@2 e1@2 c#2@2 b1@2",
  G: "e1 ~ e1@2 g1@2 g#1@2 b1@2 e1@2 c#2@2 e2@2", H: "a1 ~@7", I: "a1 ~@15", J: "[g1@3 g#1@2 a1@24 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.71)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  A B C D ~ E F ~@2 G H I ~@9 E F ~@2 G H I ~@5 G H I ~@5 E F ~@2 G H I ~@3 E ~ E F ~@2 G H I ~@5 G H I ~@2 H ~@2 G H I
  ~@2 H I ~@6
>`.pickRestart({
  A: "[a2,e3]@2 [a2,f#3] ~ [a2,e3]@2 [a2,f#3] [a2,e3]", B: "~ [a2,e3] [a2,f#3] ~ [a2,e3]@2 [a2,f#3] ~",
  C: "[a2,e3,a3]@2 [a2,f#3] ~ [a2,e3]@2 [a2,f#3] [a2,e3]", D: "~@2 b3@3 ~ b3 ~ b3@4 a3@2 e3 ~", E: "~ a2 ~@6",
  F: "[a2,e3,a3] ~@3", G: "~@6 d3 ~", H: "[a2,e3] ~@3", I: "~@6 a2 ~",
})).s("gm_overdriven_guitar").gain(0.28)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@4 A@3 B C D@2 E F G H ~ I@4 A@3 B C D@2 E F G H ~ C D@2 E F G H ~ A@3 B C D@2 E F G J K L@3 B C D@2 E F G H ~ C D@2
  E F G M B C D@2 E F G N E F G O P@2 Q
>`.pickRestart({
  A: "[[a2,e3]@4 [a2,f#3]@3 ~ [a2,e3]@3 ~ [a2,f#3]@2 [a2,e3]@4 e2 ~ [a2,f#3]@2 e2 ~ [a2,e3]@3 ~ [a2,f#3] ~ [a2,e3]@5 ~ [a2,f#3]@3 ~ [a2,e3]@4 [a2,f#3]@2 [a2,e3]@2]/3", // A5 D A5 D A5 D A5 D …
  B: "~@2 [a2,e3] ~ [a2,f#3]@2 e2 ~ [a2,e3]@3 ~ [a2,f#3] ~@3", C: "[d3,a3]@4 [d3,b3]@4 [d3,a3]@3 ~ [d3,b3]@2 [d3,a3]@2",
  D: "[~@2 [d3,a3] ~ [d3,b3]@2 a2@2 [d3,a3]@4 b3 ~ [a2,e3]@5 ~ [a2,f#3]@2 ~@2 [a2,e3]@3 ~ [a2,f#3] ~ [a2,e3] ~]/2", // D5 G D5 A5 D A5 D A5
  E: "~@2 [a2,e3] ~ [a2,f#3]@2 e2 ~ [a2,e3]@4 f#3 ~@3", // A5 D A5
  F: "[e2,b2]@3 ~ [e2,c#3]@2 ~@2 [e2,b2]@3 ~ [e2,c#3]@2 [e2,b2] ~", // E5 C#m E5 C#m E5
  G: "~@2 [e2,b2] ~ [e2,c#3]@2 ~@2 [e2,b2]@4 [e2,c#3]@2 ~@2", H: "[a2,e3]@3 ~@13",
  I: "[[a2,e3,a3]@2 [a2,f#3,a3]@2 [a2,e3,a3]@2 [a2,f#3,a3] [a2,e3,a3]@2 [a2,e3,a3] [a2,f#3,a3]@2 [a2,e3,a3]@2 [a2,f#3,a3]@2]/2", // A5 D A5 D A5 D A5 D
  J: "[a2,e3]@4 [a2,f#3]@3 ~ [a2,e3]@3 ~ [a2,f#3]@2 [a2,e3]@2", // A5 D A5 D A5
  K: "~@2 e2 ~ [a2,f#3]@2 e2 ~ [a2,e3]@3 ~ [a2,f#3] ~ [a2,e3]@2", // D A5 D A5
  L: "[[a2,e3]@3 ~ [a2,f#3]@3 ~ [a2,e3]@3 ~ [a2,f#3]@2 [a2,e3]@4 e2 ~ [a2,f#3]@2 e2 ~ [a2,e3]@3 ~ [a2,f#3] ~ [a2,e3]@5 ~ [a2,f#3]@3 ~ [a2,e3]@4 [a2,f#3]@2 [a2,e3]@2]/3", // A5 D A5 D A5 D A5 D …
  M: "~@4 [a2,f#3]@3 ~ [a2,e3]@4 [a2,f#3]@2 [a2,e3]@2", N: "~@4 [a2,f#3]@2 ~@2 [a2,e3]@3 ~ [a2,f#3] ~ [a2,e3] ~",
  O: "[a2,e3] ~@7", P: "[[g2,d3]@3 [g#2,d#3]@2 [a2,e3,c#4,e4,a4]@24 ~@3]/2", Q: "[a2,e3] ~@15",
})).s("gm_acoustic_guitar_steel").gain(0.15)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~@15 A B C D E F@4 G H I@2 J@2 K ~ L M N O P Q R S T U V W X Y Z@2 AA@2 AB@2 AC@4 G H I@2 J@2 K ~ L M N O P Q AD@2 AE
  M N O P Q AF@2 P Q AG AH@2 AI
>`.pickRestart({
  A: "~@10 [d#6,a6] ~ [e6,a6] ~ [e6,a6] ~", // D#dim A5
  B: "[d#6,a6] ~ [e6,a6] ~ [e6,a6] ~ [e6,a6] ~ [e6,a6] ~ [e6,a6] ~ [e6,a6] ~ e6 ~", // D#dim A5
  C: "a6 [c6,e6] a5@2 [d6,a6]@2 a5 ~ [c6,c#6,f6] c6 a5@2 f#5@2 e5@2, ~@4 e6@3 ~", // C D5 C#maj7
  D: "[a5,e6]@2 e5 ~ [c6,c#6,e6] ~ f#6 ~ e6 [a5,c#6] e5@2 d5@2 ~@2", // A5 C A
  E: "[c5,g5] c#5 [e4,a4] ~ [c5,c#5,a5] ~ d5 ~@2 [a4,c#5] e4@2 d4@2 [c4,a4]@2, a5@2 ~@6 e5@2 ~@4 g4 ~", // C5 A5 F A F
  F: "[[e3,c#4,e4,a4]@3 ~ [f#3,d4,f#4,a4]@2 ~@2 [c#4,e4,a4]@2 [d4,a4]@2 a2@2 c4@2 c#4@2 [a2,e4]@2 [f#3,d4,f#4,a4]@2 a2@2 [c#4,e4,a4]@2 [f#3,d4,f#4,a4] ~ a2 ~ c4@2 c#4@2 a2@2 [f#3,d4,f#4,a4]@2 ~@2 [c#4,e4]@2 [f#3,d4,f#4] ~ a2 ~ c4@2 c#4@2 [a2,e4]@2 [f#3,d4,f#4,a4]@2 a2@2 [e3,c#4,e4,a4]@2 [a2,d4,a4]@2 c3@2 c#3@2, ~@6 a2@4 ~@4 e4 ~@25 a4@4 ~@2 e4 ~@11 f#4 ~@5, ~@8 e3 ~ [f#3,f#4] ~@3 [e3,a4]@4 ~@6 e3 ~@5 [e3,e4,a4]@5 ~@5 e3 ~@5 [e3,a4]@4 ~@14]/4", // A D A D5 A5 D A D …
  G: "d3 ~ [c4,d4,f#4,a4] d3 [c4,d4,f#4,a4]!2 c3 c#3, ~ d2@3 ~@4", // D7
  H: "~@2 [c4,d4,f#4,a4] d3 [c4,d4,f#4,a4]!2 g2 g#2, d3 ~@3, ~ d2@3 ~@4", // D7
  I: "[[a2,c#4,e4,a4]@3 ~ [f#3,d4,f#4,a4]@2 a2@2 [c#4,e4,a4]@2 [d4,a4]@2 ~@2 c4@2 c#4@2 [a2,e4]@2 [f#3,d4,f#4,a4]@2 ~@8 [d#3,d#4,d#5]@2, ~@8 e3 ~ [f#3,f#4] ~ a2@4 ~@6 a2@10, ~@14 a4@5 ~@7 [c#3,f#4]@6, ~@14 e4 ~@9 [c#4,e4,a4]@8, ~@7 [d3,d4]]/2", // A D A D5 A5 D D# F# …
  J: "[[e4,e5]@2 ~@10 [c#5,c#6]@2 ~@6 [g5,b5] ~@9 [f#2,f#5]@2, e3@8 [g#4,g#5]@2 [e3,b4,b5]@4 [e3,e5,e6]@5 ~@3 [a5,c#6]@6 e5@4, ~@2 [e2,e4,e5]@13 ~ e2@16, ~@2 [f#4,f#5]@5 ~@2 e3@4 e3@3, ~@3 [g4,g5]@4 ~@3 g#5@2 [g#5,b5,c6]@4]/2", // E C# G F# G# E5 E A …
  K: "[a2,e5,a5] ~@7", // A5
  L: "[d3,a3]@2 ~@2 [d3,b3]@2 a2 ~ [d3,a3]@2 [d3,b3,b5,c6,e6] ~ [a2,b5,c6,e6] ~ [d3,a3,b5,c6,e6] ~", // D5 G D5 Cmaj7 Am
  M: "b5 [a3,a5] [d3,b3,f#5] e5 [d3,a3] b3 [g2,f#5] [g#2,e5], [c6,e6]@2 ~@2 [a5,e6]@3 ~, ~@2 d3 ~@3 a2 ~@9", // A Bm D5 Gmaj7 C#m C A5
  N: "[a2,e3]@2 [a5,a6]@2 [a2,f#3]@2 e2 ~ [a2,e3,a5,a6]@2 [a5,a6]@2 [e2,g5,g6]@2 [e3,f#5,f#6]@2, ~@10 [a2,f#3] ~@3 a2 ~", // A5 A D A5 A Em Esus2 D
  O: "[e5,f6] [c5,c6] [a2,f#3,b4,b5] [a4,a5] [a2,e3] [c#2,c#4,c#5,c#6] [d2,d3,d4,d5,d6] [d#2,d#3,d#4,d#5,d#6], ~@2 [a2,e3] ~@3 e2 ~@3 c#3 ~@5", // Fmaj7 C B7 A A5 C# D D# …
  P: "[e2,e3,e5,e6]@2 ~@2 [e2,c#4,g5,g#5]@2 e2@2 e2@2 [e2,c#4]@2 g5 ~ [b2,b3,c#6]@2, e4@5 e4@3, ~@2 e3@11 ~@3, ~@3 e6@3 b5@2, ~@8 [b3,f#5,d6]@4 ~ g#5@3", // E C#m Bsus2 Bm
  Q: "b5 e5 [b2,b3] ~ [b2,c#4,a4]@2 [e2,g4]@2 g#4@2 e4@2 [e2,e3,e4]@2 [f#3,f#4] ~, ~ b4 ~ b4@3 ~@2, ~@8 b3 ~ e2 ~@3 f#2@2", // B F#m Em E F#
  R: "[a2,a3,a4]@3 ~@13", S: "~@10 a5@2 [b5,c6] c6 ~ c#6",
  T: "~ d#6 a6 e6 [e6,a6]!2 ~ [e6,a6] [d#6,a6] a6 e6 [e6,a6] [e6,g#6,a6] [e6,a6] e6 ~, [d6,a6] ~@7", // A5 D#dim A5 Amaj7 A5 D5
  U: "a6 [c6,e6] a5@2 [d6,a6]@2 a5 ~ [c6,a6]@2 c#6 ~ [d6,a6]@2 a5@2", // C D5 F D5
  V: "c6 c#6 a6 ~ c#6 a6 c6 c#6 a6 c6 c#6 a6 ~ c#6 a6 a5, ~@3 c6@2 ~@7 c6@2 ~@2",
  W: "d6 d#6 e6 d#6 d6 c6 [a5,d6] d#6 g6 [c6,d6] a5 d6 [d#6,e6] ~ [a5,g6] [d6,d#6], ~@2 g6@2 ~@7 g6@2 ~@3", // D5 Csus2 Emaj7 A7 D#maj7
  X: "g6 [c6,d6] [a5,d6,g6] d#6 [e6,g6] [d6,e6] g6 e6!2 [e6,g6]!3 ~ [e6,g6]!3, ~@7 g6@2 ~@7", // Csus2 Dsus4 Em Dsus2 Em
  Y: "[e6,g6] ~ [e6,g6] ~ e6@2 [e6,g6] ~ [e6,g6] ~ a5 ~ [e6,g6]@2 a5 ~, ~@4 g6 ~@11", // Em
  Z: "[[c6,e6]@2 ~@2 d6@2 g5@2 e6 [a5,c#6] g5@2 ~@4 [c5,c6]@2 ~@12 [d#4,d#5,d#6]@2, ~@2 c#6@5 ~@5 e5@12 c#4@2 [c#5,c#6]@2 [d4,d5,d6]@4, ~@7 d5@4 [a4,a5]@5, ~@9 [c5,c6]@7, ~@5 [b4,b5]@3]/2", // C A C D# C# D A C …
  AA: "[[e5,e6]@2 ~@4 e6 ~@5 g#5@2 ~@16 b4@2, e4@5 e4@5 e4 [f#5,f#6]@2 [e5,e6] [c5,c6]@2, ~ e3@15, ~@4 g5@2 ~@2 [f#5,d6,d#6]@4 g5 ~@5 [g5,f6,g6]@14, ~@5 g#5@2 ~@7 e6@10 e4@8]/2", // E F# E C D G7
  AB: "[[a4,a5] ~@11 [b3,b4]@2 [a3,a4]@4 ~@12 [e4,a4,c#5,a5]@2, ~ [a4,a5]@4 [c4,c5]@2 ~@2 a3@3 c#5 [e4,e5] [f#4,f#5]@2, ~@2 g5@5 ~@4 [c4,c5]@5, ~@3 [f#4,f#5]@4 ~@2 a4@3 c#4@4, ~@4 [e4,e5]@3 ~@3 [b3,b4]@6]/2", // A B A C E F# C F# …
  AC: "[[e3,a3,c#4,e4]@3 ~ [f#3,d4,f#4,a4]@2 ~@2 [c#4,e4,a4]@2 [d4,a4]@2 a2@2 c4@2 c#4@2 [a2,e4]@2 [f#3,d4,f#4,a4]@2 a2@2 [c#4,e4,a4]@2 [f#3,d4,f#4,a4] ~ a2 ~ c4@2 c#4@2 a2@2 [f#3,d4,f#4,a4]@2 ~@2 [c#4,e4]@2 [f#3,d4,f#4] ~ a2 ~ c4@2 c#4@2 [a2,e4]@2 [f#3,d4,f#4,a4]@2 a2@2 [e3,c#4,e4,a4]@2 [a2,d4,a4]@2 c3@2 c#3@2, ~@6 a2@4 ~@4 e4 ~@25 a4@4 ~@2 e4 ~@11 f#4 ~@5, ~@8 e3 ~ [f#3,f#4] ~@3 [e3,a4]@4 ~@6 e3 ~@5 [e3,e4,a4]@5 ~@5 e3 ~@5 [e3,a4]@4 ~@14]/4", // A D A D5 A5 D A D …
  AD: "[~@14 [a4,a5]@4 ~@2 c6 ~ [d6,f#6]@2 [c#6,e6] a5 ~@2 d5@2 c#5@2, ~@2 a6@8 [c5,c6]@2 [b4,b5]@6 e5@6 ~@2 e5@5 ~, ~@2 a5@6 [e5,e6]@11 ~@13, ~@4 [g5,g6]@15 ~ [c#6,e6]@4 ~@8, ~@6 [f#5,f#6]@13 ~@13]/2", // A D C#m C B E G C#m …
  AE: "[d3,a3,d5,f#5]@2 ~@2 [d3,b3]@2 a2 ~ [d3,a3]@2 [d3,b3,b5,c6,e6] ~ [a2,b5,c6,e6] ~ [d3,a3,b5,c6,e6] ~", // D G D5 Cmaj7 Am
  AF: "[~@14 [a4,a5]@4 a4@2 a5@2 [d5,a5]@2 [c5,g5] c#5 ~@2 [d4,d5,d6]@2 [d#4,d#5,d#6] ~, ~@2 a6@8 [c5,c6]@2 [b4,b5]@7 ~ c#5@4 ~@8, ~@2 a5@6 [e5,e6]@11 ~ c5 ~@5 [c#4,c#5]@4 ~@2, ~@4 [g5,g6]@15 ~@5 a5@2 ~@6, ~@6 [f#5,f#6]@13 ~@13]/2", // A D5 C5 D D# C B E …
  AG: "[a2,a3,a5,c#6,a6] ~@7", // A
  AH: "[[g2,b4]@3 [g#2,c5]@2 [a2,a4,a5] [a3,a4]@2 ~@9 a2 ~@14, ~@5 [c#5,e5]@17 ~@10, ~@6 [a2,a5] ~@25]/2", // G G# A C#m A
  AI: "[c#5,a5]@11 ~@5, [a3,a4] ~@15", // F#m A
})).s("gm_piano").gain(0.36)

// chords · piano · "A.PIANO 1" · soft notes · A
const piano_soft = note(`<
  ~@79
  [~@5 c#6@2 ~]
  ~@3
  [~@8 [a2,a3,a4,a5]!3 [a2,a3,a4]!4 [a2,a3,a4,a5], ~@11 a5@4 ~]
  [[a2,a3,a4,a5] [a3,a4,a5] [a2,a3,a4,a5]!2 a4!2 ~@10, ~@2 [a2,a3,a5] ~@5]
  [e3@11 ~@5, a2 ~@15]
>`).s("gm_piano").gain(0.18)

// chords · piano · "A.PIANO 1"
const piano_2 = note("<~@40 A B C@2 D E F G H I J K ~@34>".pickRestart({
  A: "[a2,e3]@3 ~ [a2,f#3]@2 ~@2 [a2,e3]@4 [a2,f#3]@2 [a2,e3]@2", // A5 D A5 D A5
  B: "~@2 e3@2 [a2,f#3]@2 e2 ~ [a2,e3]@4 [a2,f#3]@2 e2 ~, ~@2 a2 ~@13", // D A5 D
  C: "[[a2,e3]@3 ~ [a2,f#3]@2 ~@2 [a2,e3]@3 ~ f#3@2 a2@4 a3@2 b2@2 b3@2 ~@2 c4@2 c#3@2 a2 ~, ~@12 a2 ~@11 c3@4 ~@4]/2", // A5 D A5
  D: "[d3,a3]@3 ~ [d3,b3]@2 ~@2 [d3,a3]@3 ~ [d3,b3]@2 [d3,a3]@2", // D5 G D5 G D5
  E: "~@2 a2@2 [d3,b3]@2 a2 ~ [d3,a3]@4 b3@2 e2 ~, ~@8 g#2 ~@7", // G D5
  F: "[a2,e3]@3 ~ [a2,f#3]@2 ~@2 [a2,e3]@3 ~ [a2,f#3]@2 [a2,e3]@2", // A5 D A5 D A5
  G: "~@2 e3@2 [a2,f#3]@2 e2 ~ [a2,e3]@2 a2@2 f#3@2 e2@2, ~@2 a2 ~@13", // D A5
  H: "b2@4 [e2,c#3]@2 ~@2 [e2,b2]@3 ~ [e2,c#3]@2 [e2,b2] ~", I: "~@2 [e2,b2] ~ c#3@2 e2@2 b2@4 c#3@2 e2 ~, ~@4 e2 ~@11",
  J: "a2@3 ~@5 e3@3 ~ f#3@2 [a2,e3] ~", K: "~@2 [a2,e3] ~ [a2,f#3]@2 e2 ~ [a2,e3]@3 ~ [a2,f#3]@2 ~@2",
})).s("gm_piano").gain(0.49)

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

// drums · snare
const snare = s("sd").struct("<A@14 B C A@14 B C A@6 B C A@22 B C A@18 B ~@2 B>".pickRestart({
  A: "~ x ~ x", B: "x", C: "~@3 x",
})).gain(0.34)

// drums · hihat
const hihat = s("hh").struct("<A B A C A B A B A B A B A B D ~ E@14 D ~ E@6 D ~@13 E@10 D ~ E@8 ~@14>".pickRestart({
  A: "x!4", B: "x ~ x ~ x!4", C: "x ~ x ~ x!3 ~", D: "x", E: "x!8",
})).gain(0.29)

// drums · low tom
const low_tom = s("lt").struct("<~@84 [~@6 x!4 ~@6] ~>").gain(0.34)

// drums · mid tom
const mid_tom = s("mt").struct("<~@82 [~@3 x] ~ [x!7 ~@9] ~>").gain(0.34)

// drums · open hat
const open_hat = s("oh").struct("<~@85 x>").gain(0.49)

// drums · high tom
const high_tom = s("ht").struct("<~@82 [~@10 x!2 ~@4] [~@10 x!6] x ~>").gain(0.34)

// drums · crash
const crash = s("cr").struct(`<
  A ~@15 A ~@15 A ~@7 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2 B C ~
>`.pickRestart({
  A: "x", B: "x ~@2 x ~ x!11", C: "x!11 ~@5",
})).gain(0.15)

// drums · ride
const ride = s("rd").struct("<~@40 A B C B C B C D C B C B ~@20 C A C D C B C E A E F ~@3>".pickRestart({
  A: "x ~ x ~ x ~ x!2", B: "x ~ x ~ x!4", C: "x!4", D: "x!3 ~ x!4", E: "x!8", F: "x",
})).gain(0.29)

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