Strudelify

Pop Singer

John Mellencamp

KeyA majorTempo112 bpm
0:00/0:00
// Pop Singer — John Mellencamp
// 112 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 78 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/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 · "ACOU BASS"
const bass = note(`<
  A B C B D B E F G B G F D H I J I J I H K B G H E B G B L B E B M B N B O B G F P F Q B R H S F L F G H T H C H R H U
  F V H W H V H X Y Z H W H V H X Y Z AA
>`.pickRestart({
  A: "~@6 e2 g2", B: "a1 ~ a1@2 c3@2 a2@2 c3@2 a2@3 ~ a2@2", C: "c3 a2 c3 d2@2 e2 g2 e2",
  D: "c3@2 a2@2 c3 ~ d2@4 e2@2 g2@2 a2@2", E: "c3 a2 c3 d2@2 e2 d2 g2", F: "a1 ~ a1@2 c3@2 a2@2 c3@2 a2@3 ~ a2 ~",
  G: "c3 a2 c3 d2@2 e2 g2 a2", H: "a1 ~ a1@2 c3@2 a2 ~ c3@2 a2@3 ~ a2 ~", I: "c3@2 a2 ~ c3@2 d2@4 e2@2 g2@2 a2@2",
  J: "a1 ~ a1@2 c3@2 a2 ~ c3@2 a2@3 ~ a2@2", K: "c3@2 a2 ~ c3@2 d2@4 e2@2 d2@2 g2@2",
  L: "c3@2 a2@2 c3 ~ d2@4 e2@2 g2@2 d2@2", M: "c3@2 a2 ~ c3@2 d2@3 ~ d2@2 e2@2 d2@2",
  N: "c3@2 a2 ~ c3@2 d2@3 ~ d2@2 e2@2 g2@2", O: "c3@2 a2 ~ c3@2 d2@4 g2@2 d2@2 g2@2",
  P: "c3@2 a2 ~ c3 ~ d2@4 e2@2 g2@2 a2@2", Q: "c3@2 a2 ~ c3@2 d2@4 e2@2 g2@2 d2@2",
  R: "c3@2 a2@2 c3 ~ d2@4 e2@2 g2@2 e2 ~", S: "c3 a2 c3 d2@2 g2 d2 g2", T: "c3@2 a2@2 c3@2 d2@4 e2@2 g2@2 e2 ~",
  U: "c3@2 a2 ~ c3 ~ d2@4 e2@2 g2@2 e2@2", V: "c3@2 a2 ~ c3 ~ d2@4 g2@2 e2@2 d2@2",
  W: "c3@2 a2 ~ c3@2 d2@4 e2@2 g2@2 e2 ~", X: "c3@2 a2 ~ c3@2 d2@4 e2@2 g2 ~ g2 ~",
  Y: "a2 ~ a2 ~ c3@2 a2 ~ c3@2 a2@3 ~ a2 ~", Z: "c3@2 a2 ~ c3 ~ d2@4 e2@2 g2@2 e2 ~", AA: "a1@3 ~@13",
})).s("gm_acoustic_bass").gain(0.64)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B@2 C@2 D@2 E@2 F ~@6 G H@2 I@2 ~@7 G H@2 I@2 H@2 I@2 ~@4 J@2 K@2 L@2 M@4 N@2 ~@7 G H@2 I@2 H@2 O P H@2 I@2 H@2 O P
  Q
