Strudelify

Magic Moments

Erasure

KeyE majorTempo156 bpm
0:00/0:00
// Magic Moments — Erasure
// 156 bpm, 12/8, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 2 "Lead 5 (charang)" lead 5 charang (copy of ch 1 "Pad 3 (polysynth)" pad poly)
// note: Full arrangement: all 68 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(156/6)

// 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.

// other · clavinet
const clavinet = note("<A B A B ~@8 A B A B ~@15 A B C D C D C D ~@16 C D C D C D C D ~@5>".pickRestart({
  A: "e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~",
  B: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~",
  C: "f#3 ~ f#3 ~ f#3 ~ f#3 ~ f#3 ~ f#3 ~ d#3 ~ d#3 ~ d#3 ~ d#3 ~ d#3 ~ d#3 ~",
  D: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~",
})).s("gm_clavinet").gain(0.5).pan(0.1)

// other · pad metallic · "Pad 6 (metallic)"
const pad_metallic = note("<A@4 ~@27 A@2 B@2 ~@19 C@2 D ~@2 E F G ~@4 H I>".pickRestart({
  A: "[e4,e5]/2", B: "[f#4,f#5]/2", C: "[~@28 a#4 ~ a#4 ~ a#4 ~ a#4 ~ f#4@4 f#4@2 f#4@2 f#4@2 f#4@2, f#5, f#4@3 ~]/2",
  D: "d#4@4 d#4 ~ d#4@2 f4@2 f#4 ~ a#4@3 ~ g#4@8", E: "~@4 a#4 ~ a#4 ~ a#4 ~ a#4 ~ f#4@3 ~ f#4 ~ f#4 ~ f#4 ~ f#4 ~",
  F: "d#4 ~@5", G: "~@4 a#4 ~ a#4 ~ a#4 ~ a#4 ~ f#4@4 ~@8", H: "~@4 f#4@2 a#4@2 g#4@2 f#4@2 a#4@2 g#4@2 f#4@7 ~",
  I: "f#4 ~ f#4 ~ f#4@2 f4@2 f#4@2 g#4@2 f#4@3 ~@9",
})).s("gm_pad_metallic").gain(0.5)

// other · banjo
const banjo = note(`<
  ~ A B C D ~@2 C D ~@2 A E A B C D ~@2 C D ~@2 A E ~@7 A F G H I F G J ~@2 G J ~@2 I K ~@6 I K ~@4 I K G J ~@2 L M
>`.pickRestart({
  A: "~@14 b3 ~ b3 ~ a3 ~ g#3 ~ f#3 ~", B: "e3 ~@11", C: "~@7 b3 c4 c#4 d4 d#4", D: "e4 ~@7", E: "e3 ~@23",
  F: "f#3 ~@11", G: "~@7 c#4 d4 d#4 e4 f4", H: "f#4 ~@11", I: "~@14 c#4 ~ c#4 ~ b3 ~ a#3 ~ g#3 ~", J: "f#4 ~@7",
  K: "f#3 ~@23", L: "~@4 f#4@2 a#4@2 g#4@2 f#4@2 a#4@2 g#4@2 f#4@7 ~",
  M: "f#4 ~ f#4 ~ f#4@2 f4@2 f#4@2 g#4@2 f#4@3 ~@9",
})).s("gm_banjo").gain(0.78).pan(0.8)

// other · piccolo
const piccolo = note("<A B A B ~@27 A B C D ~@31 C E>".pickRestart({
  A: "~@4 g#5 ~ g#5@2 a5@2 b5@2 e5@2 ~@2 e5 ~ e5@2 f#5@2 g#5@2", B: "c#5@2 ~@2 c#5 ~ c#5@2 d#5@2 e5@2 g#5@4 f#5@8",
  C: "~@4 a#5 ~ a#5@2 b5@2 c#6@2 f#5@2 ~@2 f#5 ~ f#5@2 g#5@2 a#5@2", D: "d#5@2 ~@2 d#5 ~ d#5@2 f5@2 f#5@2 a#5@4 g#5@8",
  E: "d#5@2 ~@2 d#5@2 f5@2 f#5@2 g#5@2 f#5@3 ~@9",
})).s("gm_piccolo").gain(0.6)

