Strudelify

Babyface

U2

KeyD majorTempo100 bpm
0:00/0:00
// Babyface — U2
// 100 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 7 "Guitarra Suja (final)" named as a guitar, played on electric guitar clean (its harpsichord patch is not one)
// note: Full arrangement: all 97 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 · glockenspiel · "Teclado Básico 2"
const glockenspiel = note("<A B A B A B A B A B A B A B A B A ~@13 A B A B A B ~@24 A B A B A B ~@31>".pickRestart({
  A: "~@7 f#4", B: "~@2 g4@3 ~ g4@10",
})).s("gm_glockenspiel").gain(0.31)

// bass · acoustic bass · "Adam Clayton"
const bass = note(`<
  ~@2 A B C D A B C D A E C D A B E F G H I J G H I J K L K L M@2 N O P@2 Q@2 R S R T U V W T U S G H I J G H I J K L K
  L ~@10 G H I J G H I J G H I J G H I J K L K L X@2 Y X Z ~@2
>`.pickRestart({
  A: "d2@10 ~@2 d2@3 ~", B: "a2@10 ~@2 a2@3 ~", C: "b2@10 ~@2 b2@3 ~", D: "g2@10 ~@2 g2@3 ~", E: "c3@13 ~@3",
  F: "g2@13 ~@3", G: "d2!8", H: "c2!8", I: "b1!8", J: "g1!8", K: "e1@13 ~@3", L: "a1@3 ~ g1@2 a1@4 g1@2 a1@3 ~",
  M: "[d2@5 ~ d2@2 ~@6 c2@2 d2@3 ~@3 d2@4 g2@2 ~@2 g2@2, ~@4 g2@7 ~@5]/2", N: "d2@5 ~@2 d2", O: "a2@5 ~@2 a2",
  P: "[b2@5 a2 ~ g2@6 ~@2 g2]/2", Q: "[a2@10 ~@4 a1@13 ~@3 a1@2]/2", R: "b2@5 ~@2 b2", S: "g2@5 ~@3", T: "a2@5 ~@2 b2",
  U: "c3@3 ~ c3 b2 ~ a2", V: "g2@5 ~ g2 ~", W: "b2@5 ~ b2 ~", X: "d2@5 ~ d2@4 g2@3 ~ c2@2", Y: "[d2,a2]@10 g2@3 ~ c2@2",
  Z: "a2@5 ~@3",
})).s("gm_acoustic_bass").gain(0.31)

// chords · distortion guitar · "Guitarra"
const distortion_guitar = note(`<
  ~@18 A@2 B C D E F@2 ~@19 G ~ B ~@4 H I ~@16 A@2 B C D E F@2 J@2 K@2 J@2 K@2 ~@11
>`.pickRestart({
  A: "[d3,a3,d4] ~@7", B: "[g3,d4,g4] ~@7", C: "[g3,d4,g4] ~@3", D: "[d3,a3,d4] ~@3", E: "[d3,a3,d4]@3 ~@13",
  F: "[g3,d4,g4]@3 ~@13", G: "[a3,d4,a4] ~@7", H: "[d3,a3]@5 ~@11", I: "[d3,a3]@3 ~@5",
  J: "[d3,a3,d4]@4 ~@2 d3@2 e3@2 e3@2 f#3@3 ~", K: "[g2,d3,g3]@3 ~@3 g3@2 a3@2 a3@2 b3@3 ~",
})).s("gm_distortion_guitar").gain(0.29)

