Strudelify
Mysterious Ways cover art

1991 · Achtung Baby

Mysterious Ways

U2

KeyB♭ minorTempo100 bpm
0:00/0:00
// Mysterious Ways — U2
// 100 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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, A@4 for four bars: edit a riff to change every repeat.

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  A@8 ~@20 A@3 B ~@23 C@2 D@4 E@3 F G ~@8 H I J H I J H I H I J H I J H I H I J H K ~@5
>`.pickRestart({
  A: "[ab3,d4]@3 ~ [ab3,d4] ~@6 bb3@5", B: "[ab3,d4]@3 ~@13",
  C: "[ab5@2 bb5 ab5 ab5@2 bb5 ab5@2 bb5@2 ab5 ab5@2 bb5 ab5@3 bb5 ab5 ab5@2 bb5@2 ab5 bb5@2 ab5 ab5@2 bb5 ab5]/2",
  D: "[ab5@2 bb5 ab5 ab5@2 bb5@2 ab5 bb5 ~ ab5@3 bb5 ab5@2 bb5@2 ab5 ab5@2 bb5 ~ ab5 bb5 ~ ab5@3 bb5 ab5@2 bb5 ~ ab5 ab5@2 bb5 ~ ab5 bb5 ~ ab5@3 bb5 ~ [ab4,d5]!4 ~ eb4 ~ f4 ab4 ~ f4 ~ eb4@2 ~@2, ~@47 ab5@2 ~@15]/4", // Abdim
  E: "[ab4,d5]!4 ~ ab4!2 [ab4,eb5] ~ ab4 [ab4,d5] ~ [ab4,c5]@2 ab4 ~", // Abdim Ab5 Abdim Ab
  F: "[ab4,d5]!4 ~ ab4 ~ ab4 [ab4,eb5] ab4 [ab4,d5] ~ [ab4,c5]@2 ab4 ~", // Abdim Ab5 Abdim Ab
  G: "[ab4,d5]!4 ~ [ab4,d5] ~ ab4 [ab4,eb5] ab4 [ab4,d5] ~ [ab4,c5]@4", H: "bb3 ~ bb3!3 ~ bb3!2 ~ bb3 ~ bb3!5",
  I: "bb3 ~ bb3!8 ~ bb3!5", J: "bb3!5 ~ bb3!2 ~ bb3!7", K: "bb3 ~@15",
})).s("gm_overdriven_guitar").gain(0.38).pan(0.9)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  A@8 ~@8 B@2 C B@3 D E B C F G A@3 H ~@7 B@2 C B@3 D E B C F G B C F G I@4 J K@2 I@2 L M N O N P B@2 D E B@2 D E B C F
  G B C F G B@2 D E B C F G Q@4 ~@2
>`.pickRestart({
  A: "bb1@4 bb1@3 ~@9", B: "bb1 ~ bb1@2 db2@2 bb1!2 eb2!2 db2@2 bb1@2 ab1@2",
  C: "bb1 ~ bb1@2 db2@3 bb1 eb2@2 db2@2 bb1@2 ab1@2", D: "db2@2 ab1@2 db2 ~ db2!2 eb2@2 db2@2 bb1@2 db2@2",
  E: "ab1@2 bb1@2 db2@2 ~ db2 eb2!2 db2@2 bb1@2 ab1@2", F: "db2 ~ ab1 ~ db2@2 ~ db2 eb2!2 db2@2 bb1@2 db2@2",
  G: "ab1@2 bb1@2 db2@2 ~ db2 eb2@2 db2@2 bb1@2 ab1@2", H: "bb1 ~@7", I: "f1!2 ~ f1 f1@2 ~@10",
  J: "f1!2 ~ f1 f1@2 ~@6 f2@4", K: "[f1!2 ~ f1!2 ~@8 eb2@5 f2@2 ~@12]/2", L: "f2", M: "eb2",
  N: "db2 ~ db2 ~ db2 ~ db2 ~ db2!3 ~ db2 ~ db2 ~", O: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2!3 ~ eb2 ~ eb2 ~",
  P: "ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1!3 ~ ab1 ~ ab1@2", Q: "bb1/4",
})).s("gm_fretless_bass").gain(0.44)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar_2 = note(`<
  A B@2 C@2 D B@2 E F G H E F G I J K L M L M N O L M P Q R B@2 S F G H E F G I J K L K L M N O L M P Q T M P Q ~@8 U V
  W X Y Z AA AB M N O L M N O L M P Q L M P Q L M N O L M P Q AC ~@5
>`.pickRestart({
  A: "ab3@2 ab3!2 [bb2,f3,ab3]@2 ab3!2 ~ ab3 ~ ab3!5, [bb2,f3] ~@3", // Bb7 Bb5
  B: "[bb2,f3]@2 ab3!2 [bb2,f3,ab3]@2 ab3!2 ~ ab3 ~ ab3!5, ab3 ~@15", // Bb5 Bb7
  C: "ab3 ~ ab3!2 [bb2,f3,ab3]@2 ab3!2 ~ ab3 ~ ab3!5, [bb2,f3] ~@3", // Bb7 Bb5
  D: "ab3 ~ ab3!2 [bb2,f3]@2 ab3!2 ~ ab3 ~ ab3!5, [bb2,f3]@4 ab3 ~@11", E: "d4, bb3@7 ~", F: "eb4, bb3@7 ~",
  G: "[bb3,d4]", H: "[c4,f4]", I: "[c4,f4] [bb3,d4]", J: "~ bb4@2 [bb3,d4,f4] bb4@2 ~@10, [bb3,d4,f4,bb4] ~@7",
  K: "~ bb4 ~ [bb3,eb4,g4] bb4@2 ~@10, [bb3,eb4,g4,bb4] ~@7", L: "~ bb4 ~ [bb3,d4,f4] bb4@2 ~@10, [bb3,d4,f4,bb4] ~@7",
  M: "~ bb4 ~ [bb3,eb4,g4] bb4@3 ~@9, [bb3,eb4,g4,bb4] ~@7", N: "~ ab4 ~ [db4,f4,ab4] [f4,ab4] ~@11, [db4,f4,ab4] ~@7",
  O: "~ ab4 ~ [c4,eb4,ab4] [eb4,ab4] ~@11, [c4,eb4,ab4] ~@7", // Ab Ab5 Ab
  P: "~ ab4 ~ [db4,f4,ab4] [db4,ab4]@2 ~@10, [db4,f4,ab4] ~@7", Q: "~ ab4 ~ [c4,eb4,ab4] ab4@2 ~@10, [c4,eb4,ab4] ~@7",
  R: "~@2 ab3!2 [bb2,f3,ab3]@2 ab3!2 ~ ab3 ~ ab3!5, [bb2,f3] ~@3", S: "[bb2,f3] ~@3, d4, bb3@7 ~",
  T: "~ bb4 ~ [d4,f4] bb4@2 ~@10, [d4,f4,bb4] ~@7", U: "f3!4 ~@3 ab3 ~@2 f3 ~ eb3@2 ~@2",
  V: "f3!4 ~ f3 ~@2 ab3 f3!2 ~ eb3@2 ~@2", W: "f3 ~ f3!2 ~ f3 ~ f3 ab3 ~ f3 ~ eb3@3 ~",
  X: "[db4,f4,bb4]@5 ~ bb4@6 f4@4, ~@3 db4@5, ~@3 f4@2 ~ bb3 ~", // Bbm
  Y: "g4@4 g4 ab4 ~@4 bb3@4 ~@2, bb3@8 eb4@7 ~, eb4@3 g4@4 ~",
  Z: "[bb3,db4]@5 ~ [bb3,db4]@4 ~@2 [bb3,db4,f4]@3 ~, f4@5 ~@3", // Bbm
  AA: "[ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~", // Ab
  AB: "~ bb4 ~ [bb3,d4,f4] bb4 ~@11, [bb3,d4,f4,bb4] ~@7", AC: "bb3 ~@7",
})).s("gm_overdriven_guitar").gain(0.38).pan(0.6)

