Strudelify

Guess Things Happen That Way

Johnny Cash

KeyB♭ majorTempo148 bpm
0:00/0:00
// Guess Things Happen That Way — Cash Johnny
// 148 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 68 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(148/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 · "A.PIANO 2"
const piano = note(`<
  ~ A B A B C D E F G H I J K L@3 M@7 N@4 O P@2 Q R S T U C D E F G H V J K L@3 M@7 N@4 O P@2 Q R S T W@2
>`.pickRestart({
  A: "~@4 [a3,c4,eb4]@2 [f3,a3,c4] ~@3 [f3,a3,c4] ~ [a3,c4,eb4]@12", // Adim F Adim
  B: "~@4 [bb3,d4] ~ [bb3,d4] ~@3 [bb3,d4] ~ [bb3,d4,f4]@6 ~@6, ~ f4 ~@4", // Bb
  C: "~@10 [d5,f5]@5 ~ ab4@2 a4@3 ~ bb4@2, ~@2 f4@5 ~@5, ~@3 bb4@4 ~@5", // Dm
  D: "g5@4 ~@2 eb5@10 bb4 d5 eb5@3 ~ f4@2, eb5@3 ~ bb4@10 ~@10, ~@2 g5@5 ~",
  E: "[d5,f5]@3 f4@2 ~ bb4@4 [d5,f5]@3 f4@3 bb4@2 ~ [d5,f5]@3 bb4 ~", // Dm
  F: "[eb5,g5]@3 ~@4 bb4@2 ~ [eb5,g5]@2 g4@4 bb4@2 [eb5,g5]@4 bb4 ~, ~@4 g4@5 ~@15", // Eb
  G: "[d5,f5]@3 ~@7 f4@6 c5@2 bb4@4 ~@2, ~@2 f4@3 ~@7, ~@2 bb4@3 ~@3", // Dm
  H: "[a4,c5]@4 ~@2 f4@3 ~ a4@2 eb4@4 ~@2 eb4@3 ~@3, ~@2 eb4@2 ~ c5@6 ~, ~@8 f4@3 ~", // Am
  I: "bb4@3 ~@3 f4@3 ~ bb4@2 ~@7 g4@4 ~, ~@4 d4@5 ~@3 d4@10 ~@2, ~@16 bb4@7 ~",
  J: "[eb4,f4]@2 ~ c4@2 ~@4 c4@2 ~, ~@4 a3@5 ~ [eb4,f4]@5 ~ [eb4,f4]@7 ~, ~@3 a3@2 ~", // Ebsus2
  K: "f4@4 ~@6 f4@5 ~ ab3@2 a3@3 ~ bb3@2, ~ bb3@2 ~@3, ~@3 d4@4 ~@5",
  L: "[[eb4,g4]@4 ~@14 eb4@3 ~ e4@2 ~@42 g3@6, ~@4 bb3@10 ~@2 bb3@11 ~ bb3@10 ~@2 bb3@13 ~ bb3@10 bb3@8, ~@6 eb4@10 ~@8 f4@9 ~ f4@10 ~@2 eb4@10 ~@2 eb4@14, ~@10 g4@14 ~@6 d4@12 g3@9 ~ g3@13 ~@7]/3", // Eb
  M: "[~@4 f4@2 ~@6 d5@4 c5@2 bb4@6 ~@18 a4@5 ~@37 [c3,d4]@4 ~@6 bb4@2 ~@16 [f4,ab4]@2 [eb4,g4]@6 ~@12 bb3@4 ~@2 bb3@3 ~@25 a3@2, d4@22 ~@2 a4@9 ~ a4@6 f4@13 ~ f4@9 ~ f4@13 ~ f4@33 ~@9 f4@10 f4@13 ~@7 c4@8 ~@2 c4@7 ~, ~@6 bb4@6 ~@12 c5@24 bb4@9 ~ bb4@14 ~@6 bb2@6 ~@6 [d3,d4]@6 ~@4 bb3@6 ~@2 bb3@15 ~ bb3@7 ~@11 a3@6 a3@7 ~ a3@10 ~@2, ~@10 f4@18 c4@19 ~@19 g4@6 [ab4,bb4]@9 ~ [ab4,bb4]@5 ~ ab4@8 g4@9 ~ g4@6 ~@56, ~@30 f4@6 eb4@11 ~@5 d4@7 ~ d4@10 d4@5 ~ d4@7 ~@5 bb4@4 ~@10 eb4@11 ~@13 d4@10 d4@8 [eb4,f4]@9 ~ [eb4,f4]@7 ~ [eb4,f4]@6]/7", // Csus2 Fm Eb D Absus2 Ebsus2
  N: "[d4@4 ~@18 f4@2 eb4@4 ~@6 g4@6 [f4,ab4]@2 [eb4,g4]@6 ~@10 f4@5 ~@3 bb3@4 ~@20 [eb4,f4]@6, bb3@27 ~ bb3@23 ~ bb3@13 ~@5 a3@5 ~ a3@8 a3@12, ~@4 ab3@5 ~ ab3@6 ab3@8 ~@54 c4@17 ~, ~@6 eb4@6 f4@9 ~@3 g4@10 ~@14 f4@10 ~@16 f4@7 ~@15, ~@18 d4@6 ~@6 eb4@12 ~@12 d4@9 ~ [d4,f4]@8 eb4@10 [eb4,f4]@7 ~@7]/4", // Fm Eb Ebsus2 Dm Ebsus2
  O: "f4@2 ~@3 g4 ab4@2 d4 [g4,bb4]@3, bb4@9 ~ bb4@7 ~@7, ~@2 d4@5 ~@5, ~ f4@2 ~", // Gm
  P: "[~@18 bb4@5 ~@7 c5@4 ~@6 bb4@2 a4@5 ~, d4@16 c5@7 ~@13 c5@12, f4@10 f4@19 ~ f4@16 ~@2, ~@6 g4@17 ~@5 eb4@5 ~ eb4@13 ~, ~@6 bb4@11 ~@7 [a4,c5]@6 a4@10 ~@8]/2", // Am
  Q: "~@3 f4@2 ~@4 g4@3, bb4@10 bb4@5 ~ bb4@7 ~, f4@6 ~@4 g4@7 ~@7, ~@4 d4@19 ~, ~@12 f4@11 ~",
  R: "~@3 a3, [eb4,f4]@9 ~ eb4@13 ~, ~@2 a3@3 f4@3 ~@4, ~@3 c4@5 [c4,f4]@4, ~@2 a3 ~", // Ebsus2 F5
  S: "bb3@2 ~@7 f3@3, d4@9 ~ d4@14, ~@4 f3@13 ~@7, ~@6 bb3@10 bb3@7 ~",
  T: "~@18 f3@5 ~, c4@9 ~ [c4,eb4]@13 ~, a3@6 a3@10 a3@7 ~, ~ f3@3 ~@2", // Cm
  U: "~@3 f3, d4@5 d4@7, bb3@3 bb3@5 bb3@4, ~@4 f3@13 ~@7",
  V: "bb4@3 ~@3 f4@3 ~ bb4@2 ~@6 g4@4 ~@2, ~@4 d4@5 ~@3 d4@10 ~@2, ~@16 bb4@7 ~", W: "[[f3,bb3,d4]@3 ~]/2",
})).s("gm_piano").gain(0.38).pan(0.6)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B A C B D E F E G H I H D J K B A B L K E G L K E G B L G H G B M B@2 D E F E G H I H D J K B A B L K E G L K E G
  B L G H G B N O@2