// chords · distortion guitar · "Delay 1"
const distortion_guitar_2 = note(`<
  ~@18 A@2 B C D@2 E@2 F G ~ G ~@4 H ~ I ~ H J ~@3 K ~ L ~ M N@2 M O P@2 Q R S G ~ G ~@6 T U V W A@2 B X A@2 B@2 ~@3 Y ~
  Z ~ Y AA G ~ G ~@3 AB@2 ~@2
>`.pickRestart({
  A: "~ [d3,a3,d4] ~@6", B: "~ [g3,d4,g4] ~@6", C: "~@3 [g3,d4,g4]@4 ~",
  D: "~@2 [d3,a3,d4]@2 d3@2 d3@2 e3@2 e3@2 f#3@3 ~", E: "~@2 [g3,d4,g4]@2 g3@2 g3@2 a3@2 a3@2 b3@3 ~",
  F: "[e2,b2,e3] ~@2 [e2,b2,e3]@2 ~@3", G: "[a2,e3,a3]@2 ~ a3 b3!2 a3 ~", H: "[b3,d5,f#5,b5] ~@7", I: "[d3,a3,d4] ~@7",
  J: "[d4,g4,d5,g5] ~@7", K: "[g3,d4,g4] ~@7", L: "~@2 [a3,d4,a4] ~@5", M: "~@2 [g3,d4,g4] ~@5",
  N: "~@2 [d3,a3,d4] ~@5", O: "[g3,d4,g4] ~@3", P: "~@4 d3@2 d3@2 e3@2 e3@2 f#3@3 ~",
  Q: "[d3,g3,d4]@3 ~@3 [d3,g3,d4]@4 ~@6", R: "[d3,g3,d4]@3 ~@5", S: "[e2,b2,e3] ~@2 [e2,b2,e3]@3 ~ [a2,e3,a3]",
  T: "[d3,a3,d4]@3 ~@5", U: "[c3,a3,d4]@3 ~@5", V: "[b2,f#3,b3]@3 ~@5", W: "[g2,d3,g3,g4]@3 ~@5",
  X: "~@3 [g3,d4,g4]@2 ~@3", Y: "d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~", Z: "d3 ~ d3 ~ d3 ~@3 d3 ~ d3 ~ d3 ~ d3 ~",
  AA: "[e2,b2,e3] ~@2 [e2,b2,e3]@2 ~@2 [a2,e3,a3]", AB: "[~@6 g4 f#4@3 ~@6, ~@3 [a3,d4] ~@4]/2",
})).s("gm_distortion_guitar").gain(0.14)

// chords · distortion guitar · "Delay 2"
const distortion_guitar_3 = note(`<
  ~@18 A@2 B C A@2 B@2 ~ D E@2 ~@13 B ~ F ~ G H@2 I J ~@2 K@2 ~ D L@2 ~@10 A@2 B C A@2 B@2 M@3 ~ M ~ M ~@2 D L@2 ~@7
>`.pickRestart({
  A: "~@2 [d3,a3,d4] ~@5", B: "~@2 [g3,d4,g4] ~@5", C: "~ [g3,d4,g4] ~@6", D: "~@3 [a2,a3] [b2,b3]!2 [a2,a3] ~",
  E: "[[e2,b2,e3] ~@2 [e2,b2,e3]@2 ~@2 [a2,e3,a3]@3 ~ [a2,a3] [b2,b3]!2 [a2,a3] ~]/2", F: "~@4 [a3,d4,a4] ~@3",
  G: "~@4 [g3,d4,g4] ~@3", H: "[d3,a3,d4]@11 ~@5", I: "[g3,d4,g4]@11 ~@5", J: "[g3,d4,g4]@2 ~ [g3,d4,g4]@3 ~@2",
  K: "~@4 g3@2 g3@2 a3@2 a3@2 b3@3 ~",
  L: "[[e2,b2,e3] ~@2 [e2,b2,e3]@3 ~ [a2,e3,a3]@3 ~ [a2,a3] [b2,b3]!2 [a2,a3] ~]/2", // E5 A5 A B A
  M: "d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~",
})).s("gm_distortion_guitar").gain(0.07)