// other · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  ~@20 A@2 B C A@2 B D ~@15 E@2 F G H@2 I G J@2 K D ~@19 H@2 F L E@2 F G A@2 M D J@2 B D A@2 N D ~@6
>`.pickRestart({
  A: "[~@4 f4 g4@2 bb4@3 ~@2 f4 g4@2 bb4@3 ~@4 c5@4 bb4@6]/2", B: "~@2 db5 db5@3 db5!2", C: "db5@2 c5@2 bb4@2 ab4@9 ~",
  D: "db5 c5 bb4 ab4@2 ~@3", E: "[~@4 bb3 c4@2 d4@3 ~@2 bb3 c4@2 d4@3 ~@4 eb4@4 db4@6]/2", F: "~@2 f4 f4@3 f4!2",
  G: "f4 eb4 db4 c4@2 ~@3", H: "[~@4 bb3 c4@2 d4@3 ~@2 bb3 c4@2 d4@3 ~@4 eb4@4 db4@4 ~@2]/2",
  I: "~@4 f4@2 f4@6 f4@2 f4 ~", J: "[~@4 f4 g4@2 bb4@3 ~@2 f4 g4@2 bb4@3 ~@4 c5@4 bb4@5 ~]/2", K: "~@2 db5!2 db5@4",
  L: "f4 eb4 db4 c4@3 ~@2", M: "~@4 db5@2 db5@5 ~ db5@2 db5@2", N: "~@4 db5@2 db5@7 ~ db5@2",
})).s("gm_epiano1").gain(0.36)

// chords · pad halo · "HALO PAD"
const pad_halo = note("<~@8 A@2 B C D@3 E ~@15 A@2 B C A@2 B E ~@61>".pickRestart({
  A: "[d4 eb4, bb3@15 ~]/2", B: "[bb3,d4]", C: "[c4,f4]", D: "[d4 eb4 d4, bb3]/3", E: "[c4,f4] [bb3,d4]",
})).s("gm_pad_halo").gain(0.27).pan(0.2)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note(`<
  ~@16 A@4 B C D E B F D E ~@11 A@4 B C D E B F D G H F D E ~@19 B C D E B F D E B F D E B C D E B F D E I@4 ~@2
