Strudelify

Fingers & Thumbs (Cold Summer's Day)

Erasure

KeyC majorTempo125 bpm
0:00/0:00
// Fingers & Thumbs (Cold Summer's Day) — Erasure
// 125 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 157 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/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.

// other · ocarina · Cmaj7 Dsus2 Csus2 Asus2 Cmaj7 Dsus2 Csus2 Asus2 …
const ocarina = note(`<
  [a4 [b4,c5] [d5,e5] [c5,d5] [a4,b4] [b4,c5] [d5,e5] [c5,d5] [a4,b4] [b4,c5] [d5,e5] [c5,d5] [a4,b4] [b4,c5] [d5,e5] [c5,d5]]
  [[a4,b4] [b4,c5] [d5,e5] [c5,d5] [a4,b4] [b4,c5] [d5,e5] [c5,d5] [a4,b4] [b4,c5] [d5,e5] [c5,d5] [a4,b4] [b4,c5] [d5,e5] [c5,d5]]!15
  [b4 ~@15]
  ~@140
>`).s("gm_ocarina").gain(0.4)

// other · distortion guitar
const distortion_guitar = note("<A@2 B@2 A@2 B@2 ~@149>".pickRestart({
  A: "c5/2", B: "b4/2",
})).s("gm_distortion_guitar").gain(0.38).pan(0.8)

// chords · lead 2 sawtooth · "Lead 2 (sawtooth)"
const lead_2_sawtooth = note(`<
  ~@8 A@12 B C D@2 A@4 B C D@2 B E C B@2 E C D ~@18 A@8 B C D@2 A@4 B C D@2 B E C B@2 E C D ~@22 F G H I J G H I J G H K
  ~@37
>`.pickRestart({
  A: "~@6 [c4,g4]@2 ~@2 [c4,g4] [c4,g4]@2 ~@3", B: "~@6 [a3,e4]@2 ~@2 [a3,e4] [a3,e4]@2 ~@3",
  C: "~@6 [c4,f4]@2 ~@2 [c4,f4] [c4,f4]@2 ~@3", D: "~@6 [g3,d4]@2 ~@2 [g3,d4] [g3,d4]@2 ~@3",
  E: "~@6 [b3,e4]@2 ~@2 [b3,e4] [b3,e4]@2 ~@3", F: "~@14 g4 a4", G: "g4@14 f4 g4", H: "f4@14 e4 f4", I: "e4@14 f4 g4",
  J: "a4@14 g4 a4", K: "g4@7 ~",
})).s("gm_lead_2_sawtooth").gain(0.48)

// other · electric guitar clean · "Electric Guitar (clean)"
const electric_guitar_clean = note("<~@8 A B A B A B A C ~@42 A B A B ~@95>".pickRestart({
  A: "c3!3 ~ c3 ~ c3 ~ c3 ~ c3!2 ~ c3 ~ c3", B: "~ c3!2 ~ c3 ~ c3 ~ c3 ~ c3!2 ~ c3 ~ c3",
  C: "~ c3!2 ~ c3 ~ d#3 e3 f3 f#3 g3 g#3 a3 a#3 b3 c4",
})).s("gm_electric_guitar_clean").gain(0.45)

// other · banjo
const banjo = note(`<
  ~@8 A B C D A B C E A B C D F G H I A B C D F G H I F J K L F J K M A N O P A N O P Q A N O P A N O P Q A B C D A B C
  D F G H I A B C D F G H I F J K L F J K M A N O P A N O P Q A N O P A N O P Q F R S L F R S L F R S L F R S I A N O P
  A N O P Q A N O P A N O P Q A N O P A N O P Q A N O P A N O P Q ~
>`.pickRestart({
  A: "c5 g5 e5 g5 g4 e5 c5 e5 e4 c5 g4 c5 c4 g4 e4 g4", B: "g3 e4 c4 e4 e3 c4 g3 c4 c3 g3 e3 g3 g2 e3 c3 e3",
  C: "c3 g3 e3 g3 e3 c4 g3 c4 g3 e4 c4 e4 c4 g4 e4 g4", D: "e4 c5 g4 c5 g4 e5 c5 e5 c5 g5 e5 g5 e5 c6 g5 c6",
  E: "e4 c5 g4 c5 g4 e5 d#5 e5 f5 f#5 g5 g#5 a5 a#5 b5 c6", F: "c5 a5 e5 a5 a4 e5 c5 e5 e4 c5 a4 c5 c4 a4 e4 a4",
  G: "a3 f4 c4 f4 f3 c4 a3 c4 c3 a3 f3 a3 f2 f3 c3 f3", H: "d3 g3 d3 g3 d3 b3 g3 b3 g3 d4 b3 d4 b3 g4 d4 g4",
  I: "d4 b4 g4 b4 g4 d5 b4 d5 b4 g5 d5 g5 d5 b5 g5 b5", J: "g3 e4 b3 e4 e3 b3 g3 b3 b2 g3 e3 g3 e2 e3 b2 e3",
  K: "c3 f3 c3 f3 c3 a3 f3 a3 f3 c4 a3 c4 a3 f4 c4 f4", L: "c4 a4 e4 a4 e4 c5 a4 c5 a4 e5 c5 e5 c5 a5 e5 a5",
  M: "b3 g4 d4 g4 d4 b4 g4 b4 g4 d5 b4 d5 b4 g5 d5 g5", N: "g3 d4 b3 d4 d3 b3 g3 b3 b2 g3 d3 g3 g2 d3 b2 d3",
  O: "d3 a3 f3!2 d3 a3 f3 a3 f3 d4 a3 d4 a3 f4 d4 f4", P: "d4 a4 f4 a4 f4 d5 a4 d5 a4 f5 d5 f5 d5 a5 f5 a5",
  Q: "a4 f5 d5 f5 f4 d5 a4 d5 a4 f5 d5 f5 d5 a5 f5 a5", R: "a3 e4 c4 e4 e3 c4 a3 c4 c3 a3 e3 a3 e2 e3 c3 e3",
  S: "c3 e3 c3 e3 c3 a3 e3 a3 e3 c4 a3 c4 a3 e4 c4 e4",
})).s("gm_banjo").gain(0.28)

// chords · piano · "Honky-tonk Piano"
const piano = note(`<
  ~@61 A B C B C D E F G B C B C D E F H D I J D K I E L C L M E C L M N O C L M E C L M N ~@17 C L M E C L M N ~ C L M
  E C L M N ~ C L M E C L M N ~ C L M E C L M N ~@2
>`.pickRestart({
  A: "~@14 [g4,c5,e5]!2", B: "[g4,c5,f5]!4 ~@10 [g4,c5,f5]!2", C: "[g4,c5,e5]!4 ~@10 [g4,c5,e5]!2",
  D: "[a4,c5,e5]!4 ~@10 [a4,c5,e5]!2", E: "[a4,c5,f5]!4 ~@10 [a4,c5,f5]!2", F: "[b4,d5,f5]!4 ~@12",
  G: "~@14 [b4,d5,f5]!2", H: "~@14 [g4,b4,f5]!2", I: "[g4,b4,e5]!4 ~@10 [g4,b4,e5]!2",
  J: "[a4,c5,f5]!5 ~@9 [a4,c5,f5]!2", K: "[a4,c5,e5]!5 ~@9 [a4,c5,e5]!2", L: "[g4,b4,d5]!4 ~@10 [g4,b4,d5]!2",
  M: "[a4,d5,f5]!4 ~@10 [a4,d5,f5]!2", N: "[a4,c5,f5]!4 ~@12", O: "~@14 [a4,c5,f5]!2",
})).s("gm_piano").gain(0.4).pan(0.7)

// chords · piano · "Honky-tonk Piano" · soft notes
const piano_soft = note(`<
  ~@62 A B A B C D E ~ A B A B C D E ~ C F ~ C ~ F D G B G H D B G H D ~ B G H D B G H D ~@17 B G H D B G H D ~ B G H D
  B G H D ~ B G H D B G H D ~ B G H D B G H D ~@2
>`.pickRestart({
  A: "~@4 [g4,c5,f5] ~@11", B: "~@4 [g4,c5,e5] ~@11", C: "~@4 [a4,c5,e5] ~@11", D: "~@4 [a4,c5,f5] ~@11",
  E: "~@4 [b4,d5,f5] ~@11", F: "~@4 [g4,b4,e5] ~@11", G: "~@4 [g4,b4,d5] ~@11", H: "~@4 [a4,d5,f5] ~@11",
})).s("gm_piano").gain(0.25).pan(0.7)

// other · pad halo · "Pad 7 (halo)"
const pad_halo = note("<~@104 A@2 B C A@2 B C A@2 B C A@2 B D ~@37>".pickRestart({
  A: "~@2 c4 ~ e4 ~ c4 ~ b3 ~ c4 ~ e4 ~ a3 ~", B: "~@2 c4 ~ f4 ~ c4 ~ b3 ~ c4 ~ f4 ~ a3 ~",
  C: "~@2 c4 ~ f4 ~ c4 ~ b3 ~ c4 ~ e4 ~ a3 ~", D: "~@2 c4 ~ f4 ~ g3 ~ b3 ~ d4 ~ g4 ~ b4 ~",
})).s("gm_pad_halo").gain(0.8)

// bass · fretless bass
const bass = note(`<
  ~@8 A B A B A B A C D E D E F G H I D E D E F G H I J K L M@2 K G N O I P I O I P I@2 O I P I O I P I@2 D@5 E D E F G
  H I D E D E F G H I J K L M@2 K G N O I P I O I P I@2 O I P I O I P I@2 Q@12 R@3 S O I P I O I P I@2 O I P I O I P I@2
  O I P I O I P I@2 O I P I O I P I@2 ~
>`.pickRestart({
  A: "c2!3 ~ c2 ~ c2 ~ c2 ~ c2!2 ~ c2 ~ c2", B: "~ c2!2 ~ c2 ~ c2 ~ c2 ~ c2!2 ~ c2 ~ c2",
  C: "~ c2!2 ~ c2 ~ d#2 e2 f2 f#2 g2 g#2 a2 a#2 b2 c3", D: "c2@3 ~ c2@3 c2!3 c2@2 f2@2 g1@2",
  E: "c2@3 ~ c2@3 c2!3 c2@2 e2@2 g1@2", F: "a1@3 ~ a1@3 a1!3 a1@2 e2@2 g1@2", G: "f1@3 ~ f1@3 f1!3 f1@2 c2@2 f1@2",
  H: "g1@3 ~ g1@3 g1!3 g1@2 f2@2 c2@2", I: "g1@3 ~ g1@3 g1!3 g1@2 f2@2 g1@2", J: "a1@3 ~ a1@3 a1!3 a1@2 e2@2 e1@2",
  K: "e2@3 ~ e2@3 e2!3 e2@2 e2@2 a1@2", L: "f1@3 ~ f1@3 f1!3 f1@2 e2@2 f1@2", M: "a1@3 ~ a1@3 a1!3 a1@2 e2@2 a1@2",
  N: "g1@3 ~ g1@3 g1!3 g1@2 g1@2 g1@2", O: "c2@3 ~ c2@3 c2!3 c2@2 f2@2 d2@2", P: "d2@3 ~ d2@3 d2!3 d2@2 f2@2 d2@2",
  Q: "[a1@61 ~ g1@2]/4", R: "[a1@47 ~]/3", S: "g1!4",
})).s("gm_fretless_bass").gain(0.6)

// chords · pad poly · "Pad 3 (polysynth)"
const pad_poly = note(`<
  ~@32 A@2 B@2 A@2 C D E F G C E F G H@2 E F G C E F G H@2 ~@20 A@2 B@2 A@2 C D E F G C E F G H@2 E F G C E F G H@2 I@2
  J K I@2 J K I@2 J K I@2 J L E F G C E F G H@2 E F G C E F G H@2 E F G C E F G H@2 E F G C E F G H@2 ~
>`.pickRestart({
  A: "[[a3,c4] [g3,b3], e4]/2", B: "[f4 e4, [a3,c4]]/2", C: "[a3,c4,f4]", D: "[b3,d4,g4]", E: "[g3,c4,e4]",
  F: "[g3,b3,d4]", G: "[a3,d4,f4]", H: "[a3,c4,f4]/2", I: "~@2 c4 ~ e4 ~ c4 ~ b3 ~ c4 ~ e4 ~ a3 ~",
  J: "~@2 c4 ~ f4 ~ c4 ~ b3 ~ c4 ~ f4 ~ a3 ~", K: "~@2 c4 ~ f4 ~ c4 ~ b3 ~ c4 ~ e4 ~ a3 ~",
  L: "~@2 c4 ~ f4 ~ c4 ~ g3 ~ d4 ~ g4 ~ b4 ~",
})).s("gm_pad_poly").gain(0.42)

// chords · pad sweep · "Pad 8 (sweep)"
const pad_sweep = note(`<
  ~@43 A ~@3 B@2 ~@3 A ~@3 B@2 ~@31 A ~@3 B@2 ~@3 A ~@3 B@2 C@8 ~@11 A ~@3 B@2 ~@3 A ~@3 B@2 ~@3 A ~@3 B@2 ~@3 A ~@3 B@2
  ~
>`.pickRestart({
  A: "[a4,c5,f5]", B: "[a4,c5,f5]/2", C: "a1/8",
})).s("gm_pad_sweep").gain(0.78)

// other · pad new age · "Pad 1 (new age)"
const pad_new_age = note(`<
  ~@40 A@3 ~ B@2 C ~@2 A@3 ~ B@2 C ~@30 D@3 ~@4 E F ~@4 G@2 ~ E F H I ~@2 H I ~@2 H I ~ J K L M N O P Q@2 R S T@3 O P
  Q@2 R S T@3 ~@4 U S T@3 O P Q@2 R S T@3 ~
>`.pickRestart({
  A: "[c5@5 ~ c5 ~ c5 ~ c5@3 ~ b4@7 ~ b4 ~ b4 ~ b4@3 ~ a4@6 ~@12]/3", B: "[~@12 c5 ~ b4@4 g4 ~ g4@7 ~ d4@2 g4@2]/2",
  C: "~@2 a4@4 f4@9 ~", D: "[c6@5 ~ c6 ~ c6 ~ c6@3 ~ b5@7 ~ b5 ~ b5 ~ b5@3 ~ a5@7 ~@11]/3",
  E: "~@6 a5 ~ c6@2 a5@3 ~ g5@2", F: "~@2 f5@3 ~ e5@4 f5 ~ g5@3 ~", G: "[~@12 c6 ~ b5@4 g5@2 g5@6 ~@6]/2",
  H: "~@2 c5 ~ c5 ~ e5@3 ~ d5 ~ c5 ~ e5@2", I: "~@2 d5 ~ c5 ~ e5@3 ~@7", J: "~@6 e5 ~ d5 ~ e5@3 ~ e5@2",
  K: "~@2 f5@3 ~@11", L: "~@6 e5@7 ~ f5 ~", M: "e5@13 ~ f5 ~", N: "e5@5 ~ d5 ~ c5@7 ~", O: "~ c6", P: "b5 g5",
  Q: "[a5@23 ~ b5@8]/2", R: "c6@11 ~ c6@4", S: "b5@8 g5@7 ~", T: "[a5@47 ~]/3", U: "~@3 c6",
})).s("gm_pad_new_age").gain(0.4).pan(0.3)

// other · pad new age · "Pad 1 (new age)" · soft notes
const pad_new_age_soft = note("<~@105 [~@10 d5 ~ c5 ~ e5@2] ~@3 [~@10 d5 ~ c5 ~ e5@2] ~@3 [~@10 d5 ~ c5 ~ e5@2] ~@43>")
  .s("gm_pad_new_age").gain(0.2).pan(0.3)

// chords · pad warm · "Pad 2 (warm)"
const pad_warm = note("<~@104 A@8 B@2 C D B@2 C E ~@37>".pickRestart({
  A: "[e5@2 g5 f5 e5@2 g5 f5, [a4,c5]]/8", B: "e5/2", C: "g5", D: "f5", E: "[b4,d5,g5]",
})).s("gm_pad_warm").gain(0.54)

// other · synth strings 1 · "SynthStrings 1"
const synth_strings_1 = note("<~@47 A@3 ~@7 A@3 ~@8 B@8 ~@18 A@3 ~@31 A@3 ~@6 A@3 ~@6 A@3 ~@8>".pickRestart({
  A: "g5/3", B: "[~ g5@31]/8",
})).s("gm_synth_strings_1").gain(0.15)

// drums · kick
const kick = s("bd").struct("<[x!4]!104 ~@15 [x!4]!37 ~>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@8 [~ x ~ x]!96 ~@16 [~ x ~ x]!36 ~>").gain(0.5)

// drums · low tom
const low_tom = s("lt").struct("<~@39 A ~@8 A ~@36 A ~@8 A ~@24 A ~@8 A ~@8 A ~@8 A ~@10>".pickRestart({
  A: "~@6 x!2",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<~@40 [x!16]!18 ~@28 [x!16]!18 ~@16 [x!16]!36 ~>").gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@39 A ~@8 A ~@36 A ~@8 A ~@24 A ~@8 A ~@8 A ~@8 A ~@10>".pickRestart({
  A: "~@8 x!4 ~@4",
})).gain(0.5)

// drums · open hat
const open_hat = s("oh").struct("<~@8 [~ x ~ x ~ x ~ x]!96 ~@16 [~ x ~ x ~ x ~ x]!36 ~>").gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<~@39 A ~@8 A ~@36 A ~@8 A ~@24 A ~@8 A ~@8 A ~@8 A ~@10>".pickRestart({
  A: "~@5 x!3 ~@8",
})).gain(0.5)

// drums · cowbell
const cowbell = s("cb").struct("<[~@3 x ~ x ~@2]!104 ~@16 [~@3 x ~ x ~@2]!36 ~>").gain(0.45)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct("<[x ~ x!2 ~@10 x ~] [~@2 x!2 ~@10 x ~]!103 ~@16 [~@2 x!2 ~@10 x ~]!36 ~>")
  .gain(2.85)

stack(
  ocarina, distortion_guitar, lead_2_sawtooth, electric_guitar_clean, banjo, piano, piano_soft, pad_halo, bass,
  pad_poly, pad_sweep, pad_new_age, pad_new_age_soft, pad_warm, synth_strings_1, kick, snare, low_tom, hihat, mid_tom,
  open_hat, high_tom, cowbell, agogo_bells
)

More by Erasure