>`.pickRestart({
  A: "~@14 [a2,e3] ~", B: "[[a2,e3]@12 [a2,e3] ~ [a2,d3]@17 ~, b2 ~@31]/2",
  C: "[[a2,e3]@9 ~ [a2,e3] ~ a2 ~ [a2,d3]@14 ~@4]/2", // A5 D5
  D: "[~@4 f#3@2 g3@3 ~ [a2,e3] ~ g3 ~ f#3@5 ~ f#3@2 ~@4 [a2,d3]@3 ~ [a2,d3] ~, [a2,e3]@10 ~@4 [a2,d3]@11 ~@7, ~@14 e3 ~@7 e3@6 ~@4]/2", // A5 D5 A5 D5
  E: "[~@4 f#3@2 g3@4 [a2,e3] ~ g3@2 f#3@5 ~ f#3@2 ~@4 [c4,e4]@5 ~, [a2,e3]@9 ~@5 [a2,d3]@12 [a2,d3] ~@5, ~@22 e3@7 ~@3]/2", // A5 C A5 D5
  F: "a3 ~@7", G: "~@10 e2 ~ g2@3 ~",
  H: "[~@4 f#3@2 g3@4 c#3 ~ [a2,e3,g3] ~ [a2,d3]@13 ~ [a2,d3]@3 ~, [a2,e3]@11 ~@3 f#3@14 ~@4]/2", // A7 D5 A5
  I: "[~@4 f#3@2 g3@5 ~ [a2,e3,g3] ~ [a2,d3,f#3]@13 ~ [a2,d3]@3 ~, [a2,e3]@11 ~@21]/2", // A7 D D5 A5
  J: "[e2 ~ f#3 ~@3 g3 f#3@2 a2 f#3 e3@2 a2 d3 e3, ~ a2@2 g3@3 ~@10, ~@5 a2@2 ~@9]/2",
  K: "[e2@2 a2@2 f#3@2 g3@5 ~ g3@2 f#3@4 a2 ~ f#3@2 e3@4 a2@2 d3@2 e3 ~, ~@22 a3@9 ~]/2",
  L: "[~@4 [e3,a3]@2 [d3,g3] ~ [e3,a3]@2 [c3,d3,g3] ~ [e3,a3]@2 ~@8 f#4@9 ~, ~@2 [d3,g3]@4 ~@8 [d3,f#3]@17 ~, ~@18 a3@13 ~, ~@20 c4@11 ~]/2", // A5 G5 A5 Csus2 A5 G5 D
  M: "[~@2 [d3,g3] ~@3 [d3,g3]@2 [e3,a3] ~@3 [e3,a3]@2 [a4,d5,f#5]@2 [a4,d5,f#5]@14 ~@4 [d3,g3] ~@3 [d3,g3]@2 [e3,a3] ~@3 [e3,a3]@2 ~@8 f#4@9 ~, ~@4 [e3,a3]@4 ~@2 [d3,g3]@4 [d3,f#3]@20 ~@2 [e3,a3]@4 ~@2 [d3,g3]@4 [d3,f#3]@17 ~, ~@50 a3@13 ~, ~@52 c4@11 ~]/4", // G5 A5 D G5 A5 G5 D A5 …
  N: "[~@4 [e3,a3]@2 [d3,e3,g3] ~ [e3,a3]@2 ~@2 [e3,a3]@2 ~@12 c5@4 a4@2, ~@2 [d3,g3]@4 ~@4 [d3,g3]@4 [d3,f#3,a4,f#5]@17 ~, ~@14 d5@15 ~@3]/2", // A5 Em7 A5 G5 D
  O: "~@4 f#3@2 g3@5 ~ [a2,e3,g3] ~ [a2,d3,f#3]@2, [a2,e3]@11 ~@5", P: "[a2,d3,f#3]@11 ~ [a2,d3]@3 ~", Q: "[a2,e3] ~@7",
})).s("gm_acoustic_guitar_steel").gain(0.58)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  A B@2 C D B@2 C E F ~@6 G H@2 I J ~@7 G H@2 I J H@2 I J ~@4 K@2 L@2 M N O P M N O P ~@7 G H@2 I J H@2 I Q H@2 I J H@2
  I Q R
>`.pickRestart({
  A: "~@14 [e3,a3,c#4] ~", B: "[[e3,a3]@5 [a3,d4]!2 [f#3,a3,d4]@9, [a2,c#4]@15 ~@17, ~@10 e3@5 ~@17]/2",
  C: "[a2,e3,a3,c#4]@10 ~@4 [a3,c4,f#4]!2", D: "[d2,d#2,d3,a3,c4,f#4]@11 ~@3 [e3,a3,c#4] ~",
  E: "[d2,d#2,d3,a3,c4,f#4]@10 [c4,e4]@5 ~", F: "a3 ~@7", G: "~@10 e2 ~ g2@3 ~",
  H: "[[a2,e3,g3,c#4,e4]@10 [g3,c#4,e4]@2 [g3,c#4,e4]@2 [f#3,a3,d4]@8 [f#3,a3,c4]@4 [a2,f#3,a3,c4]@4 [a2,f#3] ~, ~@5 [a2,e3]@2 a2@6 ~@3]/2", // A7 C#dim D F#dim D A5
  I: "[g3,c#4,e4]@4 [g3,c#4,e4]!3 [a2,f#3,a3,d4], [a2,e3]@5 [a2,e3]@2 ~", // C#dim D A5
  J: "f#3 ~@5 [f#3,a3,d4]@4 [a2,f#3,a3,d4]@4 [a2,f#3] ~, a2@5 ~@3", // D
  K: "[e2 ~ f#3 ~@3 g3 f#3@2 a2 f#3 e3@2 a2 d3 e3, ~ a2@2 g3@3 ~@10, ~@5 a2@2 ~@9]/2",
  L: "[e2@2 a2@2 f#3@2 g3@5 ~ g3@2 f#3@4 a2 ~ f#3@2 e3@4 a2@2 d3@2 e3 ~]/2",
  M: "[a2,g3,c#4,e4]@2 [a2,g3,c#4,e4]@2 g3!2 ~ a3, ~@2 [a2,c#4,e4] [a2,g3,c#4,e4]", N: "[d3,a3,c4,f#4]@15 ~",
  O: "[a2,g3,c#4,e4]@4 [a2,g3,c#4,e4]@4 g3 ~ g3@2 g3@2 g3@2, ~@2 [a2,c#4,e4]!2", P: "[d3,a3,c4,f#4]@3 ~",
  Q: "[a3,d4]@2 ~@4 [f#3,a3,d4]@4 [a2,f#3,a3,d4]@4 [a2,f#3] ~, a2@5 ~@3, f#3 ~@15", R: "[a2,e3,a3] ~@7",
})).s("gm_acoustic_guitar_nylon").gain(0.38)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@9 A B A B C B C B D E D E A B A B C B C B F ~ F ~ F ~ F ~ G H G I@5 J@2 K L M@2 N@2 A B A B C B C B F ~ F ~ F ~ F ~
  F ~ F ~ F ~ F ~ O
