Strudelify

Pink Houses

John Mellencamp

KeyG majorTempo120 bpm
0:00/0:00
// Pink Houses — John Mellencamp
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · synth brass 2
const synth_brass_2 = note(`<
  ~@4 A B C D@2 E@2 F G H B C I J K L M N O P Q R S T U V W ~@3 A B C D@2 E@2 F G H B C I J K L M N O P Q R S T U V W
  ~@3 A B C D@2 E@2 F G H B C I J K L M N O P Q R S T U V W ~@3 U V W ~@3 A ~@6
>`.pickRestart({
  A: "d5 b4 ~@6", B: "[g4,d5]@2 e5@9 ~ d5@2 b4@2", C: "[g4,d5]@2 e5@13 ~", D: "[[g4,d5] d5!5 e5 [d4,b4]@2 a4 ~@6]/2",
  E: "[~ [g4,e5] d5 [g4,e5] g4 b4!2 [g4,e5]@2 d5!2 [g4,e5]@2 b4!3]/2", // C
  F: "[c4,f4,b4] g4@2 [c4,g4] [c4,g4,e5] d5!2 [d4,g4,d5]", G: "g4@2 b4@5 ~ b4@7 ~", H: "b4@5 b4 d5 b4",
  I: "[g4,d5] d5!4 e5@2 [d4,b4]", J: "[d4,b4]@7 ~ b4@2 b4@2 b4@2 [c4,f4,b4]@2",
  K: "f#4@2 g4@2 f4@2 f4@2 [a4,c5]@3 ~ b4@2 c5@2", L: "~ d5 [g4,c5,e5] d5 e5 d5!2 b4",
  M: "~@2 [d4,g4,d5]@2 d5@2 [d4,g4,d5]@2 [d4,g4,d5]@2 b4@5 ~", N: "~ [d4,g4,b4]@2 b4!2 a4 g4 [c4,e4,a4]",
  O: "[c4,e4]@7 ~@9", P: "[d4,g4,b4,e5]@7 ~ [d4,g4,b4]@2 a4@2 g4@2 [c4,e4,a4]@2",
  Q: "a4@2 g4!2 g4@3 ~ [g4,c5,e5]@2 d5@2 b4@2 [d4,a4,e5]@2", R: "[d4,g4,b4,e5] d5@2 d5 [d4,g4,b4] a4 g4 [c4,e4,a4]",
  S: "e4@2 g4!2 ~@4 d5@2 d5@2 d5@2 [f#4,a4,e5]@2", T: "[f#4,a4]@5 ~ [f#4,a4,e5]@2 [f#4,a4,e5]@3 ~@5",
  U: "~ b4!2 [d4,f#4,b4]!2 g4@2 g4", V: "a4@2 g4@2 g4@5 ~ g4@2 ~@4", W: "[c4,e4,g4]@2 [c4,e4,g4]@4 c4@2 [c4,e4,g4]@7 ~",
})).s("gm_synth_brass_2").gain(0.47)

