Strudelify
Stay (Faraway, So Close!) cover art

1993 · Zooropa

Stay (Faraway, So Close!)

U2

KeyE♭ majorTempo95 bpm
0:00/0:00
// Stay (Faraway, So Close!) — U2
// 95 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 116 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(95/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.

// bass · electric bass finger
const bass = note(`<
  ~@2 A B C D A B C D A B C D A B C D E@2 F@2 E@2 G H I J A B C D A B C D A B C D E@2 K@2 I@2 L@2 M N O@2 M N O@2 M P
  O@2 A B C D A B C D A B C D E@2 K@2 I@2 L@2 M N O@2 M N O@2 M Q P R M P O@2 A B C D A B C D A B C D A B C D A B C ~
>`.pickRestart({
  A: "eb2@2 ~ eb2@2 ab1 bb1 c2", B: "f2@2 ~ f2@2 bb1 c2 eb2", C: "ab1@2 ~ ab1@2 ab1 bb1 d2",
  D: "eb2@5 ~ eb2@4 ab1@2 bb1@2 d2@2", E: "f1@2 f1@3 ~ f1@4 f1@2 ab1@2 bb1@2", F: "eb1@2 eb1@3 ~ eb1@4 eb1@2 f1@2 g1@2",
  G: "eb1@2 eb1@3 ~ eb1@4 ab1@2 bb1@2 eb2@2", H: "f2@2 f2@3 ~ f2@4 bb1@2 c2@2 eb2@2",
  I: "ab1@2 ab1@3 ~ ab1@4 ab1@2 bb1@2 c2@2", J: "eb2@2 eb2@3 ~ eb2@4 ab1@2 bb1@2 d2@2",
  K: "g1@2 g1@3 ~ g1@4 g1@2 bb1@2 c2@2", L: "bb1!8", M: "f1@5 ~ f1@4 f1@2 g1@2 bb1@2", N: "f1@2 ~ f1@2 f1 g1 bb1",
  O: "eb1@5 ~ eb1@4 eb1@2 f1@2 g1@2", P: "ab1@2 ~ ab1@2 ab1 bb1 c2", Q: "g1@2 ~ g1@2 g1 ab1 bb1",
  R: "bb1@5 ~ bb1@4 bb1@2 bb1@2 bb1@2",
})).s("gm_electric_bass_finger").gain(0.44)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  A@6 B@4 C@4 B@4 D@8 E@6 C@4 B@4 F@8 G@2 H@2 I@2 H@2 J@2 K@2 B@4 C@4 B@4 F@8 G@2 H@2 I@2 H@2 L@2 M@6 N O@3 N O@3 N O@3
  P@4 Q@3 ~