>`.pickRestart({
  A: "f2@10 ~@2 c3@9 ~@3", B: "bb2@10 ~@2 f2@9 ~@3", C: "bb2@9 ~@3 f2@8 ~@4", D: "eb2@10 ~@2 bb2@9 ~@3",
  E: "bb2@3 ~ f2@3 ~", F: "eb2@5 ~ bb2@5 ~", G: "f2@5 ~ c3@5 ~", H: "bb2@9 ~@3 f2@10 ~@2", I: "f2@11 ~ c3@10 ~@2",
  J: "bb2@11 ~ f2@10 ~@2", K: "eb2@9 ~@3 bb2@10 ~@2", L: "bb2@5 ~ f2@5 ~", M: "f2@3 ~ c3@3 ~", N: "f2@3 ~ c2@3 ~",
  O: "[bb1@7 ~]/2",
})).s("gm_acoustic_bass").gain(0.38)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A B C D E F G H I J K L M F G H I J K N O ~@8 J K A B C D E F G H I J K L M F G H I J K N O ~@8 J K A B C D P ~
>`.pickRestart({
  A: "~@16 bb2 ~ a2@2 ~@2 g2 ~", B: "f2@11 ~@5 f2 ~ g2@2 ~@2 a2 ~", C: "bb2@12 ~@4 bb2 ~ a2@2 ~@2 g2 ~",
  D: "f2@12 ~@4 f2 ~ g2@2 ~@2 a2 ~", E: "bb2@9 ~@3 f2@2 ~@2 f2 ~ g2@2 ~@2 a2@2", F: "bb2@9 ~@7 bb2 ~ c3@2 ~@2 d3 ~",
  G: "eb3@5 ~ bb2@2 ~ db3 ~ c3", H: "bb2@4 ~@2 bb2@4 ~@2 bb2@5 ~ d3@5 ~", I: "eb3@4 ~@2 eb3@4 ~@2 eb3@5 ~ eb3@4 ~@2",
  J: "bb2@2 ~ bb2@2 ~ bb2@2 ~ d3@2 ~", K: "c3@5 ~ c3@4 ~@2 c3@4 ~@2 c3@2 ~@2 c3 ~",
  L: "bb2@5 ~ d3@4 ~@2 bb2@5 ~ a2@3 ~ g2 ~", M: "f2@5 ~ c3@5 ~ f2@2 ~@2 f2 ~ g2@2 ~@2 a2@2",
  N: "bb2@5 ~ [bb2,f3]@5 ~ bb2@5 ~ [bb2,f3]@5 ~", O: "bb2@5 ~ [bb2,f3]@5 ~ bb2@5 ~ [bb2,f3]@4 ~@2", P: "bb2@3 ~@5",
})).s("gm_electric_guitar_muted").gain(0.44).pan(0.3)

