Strudelify

Closer

The Corrs

KeyE majorTempo75 bpm
0:00/0:00
// Closer — The Corrs
// 75 bpm, 6/8, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 109 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(75/3)

// 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 · "Piano (right hand)"
const piano = note(`<
  A B C@2 D E F E G B D E H I@2 J K@5 L@2 M D E F E G B D E H I@2 J K@5 L@2 M N O P Q R S T U D E F E G B D E H I@2 J
  K@5 L@2 M V@6 P Q R S T U N O P Q R S T U N O P Q R S T U N O P Q R S T U ~
>`.pickRestart({
  A: "~@5 g#4 ~@5 d#4, e3!2, b3 g#4 e4 d#4!2 e4, ~ e4@2 b3@3 ~ e4@2 b3@3",
  B: "~@5 g#4 ~@5 g#4, c#3!2, b3@2 g#4@2 d#4@2 ~ d#4@2 b3@3, ~ d#4@2 b3@3 b3@2 g#4@2 d#4@2",
  C: "[~@17 g#4 ~@5 g#4, e3@5 g#4@7 b3 d#4 g#4 b3 d#4@2 b3@3 b3@3, b3@2 g#4@2 e4@2 e3@12 ~@2 g#4@3 ~, ~ e4@2 b3@5 d#4@2 e4@8 ~ d#4@3 d#4@2, ~@6 d#4 e4@2 b3@2 d#4 c#3@6 c#3@6]/2",
  D: "~@5 g#4 ~@4 e4 g#4, e3!2, b3@4 g#4@4 e4@4 ~@2 e4@4 b3@5 ~, ~ e4@2 b3@3 b3@2 g#4@3 ~",
  E: "~@4 d#4 g#4 ~@5 g#4, c#3@11 ~ c#3@12, b3@2 g#4@3 ~@2 d#4@2 b3@3, ~@2 d#4@4 b3@5 ~ b3@4 g#4@4 d#4@4",
  F: "~@4 e4 g#4 ~@5 g#4, e3@11 ~ e3@12, b3@2 g#4@3 ~@2 e4@2 b3@3, ~@2 e4@4 b3@5 ~ b3@4 g#4@4 e4@4",
  G: "~@4 e4 g#4 ~@4 e4 g#4, e3!2, b3@2 g#4@3 ~@2 e4@2 b3@2 ~, ~@2 e4@4 b3@5 ~ b3@4 g#4@6 ~@2",
  H: "a3 c#4 e4 a3 c#4 e4 ~@4 c#4 e4, a2@10 ~@2 a2@11 ~, ~@6 a3@2 e4@3 ~, ~@14 c#4@4 a3@5 ~",
  I: "[~@4 c#4 ~@5 c#4 ~@4 a3 c#4 ~@5 c#4 e4, a2@11 ~ a2@11 ~ a2@11 ~ a2@12, a3@4 e4@6 e4@4 c#4@4 a3@5 ~ a3@4 e4@5 ~ e4@4 c#4@4 a3@5 ~, ~@2 c#4@4 a3@5 ~ a3@4 e4@6 e4@4 c#4@6 ~@4 a3@4 e4@6 ~@2]/2",
  J: "~@5 f#4 ~@5 f#4, b2!2, b3@2 f#4@2 d#4@2 ~ d#4@2 b3@3, ~ d#4@2 b3@3 b3@2 f#4@2 d#4@2",
  K: "[~@5 g#4 ~@11 g#4 a3 c#4 e4 a3 c#4 ~@5 e4 ~@5 e4 ~@5 d#4 g#4 ~@4 c#4 ~@5 e4 ~@5 e4 g#4, e3@12 e3@20 d#4@4 ~@12 b3@4 g#4@6 g#4@6 g#4@6 g#4@4 d#4@4 b3@5 ~ a3@6 a3@5 ~ e3@11 ~ e3@12, b3@4 g#4@4 e4@4 ~@2 e4@4 b3@4 g#4@2 b3@2 d#4@2 g#4@2 b3@6 ~@12 e3@11 ~ e3@23 ~@5 e4@6 e4@4 e4@4 b3@5 ~ b3@6 b3@5 ~, ~@2 e4@4 b3@6 b3@4 g#4@4 e4@16 ~@10 e4@4 e4@4 b3@5 ~ b3@6 b3@5 ~ c#3@12 a2@23 ~@3 e4@6 ~@4, ~@24 c#3@12 a2@23 ~@3 e4@6 ~@4 b3@4 g#4@6 ~@4 c#4@6 ~@4 b3@4 g#4@6 g#4@6 g#4@6 ~@2]/5",
  L: "[~@4 d#4 g#4 ~@4 c#4 ~@5 e4 ~@5 e4 g#4, c#3@12 a2@23 ~@3 e4@6 ~@4, b3@4 g#4@6 ~@4 c#4@4 a3@5 ~ e3@11 ~ e3@12, ~@2 d#4@4 b3@5 ~ a3@4 e4@6 e4@4 e4@4 b3@5 ~ b3@6 b3@5 ~, ~@12 b3@2 g#4@3 g#4@3 g#4@3 ~]/2",
  M: "~@4 d#4 g#4 ~@4 c#4 e4, c#3@12 a2@11 ~, b3@4 g#4@6 ~@4 c#4@4 a3@5 ~, ~@2 d#4@4 b3@5 ~ a3@4 e4@6 ~@2",
  N: "~@2 g#5 a5 g#5 ~ b4@4 ~ c#5, e4, b4@5 e5@7, ~@5 b4", O: "[b4,d5]@3 ~@7 a4@2, [b3,d4,f#4], ~ c#5@3, ~ b4",
  P: "g#4@2 ~ g#4 ~@2 f4@6, [c#3,f3,g#3,c#4], ~ g#4@2, ~@5 f#4@7", Q: "~ c#3, [f3,g#3,c#4]",
  R: "~@2 g#5 a5 g#5 ~ b4@3 b4 ~ c#5, e4, b4@5 e5@7, ~@5 b4",
  S: "[b4,d5]@3 ~@3 b4@3 b4 ~ a4, [b3,d4,f#4], ~ c#5@3, ~@5 b4", // Bm
  T: "g#4@3 g#4!2 ~ f4@3 f4 ~ d#4, [f3,g#3,c#4], ~@5 f#4@7, ~@5 f4", U: "[f3,g#3,c#4]@3 c#3@2 ~",
  V: "[~@5 g#4 ~@11 g#4 a3 c#4 e4 a3 c#4 ~@5 e4 ~@5 e4 ~@5 d#4 g#4 ~@4 c#4 e4 ~@6 b4@4 ~ c#5 [b4,d5]@3 ~@7 a4@2, e3@12 e3@20 d#4@4 ~@12 b3@4 g#4@6 g#4@6 g#4@6 g#4@4 d#4@4 b3@5 ~ a3@6 a3@5 ~@5 g#5@2 a5@4 e5@10 b4@4 [b3,d4,f#4]@24, ~@2 e4@4 b3@6 b3@4 g#4@4 e4@16 ~@10 e4@4 e4@4 b3@5 ~ b3@6 b3@5 ~ c#3@12 a2@37 ~@23, ~@4 g#4@4 e4@4 ~@2 e4@4 b3@4 g#4@2 b3@2 d#4@2 g#4@2 b3@6 ~@12 e3@11 ~ e3@23 ~@5 e4@6 ~@2 e4@25 ~@11 b4@12, ~@24 c#3@12 a2@23 ~@3 e4@6 ~@4 b3@4 g#4@6 ~@4 c#4@6 ~@4 b4@8 g#5@17 ~@5 c#5@18]/6", // Bm
})).s("gm_piano").gain(0.35)