// other · music box
const music_box = note(`<
  ~@4 A B C ~ A B C ~@5 A B C ~ A B C ~@5 A B D E ~@7 F G H ~ F G H ~@5 F G I J ~@8 F G I K ~
>`.pickRestart({
  A: "~@16 g#4 ~ g#4@2 a4@2 b4@2", B: "d#4@2 ~@14 g#4 ~ g#4@2 a4@2 b4@2", C: "c#4 ~@11", D: "c#5 ~@5 d#4 ~@5",
  E: "e4 ~@11", F: "~@16 a#4 ~ a#4@2 b4@2 c#5@2", G: "f4@2 ~@14 a#4 ~ a#4@2 b4@2 c#5@2", H: "d#4 ~@11",
  I: "d#5 ~@5 f4 ~@5", J: "f#4@2 ~@2 a#4 ~ a#4@2 b4@2 c#5@2 f#4@2 ~@10", K: "f#4 ~@11",
})).s("gm_music_box").gain(0.71).pan(0.6)

// bass · acoustic bass
const bass = note(`<
  ~@2 A B C D E F C D E F A B A B C D E F C D E F G H E I C D J A B K L K L K L M N H O M N H O P Q H R M N S ~ T U T U
  T U T U M N S K V
>`.pickRestart({
  A: "e2@2 ~@2 e2 ~ e2@2 ~@2 e2 ~ c#2@2 ~@2 c#2 ~ c#2@2 ~@2 c#2 ~",
  B: "a1@2 ~@2 a1 ~ a1@2 ~@2 a1 ~ b1@2 ~@2 b1 ~ b1@2 ~@2 b1@2",
  C: "e2@2 ~@2 e2 ~ e2@2 ~@2 e2 ~ e2@2 ~@2 e2 ~ e2@2 ~@2 e2@2",
  D: "g#1@2 ~@2 g#1 ~ g#1@2 ~@2 g#1 ~ g#1@2 ~@2 g#1 ~ g#1@2 ~@2 g#1 ~",
  E: "a1@2 ~@2 a1 ~ a1@2 ~@2 a1 ~ a1@2 ~@2 a1 ~ a1@2 ~@2 a1 ~",
  F: "b1@2 ~@2 b1 ~ b1@2 ~@2 b1 ~ b1@2 ~@2 b1 ~ b1@2 ~@2 b1@2",
  G: "e2@2 ~@2 e2 ~ e2@2 ~@2 e2 ~ e2@2 ~@2 e2 ~ e2@2 ~@2 e2 ~",
  H: "b1@2 ~@2 b1 ~ b1@2 ~@2 b1 ~ b1@2 ~@2 b1 ~ b1@2 ~@2 b1 ~",
  I: "f#1@2 ~@2 f#1 ~ f#1@2 ~@2 f#1 ~ f#1@2 ~@2 f#1 ~ f#1 ~@3 f#1@2",
  J: "a1 ~@3 a1 ~ a1 ~@3 a1 ~ b1@2 ~@2 b1 ~ b1@2 ~@2 b1@2",
  K: "f#2@2 ~@2 f#2 ~ f#2@2 ~@2 f#2 ~ d#2@2 ~@2 d#2 ~ d#2@2 ~@2 d#2 ~",
  L: "b1@2 ~@2 b1 ~ b1@2 ~@2 b1 ~ c#2@2 ~@2 c#2 ~ c#2@2 ~@2 c#2@2",
  M: "f#2@2 ~@2 f#2 ~ f#2@2 ~@2 f#2 ~ f#2@2 ~@2 f#2 ~ f#2@2 ~@2 f#2@2",
  N: "a#1@2 ~@2 a#1 ~ a#1@2 ~@2 a#1 ~ a#1@2 ~@2 a#1 ~ a#1@2 ~@2 a#1 ~",
  O: "c#2@2 ~@2 c#2 ~ c#2@2 ~@2 c#2 ~ c#2@2 ~@2 c#2 ~ c#2@2 ~@2 c#2@2",
  P: "f#2@2 ~@2 f#2 ~ f#2@2 ~@2 f#2 ~ f#2@2 ~@2 f#2 ~ f#2@2 ~@2 f#2 ~",
  Q: "c#2@2 ~@2 c#2 ~ c#2@2 ~@2 c#2 ~ c#2@2 ~@2 c#2 ~ c#2@2 ~@2 c#2 ~",
  R: "g#1@2 ~@2 g#1 ~ g#1@2 ~@2 g#1 ~ g#1@2 ~@2 g#1 ~ g#1 ~@3 g#1@2",
  S: "b1 ~@3 b1 ~ b1 ~@3 b1 ~ c#2@2 ~@2 c#2 ~ c#2@2 ~@2 c#2@2", T: "f#2 d#2", U: "b1 c#2",
  V: "b1@2 ~@2 b1@2 c#2@2 ~@2 c#2 ~ f#2@3 ~@9",
})).s("gm_acoustic_bass").gain(0.4)

