Strudelify

Mercy Mercy Me (The Ecology)

Marvin Gaye

KeyD minorTempo102 bpm
0:00/0:00
// Mercy Mercy Me (The Ecology) — Gaye,Marvin
// 102 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(102/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
const piano = note(`<
  ~ A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E F G E H@2 I J K L I M H N O@2 I@4 P Q O@2 I@4 P Q
  H@2 I J K L I M H N ~ G R S A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E G T
>`.pickRestart({
  A: "[[f2,f3,a3,c4,e4]@31 ~]/2", B: "[d2,d3,a3,c4,e4]/2", C: "[g2,g3,bb3,d4,f4]/2", D: "[[c2,c3,bb3,d4,f4]@29 ~@3]/2",
  E: "[e3,e4] [f3,f4]", F: "[g3,g4] [a3,a4]", G: "[g3,g4] [f3,f4]",
  H: "~@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~@2 [a3,c4,e4]!2", // Am
  I: "~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4]!2", // Bb
  J: "~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~@2 [c4,e4,g4]!2", // C
  K: "~@2 [bb3,c4,d4,f4] ~@2 [bb3,c4,d4,f4] ~@2 [bb3,c4,d4,f4] ~@2 [bb3,c4,d4,f4] ~@2 [bb3,c4,d4,f4]!2", // Bb
  L: "~@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~@2 [a3,c4,d4,f4] ~@2 [a3,c4,d4,f4] ~@2 [a3,c4,d4,f4]!2", // Am Dm7
  M: "~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~", // Bb
  N: "~@2 [g3,a3,db4,e4] ~@2 [g3,a3,db4,e4] ~@2 [g3,a3,db4,f4] ~@2 [g3,a3,db4,f4] ~@2 [g3,a3,db4,f4]!2", // A7 Dbaug
  O: "~@2 [a3,c4,d4,f4] ~@2 [a3,c4,d4,f4] ~@2 [a3,c4,d4,f4] ~@2 [a3,c4,d4,f4] ~@2 [a3,c4,d4,f4]!2", // Dm7
  P: "~@2 [g3,a3,db4,e4] ~@2 [g3,a3,db4,e4] ~@2 [g3,a3,db4,e4] ~@2 [g3,a3,db4,e4] ~@2 [g3,a3,db4,e4]!2", // A7
  Q: "~@2 [g3,a3,db4,f4] ~@2 [g3,a3,db4,f4] ~@2 [g3,a3,db4,f4] ~@2 [g3,a3,db4,f4] ~@2 [g3,a3,db4,f4]!2", // Dbaug
  R: "[e3,e4]@8 [a3,a4]@7 ~", S: "[d3,d4]@15 ~", T: "[e3,e4]@7 [f3,f4] ~@2 [d3,d4] ~@5",
})).s("gm_piano").gain(0.35).pan(0.4)

// other · tubular bells · "Bright Chimes"
const tubular_bells = note("<~ A ~ A ~ B ~ B ~@3 A ~ B ~@82>".pickRestart({
  A: "~@2 e5 ~ c5 ~ a4 e5 ~ c5 ~ a4 ~@4", B: "~@2 f5 ~ c5 ~ bb4 f5 ~ c5 ~ bb4 ~@4",
})).s("gm_tubular_bells").gain(0.36).pan(0.6)

// chords · acoustic guitar steel · "Rhythm Guitar"
const acoustic_guitar_steel = note(`<
  ~ A@4 B@4 A@4 B@4 A@4 B@4 A@4 B@4 C D E C ~@37 E F G A@4 B@4 A@4 B@4 C E H
>`.pickRestart({
  A: "[a3,c4,e4]!8 ~ [a3,c4,e4]!7", B: "[bb3,d4,f4]!8 ~ [bb3,d4,f4]!7", C: "[e3,e4] [f3,f4]", D: "[g3,g4] [a3,a4]",
  E: "[g3,g4] [f3,f4]", F: "[e3,e4] [a3,a4]", G: "[d3,d4]", H: "[e3,e4]@7 ~ [f3,f4] ~ [d3,d4] ~@5",
})).s("gm_acoustic_guitar_steel").gain(0.24).pan(0.7)