>`.pickRestart({
  A: "[~@8 d4 eb4@2 bb3@2 ~@3 d4 eb4@2 bb3@2 ~@3 d4 eb4@2 eb4@2 ~@3 d4 eb4@2 eb4@2 ~@3 d4 eb4@2 eb4@2 f4@3, ~@7 eb2@8 eb2@8 eb2@8 eb2@8 eb2@8 ~, ~ eb3 eb3 eb3 eb3 eb3, ~@8 bb3@3 eb4@5 ~@3 eb4@5 ~@5 f4@3 ~@5 f4@3 ~@8, ~@13 [bb3,f4]@3 bb3@3 ~@2 [bb3,f4]@3 bb3@3 bb3@5 bb3@3 bb3@5 bb3@3 bb3@5]/6", // Bb5
  B: "[d4 eb4@2 bb3@2 ~@3 d4 eb4@2 eb4@2 ~@3 d4 eb4@2 eb4@2 ~@3 d4 eb4@2 eb4@2 f4@3, eb3 eb3 eb3 eb3, bb3@3 eb4@5 ~@5 f4@3 ~@5 f4@3 ~@8, ~@5 [bb3,f4]@3 bb3@3 bb3@5 bb3@3 bb3@5 bb3@3 bb3@5, ~@7 eb2@8 eb2@8 eb2@8 ~]/4", // Bb5
  C: "[d4 eb4@2 bb3@2 ~@3 d4 eb4@2 bb3@2 ~@3 d4 eb4@2 eb4@2 ~@3 d4 eb4@2 eb4@2 f4@3, eb3 eb3 eb3 eb3, bb3@3 eb4@5 ~@3 eb4@5 ~@5 f4@3 ~@8, ~@5 [bb3,f4]@3 bb3@3 ~@2 [bb3,g4]@3 bb3@3 bb3@5 bb3@3 bb3@5, ~@7 eb2@8 eb2@8 eb2@8 ~]/4", // Bb5 Eb
  D: "[d4 eb4@2 bb3@2 ~@3 d4 eb4@2 eb4@2 ~@3 d4 eb4@2 eb4@2 ~@3 d4 eb4@2 eb4@2 f4@3, eb3 eb3 eb3 eb3, bb3@3 eb4@5 ~@5 f4@3 ~@5 g4@3 ~@8, ~@5 [bb3,f4]@3 bb3@3 bb3@5 bb3@3 bb3@5 bb3@3 bb3@5, ~@7 eb2@8 eb2@8 eb2@8 ~]/4", // Bb5
  E: "[d4 eb4@2 bb3@2 ~@3 d4 eb4@2 ~@2 f4@2 g4 d4 eb4@2 bb3@2 ~@3 d4 eb4@2 eb4@2 ~@3 d4 eb4@2 eb4@2 ~@3 d4 eb4@2 eb4@2 f4@3, eb3 eb3 eb3 eb3 eb3 eb3, bb3@3 eb4@5 ~@11 eb4@5 ~@5 f4@3 ~@5 f4@3 ~@8, ~@5 [bb3,f4]@3 bb3@3 [bb3,eb4]@5 bb3@3 ~@2 [bb3,f4]@3 bb3@3 bb3@5 bb3@3 bb3@5 bb3@3 bb3@5, ~@7 eb2@8 eb2@8 eb2@8 eb2@8 eb2@8 ~]/6", // Bb5 Eb5 Bb5
  F: "[~@59 d4@5, f2@8 f2@7 ~ g2@8 g2@7 ~ ab2@8 ab2@7 ~ bb2@8 bb2@7 ~, ~@2 eb3@15 ~ eb3@16 eb3@15 ~ eb3@15 ~ eb3@15 ~ eb3@15 ~ f3@10 f3@6 f3@14, ~@4 ab3@15 ~ ab3@15 ~ g3@15 ~ g3@15 ~ ab3@15 ~ ab3@15 ~ bb3@6 bb3@4 bb3@6 bb3@12, ~@3 [c4,eb4]@8 [c4,eb4]@7 ~ [bb3,eb4]@8 [bb3,eb4]@7 ~ [c4,eb4]@8 [c4,eb4]@7 ~ d4@8 ~@5]/8", // Cm Eb5 Cm
  G: "[~@15 ab3, f2@31 ~, ~@2 ab3@8 ab3@6 f3@15 ~, ~@2 c4@4 f3 c4@2 ab3@2 [eb4,f4]@5, ~@3 [eb4,f4]@7 c4@3 ab3 c4@2]/2", // Ebsus2
  H: "[~@15 eb4, bb2, eb3@3 eb4@7 bb3@3 g3@3, ~ g3@4 eb3 ab3@2 eb3@8, ~@2 bb3@4 bb3@3 g3@2 eb4@3 bb3@2]/2",
  I: "[~@15 ab3, f2, ~@2 ab3@8 ab3@6 f3@15 ~, ~@2 c4@4 f3 c4@2 ab3@2 [eb4,f4]@5, ~@3 [eb4,f4]@7 c4@3 ab3 c4@2]/2", // Ebsus2
  J: "[~@15 ab3, f2 ab2, ~@2 ab3@8 ab3@7 ~ ab3@8 ab3@4 ~@2, ~@2 c4@5 c4@3 c4@4 c4@2, ~@6 [eb4,f4]@15 ~ [eb4,f4]@10]/2", // Ebsus2
  K: "[~@15 eb4, eb3@5 eb3@3 eb3@8, ~@2 g3@9 ~ ab3@6 g3@8 g3@6, ~ bb3@2 bb3@2 bb3@2 bb3, ~@3 eb4@8 eb4@4 ~]/2",
  L: "[~@15 g3, f2 g2, ~@2 ab3@8 ab3@7 ~ g3@8 g3@4 ~@2, ~@2 c4@5 c4@3 bb3@4 bb3@2, ~@6 [eb4,f4]@15 ~ [eb4,g4]@10]/2", // Ebsus2 Eb
  M: "[~@47 eb4, ab2@8 bb2@8 f2@8 ab2@8 eb3@5 eb3@3 eb3@8, ~@2 ab3@8 ab3@7 ~ bb3@8 ab3@7 ~ ab3@8 ab3@7 ~ ab3@8 ab3@7 ~ g3@9 ~ ab3@6 g3@8 g3@6, ~@2 c4@5 c4@3 c4@5 c4@3 c4@5 c4@3 c4@5 c4@3 bb3@4 bb3@4 bb3@4 bb3@2, ~@6 eb4@15 ~ [eb4,bb4]@15 ~ [eb4,f4]@15 ~ [eb4,f4]@15 ~ eb4@16 eb4@8 ~@2]/6", // Eb5 Ebsus2
  N: "d4 eb4@2 bb3@2 [bb3,f4]@3, eb3, bb3@3 eb4@5", O: "d4 eb4@2 eb4@2 f4@3, bb3@3 ~@5", P: "d4 ~@4 f4@3", Q: "d4 ~@7",
})).s("gm_electric_guitar_clean").gain(0.24)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note("<~@96 A@12 B@4 C@4>".pickRestart({
  A: "[~@27 bb3@5, ~@7 eb2@8 eb2@8 eb2@8 ~, ~ eb3 eb3 eb3, ~@11 bb3@5 ~@3 bb3@5 ~@8]/4",
  B: "[~ eb4@2 bb3@2 ~@4 eb4@2 eb4@2 ~@4 eb4@2 eb4@2 ~@4 eb4@2 bb3@5, eb3 eb3 eb3 eb3, bb3@3 eb4@5 ~@19 eb4@2 ~@3, ~@5 bb3@3 bb3@3 bb3@5 bb3@3 bb3@5 bb3@3 ~@5, ~@7 eb2@8 eb2@8 eb2@8 ~]/4",
  C: "[~ eb4@2 bb3@2 ~@4 eb4@2 eb4@2 ~@4 eb4@2 eb4@2 ~@2 eb2@8 ~, eb3 eb3 eb3 ~, bb3@3 eb4@5 ~@5 f4@3 ~@5 f4@3 ~@8, ~@5 [bb3,f4]@3 bb3@3 bb3@5 bb3@3 bb3@5 ~@8, ~@7 eb2@8 eb2@8 ~@9]/4", // Bb5
})).s("gm_electric_guitar_clean").gain(0.12)

// chords · distortion guitar
const distortion_guitar = note("<~@40 A@8 B@6 C@2 D@2 E ~@4 F@3 G@5 ~ A@8 H@7 I D@2 J@2 K@4 ~@20>".pickRestart({
  A: "[~@57 c3!2 d3!2 eb3 ~ g3, f2@8 f2@7 ~ g2@8 g2@7 ~ ab2@8 ab2@7 ~ bb2@8 bb2@7 ~, ~@4 ab3@15 ~ ab3@14 eb3@15 ~@17 eb3@15 ~@17 f3@10 f3@6 ~@10 f3@4, ~@6 [c4,eb4]@16 [c4,eb4]@14 g3@15 ~ g3@15 ~ ab3@15 ~ ab3@15 ~ bb3@6 bb3@4 bb3@6 bb3@12, ~@19 [bb3,eb4]@8 [bb3,eb4]@7 ~ [c4,eb4]@8 [c4,eb4]@7 ~ d4@8 d4@5]/8", // Cm Eb5 Cm
  B: "[bb3@2 c4 c4@9 c4 bb3 g3 bb3@2 c4 g3 bb3@4 c4@6 bb3!2 bb3@2 c4!2 c4@13]/6", C: "[bb3@2 c4@2 g3@2 bb3@25 ~]/2",
  D: "[c4@22 bb3@9 ~]/2", E: "bb3@3 ~@5", F: "[[eb3,g4], bb3@11 ~]/3", G: "[~@32 f5@35 ~@13, eb3@3 ~@2, bb3@11 ~@9]/5",
  H: "[bb3@2 c4 c4@9 c4 bb3 g3 bb3@2 c4 g3 bb3@4 c4@6 bb3!2 bb3@2 c4!2 c4@10 bb3 g3 bb3@2 c4 g3 bb3@4 bb3]/7",
  I: "bb3@3 ab3@2 g3 eb3@2", J: "[bb3 c4!2 c4@6 bb3@2 g3@2 bb3@2 bb3]/2", K: "[c4@11 bb3@3 ab3 bb3@17]/4",
})).s("gm_distortion_guitar").gain(0.27)

// chords · distortion guitar · soft notes
const distortion_guitar_soft = note("<~@40 A B@2 A ~ A ~ C ~@10 D@2 ~@12 A B@2 A ~ A ~ C ~@36>".pickRestart({
  A: "~ eb3@7", B: "[~ eb3@8 ~@7]/2", C: "~ f3@5 ~@2", D: "[~@3 bb3@7 ~@6]/2",
})).s("gm_distortion_guitar").gain(0.18)

// other · distortion guitar
const distortion_guitar_2 = note(`<
  ~@15 A B@2 C@2 B@2 C@2 B@2 D ~@10 A B@2 C@2 E@2 F@2 G@2 B@2 H B H B H B H B H B ~@9 A B@2 C@2 E@2 F@2 G@2 B@2 H B H
  B@5 H B H B H B H B@7 I B@6 J ~@4