// other · clarinet
const clarinet = note(`<
  ~@4 A B C D A B C E F G F H A B C E A B I E J K L M A B N O ~@3 P Q P R S T U V S T W X Y Z AA AB S T AC AD ~@2 P R ~
  AE AF AG S T AC AD ~
>`.pickRestart({
  A: "e4@3 b4@2 ~", B: "d#4@3 b4@2 ~", C: "c#4@3 e4@3 b4@5 a4", D: "g#4@12 f#4@11 ~", E: "g#4 f#4",
  F: "~@4 g#4 ~ g#4@2 a4@2 b4@2 e4@2 ~@2 e4 ~ e4@2 f#4@2 g#4@2", G: "c#4@2 ~@2 c#4 ~ c#4@2 d#4@2 e4@2 g#4@4 f#4@8",
  H: "c#4@2 ~@2 c#4 ~ c#4@2 d#4@2 e4@2 g#4@4 f#4@6 ~@2", I: "c#4@6 e4@6 b4@9 ~ a4@2", J: "~@3 g#4@3 a4@5 b4",
  K: "e5@21 ~ e5@2", L: "f#5@3 e5", M: "f#4@9 g#4@2 f#4", N: "c#5 d#4", O: "e4@11 ~@13",
  P: "~@4 a#4 ~ a#4@2 b4@2 c#5@2 f#4@2 ~@2 f#4 ~ f#4@2 g#4@2 a#4@2", Q: "d#4@2 ~@2 d#4 ~ d#4@2 f4@2 f#4@2 a#4@4 g#4@8",
  R: "d#4@2 ~@2 d#4 ~ d#4@2 f4@2 f#4@2 a#4@4 g#4@7 ~", S: "f#4@3 c#5@2 ~", T: "f4@3 c#5@2 ~",
  U: "d#4@6 f#4@5 ~ c#5@10 b4@2", V: "a#4@12 g#4@11 ~", W: "d#4@6 f#4@6 c#5@9 ~ b4@2", X: "a#4 g#4",
  Y: "~@3 a#4@3 b4@5 c#5", Z: "f#5@21 ~ f#5@2", AA: "g#5@17 ~ f#5@6", AB: "g#4@9 a#4@2 g#4", AC: "d#5 f4", AD: "f#4 ~",
  AE: "~@4 d#4 ~ d#4@2 f4@2 f#4@2 a#4@4 g#4@8", AF: "~@16 f#4 ~ f#4@2 g#4@2 a#4@2",
  AG: "d#4@3 ~ d#4 ~ d#4@2 f4@2 f#4@2 a#4@4 g#4@7 ~",
})).s("gm_clarinet").gain(0.5)