// chords · flute
const flute = note(`<
  ~ A B A B ~@2 C D E F B G ~@2 E H E F B@2 ~@10 B A B A E ~@2 C D E F B G ~@2 E H E F B@2 ~@10 B A B A I@2
>`.pickRestart({
  A: "~@2 [eb4,f4,a4]!2 ~ [eb4,f4,a4] [eb4,f4,a4]@3 ~@3", B: "~@2 [d4,f4,bb4]!2 ~ [d4,f4,bb4] [d4,f4,bb4]@3 ~@3",
  C: "[d4,f4,bb4]@23 ~", D: "[eb4,g4,bb4]@23 ~", E: "[d4,f4,bb4]", F: "[c4,eb4,a4]",
  G: "~@2 [c4,f4,a4]!2 ~ [c4,f4,a4] [c4,f4,a4]@3 ~@3", H: "[eb4,g4,bb4]", I: "[[d4,f4,bb4]@7 ~]/2",
})).s("gm_flute").gain(0.24).pan(0.7)

// other · trombone
const trombone = note("<A B C D E ~@26 F D C D G ~@26 F D C D H@2>".pickRestart({
  A: "~@16 bb2 ~ a2@3 ~ g2@2", B: "f2@6 ~@10 f2@2 g2@3 ~ a2@2", C: "bb2@3 ~@5 bb2 a2 ~ g2",
  D: "f2@7 ~@9 f2@2 g2@2 ~@2 a2@2", E: "bb2@12 f2@3 ~ f2@2 ~@6", F: "~@8 bb2 a2 ~ g2", G: "bb2", H: "[bb2@7 ~]/2",
})).s("gm_trombone").gain(0.49).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~ [x!2]!65 x ~>").gain(0.33)

// drums · rim
const rim = s("rim").struct("<~ [~ x ~ x]!65 ~@2>").gain(0.38)

// drums · hihat
const hihat = s("hh").struct("<~ A@7 B A@3 C A@6 D A D B A C A@9 E A@15 D A D A@13 ~@2>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x ~ x!2 ~ x!2 ~ x!2 ~@2", C: "x ~ x!2 ~ x!2 ~ x ~@3", D: "x ~ x!2 ~@2 x ~ x!2 ~ x",
  E: "x ~ x!2 ~ x!2 ~@2 x ~ x",
})).gain(0.22)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A ~@3 B ~@9 A ~ B ~@9 C ~@31 D ~>".pickRestart({
  A: "~@11 x", B: "~@3 x", C: "~@2 x", D: "x",
})).gain(0.27)

stack(piano, bass, electric_guitar_muted, flute, trombone, kick, rim, hihat, open_hat)

More by Johnny Cash