// bass · electric bass finger · "Electric Bass (finger)"
const bass = note(`<
  A B C B D E F@2 E G H I H G F@2 E@2 J K E@2 L M L N L O P Q R B S T D E F@2 E G H I H G F@2 E@2 J K E@2 L M L N L O P
  Q R B S T D E F@2 E G H I H G F@2 E@2 J K E@2 L M L N L O P Q R B S T Q R U V W X Y Z AA Z AB@2 ~
>`.pickRestart({
  A: "~@7 g2", B: "[g1,b2]@2 g3@2 [g1,d3,g3]@3 ~ [g1,d3]@2 ~@2 g1@3 ~, ~@10 [d3,g3,b3]@5 ~",
  C: "[c2,e3,g3,c4]@5 ~ [g1,d3,g3,b3]@2 [g1,d3,g3,b3]@2 ~@2 g1@2 g2@2, ~@10 g3@5 ~", // C G
  D: "[c2,e3,g3,c4]@5 ~ [g1,d3,g3,b3]@2 [g1,d3,g3,b3]@2 g1@5 ~", E: "g1@3 ~ g1@2 g2@5 ~ g2@3 ~",
  F: "g1@3 ~ g1@2 g2@2 g2@3 ~ g2@3 ~", G: "e3@3 ~ e3@2 e4@2 e4@3 ~ e4@3 ~", H: "e3@3 ~ e3@2 e4@5 ~ e4@3 ~",
  I: "d4@5 ~ a3@2 a3@7 ~", J: "f1@3 ~ f1@2 f2@5 ~ f2@3 ~", K: "c2@3 ~ c2@2 c3@5 ~ c3@3 ~", L: "c2@5 ~ c2@2 c2@7 ~",
  M: "g1@5 ~ g1@2 g1@7 ~", N: "g1@5 ~ g1@9 ~", O: "d2@5 ~ d2@2 d2@5 ~ a1@2", P: "d2@15 ~", Q: "c2@5 ~ c2@2 c2@5 ~ g1@2",
  R: "c2@11 ~ c2@3 ~", S: "[c2,e3,g3,c4]@5 ~ [g1,d3,g3,b3]@2 [g1,d3,g3,b3]@3 ~ g1@3 ~",
  T: "[g1,b2]@2 g3@2 [d3,g3]@4 g1@2 ~@2 g1@3 ~, ~@4 g1@3 ~@3 [d3,g3,b3]@5 ~", U: "g1@3 ~ g1@3 ~ g1@3 ~ g1@3 ~",
  V: "b2@2 g3@2 [d3,g3]@2 g1@2 [g1,d3]@2 ~@2 g1@3 ~, c2@5 ~@5 [d3,g3,b3]@5 ~", // G5 G
  W: "[e3,g3,c4]@4 g1@2 [d3,g3,b3]@2 [g1,d3,g3,b3]@3 ~ g1@3 ~, g1@3 ~@13", // C G
  X: "b2@2 g3@2 ~@2 g1@2 g1@2 [g1,d3,g3,b3]@5 ~, c2@4 [d3,g3]@5 ~@7", // G G5
  Y: "[c2,e3,g3,c4]@5 ~ [g1,d3,g3,b3]@2 [g1,d3,g3,b3]@3 ~ g1@2 g2@2", // C G
  Z: "[e3,g3,c4]@4 g1@2 [d3,g3,b3]@2 [g1,d3,g3,b3]@2 ~@2 g1@3 ~, g1@3 ~@7 g3@5 ~", // C G
  AA: "c2@4 [d3,g3]@2 g1@2 [g1,d3,g3]@3 ~ g1@2 g2@2, b2@3 ~@13", // G5
  AB: "[c2@4 [d3,g3]@6 ~@2 [d3,g3,b3]@2 [d3,g3,b3]@7 ~@11, b2@3 ~@7 g1@9 ~@13]/2", // G5 G
})).s("gm_electric_bass_finger").gain(0.49)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@106>").gain(0.44)

// drums · kick
const kick = s("bd").struct("<~ [x!4]!104 [x!3 ~] ~>").gain(0.44)

// drums · low tom
const low_tom = s("lt").struct("<~@3 [~@8 x!4 ~@4] ~@103>").gain(0.44)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 [~@12 x!4] ~@103>").gain(0.44)

// drums · crash
const crash = s("cr").struct("<~@4 x ~@100 [~@7 x] ~>").gain(0.44)

// drums · shaker
const shaker = s("sh").struct("<~ [~@2 x!3 ~@5 x!3 ~@3]!105 ~>").gain(0.44)

// drums · guiro
const guiro = s("guiro:4").struct("<~ A ~ A ~@27 A ~ A ~@27 A ~ A ~@27 A ~ A ~@3 A ~ A ~ A ~ A ~@3>".pickRestart({
  A: "~@9 x ~@6",
})).gain(9.24)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct(`<
  ~ A ~ B ~@27 A ~ B C ~@26 A ~ B C ~@26 A ~ B C ~@2 A ~ B C A ~ B C ~@2
>`.pickRestart({
  A: "~ x", B: "~@5 x!2 ~@9", C: "~@3 x!2 ~@3",
})).gain(0.63)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct(`<
  ~ A ~ B ~@27 A ~ B C ~@26 A ~ B C ~@26 A ~ B C ~@2 A ~ B C A ~ B C ~@2
>`.pickRestart({
  A: "~@5 x!2 ~@9", B: "~ x", C: "~@5 x ~@2",
})).gain(0.63)

stack(synth_brass_2, bass, rim, kick, low_tom, mid_tom, crash, shaker, guiro, woodblocks, woodblocks_2)

More by John Mellencamp