// chords · pad warm · "Pad 2 (warm)"
const pad_warm = note("<~@6 A B ~@2 A B ~@6 A B ~@2 A B C D E F ~@13 G H ~@2 G H I J K L ~@17>".pickRestart({
  A: "~@12 d#5@11 ~", B: "e5@11 ~ d#5@12, [f#4,b4]", C: "[g#3,b3,e4]", D: "[f#3,b3,e4]", E: "[a3,c#4,e4]",
  F: "[f#3,a#3,c#4,f#4]", G: "~@12 f5@11 ~", H: "f#5@11 ~ f5@12, [g#4,c#5]", I: "[a#3,c#4,f#4]", J: "[g#3,c#4,f#4]",
  K: "[b3,d#4,f#4]", L: "[g#3,c4,d#4,g#4]",
})).s("gm_pad_warm").gain(0.37)

// other · ocarina
const ocarina = note("<~@24 A B C D ~@2 E F ~@15 G H I J ~@2 K L M N ~@2 M O P ~@4 Q R>".pickRestart({
  A: "~@2 g#4@2 a4@3 b4", B: "e5@21 ~ e5@2", C: "f#5@3 e5", D: "f#4@23 ~", E: "c#5 d#5", F: "e5 ~",
  G: "~@2 a#4@2 b4@3 c#5", H: "f#5@21 ~ f#5@2", I: "g#5@3 f#5", J: "g#4@23 ~", K: "d#5 f5", L: "f#5 ~",
  M: "~@4 a#4 ~ a#4 ~ a#4 ~ a#4 ~ f#4@3 ~ f#4 ~ f#4 ~ f#4 ~ f#4 ~", N: "d#4@4 d#4 ~ d#4@2 f4@2 f#4 ~ a#4@3 ~ g#4@8",
  O: "d#4 ~@5", P: "~@4 a#4 ~ a#4 ~ a#4 ~ a#4 ~ f#4@4 ~@8", Q: "~@4 f#4@2 a#4@2 g#4@2 f#4@2 a#4@2 g#4@2 f#4@7 ~",
  R: "f#4 ~ f#4 ~ f#4@2 f4@2 f#4@2 g#4@2 f#4@3 ~@9",
})).s("gm_ocarina").gain(0.31).pan(0.8)

// other · vibraphone
const vibraphone = note("<~@55 A B ~@2 A C D ~@4 E F>".pickRestart({
  A: "~@4 a#4 ~ a#4 ~ a#4 ~ a#4 ~ f#4@3 ~ f#4 ~ f#4 ~ f#4 ~ f#4 ~", B: "d#4@4 d#4 ~ d#4@2 f4@2 f#4 ~ a#4@3 ~ g#4@8",
  C: "d#4 ~@5", D: "~@4 a#4 ~ a#4 ~ a#4 ~ a#4 ~ f#4@4 ~@8", E: "~@4 f#4@2 a#4@2 g#4@2 f#4@2 a#4@2 g#4@2 f#4@7 ~",
  F: "f#4 ~ f#4 ~ f#4@2 f4@2 f#4@2 g#4@2 f#4@3 ~@9",
})).s("gm_vibraphone").gain(0.36).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@4 [x!4]!50 ~@9 [x!4]!4 [x!2 ~@2]>").gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~@4 [x!12]!50 ~@9 [x!12]!4 [x!6 ~@6]>").gain(0.36)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@4
  [~@2 x ~@2 x ~@2 x ~@2 x]!50
  ~@9
  [~@2 x ~@2 x ~@2 x ~@2 x]!4
  [~@2 x ~@2 x ~@6]
>`).gain(0.45)

stack(
  clavinet, pad_metallic, banjo, piccolo, music_box, bass, clarinet, pad_warm, ocarina, vibraphone, kick, hihat,
  tambourine
)

More by Erasure