>`.pickRestart({
  A: "[a4,e5,g5]", B: "[a4,d5,f#5]@15 ~", C: "[a4,e5,g5]@15 ~", D: "[g3,c#4,e4]@15 ~", E: "[a3,c4,f#4]@15 ~",
  F: "~@2 [a5,e6,a6] ~ [a5,e6,a6]@3 ~", G: "[a4,e5,g5]!16", H: "[a4,d5,f#5]!16",
  I: "[[a4,d5,f#5]!16 ~@32 a5@31 ~, d6@77 ~@3]/5", // D
  J: "[[e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5] ~ [e4,a4,e5,a5]@10 ~@2 [g5,g6] ~ [g5,g6]@3 ~, ~@28 [f5,f6] ~@3]/2", // A5 G F
  K: "[e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5] ~ [e4,a4,e5,a5]@2", // A5
  L: "~@6 [a5,e6,a6,e7]@9 ~", // A5
  M: "[[e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5] ~ [e4,a4,e5,a5]@15 ~ [e4,a4,e5,a5] ~]/2", // A5
  N: "[[e4,a4,e5,a5] ~@3 [e4,a4,e5,a5] ~@3 [e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5] ~@2 [e4,e5] ~@16, ~@14 [a4,a5]@17 ~]/2", // A5 E A
  O: "[a3,e4,a4,e5,a5]@3 ~@13", // A5
})).s("gm_rock_organ").gain(0.72)

// chords · piano · "A.PIANO 1"
const piano = note("<~@17 A@4 ~@8 A@8 B ~@3 C@2 D@2 E@2 F G H@2 I@2 ~@8 A@16 J>".pickRestart({
  A: "[a4,e5,a5] ~ [a4,e5,a5] ~ [a4,e5,a5] ~ [a4,e5,a5] ~ [a4,e5,a5] ~ [a4,e5,a5] ~ [a4,e5,a5] ~ [a4,e5,a5] ~", // A5
  B: "[e5,a5,e6] ~@15", C: "[e2 ~ f#3 ~@3 g3 f#3@2 a2 f#3 e3@2 a2 d3 e3, ~ a2@2 g3@3 ~@10, ~@5 a2@2 ~@9]/2",
  D: "[e2@2 a2@2 f#3@2 g3@5 ~ g3@2 f#3@4 a2 ~ f#3@2 e3@4 a2@2 d3@2 e3 ~]/2",
  E: "[[e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5] ~ [e4,a4,e5,a5]@10 ~@2 [g5,g6] ~ [g5,g6]@3 ~, ~@28 [f5,f6] ~@3]/2", // A5 G F
  F: "[e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5] ~ [e4,a4,e5,a5]@2", // A5
  G: "~@6 [a5,e6,a6,e7]@9 ~", // A5
  H: "[[e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5] ~ [e4,a4,e5,a5]@15 ~ [e4,a4,e5,a5] ~]/2", // A5
  I: "[[e4,a4,e5,a5] ~@3 [e4,a4,e5,a5] ~@3 [e4,a4,e5,a5]@2 ~@2 [e4,a4,e5,a5] ~@2 [e4,e5] ~@16, ~@14 [a4,a5]@17 ~]/2", // A5 E A
  J: "[a3,e4,a4,e5,a5]@3 ~@13", // A5
})).s("gm_piano").gain(0.39)

// drums · kick
const kick = s("bd").struct(`<
  A B@9 C B C B C B C B@5 C B C B C B C B@9 C B C B C B C B@9 C B C B C B C B@16 D