// other · brass section · "Low Brass Sect."
const brass_section = note("<~@8 A B@2 ~@23 C@3 ~@13 D E@3 F ~@3 D G@3 ~@12 H@3 ~@17 I@2>".pickRestart({
  A: "~@2 f4 g4", B: "[a4@3 ~]/2", C: "[~ [d2,d3]@5]/3", D: "~@2 d4 d5", E: "[c5@5 bb4]/3", F: "a4", G: "[c5@11 ~@5]/3",
  H: "[~ [d2,d3]@4 ~]/3", I: "[~@8 d2@15 ~ f2 ~ d2@2 ~@4]/2",
})).s("gm_brass_section").gain(0.45).pan(0.3)

// chords · string ensemble 2 · "String Pad"
const string_ensemble_2 = note(`<
  ~@16 A@8 B C@6 ~ D E@2 F@2 ~@24 G H I@2 G J K L M@3 ~@2 N@3 O@7 B C@6 ~@3 P@2
>`.pickRestart({
  A: "[[d4,f4]@4 ~@16 [bb3,d4]@9 ~@3, a4@115 ~@13, ~ [a3,c4,e4]@4 ~@3, ~@12 f4@17 ~@3]/8", B: "~@2 [f4,f5] [g4,g5]",
  C: "[~ f5 [g5,bb5], a4, a5@2 ~, ~ f4@2]/6", D: "~@14 [d5,e5,d6,e6] [f5,g5,f6]",
  E: "[[a5,a6]@6 [g5,g6] [f5,f6], g6 ~@31]/2", F: "[~@15 [d5,d6]@16 ~, [e5,e6]@31 ~]/2", G: "[d5,d6]",
  H: "[e5,e6]@2 [f5,f6] [g5,g6]", I: "[[a5,a6]@24 [g5,g6]@3 [f5,f6]@3 [e5,e6]@2]/2",
  J: "[e5,e6]@11 [g5,g6]@3 [a5,a6]@2", K: "[a4,a5]@11 [b4,b5] [c5,c6]@4, ~@12 a5 ~@3",
  L: "[a4,a5]@3 [c5,c6], ~@12 [b4,b5] ~@3", M: "[g4,g5]/3", N: "[~ [d5,d6]@5]/3",
  O: "[~@16 [bb3,d4]@9 ~@3, [a3,c4]@4 ~@3, ~@8 f4@17 ~@3]/7", P: "[~ [d5,d6]@2 ~]/2",
})).s("gm_string_ensemble_2").gain(0.3).pan(1)

// bass · fretless bass · "Round Bass"
const bass = note(`<
  ~ A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H I J@3 K L M N O P Q R S T L@2 U V W X Y Z AA AB AC
  AD AE AF Y AG AA AH AI AJ AK AL AM AN AO AP I J@3 AQ B C D E F G H A B C D E F G H I J AR
>`.pickRestart({
  A: "f1@5 ~@2 f2 ~ f2 ~ f2 c2@2 f2 c2", B: "f1@7 f2 ~ f2 ~ f2 c2@2 f2 c2, ~@12 bb1 ~@3",
  C: "d1@7 d2 ~ d2 ~ d2 a1@2 d2 a1", D: "d1@6 ~ d2 ~ d2 ~ d2 a1@2 d2 ab1", E: "g1@5 ~@2 [bb1,g2] ~ g2 ~ g2 d2@2 g2 d2",
  F: "g1@6 ~ g2 ~ g2 ~ g2 d2@2 g2 d2, a1 ~@15", G: "c1@6 ~ c2 ~ c2 ~ c2 g1@2 c2 g1",
  H: "c1@7 c2 ~ [c1,c2] ~ c2 g1@2 c2 g1, eb1 ~@15", I: "d1@2 ~@5 d1!2 ~@7", J: "d1@2 ~@5 d1 d1@2 ~@6",
  K: "d2@7 ~ d3!2 ~@4 a2 d3", L: "d2@8 d3!2 ~@4 a2 d3", M: "g1@9 ~@5 g1@2", N: "a1@4 ~@3 a1", O: "bb1@4 ~@3 bb1",
  P: "a1@2 ~ a1 d2@2 ~ d2", Q: "g1@7 ~@3 a1@2 ~ bb1@2 ~", R: "c2@5 ~@3 c3!2 ~@4 g2 c3", S: "f1@9 ~ g1@3 ab1@3",
  T: "a1@10 e2@3 a2@3", U: "g1@8 ~@6 g1 ~", V: "g1 g1@3 a1@4 bb1@4 b1@4", W: "c2@14 g2 c3", X: "c2@11 ~ c2@2 bb1@2",
  Y: "a1@14 e2 a2", Z: "a1@6 a1@2 a2!2 ~@2 a2!2 ~@2", AA: "d2@3 ~@5 d3!2 ~@4 a2 d3", AB: "d2@5 ~@3 d3!2 ~@4 a2 d3",
  AC: "g1@5 ~@9 g1 ~", AD: "g1 a1 bb1 b1", AE: "c2@9 c3 ~@4 g2 c3", AF: "c2@8 g2@3 c3@3 g2@2",
  AG: "a1@8 a2!2 ~@2 a1!2 ~@2", AH: "d2@5 ~@3 f2@3 a2@2 ~ f2 ~", AI: "g2@14 d2 g1", AJ: "a1@13 ~ a1@2",
  AK: "bb1@13 ~ bb1@2", AL: "a1@5 ~ a1@2 d2@3 f2@3 a2@2", AM: "g1@10 a1@3 bb1@3", AN: "c2@10 d2@3 e2@3",
  AO: "f2@10 g2@3 ab2@2 ~", AP: "a2@4 a1@3 ~", AQ: "f1@5 ~@2 f2 ~ f2 ~ f2 c2@2 f2 c2, d2 ~@15",
  AR: "d1@2 ~@5 f1 ~@2 d1 ~@5",
})).s("gm_fretless_bass").gain(0.45)