// chords · string ensemble 1 · "Upper strings"
const string_ensemble_1 = note(`<
  ~@24 A B A B C B C B D@3 E C F A F A G C G H I J@2 H I J@2 ~@12 A G A F A G C K C G C G C L J@2 A L J@2 C L J@2 A L
  J@2 C L J@2 A L J@2 C L J@2 A L M@3
>`.pickRestart({
  A: "[b3,e4,g#4]", B: "[b3,d#4,g#4]", C: "[b3,e4,g#4]@23 ~", D: "[[a3,c#4,e4]@8 ~]/3", E: "[b3,d#4,f#4]",
  F: "[b3,d#4,g#4]@3 [a3,c#4,e4]@2 ~", G: "[b3,d#4,g#4] [a3,c#4,e4]", H: "[e4,g#4,b4]", I: "[b3,d4,f#4]@23 ~",
  J: "[c#4,f4,g#4]/2", K: "[b3,d#4,g#4]@12 [a3,c#4,e4]@11 ~", L: "[b3,d4,f#4]", M: "[[c#4,f4,g#4]@5 ~]/3",
})).s("gm_string_ensemble_1").gain(0.22)

// other · string ensemble 1 · "Lower strings"
const string_ensemble_1_2 = note(`<
  ~@24 A B A B A B A C D@2 E F A G A G A G A G A F H@2 A F B I ~@12 A G A G A G A G A G A G A F H@2 A F B I A F H@2 A F
  B I A F H@2 A F B I A F H@2 A F B I ~
>`.pickRestart({
  A: "e3", B: "c#3", C: "c#3@5 b2", D: "[a2@11 ~]/2", E: "a2", F: "b2", G: "c#3 a2", H: "c#3/2", I: "f3 c#3",
})).s("gm_string_ensemble_1").gain(0.28)