>`.pickRestart({
  A: "bb5/4", B: "[d5,f5]", C: "eb5, bb4@3 ~", D: "[db5,f5]", E: "[c5,eb5]", F: "[bb4,eb5]", G: "eb5, c5@13 ~@3",
  H: "d5", I: "[bb4,c5,f5]/4",
})).s("gm_percussive_organ").gain(0.33).pan(0.1)

// other · orchestra hit · "ORCH.HIT" · F
const orchestra_hit = note("<~@55 [[f4,f5]@3 ~@13]!6 ~@39>").s("gm_orchestra_hit").gain(0.55).pan(0.3)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A B C A B C A B ~@8 D E F G F G H I F G J K A B C L ~@7 D E F G F G H I F G J K M N J K ~@5 O P@2 Q R S T U V W ~@30
>`.pickRestart({
  A: "ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3", B: "~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~",
  C: "~ ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2", D: "~ bb4@2 [bb3,d4,f4] bb4 ~@11, [bb3,d4,f4,bb4] ~@7",
  E: "~ bb4 ~ [bb3,eb4,g4] bb4@2 ~@10, [bb3,eb4,g4,bb4] ~@7", F: "~ bb4 ~ [bb3,d4,f4] bb4@2 ~@10, [bb3,d4,f4,bb4] ~@7",
  G: "~ bb4 ~ [bb3,eb4,g4] bb4@3 ~@9, [bb3,eb4,g4,bb4] ~@7", H: "~ ab4 ~ [db4,f4,ab4]!2 ~@11, [db4,f4,ab4] ~@7",
  I: "~ ab4 ~ [c4,eb4,ab4] [c4,eb4,ab4]@2 ~@10, [c4,eb4,ab4] ~@7", // Ab
  J: "~ ab4 ~ [db4,f4,ab4] ab4@2 ~@10, [db4,f4,ab4] ~@7", K: "~ ab4 ~ [c4,eb4,ab4] ab4@2 ~@10, [c4,eb4,ab4] ~@7",
  L: "ab3 ~@15", M: "~ bb4 ~ [d4,f4] bb4@2 ~@10, [d4,f4,bb4] ~@7", N: "~ bb4 ~ [eb4,g4] bb4@3 ~@9, [eb4,g4,bb4] ~@7",
  O: "[ab4,d5]!4 ~ eb4 ~ f4 ab4 ~ f4 ~ eb4@2 ~@2", P: "[ab4,d5]!4 ~ ab4!2 [ab4,eb5] ~ ab4 [ab4,d5] ~ [ab4,c5]@2 ab4 ~",
  Q: "[ab4,d5]!4 ~@3 [ab4,eb5] ~@2 [ab4,d5] ~ [ab4,c5]@2 ab4 ~", // Abdim Ab5 Abdim Ab
  R: "[ab4,d5]!4 ~ [ab4,d5] ab4!2 [ab4,eb5] ab4 [ab4,d5] ~ [ab4,c5]@2 ab4 ~", // Abdim Ab5 Abdim Ab
  S: "[ab4,d5]!4 ~ [ab4,d5] ab4 ~ [ab4,eb5] ab4 [ab4,d5] ~ [ab4,c5]@3 ~", // Abdim Ab5 Abdim Ab
  T: "[db4,f4,bb4]@5 ~ bb4@6 f4@4, ~@3 db4@5, ~@3 f4@2 ~ bb3 ~", // Bbm
  U: "g4@4 g4 ab4 ~@4 bb3@4 ~@2, bb3@8 eb4@7 ~, eb4@3 g4@4 ~",
  V: "[bb3,db4]@5 ~ [bb3,db4]@4 ~@2 [bb3,db4,f4]@3 ~, f4@5 ~@3", // Bbm
  W: "[ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~", // Ab
})).s("gm_electric_guitar_clean").gain(0.16).pan(0.3)