// chords · distortion guitar · "Delay 3"
const distortion_guitar_4 = note(`<
  ~@18 A B C ~ A@2 C@2 ~ D ~@6 E F G H E I ~@3 J ~ K ~ L M@2 N O ~@5 D ~@8 P Q R S A B C ~ T U V@2 ~@9 D ~@3 W X@2 ~@3
>`.pickRestart({
  A: "~@3 [d3,a3,d4] ~@4", B: "~@6 [d3,a3,d4]@2 ~@5 [d3,a3,d4]@2 ~", C: "~@3 [g3,d4,g4] ~@4", D: "[a2,e3,a3]@3 ~@5",
  E: "~@2 [b3,d5,f#5,b5] ~ [b3,d5,f#5,b5] ~ [b3,d5,f#5,b5] ~", F: "[b3,d5,f#5,b5] ~@7",
  G: "~@2 [d3,a3,d4] ~ [d3,a3,d4] ~ [d3,a3,d4] ~", H: "[d3,a3,d4] ~@7",
  I: "~@2 [d4,g4,d5,g5] ~ [d4,g4,d5,g5] ~ [d4,g4,d5,g5] ~", J: "~@4 [g3,d4,g4] ~ [g3,d4,g4] ~", K: "~@6 [a3,d4,a4] ~",
  L: "~@6 [g3,d4,g4] ~", M: "[d3,a3,d4]@11 ~@5", N: "[g3,d4,g4]@11 ~@5", O: "[g3,d4,g4]@2 ~ [g3,d4,g4]@3 ~@2",
  P: "[d3,a3,d4]@5 ~@3", Q: "[c3,a3,d4]@5 ~@3", R: "[b2,f#3,b3]@5 ~@3", S: "[g2,d3,g3,g4]@5 ~@3",
  T: "d3 ~ d3 ~ d3 ~ [d3,a3,d4]@2 ~@2 d3 ~ d3 ~ d3 ~", U: "d3 ~ d3 ~ d3 ~ [d3,a3,d4]@2 d3 ~ d3 ~ d3 ~ d3 ~",
  V: "d3 ~ d3 ~ d3 ~ [d3,g3,d4,g4]@2 d3 ~ d3 ~ d3 ~ d3 ~", W: "~@12 [a3,d4,g4]@3 ~",
  X: "[~@6 g4 f#4@2 ~@7, ~@3 [a3,d4] ~@4]/2", // D5
})).s("gm_distortion_guitar").gain(0.03)

// other · electric guitar clean · "Guitarra Suja (final)"
const electric_guitar_clean = note("<~@90 A@2 B ~@4>".pickRestart({
  A: "[d3@21 ~@9 d3@2]/2", B: "d3@5 ~@3",
})).s("gm_electric_guitar_clean").gain(0.47)

// other · lead 5 charang · "Bono Grave"
const lead_5_charang = note(`<
  ~@6 A@2 B@2 C@3 D@2 E@2 ~@5 F@2 G H I ~ J@2 ~@2 A@2 B@2 K@3 ~@7 L M F@2 G ~@4 N I ~ J@2 ~@2 O@4 ~@8 F@2 P ~ F@2 ~@2
  F@2 ~ Q R ~ J@2 ~@7
>`.pickRestart({
  A: "[a3@2 b3@2 d4 ~ e4@4 f#4@2 ~@2 e4@6 ~@4 e4@3 ~ d4 ~@3]/2", B: "[~ d4@9 ~@6]/2",
  C: "[a3@2 b3@2 d4 ~ e4@4 f#4@3 ~ e4@7 ~ d4 ~ e4@2 ~ d4 ~@2 a4@8 ~@2 a4@2 g4 ~ f#4 ~ e4@2]/3",
  D: "[~@2 d4@3 ~@3 d4@2 e4@2 d4@2 a4@8 ~@10]/2", E: "[~@10 b4 ~ f#4 ~@2 a4@8 ~@9]/2", F: "f#4@3 ~ e4 ~ d4@10",
  G: "f4@2 ~@2 e4@2 ~@2 d4@2 ~@2 b3 ~ a3 ~", H: "f4@2 f4 ~ e4 ~ d4@10", I: "b3 ~@7",
  J: "[~@4 d4 ~ e4@4 d4 ~@3 a4@8 ~@10]/2",
  K: "[a3@2 b3@2 d4 ~ e4@4 f#4@3 ~ e4@7 ~ d4 ~ e4@2 ~ d4 ~@2 a4@7 ~ a4@2 f#4@2 e4@2 ~@2 d4@2]/3",
  L: "~@8 a4 ~ g4 ~ f#4 ~ e4 ~", M: "e4@3 ~ f#4 ~ d4@10", N: "~@6 b3 a3",
  O: "[a3 ~ b3 ~ d4 ~ e4@4 f#4@3 ~ e4@7 d4@2 ~ e4@3 d4 ~@2 b3@11 ~ a3@4 g3@15 ~@3]/4", P: "f4 ~@7", Q: "~@12 b3@2 a3 ~",
  R: "b3 ~ d4@2 ~@2 e4@4 d4@2 ~@2 a4@2",
})).s("gm_lead_5_charang").gain(0.29)