// drums · kick
const kick = s("bd").struct(`<
  ~
  [x ~@6 x ~ x ~@6]!32
  [x ~@6 x!2 ~@7]!4
  x!36
  [x ~@6 x!2 ~@7]!4
  [x ~@6 x ~ x ~@6]!16
  [x ~@6 x!2 ~@7]!2
  [x ~@6 x ~@2 x ~@5]
>`).gain(0.45)

// drums · snare
const snare = s("sd").struct("<~ A@32 ~@3 B C@9 D C@15 D C@10 ~@4 A@16 ~@2 E>".pickRestart({
  A: "~ x ~ x", B: "~@12 x!3 ~", C: "~ x ~@2", D: "~@4 x ~@7 x!3 ~", E: "~@7 x ~@2 x ~@5",
})).gain(0.5)

// drums · clap
const clap = s("cp").struct("<~ [~@9 x ~@6]!32 ~@44 [~@9 x ~@6]!16 ~@3>").gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<[x!4] [x!8]!32 [x!16]!44 [x!8]!16 [x!16]!2 [x!7 ~@9]>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@37 x ~@9 x ~@15 x ~@32>").gain(0.5)

// drums · cowbell
const cowbell = s("cb").struct("<~@37 [x!4]!36 ~@23>").gain(0.5)

// drums · bongos
const bongos = s("bongo:4").struct("<~ [~ x ~ x]!32 ~@44 [~ x ~ x]!16 ~@3>").gain(1.3)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~ [~@3 x ~@7 x ~ x ~@2]!32 ~@44 [~@3 x ~@7 x ~ x ~@2]!16 ~@3>").gain(1.3)

// drums · congas
const congas = s("conga:13").struct("<~ [~@2 x ~@2 x ~@4 x ~@3 x ~]!32 ~@44 [~@2 x ~@2 x ~@4 x ~@3 x ~]!16 ~@3>")
  .gain(1.59)

// drums · congas
const congas_2 = s("conga:18").struct("<~ [~ x ~@4 x ~@9]!32 ~@44 [~ x ~@4 x ~@9]!16 ~@3>").gain(1.59)

// drums · congas
const congas_3 = s("conga:33").struct("<~ [x ~@6 x ~ x ~@5 x]!32 ~@44 [x ~@6 x ~ x ~@5 x]!16 ~@3>").gain(1.59)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@37 [~ x ~@2]!36 ~@23>").gain(2.14)

stack(
  piano, tubular_bells, acoustic_guitar_steel, brass_section, string_ensemble_2, bass, kick, snare, clap, hihat, crash,
  cowbell, bongos, bongos_2, congas, congas_2, congas_3, jingle_bells
)

More by Marvin Gaye