// other · electric guitar clean · "Clean guitar"
const electric_guitar_clean = note("<~@36 A B A B A B A C ~@20 A B A B A B A C A B A B ~@33>".pickRestart({
  A: "~@3 b4@3 a4@4 g#4@2", B: "f#4 e4", C: "f#4@2 e4 ~",
})).s("gm_electric_guitar_clean").gain(0.36)

// other · overdriven guitar
const overdriven_guitar = note("<~@91 A B C D@2 E F G@2 H F I@2 J K L ~@2>".pickRestart({
  A: "f4 f#4 f4 d#4 f4 d#4 f4@6", B: "~ e3 b3!2 b3@2 b3@2 e4 ~ e4@2", C: "f#4 e4 d4 ~",
  D: "[f4 f#4 f4 d#4@3 c#4@10 ~@8]/2", E: "~ e3 g#3 b3!2 ~ b3@2 e4@2 e4@2", F: "f#4@3 e4@3 d4@4 ~@2",
  G: "[f4 f#4 f4 d#4 f4 d#4 c#4@12 ~@6]/2", H: "~@4 b3@2 e4@3 ~ e4@2", I: "[f4 f#4 f4 d#4@3 c#4@16 ~@2]/2",
  J: "~@2 g#3 ~@3 b3@2 e4@2 e4@2", K: "f#4@3 ~@3 d4@4 ~@2", L: "f4 ~@11",
})).s("gm_overdriven_guitar").gain(0.36)

// other · overdriven guitar · soft notes
const overdriven_guitar_soft = note("<~@104 [~ e3 ~ b3!2 ~@7] [~ e4 ~@2] [~ f#4 f4 d#4@3 c#4@6] ~@2>")
  .s("gm_overdriven_guitar").gain(0.15)

// drums · kick
const kick = s("bd").struct(`<
  ~@36 A B A B A@3 B A@3 B A B A B ~@12 A@3 B A@2 B@2 A@3 B C A@2 B A@26 B ~@2
>`.pickRestart({
  A: "x ~@4 x", B: "x", C: "~@5 x",
})).gain(0.25)

// drums · snare
const snare = s("sd").struct("<~@36 A@7 B A@7 ~@13 A@7 B A@3 B C A@30 ~@2>".pickRestart({
  A: "~ x", B: "~@6 x ~@3 x!2", C: "x!2",
})).gain(0.29)

// drums · low tom
const low_tom = s("lt").struct("<~@63 [~@5 x] ~@45>").gain(0.29)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@36 A@15 B ~@12 A@12 C A@23 C@3 D E ~@4>".pickRestart({
  A: "x!6", B: "x!5 ~", C: "~ x!5", D: "~@2 x!4", E: "~@5 x",
})).gain(0.25)

// drums · pedal hat · soft notes
const pedal_hat_soft = s("hh").struct("<~@100 x!3 [x!2 ~@4] [x!5 ~] [x!6]!3 ~>").gain(0.11)

// drums · mid tom
const mid_tom = s("mt").struct("<~@35 [~@11 x] ~@27 [~@8 x!2 ~@2] ~@45>").gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<~@51 [~@5 x] ~@57>").gain(0.22)

// drums · high tom
const high_tom = s("ht").struct("<~@35 [~@5 x] ~@27 [~ x] ~@12 x ~@32>").gain(0.25)

// drums · congas
const congas = s("conga:13").struct("<~@24 A B A B A B A B A B A B ~@73>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~@3 x ~", B: "x ~ x!2 ~ x!2 ~ x ~ x ~",
})).gain(0.8)

stack(
  piano, string_ensemble_1, string_ensemble_1_2, electric_guitar_clean, overdriven_guitar, overdriven_guitar_soft, kick,
  snare, low_tom, pedal_hat, pedal_hat_soft, mid_tom, open_hat, high_tom, congas
)

More by The Corrs