Strudelify

(They Long to Be) Close to You

The Cranberries

KeyG majorTempo97 bpm
0:00/0:00
// (They Long to Be) Close to You — The Cranberries
// 97 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 67 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(97/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 · pad poly
const pad_poly = note(`<
  A B C@3 D E F A G C@3 D E F ~ H@2 I@2 J K L ~ A M@4 D E F ~ D E F ~ D E F N@2 O F N@2 O F P@2 Q F P@2 Q F P@2 Q ~@7
>`.pickRestart({
  A: "~@12 e4@5 ~ g4@5 ~", B: "d5@10 ~@2 d5@3 ~ c5@2 d5@3 ~ e5@2",
  C: "[b4@10 ~@6 b4@2 d5@3 ~ f#5@10 ~@8 b4@2 d5@3 ~ g5@12 ~@14]/3", D: "e4@3 ~ g4@5 ~ d5@7 ~@7",
  E: "e4@3 ~ g4@5 ~ e5@2 d5@5 ~@7", F: "f#5@3 ~ d5@5 ~ b4@13 ~", G: "d5@10 ~@2 d5@3 ~ c5@4 d5@2 e5@2",
  H: "[g4@3 ~ g4@2 a4@3 ~ g4@2 b4@3 ~ b4@2 a4@3 ~ g4@5 ~ g4@2 a4@3 ~ g4@2 b4@3 ~ b4@2 ~@2 b4@2 b4@2]/2",
  I: "[d5@3 ~ d5@2 d5@3 ~ e5@2 f#5@3 ~ f#5@2 e5@3 ~ d5@5 ~ f#5@12 ~@2 e5@3 ~ f#5@2]/2",
  J: "g5@3 ~ g5@2 g5@3 ~ g5@2 g5@3 ~ g5@2 g5@3 ~ g5@2", K: "g5@3 ~ g5@2 g5@3 ~ g5@2 f#5@2 e5@2 f#5@4 g5@3 ~",
  L: "a5@3 ~ a5@7 ~@13",
  M: "[d5@10 ~@2 d5@3 ~ c5@2 d5@3 ~ e5@5 ~ b4@7 ~@5 b4@2 d5@3 ~ f#5@10 ~@8 b4@2 d5@3 ~ g5@12 ~@14]/4",
  N: "[~@11 g5@8 ~@2 f#5 g5 f#5]/2", O: "e5@23 ~", P: "[~@22 g5@7 ~ f#5@3 ~ e5@2 g5@11 ~]/2",
  Q: "g5@5 ~ f#5@3 ~ e5@2 g5@11 ~",
})).s("gm_pad_poly").gain(0.48)

// other · pad poly · soft notes
const pad_poly_soft = note("<~@60 A B@2 C A ~@2>".pickRestart({
  A: "f#5@3 ~ d5@5 ~ b4@13 ~", B: "[~@22 g5@7 ~ f#5@3 ~ e5@2 g5@11 ~]/2", C: "g5@5 ~ f#5@3 ~ e5@2 g5@11 ~",
})).s("gm_pad_poly").gain(0.24)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~ A B C D E F G H I J K L M N O H P Q R S T U V@3 I J K L M N O W M N O W M N O X@2 N O X@2 N O Y@2 Z AA AB@2 Z AA
  AB@2 AC ~@7