// other · lead 5 charang · "Bono Agudo"
const lead_5_charang_2 = note(`<
  ~@7 A@2 ~@5 B@2 C D E@2 F G ~@3 H I J K L ~@3 A@2 ~@4 M@4 N O@3 ~@4 G E@2 P G I J K L ~@6 Q@4 E@2 F G ~@2 R S ~ T U V
  ~ T W@2 ~ J K L ~@7
>`.pickRestart({
  A: "[~@7 b3@2 ~@7]/2", B: "[~@10 b4 ~ f#4 ~ a4@9 ~@9]/2", C: "~@8 a4 ~ g4 ~ f#4 ~ e4 ~", D: "e4@3 ~ f#4 ~ d4@10",
  E: "f#4@3 ~ e4 ~ d4@10", F: "f4@3 ~ e4@2 ~@2 d4@2 ~@2 b3 ~ a3 ~", G: "f4@2 f4 ~ e4 ~ d4@10", H: "~@12 b3@2 a3 ~",
  I: "b3 ~ d4@2 ~@2 e4@4 d4@2 ~@2 a4@2", J: "a4@3 ~@11 a3 ~", K: "b3 ~@7", L: "~@6 f#4 e4 f#4 a4@2 ~@5",
  M: "[~@8 d4@2 e4@2 d4@2 a4@8 ~@4 b4@2 f#4@2 a4@8 ~@4 b4@2 f#4@2 a4@8 a4@2 a4 ~ g4 ~ f#4 ~ e4 ~]/4",
  N: "e4@3 ~ f#4 ~ d4@4 e4@2 ~@4", O: "[a4@3 ~@2 b4 f#4 a4@4 ~@2 b4 f#4 a4@4 ~@5]/3",
  P: "f4@2 ~@2 e4@2 ~@2 d4@2 ~@2 b3 ~ a3 ~",
  Q: "[a3 ~ b3 ~ d4 ~ e4@4 f#4@3 ~ e4@7 d4@2 ~ e4@3 d4 ~@2 b3@11 ~ a3@2 ~@2 g3@15 ~@3]/4", R: "f4!2 e4 d4@3 e4 d4",
  S: "f4!2 e4 d4 ~@4", T: "~@7 d4", U: "f4 ~ f4@2 e4@4 d4@4 e4@3 ~", V: "f4!2 e4 d4@5",
  W: "[f4@2 f4@2 e4@2 d4@4 e4@3 ~ f4@4 e4@3 ~ d4@10]/2",
})).s("gm_lead_5_charang").gain(0.29)

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

// drums · snare
const snare = s("sd").struct("<~ A@16 B C@12 A@17 B C@12 D@9 E F@8 C@12 G@6 ~>".pickRestart({
  A: "~@2 x ~@2 x ~@2", B: "~@2 x ~@2 x ~ x", C: "~ x ~ x", D: "~@4 x ~@5 x!3 ~@3", E: "~@4 x ~@5 x!3 ~ x ~",
  F: "~@4 x!2 ~@6 x!2 ~@2", G: "~@4 x!2 ~@4 x!2 ~@4",
})).gain(0.29)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@60 [~@5 x!3 ~@5 x ~@2]!10 [~@6 x!2 ~@6 x!2]!8 ~@12 [~@6 x!2 ~@4 x!2 ~@2]!6 ~>")
  .gain(0.15)

// drums · china
const china = s("cr").struct(`<
  ~ A@2 ~ A@3 ~ A@3 ~ A@3 ~ A B ~@8 C@4 ~ A ~@2 A@2 ~ A ~ A@8 B ~@8 C@4 ~ A ~ A ~ A ~ A ~ B ~@16 C@4 ~ A ~@3 A D
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~ x", C: "x ~@2 x ~ x ~@2", D: "x!4 ~@12",
})).gain(0.29)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@16 B A@8 C A@20 B A@8 C A@3 D@10 E@8 A@8 C A@9 ~>".pickRestart({
  A: "x!8", B: "x!6 ~ x", C: "x ~@2 x!5", D: "x!4 ~ x!2 ~", E: "x!4 ~ x!3",
})).gain(0.29)

stack(
  glockenspiel, bass, distortion_guitar, distortion_guitar_2, distortion_guitar_3, distortion_guitar_4,
  electric_guitar_clean, lead_5_charang, lead_5_charang_2, kick, snare, snare_soft, china, tambourine
)

More by U2