Strudelify
Mysterious Ways cover art

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: edit a riff to change every repeat.

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

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  A@2 B A@3 B A ~@8 C@2 D C@3 E F C D G H A@2 B I ~@7 C@2 D C@3 E F C D G H C D G H J@4 K L@2 M J N O P Q R S C@2 E F
  C@2 E F C D G H C D G H C@2 E F C D G H T@4 ~@2
>`.pickRestart({
  A: "bb1@4 bb1@3 ~@9", B: "bb1@2 bb1 ~@5", C: "bb1 ~ bb1@2 db2@2 bb1!2 eb2!2 db2@2 bb1@2 ab1@2",
  D: "bb1 ~ bb1@2 db2@3 bb1 eb2@2 db2@2 bb1@2 ab1@2", E: "db2@2 ab1@2 db2 ~ db2!2 eb2@2 db2@2 bb1@2 db2@2",
  F: "ab1@2 bb1@2 db2@2 ~ db2 eb2!2 db2@2 bb1@2 ab1@2", G: "db2 ~ ab1 ~ db2@2 ~ db2 eb2!2 db2@2 bb1@2 db2@2",
  H: "ab1@2 bb1@2 db2@2 ~ db2 eb2@2 db2@2 bb1@2 ab1@2", I: "bb1 ~@7", J: "f1!2 ~ f1 f1@2 ~@10",
  K: "f1!2 ~ f1 f1@2 ~@6 f2@4", L: "[f1!2 ~ f1!2 ~@8 eb2@5 f2@2 ~@12]/2", M: "f1!2 ~ f1!2 ~@11", N: "f2", O: "eb2",
  P: "db2 ~ db2 ~ db2 ~ db2 ~ db2!3 ~ db2 ~ db2 ~", Q: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2!3 ~ eb2 ~ eb2 ~",
  R: "db2 ~ db2 ~ db2 ~ db2 ~ db2!3 ~ db2 ~ db2@2", S: "ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1!3 ~ ab1 ~ ab1@2", T: "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 I G J K L M N M N O P M N Q R S B@2 T I G H E I G J K L M L M N O P M N Q R U N Q R ~@8 V W
  X Y Z AA AB AC N O P M N O P M N Q R M N Q R M N O P M N Q R AD ~@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: "[bb3,eb4]", G: "[bb3,d4]",
  H: "[c4,f4]", I: "eb4, bb3@7 ~", J: "[c4,f4] [bb3,d4]", K: "~ bb4@2 [bb3,d4,f4] bb4@2 ~@10, [bb3,d4,f4,bb4] ~@7",
  L: "~ bb4 ~ [bb3,eb4,g4] bb4@2 ~@10, [bb3,eb4,g4,bb4] ~@7", M: "~ bb4 ~ [bb3,d4,f4] bb4@2 ~@10, [bb3,d4,f4,bb4] ~@7",
  N: "~ bb4 ~ [bb3,eb4,g4] bb4@3 ~@9, [bb3,eb4,g4,bb4] ~@7", O: "~ ab4 ~ [db4,f4,ab4] [f4,ab4] ~@11, [db4,f4,ab4] ~@7",
  P: "~ ab4 ~ [c4,eb4,ab4] [eb4,ab4] ~@11, [c4,eb4,ab4] ~@7", // Ab Ab5 Ab
  Q: "~ ab4 ~ [db4,f4,ab4] [db4,ab4]@2 ~@10, [db4,f4,ab4] ~@7", R: "~ ab4 ~ [c4,eb4,ab4] ab4@2 ~@10, [c4,eb4,ab4] ~@7",
  S: "~@2 ab3!2 [bb2,f3,ab3]@2 ab3!2 ~ ab3 ~ ab3!5, [bb2,f3] ~@3", T: "[bb2,f3] ~@3, d4, bb3@7 ~",
  U: "~ bb4 ~ [d4,f4] bb4@2 ~@10, [d4,f4,bb4] ~@7", V: "f3!4 ~@3 ab3 ~@2 f3 ~ eb3@2 ~@2",
  W: "f3!4 ~ f3 ~@2 ab3 f3!2 ~ eb3@2 ~@2", X: "f3 ~ f3!2 ~ f3 ~ f3 ab3 ~ f3 ~ eb3@3 ~",
  Y: "[db4,f4,bb4]@5 ~ bb4@6 f4@4, ~@3 db4@5, ~@3 f4@2 ~ bb3 ~", // Bbm
  Z: "g4@4 g4 ab4 ~@4 bb3@4 ~@2, bb3@8 eb4@7 ~, eb4@3 g4@4 ~",
  AA: "[bb3,db4]@5 ~ [bb3,db4]@4 ~@2 [bb3,db4,f4]@3 ~, f4@5 ~@3", // Bbm
  AB: "[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
  AC: "~ bb4 ~ [bb3,d4,f4] bb4 ~@11, [bb3,d4,f4,bb4] ~@7", AD: "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 D@2 E F ~@15 G@2 H I J@2 K L M@2 N O ~@19 P@2 H Q R@2 S I T@2 E O U@2 B O V@2 W F ~@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: "[~@4 f4 g4@2 bb4@3 ~@2 f4 g4@2 bb4@4 ~@3 c5@4 bb4@6]/2", E: "~@4 db5@2 db5@5 ~ db5@2 db5@2",
  F: "db5@2 c5@2 bb4@2 ab4@3 ~@7", G: "[~@4 bb3 c4@2 d4@3 ~@2 bb3 c4@2 d4@3 ~@4 eb4@4 db4@6]/2", H: "~@2 f4 f4@3 f4!2",
  I: "f4 eb4 db4 c4@2 ~@3", J: "[~@4 bb3 c4@2 d4@3 ~@2 bb3 c4@2 d4@3 ~@4 eb4@4 db4@4 ~@2]/2",
  K: "~@4 f4@2 f4@6 f4@2 f4 ~", L: "f4@2 eb4@2 db4@2 c4@3 ~@7",
  M: "[~@4 f4 g4@2 bb4@3 ~@2 f4 g4@2 bb4@3 ~@4 c5@4 bb4@4 ~@2]/2", N: "~@2 db5!2 db5@4", O: "db5 c5 bb4 ab4@2 ~@3",
  P: "[~@4 bb3 c4@2 d4@3 ~@2 bb3 c4@2 d4@2 ~@5 eb4@4 db4@4 ~@2]/2", Q: "f4 eb4 db4 c4@3 ~@2",
  R: "[~@4 bb3 c4@2 d4@3 ~@2 bb3 c4@2 d4@3 ~@4 eb4@4 db4@5 ~]/2", S: "~@4 f4@2 f4@5 ~ f4@2 f4@2",
  T: "[~@4 f4 g4@2 bb4@2 ~@3 f4 g4@2 bb4@4 ~@3 c5@4 bb4@6]/2",
  U: "[~@4 f4 g4@2 bb4@3 ~@2 f4 g4@2 bb4@4 ~@3 c5@4 bb4@5 ~]/2",
  V: "[~@4 f4 g4@2 bb4@3 ~@2 f4 g4@2 bb4@3 ~@4 c5@4 bb4@5 ~]/2", W: "~@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 F@2 B C F@2 B E ~@61>".pickRestart({
  A: "[d4 eb4, bb3@31 ~]/2", B: "[bb3,d4]", C: "[c4,f4]", D: "[d4 eb4 d4, bb3]/3", E: "[c4,f4] [bb3,d4]",
  F: "[d4 eb4, bb3@15 ~]/2",
})).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 I J@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: "[c5,eb5]@15 ~", J: "[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] [[f4,f5] ~@3] [[f4,f5]@3 ~@13]!3 [[f4,f5] ~@3] ~@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@2 B C@2 A@3 ~@12 D E F G H I J K A@2 B L ~@11 D E F G H I J K H I J K ~@15 D E F G D E F G H I J K H I J K D E F G H
  I M N ~@6
>`.pickRestart({
  A: "bb2@4 bb2@3 ~@9", B: "bb2@3 ~ bb2@2 ~@10", C: "bb2@3 ~ bb2@3 ~@9",
  D: "bb2 ~ bb2@2 db3@2 bb2@2 eb3@2 db3@2 bb2@2 ab2@2", E: "bb2 ~ bb2@2 db3@3 bb2 eb3!2 db3@2 bb2@2 ab2@2",
  F: "db3@2 ab2@2 db3@2 ~ db3 eb3!2 db3@2 bb2@2 db3@2", G: "ab2@2 bb2@2 db3@2 ~ db3 eb3!2 db3@2 bb2@2 ab2@2",
  H: "bb2@3 db3 db3@2 bb2@2 eb3!2 db3@2 bb2@2 ab2@2", I: "bb2@2 bb2@2 db3@3 bb2 eb3!2 db3@2 bb2@2 ab2@2",
  J: "db3@2 ab2@2 db3@3 db3 eb3!2 db3@2 bb2@2 db3@2", K: "ab2@2 bb2@2 db3@3 db3 eb3@2 db3@2 bb2@2 ab2@2",
  L: "bb2@3 ~@13", M: "db3@2 ab2@2 db3@3 db3 eb3!2 ~@2 bb2@2 db3@2, ~@5 db3@2 ~",
  N: "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 K L M N@2 O@4 P@2 B C D C B C D C B C D C B
  C D C B C D C Q@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: "f2 ~",
  L: "f3", M: "eb3", N: "[[db3,db4,f4,db5] [eb3,g3,eb4,eb5], bb3@29 ~@3]/2",
  O: "[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
  P: "[[db4,f4] [c4,eb4], [ab3,ab4,ab5]]/2", Q: "[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)

// … 44 more lines

More by U2