>`.pickRestart({
  A: "[e3,g3,c4,d4]@3 [e3,g3,c4,d4]@3 [e3,g3,c4,d4]@2 [e3,g3,c4] [e3,g3,c4,d4]@2 [e3,g3,c4,d4]", // C
  B: "[d3,f#3,b3,d4]@2 [d3,f#3,b3,d4] [d3,f#3,b3,d4]@2 [d3,f#3,b3,f#4]@3 [d3,f#3,b3,d4] [d3,f#3,b3,d4]@2 [d3,f#3,b3,d4]", // Bm
  C: "[f#3,b3,d4,f#4]@3 [f#3,b3,d4,f#4]@3 [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4] [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]", // Bm
  D: "[g3,b3,d4,g4]@2 [f#3,b3,d4,f#4]@3 [e3,g3,b3,e4]@3 [f#3,b3,d4,f#4] [e3,g3,b3,e4]@3", // G Bm Em Bm Em
  E: "[c3,e3,g3,d4]@3 [c3,e3,g3,d4]@2 [c3,e3,g3,d4] [c3,e3,g3,d4]@3 [c3,e3,g3,d4]@2 [c3,e3,g3,d4]", // C
  F: "[d3,e3,g3,d4]@3 [d3,e3,g3,d4]@2 [d3,e3,g3,d4] [d3,e3,g3,d4]@3 [d3,e3,g3,d4]@2 [d3,e3,g3,d4]", // Em7
  G: "[d3,f#3,b3,d4,f#4]@3 [d3,f#3,b3,d4,f#4]@2 [d3,f#3,b3,d4,f#4] [d3,f#3,b3,d4,f#4]@3 [d3,f#3,b3,d4,f#4]@2 [d3,f#3,b3,d4,f#4]", // Bm
  H: "~ [d4,g4]@11, ~ [d3,g3,b3]@23", // G5 G
  I: "[e3,g3,c4,d4]@6 [e3,g3,c4,d4]@5 ~ [e3,g3,c4,d4]@3 ~ [e3,g3,c4]@2 [e3,g3,c4,d4]@3 ~ [e3,g3,c4,d4]@2", // C
  J: "[d3,f#3,b3,d4]@3 ~ [d3,f#3,b3,d4]@2 [d3,f#3,b3,d4]@3 ~ [d3,f#3,b3,f#4]@5 ~ [d3,f#3,b3,d4]@2 [d3,f#3,b3,d4]@3 ~ [d3,f#3,b3,d4]@2", // Bm
  K: "[f#3,b3,d4,f#4]@6 [f#3,b3,d4,f#4]@5 ~ [f#3,b3,d4,f#4]@3 ~ [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@3 ~ [f#3,b3,d4,f#4]@2", // Bm
  L: "[g3,b3,d4,g4]@3 ~ [f#3,b3,d4,f#4]@5 ~ [e3,g3,b3,e4]@5 ~ [f#3,b3,d4,f#4]@2 [e3,g3,b3,e4]@5 ~", // G Bm Em Bm Em
  M: "[c3,e3,g3,d4]@6 [c3,e3,g3,d4]@3 ~ [c3,e3,g3,d4]@2 [c3,e3,g3,d4]@5 ~ [c3,e3,g3,d4]@3 ~ [c3,e3,g3,d4]@2", // C
  N: "[d3,e3,g3,d4]@6 [d3,e3,g3,d4]@3 ~ [d3,e3,g3,d4]@2 [d3,e3,g3,d4]@5 ~ [d3,e3,g3,d4]@3 ~ [d3,e3,g3,d4]@2", // Em7
  O: "[d3,f#3,b3,d4,f#4]@6 [d3,f#3,b3,d4,f#4]@3 ~ [d3,f#3,b3,d4,f#4]@2 [d3,f#3,b3,d4,f#4]@5 ~ [d3,f#3,b3,d4,f#4]@3 ~ [d3,f#3,b3,d4,f#4]@2", // Bm
  P: "[e3,g3,c4]@6 [e3,g3,c4]@5 ~ [d3,f#3,b3]@3 ~ [d3,f#3,b3]@2 [d3,f#3,b3]@3 ~ [d3,f#3,b3]@2", // C Bm
  Q: "[e3,g3,c4]@6 [e3,g3,c4]@3 ~ [e3,g3,c4]@2 [d3,f#3,b3]@5 ~ [d3,f#3,b3]@3 ~ [d3,f#3,b3]@2", // C Bm
  R: "[d3,f#3,b3,d4]@6 [d3,f#3,b3,d4]@5 ~ [e3,g3,b3,d4]@3 ~ [e3,g3,b3,d4]@2 [e3,g3,b3,d4]@3 ~ [e3,g3,b3,d4]@2", // Bm Em7
  S: "[d3,f#3,b3,d4]@6 [d3,f#3,b3,d4]@5 ~ [d3,f#3,b3,d4]@3 ~ [d3,f#3,b3,d4]@2 [d3,f#3,b3,d4]@3 ~ [d3,f#3,b3,d4]@2", // Bm
  T: "[g3,c4,e4]@5 ~ [g3,c4,e4]@5 ~ [g3,b3,e4]@3 ~ [g3,b3,e4]@2 [g3,b3,e4]@3 ~ [g3,b3,e4]@2", // C Em
  U: "[g3,c4,e4]@5 ~ [g3,c4,e4]@3 ~ [g3,c4,e4]@2 [g3,b3,e4]@5 ~ [g3,b3,e4]@3 ~ [g3,b3,e4]@2", // C Em
  V: "[~ f#4@35, [d3,f#3]@71 ~, ~ [a3,d4]@71]/3", // D D5
  W: "[d3,g3,b3,d4]@6 [d3,g3,b3,d4]@3 ~ [d3,g3,b3,d4]@2 [d3,g3,b3,d4]@3 ~ [d3,g3,b3,d4]@2 [d3,g3,b3,d4]@3 ~ [d3,g3,b3,d4]@2", // G
  X: "[[d3,g3,b3,d4]@6 [d3,g3,b3,d4]@3 ~ [d3,g3,b3,d4]@2 [d3,g3,b3,d4]@3 ~ [d3,g3,b3,d4]@2 [d3,g3,b3,d4]@3 ~ [c3,e3,g3,d4]@8 [c3,e3,g3,d4]@3 ~ [c3,e3,g3,d4]@2 [c3,e3,g3,d4]@5 ~ [c3,e3,g3,d4]@3 ~ [c3,e3,g3,d4]@2]/2", // G C
  Y: "[[d3,g3,b3,d4]@6 [d3,g3,b3,d4]@3 ~ [d3,g3,b3,d4]@2 [d3,g3,b3,d4]@3 ~ [d3,g3,b3,d4]@2 [d3,g3,b3,d4]@3 ~ [c3,e3,g3,c4,d4]@8 [c3,e3,g3,c4,d4]@3 ~ [c3,e3,g3,c4,d4]@2 [b2,e3,g3,b3,d4]@5 ~ [b2,e3,g3,b3,d4]@3 ~ [b2,e3,g3,b3,d4]@2]/2", // G C Em7
  Z: "[c3,e3,g3,c4,d4]@5 ~ [c3,e3,g3,c4,d4]@3 ~ [c3,e3,g3,c4,d4]@2 [b2,e3,g3,b3,d4]@5 ~ [b2,e3,g3,b3,d4]@3 ~ [b2,e3,g3,b3,d4]@2", // C Em7
  AA: "[d3,f#3,b3,d4]@6 [d3,f#3,b3,d4]@3 ~ [d3,f#3,b3,d4]@2 [d3,f#3,b3,d4]@5 ~ [d3,f#3,b3,d4]@3 ~ [d3,f#3,b3,d4]@2", // Bm
  AB: "[[d3,g3,b3,d4]@6 [d3,g3,b3,d4]@3 ~ [d3,g3,b3,d4]@2 [d3,g3,b3,d4]@3 ~ [d3,g3,b3,d4]@2 [d3,g3,b3,d4]@3 ~ [c3,e3,g3]@2 ~@6 [c3,e3,g3,c4,d4]@3 ~ [c3,e3,g3,c4,d4]@2 [b2,e3,g3,b3,d4]@5 ~ [b2,e3,g3,b3,d4]@3 ~ [b2,e3,g3,b3,d4]@2, ~@11 [c4,d4]@4 ~@9]/2", // G C Em7 Csus2
  AC: "[c3,e3,g3,c4,d4]@5 ~ [c3,e3,g3,c4,d4]@3 ~ [c3,e3,g3,c4,d4]@2 [b2,e3,g3,b3,d4]@5 ~ [b2,e3,g3,b3,d4]@3 ~@3", // C Em7
})).s("gm_acoustic_guitar_nylon").gain(0.29)

// chords · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_2 = note("<~@59 A B C@2 D B E@2>".pickRestart({
  A: "~@11 [b2,e3,g3,b3,d4]", // Em7
  B: "[d3,f#3,b3,d4]@6 [d3,f#3,b3,d4]@3 ~ [d3,f#3,b3,d4]@2 [d3,f#3,b3,d4]@5 ~ [d3,f#3,b3,d4]@3 ~ [d3,f#3,b3,d4]@2", // Bm
  C: "[[d3,g3,b3,d4]@6 [d3,g3,b3,d4]@3 ~ [d3,g3,b3,d4]@2 [d3,g3,b3,d4]@3 ~ [d3,g3,b3,d4]@2 [d3,g3,b3,d4]@3 ~ [c3,e3,g3]@2 ~@6 [c3,e3,g3,c4,d4]@3 ~ [c3,e3,g3,c4,d4]@2 [b2,e3,g3,b3,d4]@5 ~ [b2,e3,g3,b3,d4]@3 ~ [b2,e3,g3,b3,d4]@2, ~@11 [c4,d4]@4 ~@9]/2", // G C Em7 Csus2
  D: "[c3,e3,g3,c4,d4]@5 ~ [c3,e3,g3,c4,d4]@3 ~ [c3,e3,g3,c4,d4]@2 [b2,e3,g3,b3,d4]@5 ~ [b2,e3,g3,b3,d4]@3 ~ [b2,e3,g3,b3,d4]@2", // C Em7
  E: "[[d3,g3,b3,d4]@6 [d3,g3,b3,d4]@3 ~ [d3,g3,b3,d4]@2 [d3,g3,b3,d4]@3 ~ [d3,g3,b3,d4]@2 [d3,g3,b3]@3 ~ [c3,e3,g3,c4]@21 ~@5, ~@18 d4@25 ~@5]/2", // G C
})).s("gm_acoustic_guitar_nylon").gain(0.1)

// other · harmonica
const harmonica = note("<~@9 A B C D E F G@2 ~@13 E F G@2 E F G@2 E F H@3 F H@3 F H@3 F H@3 F H@3 F ~@7>".pickRestart({
  A: "d5", B: "b4", C: "f#5", D: "g5@2 f#5@3 e5@7", E: "b4@3 d5", F: "b4@3 e5", G: "[d5@3 ~]/2",
  H: "[d5@18 ~@5 b4@10 d5@3]/3",
})).s("gm_harmonica").gain(0.09)

// other · harmonica · soft notes
const harmonica_soft = note("<~@60 A@3 B C@2 ~>".pickRestart({
  A: "[d5@18 ~@5 b4@10 d5@3]/3", B: "b4@3 e5", C: "[d5@3 ~]/2",
})).s("gm_harmonica").gain(0.03)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@9 A B@2 C A D B E F@2 G B F@2 ~@3 A B@2 C A D B H A D B H A D B H A D B H A D B H I@2 J B I@2 J B I@2 ~@7
>`.pickRestart({
  A: "[c4,e4,g4]", B: "[b3,d4,f#4]", C: "[b3,d4,g4]@2 [d4,f#4,a4]@3 [e4,g4,b4]@7", D: "[d4,e4,g4]", E: "[b3,d4,g4] ~",
  F: "[c4,e4,g4] [b3,d4,f#4]", G: "[b3,d4,f#4] [g3,b3,e4]", H: "[b3,d4,g4]@23 ~", I: "[c4,e4,g4] [b3,d4,g4]",
  J: "[b3,d4,f#4] [b3,e4,f#4]", // Bm Bsus4
})).s("gm_string_ensemble_1").gain(0.03)