// other · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  A@8 ~@12 B C D E F C D G A@3 H ~@11 B C D E F C D G F C D G ~@15 B C D E B C D E F C D G F C D G B C D E F C I J ~@6
>`.pickRestart({
  A: "bb2@4 bb2@3 ~@9", B: "bb2 ~ bb2@2 db3@2 bb2@2 eb3@2 db3@2 bb2@2 ab2@2",
  C: "bb2@2 bb2@2 db3@3 bb2 eb3!2 db3@2 bb2@2 ab2@2", D: "db3@2 ab2@2 db3@2 ~ db3 eb3!2 db3@2 bb2@2 db3@2",
  E: "ab2@2 bb2@2 db3@2 ~ db3 eb3!2 db3@2 bb2@2 ab2@2", F: "bb2@3 db3 db3@2 bb2@2 eb3!2 db3@2 bb2@2 ab2@2",
  G: "ab2@2 bb2@2 db3@3 db3 eb3@2 db3@2 bb2@2 ab2@2", H: "bb2@3 ~@13",
  I: "db3@2 ab2@2 db3@3 db3 eb3!2 ~@2 bb2@2 db3@2, ~@5 db3@2 ~",
  J: "ab2@2 bb2@2 db3@3 ~ eb3@2 db3@2 ~@4, ~@7 db3@3 ~@6",
})).s("gm_distortion_guitar").gain(0.44)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@16 A@4 B C D C B C D C ~@11 A@4 B C D C B C D C B C D C E F E G H I@2 J@2 K L M@2 N@4 O@2 B C D C B C D C B C D C B
  C D C B C D C P@4 ~@2
>`.pickRestart({
  A: "[bb4,bb5]/4", B: "f5", C: "eb5", D: "db5", E: "[f2,ab3,bb3,c4,f4,f5]@2 ~@4 eb3 f3",
  F: "[f2,ab3,bb3,c4,f4,f5]@5 ~@7 eb3@2 f3@2", G: "[f2,ab3,bb3,f4,f5]@3 ~@3 eb3 f3, c4 ~@3",
  H: "[f2,ab3,bb3,c4,f4,f5]@5 ~@11", I: "[[ab3,bb3,c4,f4,f5]@4 ~@9 eb3@5 f3@4 ~@10]/2", J: "f2@7 ~@9", K: "f3",
  L: "eb3", M: "[[db3,db4,f4,db5] [eb3,g3,eb4,eb5], bb3@29 ~@3]/2",
  N: "[bb3@2 ~@2 ab5@2 ~@2 [d4,f4]@3 ~@3 f5@2, [db3,db4,f4,db5] [ab2,eb4] ~ eb4, ~ ab3@3 bb3@4, ~@2 ab4@4 bb5@6 g4@3 ~, ~@4 c4@3 ~ bb4@6 ~@2]/4", // Dm Db Ab5
  O: "[[db4,f4] [c4,eb4], [ab3,ab4,ab5]]/2", P: "[bb3,c4,f4]/4",
})).s("gm_string_ensemble_1").gain(0.33).pan(0.4)

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

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

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