>`.pickRestart({
  A: "~@2 eb3!14", B: "eb3!16", C: "f3!16", D: "eb3!5 ~@11", E: "g3!16", F: "ab3!16", G: "bb3!16", H: "~ eb3!15",
  I: "eb3 ~ eb3!14", J: "eb3!8 ~@8",
})).s("gm_distortion_guitar").gain(0.13)

// other · distortion guitar · soft notes
const distortion_guitar_soft_2 = note("<~@14 A B ~@10 C D ~@8 A B ~@30 A B ~@34 E ~@6 F D ~@3>".pickRestart({
  A: "~ eb3!15", B: "eb3!2 ~@14", C: "~@5 eb3!11", D: "eb3 ~@15", E: "~ eb3 ~@14", F: "~@8 eb3!8",
})).s("gm_distortion_guitar").gain(0.08)

// drums · kick
const kick = s("bd").struct("<~ A@17 B@10 A@12 B@7 C B@12 A@12 B@7 C B@35 D>".pickRestart({
  A: "x ~@2 x ~ x ~@2", B: "x!2 ~ x ~ x ~@2", C: "x!2 ~ x!3 ~@2", D: "x",
})).gain(0.57)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@7 x",
})).gain(0.29)

// drums · snare
const snare = s("sd").struct("<~ A@46 B A C A@29 B A C A@33 D>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!3", C: "~@4 x ~@7 x!2 ~@2", D: "x",
})).gain(0.64)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@47 A ~@2 B@4 ~ B ~ B ~@21 A ~@2 B@4 ~ B ~ B ~@3 B ~@3 B ~ C ~ B ~@3 B ~ A ~ B ~@3 B ~@2
>`.pickRestart({
  A: "~ x", B: "~@9 x ~@6", C: "~@15 x",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@5 B A@10 C@11 B A@10 C@9 D C@3 D C@3 D C@3 B A@10 C@9 D C@3 D C@3 D C@3 D C@3 D C@3 D C@3 D C@3 D C@2 A@4 ~
>`.pickRestart({
  A: "x!8", B: "~ x!7", C: "x!7 ~", D: "~ x!6 ~",
})).gain(0.43)

// drums · open hat
const open_hat = s("oh").struct("<~@17 [~@7 x]!11 ~@11 [~@7 x]!21 ~@11 [~@7 x]!40 ~@5>").gain(0.36)

// drums · crash
const crash = s("cr").struct(`<
  ~@6 A ~@21 A ~@19 A ~@3 A ~@3 A ~@3 A ~@19 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@6 A
>`.pickRestart({
  A: "x",
})).gain(0.43)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@60 A B C D A B C D E F G H I J G J I J G J I J G J I J G J I J G J I J G J A B C D A B C D E F G H I J G J I J G ~
>`.pickRestart({
  A: "x!2 ~@2 x ~ x ~ x!2 ~ x!2 ~ x ~", B: "~@2 x!6", C: "x ~ x!3 ~ x ~ x ~ x!3 ~ x ~", D: "x!5 ~ x ~ x!3 ~ x ~@2 x",
  E: "x!2 ~ x!2 ~ x ~ x!2 ~ x!2 ~ x ~", F: "x ~ x ~ x ~ x ~ x!3 ~ x ~ x!2", G: "x ~ x!3 ~ x ~ x!5 ~ x ~",
  H: "x!5 ~ x ~ x!3 ~ x ~ x!2", I: "x!2 ~ x!2 ~ x ~ x!5 ~ x ~", J: "x!5 ~ x ~ x!5 ~ x!2",
})).gain(0.21)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  ~@60 A B C D A B C D E F ~ G H ~@3 H ~@3 H ~@3 H ~@3 H ~@3 H ~@3 A B C D A B C D E F ~ G H ~@3 H ~@3
>`.pickRestart({
  A: "~@2 x!2 ~@6 x ~@5", B: "x!4 ~@5 x ~ x ~@3 x", C: "~@9 x ~@6", D: "~@11 x ~@2 x ~", E: "~ x ~@3 x ~@2",
  F: "~ x ~ x ~@7 x ~@4", G: "~@11 x ~@4", H: "~ x ~@6",
})).gain(0.14)

stack(
  bass, electric_guitar_clean, electric_guitar_clean_2, distortion_guitar, distortion_guitar_soft, distortion_guitar_2,
  distortion_guitar_soft_2, kick, kick_soft, snare, snare_soft, hihat, open_hat, crash, shaker, shaker_soft
)

More by U2