// chords · string ensemble 1 · soft notes · Bm Bsus4 Bm C G Bm Bsus4 Bm
const string_ensemble_1_soft = note(`<
  ~@60
  [[b3,d4,f#4] [b3,e4,f#4]]
  [[b3,d4,f#4]]
  [[c4,e4,g4] [b3,d4,g4]]!2
  [[b3,d4,f#4] [b3,e4,f#4]]
  [[b3,d4,f#4]]
  ~
>`).s("gm_string_ensemble_1").gain(0.02)

// bass · acoustic bass
const bass = note(`<
  ~@9 A B@2 C A@2 D E A@2 B F A@2 G@3 A B@2 C A@2 D@2 A@2 D@2 A@2 D H@2 A D H@2 A D H@2 A D H@2 A D H@2 I ~@7
>`.pickRestart({
  A: "c2@9 ~ c2@2 g2@9 ~ g2@2", B: "b1@9 ~ b1@2 f#2@9 ~ f#2@2", C: "g2@3 ~ f#2@5 ~ e2@5 ~ f#2@2 e2@5 ~",
  D: "g1@9 ~ g1@2 d2@9 ~ d2@2", E: "g1@19 ~@5", F: "d2@9 ~ d2@2 d2@9 ~ d2@2", G: "[d2@67 ~@5]/3",
  H: "[g1@9 ~ g1@2 d2@3 ~ b1@6 c2@11 ~ c2@2 g2@9 ~ g2@2]/2", I: "c2@9 ~ c2@2 g2@9 ~@3",
})).s("gm_acoustic_bass").gain(0.48)

