Strudelify
Man on the Moon cover art

1992 · Automatic For The People

Man on the Moon

R.E.M.

KeyE minorTempo116 bpm
0:00/0:00
// Man on the Moon — R.E.M.
// 116 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 155 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): guitar program 25, guitar program 29, guitar program 26.
setcpm(116/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 · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A B C D@2 E D@3 E D@3 E D@3 E D@3 E D@3 E D@3 E D@2 F G F G F H I J K L K M K L N O D E D@3 E D@3 E D@3 E D@2 F G F
  G F H I J K L K M K L N O P Q R Q R Q S T U V W T U V W D E D@3 E D@2 F G F G F H I J K L K M K L N O P Q R Q R Q S K
  L K M K L N O K L K M K L N O K L K M K L N O ~@4
>`.pickRestart({
  A: "[e3,g3,c4]@4 c4@2 [c4,e4]@4 [c4,e4]@2 [e3,g3,c4,e4]@2 [c4,e4] ~, c3@3 [e3,g3]@3 ~@2", // C Em
  B: "[g3,c4,e4]@2 f9@2 d4@2 [a3,d4]@4 [a3,d4]@2 [d3,f#3,a3,d4]@2 [a3,d4] ~, d3@3 [d3,f#3]@3 ~@2", // C D5 D D5 D
  C: "[c3,e3,g3,d4]@2 [g3,c4,f9] ~@3 [g3,c4,e4]@4 c4@2 [g3,c4]@2 c4@2, ~@3 [c3,e3]@3 [g2,c3,e3]@2", // C Csus4 C C5 C
  D: "[c3,e3]@3 [c4,e4]@2 [c4,e4] c4 e4, [g3,c4]@2 ~ [c3,e3,g3]@3 [g2,c3,e3,g3]@2", // C C5 C
  E: "[d3,f#3]@3 [d4,f#4]@2 [d4,f#4] d4 f#4, [a3,d4]@2 ~ [d3,f#3,a3]@3 [a2,d3,f#3,a3]@2", // D D5 D
  F: "[c4,e4]@2 [c4,e4] [c4,e4]@2 [c4,e4]!3, [e3,a3]@3 [a2,e3,a3]@3 [a2,e3,a3]@2", // C A5
  G: "[b3,d4]@2 [b3,d4] [d4,a4]@2 [d4,a4] [b3,d4]!2, [d3,g3]@3 [d3,g3,b3]@3 [d3,g3,g4]@2", // Bm D5 Bm G5 G G5
  H: "[d3,g3,b3,d4]@2 [b3,d4]!2 [c4,e4]!2 [g3,c4,e4]!2, ~ [g2,d3,g3] [c3,g3] [c3,e3]", // G Bm C G5 C5 C
  I: "[d3,a3,d4,f#4]@2 [d4,f#4]!4 [a3,d4,f#4]!2, ~ [d3,f#3,a3] [d3,a3] [d3,f#3]", // D D5 D
  J: "[d3,a3,d4,f#4]@2 [d4,f#4]!2 [d4,g4] [d4,f#4] [a3,d4,e4] [a3,d4,f#4], ~ [d3,f#3,a3] [d3,a3] [d3,f#3]", // D G5 D Asus4 D D5 D
  K: "[d3,g3,b3,d4]@2 [b3,d4]!2 [c4,e4]!2 [a3,c4,e4]!2, ~ [d3,g3] [e3,a3] e3", // G Bm C Am G5 A5
  L: "[c4,e4]!2 [e3,g3,c4,e4] [b3,d4]@2 [b3,d4] [f#3,b3,d4]!2, [e3,g3]@2 ~ [d3,f#3]@3 d3@2", // C Bm Em D
  M: "[d4,f#4]!2 [f#3,a3,d4,f#4] [d4,f#4]@2 [d4,f#4] [a3,d4,f#4]!2, [f#3,a3]@2 ~ [f#3,a3]@3 f#3@2", // D F#m
  N: "[c4,e4]!2 [a3,c4,e4]!2 [c4,e4]!2 [a3,c4,e4]!2, [e3,a3] e3 [e3,a3] e3", // C Am C Am A5
  O: "[c4,e4]!2 [e3,a3,c4,e4] [c4,e4]@2 [c4,e4] [a3,c4,e4]!2, [e3,a3]@2 ~ [e3,a3]@3 e3@2", // C Am C Am A5
  P: "[e3,g3,b3,e4]@2 [b3,e4]!4 [g3,b3,e4]!2, ~ [e3,g3]!2 e3", // Em E5 Em
  Q: "[d3,a3,d4,f#4]@2 [d4,f#4]!2 [d4,g4] [d4,f#4] [a3,d4,f#4]!2, ~ [d3,a3]!2 d3", // D G5 D D5
  R: "[e3,b3,e4,g4]@2 [e4,g4]!2 [d4,f#4] [e4,g4] [b3,e4,g4]!2, ~ [e3,b3]!2 e3", // Em D Em E5
  S: "[d4,f#4]!2 [d3,a3,d4,f#4] [d4,f#4]@2 [d4,g4] [a3,d4]!2, [d3,a3]@2 ~ [d3,a3]@3 [d3,f#4]@2", // D G5 D5 D
  T: "[c3,e3,g3,c4,g4]@2 g4 [e4,g4]@2 [e4,g4] g4 [e4,g4], ~ [c3,e3,g3,c4]@2 [e3,g3,c4]", // C Em C
  U: "[c3,a3,d4,f#4]@2 [d3,f9] ~ [d3,f#3,a3]@2 [a3,d4]@4 [a3,d4]@2 [d3,f#3,a3,d4]@2 [a3,d4]@2, ~@3 [d3,f#3]@3 ~@2", // D7 Dm D D5 D D5 D
  V: "[c3,e3,g3,d4]@2 [c4,f9] ~ [e3,g3]@2 [g3,c4]@4 [g3,c4]@2 [g3,c4]@2 [c4,e4]@2, ~@3 e4@4 ~, ~@3 e3@3 [g2,c3,e3]@2", // C F5 Em C5 C
  W: "[c3,e3,g3]@2 [c4,e4] [c4,e4]@2 ~@2 [c4,e4], g2@5 [c4,e4]@2 ~, ~ [c3,e3,g3]@2 [g2,c3,e3,g3]", // C
})).s("gm_acoustic_guitar_steel").gain(0.4).pan(0.8)

// chords · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~ A B C D@2 E D@3 E D@3 E D@3 E D@3 E D@3 E D@3 E D@2 ~@16 D E D@3 E D@3 E D@3 E D@2 ~@31 D E D@3 E D@2 ~@51
>`.pickRestart({
  A: "~@2 [e3,g3] ~@5", B: "~ [f#3,a3,d4] [f#3,a3] ~@5", C: "~@2 [e3,g3] ~@2 g3 ~ g3", D: "~@2 [g3,c4] ~@4 c4",
  E: "~@2 [a3,d4] ~@4 d4", // D5
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0.8)

// bass · electric bass finger
const bass = note(`<
  ~ A B C D A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C E F G F H F I J K L M N O P Q R S A B C T A B C@2 A B
  C T A B C E F G F H F I J K L M N O P U R V W X W Y W Z AA ~@7 AB A B C@2 A B C E F G F H F I J K L M N O P Q R S W X
  W AC W AD AA L M N O P Q R AE L M N O P U R AE L M N O P Q R AE AF@3 ~
>`.pickRestart({
  A: "c2@2 c2 g2@3 a2@2", B: "d2@2 d2 a2@3 b2@2", C: "c2@4 c2@2 g2@6 g1@3 ~", D: "c2@2 c2 g2@3 g1@2",
  E: "c2@5 ~ c2@6 b1@3 ~", F: "a1@5 ~ a1@2 c2@2 d2@2 e2@2 g2@2", G: "g1@3 d2@3 e2@2", H: "g1@2 g1 d2@3 e2@2",
  I: "g1@5 ~ g1@2 c2@3 ~ c2@2 ~@2", J: "d2@5 ~ d2@7 ~ d2@2", K: "~ d2 ~ d2 g2 f#2 e2 d2", L: "g1 a1", M: "c2!2 ~ b1@5",
  N: "g1@3 g1 a1@3 d2", O: "d2@5 ~ d2@4 e2@2 d2@2 a1@2", P: "g1@5 ~ g1@2 a1@6 a1@2", Q: "c2@2 c2@2 ~@2 b1@9 ~",
  R: "a1@6 a1@3 ~ a1@4 e1@2", S: "a1@5 ~ a1@3 ~ a1@4 b1@2", T: "c2@2 c2 g2@2 a2 g2 e2", U: "c2 ~ c2@2 ~@2 b1@9 ~",
  V: "a1@5 ~ a1@3 ~ a1@4 g1@2", W: "e1@3 e2 f#2 g2@2 e2", X: "d2@3 ~ d2@2 a1@2 b1@2 d2@2 b1@2 a1@2",
  Y: "d2@3 ~ f#1@2 a1@2 b1@2 d2@2 b1@2 a1@2", Z: "d2@5 ~ d2@2 d2@6 d2 ~", AA: "d2@5 ~ d2@2 d2@8", AB: "~@7 g1",
  AC: "d2@2 f#1 a1 b1 d2 b1 a1", AD: "d2@5 ~ d2@2 d2@6 d2@2", AE: "a1@5 ~ a1@2 g2@2 f#2@2 e2@2 d2@2",
  AF: "[e1@43 ~@5]/3",
})).s("gm_electric_bass_finger").gain(0.72)

// chords · acoustic guitar steel
const acoustic_guitar_steel_3 = note(`<
  ~@9 A B C A@2 D C A@2 B C A@2 D C A@2 B C A@2 D C A E F E F E G ~ H I J K L I J I M A B C A@2 D C A@2 B C A@2 D C A E
  F E F E G ~ H I J K L I J I M N@2 O@2 P@2 ~@9 Q R Q@3 S Q T E F E F E G ~ H I J K L I J I M N@2 O@2 P@2 ~ I J K L I J
  I M I J K L I J I M I J K L I J I M ~@4
>`.pickRestart({
  A: "~@2 e4 ~@2 g4 ~ g4", B: "~@2 f#4 ~@4 [a4,e5]", C: "d5 ~@3 e4@2 ~@4 g4@2 ~@2 g4@2", D: "~ d5 f#4 ~@4 [a4,e5]",
  E: "~@2 a4 ~@2 a4 ~ a4", F: "~@2 g4 ~@5", G: "~@3 g4 ~ g4 ~@2", H: "~ d4 ~@3 g4 ~@2", I: "~@10 a4 ~@5",
  J: "~@5 f#4 ~@2", K: "~@10 a4 ~@3 d5@2", L: "~@5 [g4,a4] ~@2", M: "~@5 a4 ~@2",
  N: "[~@8 [f#5,a5]@2 g5 ~@3 [d5,f#5,a5]@6 ~@2 a4@4 a4@2 ~@4]/2", // F#m D
  O: "[~@8 a5@2 b5 ~@3 [d5,f#5,a5]@6 ~@2 a4@4 a4@2 ~@4]/2", P: "[~@8 a5@2 b5 ~@3 [a4,d5,f#5]@6 ~@2 a4@6 ~@4]/2",
  Q: "~ e5 ~@6", R: "~@2 f#5@2 ~@2 e6@7 ~@3", S: "~ f#5 ~ e6@3 ~@2", T: "~ c6@2 ~@5",
})).s("gm_acoustic_guitar_steel").gain(0.42).pan(0.2)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@43 A B ~@2 A C ~@26 A B ~@2 A D E@6 ~@27 A B ~@2 A D E@6 ~ F ~ G H F ~ A D F ~ G H F ~ A D F ~ G H F ~ A D I@4
>`.pickRestart({
  A: "~@10 a3 ~@5", B: "~@5 [a3,g4] ~@2", C: "~@8 [a3,c4,g4]@2 [a3,a4] ~@5", D: "~@4 [a3,c4,g4] ~@3",
  E: "[~@10 g3@3 ~ [d3,f#3,a3]@6 ~@10 b3@4 b3 ~@7 b3 ~@3 [d3,f#3,a3]@6 ~@2 a3 ~@7 [e3,g3,b3]@6 ~@6 b3 ~@3 [d3,f#3,a3]@6 ~@12, ~@5 [e3,g3] ~@10]/6", // D Em D Em
  F: "~@6 g2 ~@9", G: "~@6 g2 ~@3 a3 ~@5", H: "~@5 [g3,a3,g4] ~@2", I: "[[e2,g2,b2,e3]@59 ~@5]/4",
})).s("gm_overdriven_guitar").gain(0.64).pan(0.6)

// chords · piano
const piano = note(`<
  ~@25 A@2 B@2 A@2 C@2 ~@15 D E ~@7 A@2 B@2 A@2 C@2 ~@15 D F@2 G@2 H@2 I J ~@7 A@2 B@2 A@2 C@2 ~@7 K ~@7 D F@2 G@2 H@2 I
  ~@23 K L@4
>`.pickRestart({
  A: "[~@12 b3@6 ~@2 a3@11 ~, ~ e3@7 ~@8, ~@4 g3@12 ~@2 f#3@13 ~]/2", B: "[~@4 g3@23 ~@5, ~@2 e3@23 ~@7]/2",
  C: "[~@14 c4@15 ~@3, ~@2 e3@23 ~@7, ~@4 g3@23 ~@5]/2", D: "~@4 [b4,g5] [a4,f#5] [g4,e5] [f#4,d5]", E: "[g4,e5]",
  F: "[[g4,e5]@7 ~ [a4,f#5,a5] ~ [b4,g5,b5]@3 ~ [f#5,a5]@10 g5@2 f#5@2 d5@2 a4@2, ~@14 a4@15 ~@3]/2", // C D Em F#m
  G: "[b4@7 ~ [a4,f#5,a5] ~ [b4,g5,b5]@3 ~ [f#5,a5]@10 g5@2 f#5@2 d5@2 a4@2]/2", // D Em F#m
  H: "[b4@7 ~ [a4,f#5,a5] ~ [b4,g5,b5]@3 ~ [f#5,a5]@10 ~@8, ~@14 a4@15 ~@3]/2", I: "~@5 g5 f#5 d5", J: "g4@15 ~",
  K: "~@4 g2 f#2 e2 d2", L: "[e1@63 ~]/4",
})).s("gm_piano").gain(0.57).pan(0.7)

// other · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~@5 A B C@2 ~@16 D E F ~ D E F ~@25 D E F ~ D E F ~@32 D E F ~ D E F ~@52
>`.pickRestart({
  A: "~@3 e4@3 c4@2", B: "d3@3 f#4@3 d4@2", C: "[~@3 e4@3 c4@10, g3@15 ~]/2", D: "~@6 d4@7 ~@3", E: "~@3 e4@5",
  F: "~@3 d4@4 ~",
})).s("gm_electric_guitar_jazz").gain(0.42).pan(0.6)

// other · overdriven guitar
const overdriven_guitar_2 = note(`<
  ~@33 A B C D C E@3 F G F H F G I@2 ~@16 A J C B C E@3 F G F H F G K@2 L@2 M@2 N O ~@17 A B P@2 C Q@3 F G F H F G K@2
  L@2 R@3 O ~ S@2 T U@2 ~ V@2 S@2 T U@2 ~ V@2 S@2 T U@2 ~ V@2 W@4
>`.pickRestart({
  A: "c4@15 ~", B: "~@3 b4 ~ a4@2 f#4", C: "e4@15 ~", D: "~@6 b4 ~@3 a4@4 f#4@2", E: "[~@10 e4@2 c4@2 g3@33 ~]/3",
  F: "g2@5 ~ g2 ~ a2@5 ~ a2 ~", G: "c3@5 ~ b2@7 ~ b2@2", H: "d3@5 g3 f#3 d3", I: "[a2@31 ~]/2", J: "~@3 g4 ~ a4@2 f#4",
  K: "[a2@7 ~]/2", L: "[~ e5!4 e5@2 ~@3 f#4 d4 g4 f#4 d4 a3, b4@2 a4 ~, ~@14 e5@7 ~@11]/2",
  M: "[~ e5!3 [a4,e5] b4@2 ~@3 f#4 d4 g4 f#4 d4 a3, b4@8 ~@2 e5@9 ~@13, ~@7 b5@9, ~@7 a4@5 ~@4]/2", // A5
  N: "~ e5!2 ~ g5 e5@3, b4, ~@3 e5@2 ~@3", O: "~@6 a3@9 ~, f#4 ~, ~ d4@6 ~", P: "[c4@7 d4@3 b4!2 ~ a4@2 f#4]/2",
  Q: "[~@10 e4@2 c4@2 [g3,e4]@33 ~]/3", // C
  R: "[~ e5!3 [a4,e5] b4@2 ~@3 d4 g4 f#4 d4 a3 ~@2 e5!2 ~ g5 e5@3, b4@8 ~@2 e5@9 ~@13 b4@16, ~@7 b5@9 ~@3 e5@2 ~@3, ~@7 a4@5 ~@3 e4@2 ~@7]/3", // A5
  S: "[b5@25 ~@7]/2", T: "g5@4 e5 g5@2 f#5", U: "[e5@2 d5@3 ~ e5@2 d5@4 e5@20, ~@8 c5 ~@23]/2",
  V: "[~@8 e5@2 g5@3 ~ g5@10 e5@8]/2", W: "[[e4,e6]@51 ~@13]/4",
})).s("gm_overdriven_guitar").gain(0.54).pan(0.6)

// other · electric guitar jazz
const electric_guitar_jazz_2 = note(`<
  ~@34 A@2 B@2 ~@2 C D ~ E@2 ~ F ~ G ~@7 H@2 ~@8 A@2 B@2 ~@2 C D ~ E@2 ~ F ~@26 A@2 B@2 ~@2 C D ~ E@2 ~ F ~@9 D ~ E@2 ~
  F ~@2 D ~ E@2 ~ F ~@2 D ~ E@2 ~ F ~@6
>`.pickRestart({
  A: "[~@15 c4@16 ~]/2", B: "[~@15 c4@11 ~@6]/2", C: "~@5 g3 ~@2", D: "~ d4@3 ~@4", E: "[~@5 g4@2 f#4@6 g4 ~@2]/2",
  F: "~@5 f#4@2 ~", G: "~@5 a4@2 g4", H: "[~@10 g4@2 d4@17 ~@3]/2",
})).s("gm_electric_guitar_jazz").gain(0.42).pan(0.3)

// other · electric guitar jazz · soft notes
const electric_guitar_jazz_3 = note("<~@37 [~@5 d4 ~@2] ~@31 [~@5 d4 ~@2] ~@38 [~@5 d4 ~@2] ~@46>")
  .s("gm_electric_guitar_jazz").gain(0.24).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@9 A@24 B C B C B C B D E F E G E F E C A@16 B C B C B C B D E F E A E F E C H@7 I ~@7 A@8 E J E J E J@2 D E F E G E
  F E C H@7 E F E G E F E A E F E F E F E K E F E G E F E L I ~@3
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "x ~@3 x!2 ~ x", C: "x ~@3 x!2 ~@2", D: "x!2 ~ x ~@4", E: "x ~@2 x!2 ~@3", F: "x!2 ~ x ~ x ~ x",
  G: "x ~@4 x ~ x", H: "x!4", I: "x", J: "x ~@2 x!3 ~ x", K: "~ x ~ x ~@4", L: "x!2 ~ x ~ x ~@2",
})).gain(0.72)