>`.pickRestart({
  A: "x!2 ~@3 x ~ x", B: "x!4", C: "x ~ x ~ x ~ x!2", D: "x",
})).gain(0.78)

// drums · snare
const snare = s("sd").struct("<A@8 B A@11 C A@7 D A@7 C A@7 E A@7 B A@7 D A@7 C A@7 F G>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@4 x ~@9 x!2", D: "~@4 x ~@7 x ~ x!2", E: "~@4 x ~@6 x!4 ~",
  F: "~@2 x ~ x ~@3 x ~@3 x!4", G: "x",
})).gain(0.78)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@20 A ~@7 B ~@7 A ~@7 C ~@15 B ~@7 A ~@7 D ~>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~@4 x!2 ~@2", C: "~@5 x ~@2", D: "~@3 x ~@2 x!2 ~@2 x!2 ~@4",
})).gain(0.23)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B A B A B A B A@9 B A B A@9 B A B A B A B A@9 B A B A B A B A@9 B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "x!4", B: "x!3 ~",
})).gain(0.78)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A B A B A B A B A@9 B A B A@9 B A B A B A B A@9 B A B A B A B A@9 B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2",
})).gain(0.23)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A ~@23 B ~@3 A ~@11 C ~@3 A ~@11 B ~@3 A ~@7 A ~@3 D ~>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@12 x!2 ~@2", D: "~@4 x ~@7 x!2 ~@2",
})).gain(0.78)

// drums · open hat
const open_hat = s("oh").struct(`<
  A ~ B ~ B ~ B ~ B ~@9 B ~ B ~@9 B ~ B ~ B ~ B ~@9 B ~ B ~ B ~ B ~@9 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~
>`.pickRestart({
  A: "x!2 ~@3 x!2 ~", B: "~@3 x",
})).gain(0.78)

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

// drums · ride
const ride = s("rd").struct("<A B@8 ~@8 B@4 ~@8 B@8 ~@8 B@8 ~@8 B@16 ~>".pickRestart({
  A: "~ x ~ x", B: "x!4",
})).gain(0.78)

// drums · tambourine
const tambourine = s("tb").struct("<~@9 A@8 ~@4 A@8 ~@8 A@8 ~@8 A@8 ~@17>".pickRestart({
  A: "~ x ~ x",
})).gain(0.62)

// drums · congas
const congas = s("conga:18").struct("<~@40 [~@12 x!4] [~@3 x ~ x ~@2]!4 ~@33>").gain(2.48)

// drums · congas
const congas_2 = s("conga:33").struct("<~@41 [~@3 x] [~ x ~@4 x!2] [~@3 x] [~ x ~@6] ~@33>").gain(2.48)

// drums · shaker
const shaker = s("sh").struct("<~ [x!4]!76 ~>").gain(0.7)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~ [~ x ~ x ~ x ~ x]!76 ~>").gain(0.16)

stack(
  bass, acoustic_guitar_steel, acoustic_guitar_nylon, rock_organ, piano, kick, snare, snare_soft, low_tom, hihat,
  hihat_soft, mid_tom, open_hat, crash, ride, tambourine, congas, congas_2, shaker, shaker_soft
)

More by John Mellencamp