// bass · acoustic bass · soft notes
const bass_soft = note("<~@59 A B C@2 D B E@2>".pickRestart({
  A: "~@11 g2", B: "g1@9 ~ g1@2 d2@9 ~ d2@2", C: "[g1@9 ~ g1@2 d2@3 ~ b1@6 c2@11 ~ c2@2 g2@9 ~ g2@2]/2",
  D: "c2@9 ~ c2@2 g2@9 ~ g2@2", E: "[g1@9 ~ g1@2 d2@3 ~ b1@6 c2@25 ~]/2",
})).s("gm_acoustic_bass").gain(0.16)

// drums · kick
const kick = s("bd").struct("<~@9 A@15 ~@2 A@16 B A B A@5 B A B A B A B A B A ~@7>".pickRestart({
  A: "x", B: "x ~@10 x",
})).gain(0.1)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@60 [x ~@10 x] x [x ~@10 x] x [x ~@10 x]!2 ~>").gain(0.03)

// drums · rim
const rim = s("rim").struct(`<
  ~@9 A@3 B A@3 ~ A B A C A@2 ~@3 A@3 B A@3 D A@9 B A E A@5 B A E A B A@2 ~@9
>`.pickRestart({
  A: "~ x", B: "~@3 x!2 ~", C: "~@6 x ~ x ~ x!2", D: "~ x ~ x", E: "~@3 x",
})).gain(0.14)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@33 A ~@11 A ~@7 A ~@4 B C B D B C B D ~>".pickRestart({
  A: "~@6 x!3 ~@3", B: "~ x", C: "~@3 x!2 ~", D: "~@6 x!4 ~@2",
})).gain(0.05)