// drums · open hat
const open_hat = s("oh").struct("<~@19 A B@8 ~@14 A B@8 ~@3 B ~@3 A ~@3 A ~@6 A B@24 ~@6>".pickRestart({
  A: "~@3 x", B: "~ x ~ x",
})).gain(0.55)

// drums · crash
const crash = s("cr").struct("<~@30 A ~@22 A ~@16 A ~@23 A ~@5>".pickRestart({
  A: "x",
})).gain(0.55)

// drums · ride
const ride = s("rd").struct("<~@20 A ~@22 A ~@30 A ~@7 A ~@7 A ~@9>".pickRestart({
  A: "x",
})).gain(0.55)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@4 A@4 ~@12 A@4 B A C A ~@15 A@4 B A C A@2 C A@2 ~@15 A@8 B A C A@5 B A C A@5 ~@6
>`.pickRestart({
  A: "x!16", B: "~ x!15", C: "x!8 ~ x!7",
})).gain(0.27)

// drums · bongos
const bongos = s("bongo:4").struct(`<
  A B A B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B C ~@10 D
  A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A E F C ~@2
>`.pickRestart({
  A: "x!2 ~ x!2 ~ x ~@2 x ~@2 x ~ x ~", B: "x!2 ~ x!2 ~ x!2 ~ x ~@2 x ~ x ~", C: "x",
  D: "~ x ~ x!2 ~ x!2 ~ x ~@2 x ~ x ~", E: "x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~", F: "x ~@2 x ~@2 x!2 ~@8",
})).gain(0.58)

// drums · bongos · soft notes
const bongos_soft = s("bongo:4").struct(`<
  A B C B A C B A C B A C B A C B A C B A C B A C B A C B A C B A C B A C B A C B A C B A C B A C B A C B A C B ~@11 B A
  C B A C B A C B A C B A C B A C B A C B A C B A C B A D E F G H
>`.pickRestart({
  A: "~@7 x!2 ~@7", B: "~ x", C: "~@7 x ~@8", D: "~ x ~@2 x ~@2 x ~@8", E: "~ x ~@2 x ~@3 x!2 ~@2 x ~ x ~",
  F: "~ x ~ x!2 ~ x!4 ~@2 x ~ x ~", G: "x!2 ~ x!2 ~ x!2 ~ x ~@2 x ~ x ~", H: "x!2 ~ x!2 ~ x!4 ~@2 x ~ x ~",
})).gain(0.43)

// drums · bongos
// … 34 more lines

More by U2