// drums · rim
const rim = s("rim").struct("<~@96 [~ x ~ x]!8 ~@51>").gain(0.72)

// drums · snare
const snare = s("sd").struct(`<
  ~@40 A B@3 C B@4 ~@23 A B@3 D B@11 ~@16 B@7 E B@3 C B@10 C B@3 C B@3 F B@3 G B@3 H B@3 C B@3 I J ~@3
>`.pickRestart({
  A: "~@2 x!2", B: "~ x ~ x", C: "~@2 x!2 ~@2 x ~", D: "~@2 x ~@2 x!2 ~", E: "~@4 x!2 ~@2 x ~@3 x ~@3",
  F: "~@2 x ~ x!4", G: "~ x ~@2", H: "x ~ x ~ x!3 ~", I: "~ x!3", J: "x",
})).gain(0.8)

// drums · clap
const clap = s("cp").struct("<~@81 A@7 ~@32 A@7 ~@12 A@3 ~ A@7 B ~@4>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.72)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@9 A@31 B ~@8 A@23 B ~@3 C ~@5 D ~ D ~@2 D ~@23 B ~@9 D ~ D ~@2 D ~@7 E ~@3 A ~@3 F ~@12
>`.pickRestart({
  A: "~@3 x", B: "~@5 x ~ x", C: "~ x", D: "~@7 x", E: "~@2 x!2", F: "~@4 x ~@2 x",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@9 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@7 C D E D F D E D G D A@2 B A@3 B A@3 B A@3 B A@7 H D E D F D E D G D B D G
  D B A I J@7 A@3 B A@3 G A B A B@2 K B L D E D F D E D G D B D G D B A D E D F D E D G D E D F D E D G D E D F D E D G
  ~@4
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!2 ~@2 x!4", D: "~ x!7", E: "x!2 ~ x", F: "x!5 ~ x ~", G: "x!5 ~ x!2", H: "~ x ~@2 x!4",
  I: "~ x!3", J: "x!4", K: "x!6 ~ x", L: "x ~@3 x!4",
})).gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<~@48 A ~@23 B ~@3 A ~@3 A ~@38 A ~@6 C ~@11 D ~@16>".pickRestart({
  A: "~@7 x", B: "~ x ~@2", C: "~@5 x ~@2", D: "~ x",
})).gain(0.56)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@12 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 B ~ C ~ D ~ C ~ E ~@3 A ~@3 A ~@3 A ~@3 A ~@7 F ~ C ~ D ~ C ~ E ~ A ~ E ~ A
  ~@12 A ~@3 E ~ A ~ A@2 G A H ~ C ~ D ~ C ~ E ~ A ~ E ~ A ~@2 C ~ D ~ C ~ E ~ C ~ D ~ C ~ E ~ C ~ D ~ C ~ E ~@4
>`.pickRestart({
  A: "~@7 x", B: "~@2 x!2 ~@4", C: "~ x ~@3 x ~ x", D: "~@5 x ~ x", E: "~@5 x ~@2", F: "x!4 ~@4", G: "~@3 x",
  H: "~ x!3 ~@4",
})).gain(0.56)

// drums · high tom
const high_tom = s("ht").struct("<~@9 [~ x ~@2]!24 [~@2 x!2 ~@4]!7 [~ x ~@2] ~@8 [~ x ~@2]!16 [~@2 x!2 ~@4]!7 ~@83>")
  .gain(0.64)

// … 44 more lines

More by R.E.M.