// drums · snare
const snare = s("sd").struct("<~@45 [~@6 x!4 ~@2] ~@7 [~@6 x!4 ~@2] ~@7 [~@6 x!4 ~@2] ~@5>").gain(0.07)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@65 [~@6 x!4 ~@2] ~>").gain(0.02)

// drums · low tom
const low_tom = s("lt").struct("<~@37 A ~@3 A ~@7 A ~@7 A ~@9>".pickRestart({
  A: "~@3 x",
})).gain(0.1)

// drums · mid tom
const mid_tom = s("mt").struct("<~@37 A ~@3 A ~@7 A ~@7 A ~@9>".pickRestart({
  A: "~@2 x",
})).gain(0.1)

// drums · china
const china = s("cr").struct("<~@23 A ~@17 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~>".pickRestart({
  A: "x", B: "~@11 x",
})).gain(0.1)

// drums · tambourine
const tambourine = s("tb").struct("<~@42 A B A ~ A@5 B A ~ A B A@3 B ~@7>".pickRestart({
  A: "~ x", B: "~@3 x!2 ~",
})).gain(0.1)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@60 [~ x] ~ [~ x] [~@3 x!2 ~] [~ x] ~@2>").gain(0.03)

// drums · ride
const ride = s("rd").struct("<~@16 [~ x ~ x] ~@6 [~ x ~ x]!2 ~@42>").gain(0.1)

// drums · bongos
const bongos = s("bongo:4").struct(`<
  ~@9 A@3 B A@3 ~ A B A C A@2 ~@3 A@3 B A@3 D A@9 B A E A@5 B A E A B A@2 ~@9
>`.pickRestart({
  A: "~ x", B: "~@3 x!2 ~", C: "~@6 x ~ x ~ x!2", D: "~ x ~ x", E: "~@3 x",
})).gain(0.36)

// drums · bongos · soft notes
const bongos_soft = s("bongo:4").struct("<~@33 A ~@11 A ~@7 A ~@4 B C B D B C B D ~>".pickRestart({
  A: "~@6 x!3 ~@3", B: "~ x", C: "~@3 x!2 ~", D: "~@6 x!4 ~@2",
})).gain(0.14)

// drums · congas
const congas = s("conga:18").struct(`<
  ~@9 A@3 B A@3 ~ A B A C A@2 ~@3 A@3 B A@3 D A@9 B A ~ A@5 B A ~ A B A@2 ~@9
>`.pickRestart({
  A: "~ x", B: "~@3 x!2 ~", C: "~@6 x ~ x ~ x!2", D: "~@3 x",
})).gain(0.44)

// drums · congas · soft notes
const congas_soft = s("conga:18").struct("<~@33 A ~@24 B C B ~ B C B ~@2>".pickRestart({
  A: "~@6 x!3 ~@3", B: "~ x", C: "~@3 x!2 ~",
})).gain(0.22)

// drums · congas
const congas_2 = s("conga:33").struct("<~@33 [~ x ~@2] ~@33>").gain(0.44)

// … 13 more lines

More by The Cranberries