Strudelify

Rapture

Blondie

KeyE minorTempo108 bpm
0:00/0:00
// Rapture — Blondie
// 108 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(108/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(`<
  ~@5 A B C@2 D C@2 E A B C@2 D C@2 E A B C@2 F G F H A B C@2 A B C@2 D C@2 E A B C@2 F G F H A B C@2 A B C@2 A B C@2 A
  B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 D C@2 E A B C@2 F G F H A B C@2 A B C@2 A B C@2
  I@3
>`.pickRestart({
  A: "e1@3 e2@2 e1 c#2 d2 ~ e2 f#2 ~ g2@2 ~@2", B: "e1@2 ~ e1 ~ b1 c#2 d2 ~ e2 f#2 ~ g2@2 ~@2, ~ e2 ~@6",
  C: "e1@2 e2 e1 ~ b1 c#2 d2 ~ e2 f#2 ~ g2@2 ~@2", D: "e1@2 e2 e1@2 b1 c#2 d2 ~ e2 f#2 ~ g2@2 ~@2",
  E: "e1@2 e2 e1 ~ b1 c#2 d2 ~ e2 f#2 ~ g2 ~@3", F: "f1 f2 f1 f2 a1 a2 a1 a2",
  G: "c2@2 c3@2 c2@2 c3@2 e2@2 e3@2 e2 ~ e3@2", H: "c2@2 c3@2 c2@2 c3@2 g1@2 g2@2 g1@2 g2 ~",
  I: "[e1@5 e1@2 ~@2 e1 e2!2 e1 e2 ~@4 e2@24 ~@6, ~@7 e1@2 ~ e1@2 ~ e1@2 e1@2 e1@7 ~@24, ~@4 e2 ~@2 e2 e2 ~@15]/3",
})).s("gm_electric_bass_finger").gain(0.41).pan(0.6)

// chords · piano
const piano = note(`<
  ~@4 A B@2 C D E F G@2 B@2 C D E F G@2 B@2 C D H I J K B@2 C D B@2 C D E F G@2 B@2 C D H I J K B@2 C D B@2 C D B@2 C D
  B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D E F G@2 B@2 C D H I J K B@2 C D B@2 C D B@2 C
  L M@3
>`.pickRestart({
  A: "~@7 [g3,e4], ~@5 b4@3, ~@5 e4@2 ~, ~@3 [b3,g4]", // C Em
  B: "[[e2,e3]@13 ~@3 b4@10 ~@4 e4@2, [d4,e4,g4,b4]@15 d4@13 g4@4, ~@13 e2@19, ~@7 e3@9, ~@8 [e4,g4]@5 b4@3]/2", // E Em7 Em
  C: "[e2,e3,d4,e4,g4,b4]", D: "[e2,e3,d4,e4,g4,b4]@15 ~", E: "[a3,c#4,e4,a4]",
  F: "a4@8 ~@4 [a3,c#4,e4]@3 ~, [a3,c#4,e4]@3 ~, ~@8 [a4,c#5,e5]@7 ~", // A
  G: "[e2@12 ~@4 [e4,g4,b4]@13 ~@3, [d4,e4,g4,b4]@15 d4@14 ~@3, e3@7 e3@7 ~@2, ~@12 e2@17 ~@3]/2", // Em Em7
  H: "[f2,f3,a3,c4,f4] [a2,e3,a3,c#4,e4]", I: "[c3,g3,c4,e4,g4] [e3,g3,b3,e4,g4,b4]",
  J: "[f2,f3,a3,c4] [a2,e3,a3,c#4,e4]", K: "[c3,g3,c4,e4,g4]@4 [g2,g3,b3,d4]@3 ~",
  L: "~@8 [b6,c7] [g6,a6] [d6,e6,f6] [a5,b5,c6] [e5,f5,g5] [c5,d5] ~ [c4,d4,e4], [e2,e3,d4,e4], [g4,b4]@7 [f4,g4,a4,b4]", // Cmaj7 Gsus2 Dm Am Em Csus2 C E7 …
  M: "[~@13 a5@11, e2@4 e3 b4@6 e2@13, e3@6 [e4,a4]@8 e3@2 e2 a5@2 [e3,g5]@29, ~@3 d4@9 d5@11 d6@25, ~@2 f#4@5 e5@16 ~]/3", // A5 Em
})).s("gm_piano").gain(0.36).pan(0.8)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@4 A B C D E F G H I B C D E F G H I B C D E J K L M B C D E B C D E F G H I B C D E J K L M B C D E B C D E B C D E
  B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E F G H I B C D E J K L M B C D E B C D E B C D
  E N@3
>`.pickRestart({
  A: "~@7 e3, ~@5 g4@3, ~@3 e4",
  B: "[g4,b4,e5] ~ [g4,b4,e5]!2 ~ [g4,b4,e5] ~ [g4,b4,e5] ~@2 [g4,b4,e5] ~ [g4,b4,e5] e4 [g4,b4,e5] ~, ~ e4@2 ~@6 e4@2 ~@5", // Em
  C: "[g4,b4,e5] ~@2 [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~@4 [g4,b4,e5] ~ g4 ~, ~ [g4,b4,e5]@2 ~@7 [g4,b4,e5]@2 ~@4, ~@2 e4@2 ~@5 e4@2 e4@2 ~@3", // Em
  D: "~@3 e4 ~ [g4,b4,e5] ~ [g4,b4,e5]@2 e4 [g4,b4,e5] ~@3 [g4,b4,e5] ~, [g4,b4,e5]!2 ~@4 [g4,b4,e5] ~, ~ e4@2 ~@10 e4@2 ~", // Em
  E: "~@2 [g4,b4,e5]!2 ~ [g4,b4,e5] ~ [g4,b4,e5] ~ e4 [g4,b4,e5] ~@4 e4, [g4,b4,e5] ~@5 [g4,b4,e5]!2, ~ e4@3 ~@9 e4@2 ~", // Em
  F: "[g4,b4,e5] e4 [g4,b4,e5] e4 ~ [g4,b4,e5] ~ [g4,b4,e5] ~ e4 [g4,b4,e5] ~@3 [g4,b4,e5] e4, ~@6 [g4,b4,e5] ~, ~@13 e4@2 ~", // Em
  G: "[g4,b4,e5] ~ [g4,b4,e5]!2 ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] e4 ~ [g4,b4,e5] e4 [g4,b4,e5] e4, ~ e4@2 ~@13", // Em
  H: "~@2 [g4,b4,e5] e4 ~ [g4,b4,e5] e4 [g4,b4,e5] ~ [g4,b4,e5] e4 ~ [g4,b4,e5] e4 [g4,b4,e5] e4, [g4,b4,e5] ~@7, ~ e4@2 ~@13", // Em
  I: "~@2 [g4,b4,e5] e4 ~ [g4,b4,e5] e4 [g4,b4,e5] ~ [g4,b4,e5] e4 ~ [g4,b4,e5] e4 [g4,b4,e5] ~, [g4,b4,e5] ~@7, ~ e4@2 ~@13", // Em
  J: "[f3,c4,f4,a4,c5]@2 ~ [f3,c4] [f4,a4,c5]@2 [f4,a4,c5]!2 ~@2 [c#4,e4,a4] [c#4,e4,a4]@3 [c#4,e4,a4]@2, ~ [f4,a4,c5] ~@6", // F F5 F A F
  K: "[c3,g3]@2 [c4,e4,g4] [c4,e4,g4]@2 ~ [c4,e4,g4]@2 [e3,g3,b3]@2 [e4,g4] ~ [e3,g3,b3]@2 [e4,g4]!2, ~@11 [e4,g4]@3 ~@2", // C5 C Em
  L: "~@2 [f3,a3,c4] ~@2 [f3,a3,c4] ~@4 [a3,c#4,e4]@3 [a3,c#4,e4] ~@2", // F A
  M: "[c3,g3]@2 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@2 [g3,d4] ~ [g4,b4] [g3,d4] ~ [g3,d4] [g4,b4] ~, ~@2 [c4,e4,g4] ~@5, ~@5 [c3,g3]@3 ~@8", // C5 C G5 G G5 G C C5
  N: "[[e3,b3,d4,g4]@2 g4 [e3,b3,g4] [e3,b3] [e3,b3,g4,b4] [g4,b4] [e3,b3,g4,b4] b3 ~@5 [a4,d5]@2 [a4,d5] [a4,d5]@2 ~ [a4,d5]@2 ~@3 [a4,d5] [a4,d5]@18 ~@4, b4@5 ~@3 b4@32 ~@8, ~@2 d4@17 b3@3 [a4,d5] b3@21 ~@4, ~@8 e3@3 g4@32 ~@5, ~@8 g4 b3@3 a4 e3@6 e3@26 ~@3]/3", // Em7 Em E5 Em G Em D5
})).s("gm_electric_guitar_clean").gain(0.26).pan(0.2)

// chords · alto sax
const alto_sax = note(`<
  ~@21 A B C D E F G ~ H@3 ~@9 A B C D E F G ~ H@3 ~ I ~ J ~ K ~ L M I ~ J ~ K ~ L M N O P Q R S T U N O P Q R S T U
  ~@16 A B C D E F G ~ H@3 ~ N O P Q R S T U V W@2
>`.pickRestart({
  A: "[d4,g4,b4] ~@15", B: "~@2 [d4,g4,b4] ~@2 [d4,g4,b4] ~@10", C: "~@10 [d4,g4,b4,e5] ~@5",
  D: "~@2 b4 ~ b4 g4 ~ d4 ~ d4 a4 g4 d4 ~@3", E: "[a4,c5] ~ [f4,a4,c5] ~@2 [f4,a4,c5] ~@6 [a3,c#4,e4] ~@3",
  F: "~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~@10", G: "~@2 [f4,a4,c5] ~@2 [f4,a4,c5] ~@10",
  H: "[[e4,g4,b4]@33 ~ [e4,g4,b4] ~@2 [e4,g4,b4] ~@10]/3", I: "~@4 c#4@4 d4 ~@2 [g4,b4,d5] ~@4",
  J: "~@10 [g4,b4] ~ [g4,b4]!2 ~@2", K: "~@4 [c#4,c#5]@4 [d4,d5] ~@2 [g4,b4] ~@4", L: "~@2 g5 d5 g4 e5 ~@10",
  M: "~@2 [e4,g4,b4] ~ [e4,g4,b4]!2 ~@10", N: "~@2 [e4,b4,e5] ~@13", O: "~@2 [e4,b4,e5] ~ [d4,d5] [e4,e5] ~@10",
  P: "~@10 [g4,b4,d5] ~ [a4,c#5,e5]!2 ~@2", Q: "~@12 b4 a4 g4 ~", R: "~@10 [g4,b4,e5] ~@5", S: "~@10 [e4,g4,b4] ~@5",
  T: "~@4 [c#4,c#5]@4 [d4,d5] ~@7", U: "~@10 [b4,e5,g5] ~@2 [e5,g5] ~@2", V: "d5@5 ~ [a4,b4] b4 a4 g4 ~ a4 g4 ~ e4 ~",
  W: "[g4 ~ e4 ~ d4 ~ e4 ~@2 b3@22 ~]/2",
})).s("gm_alto_sax").gain(0.41)

// other · vibraphone
const vibraphone = note(`<
  ~@13 A@2 B@2 C@2 D@2 A@2 E@2 F G H I J@2 ~@2 A@2 B@2 C@2 D@2 A@2 E@2 F G H I J@2 ~@42 A@2 B@2 C@2 D@2 A@2 E@2 F G H I
  J@2 ~@13
>`.pickRestart({
  A: "[b4@3 ~ c5@3 ~ b4@4 a4@2 b4@9 ~ g4@4 a4@3 ~]/2", B: "[b4@2 g4 e4@8 ~ e4@2 b4@2]/2",
  C: "[a4@23 ~ g4@3 ~ a4@3 ~]/2", D: "[b4@3 ~ e5@2 e4@14 ~@12]/2", E: "[b4@2 g4 e4@8 ~ e4@2 e4@2]/2", F: "f4@8 a4@7 ~",
  G: "g4@7 ~ b4 c5 b4@6", H: "f4@3 ~ f4@3 ~ a4@3 ~ a4@4", I: "c5@4 g4@3 ~", J: "[e4@5 ~ e4@17 ~@9]/2",
})).s("gm_vibraphone").gain(0.51).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~ [x!2]!120 x ~@2>").gain(0.46)

// drums · snare
const snare = s("sd").struct("<A B@3 C B@7 D B@39 C B@31 C B@7 E B@19 C B@7 F ~@3>".pickRestart({
  A: "~@14 x!2", B: "~ x ~ x", C: "~@4 x ~@7 x ~ x!2", D: "~@4 x ~@5 x ~ x ~ x!2", E: "~@4 x ~@3 x!8",
  F: "~@4 x ~@4 x!7",
})).gain(0.41)

// drums · clap
const clap = s("cp").struct("<~@109 [~ x ~ x]!12 ~@3>").gain(0.46)

// drums · low tom
const low_tom = s("lt").struct("<~@4 A ~@47 A ~@31 B ~@27 A ~@7 C ~@3>".pickRestart({
  A: "~@7 x ~@8", B: "~@5 x ~@10", C: "~@7 x ~@2 x ~@3 x ~",
})).gain(0.46)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C
  B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B
  C B C ~@3
>`.pickRestart({
  A: "x!4", B: "x!8", C: "x!3 ~ x!4",
})).gain(0.41)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@2 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 ~ A ~ A ~
  A ~ A ~@3
>`.pickRestart({
  A: "~@3 x ~@4",
})).gain(0.26)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A ~@47 B ~@31 C ~@27 B ~@7 D ~@3>".pickRestart({
  A: "~@5 x ~@2", B: "~ x", C: "~@7 x ~@4 x ~@3", D: "~@9 x ~@3 x ~@2",
})).gain(0.46)

// drums · open hat
const open_hat = s("oh").struct("<~@84 [~ x ~@14] ~@35 [~ x ~@6] [~ x!4 ~ x!9 ~] [x!2 ~ x!2 ~@3 x ~@7] ~>").gain(0.31)

// drums · high tom
const high_tom = s("ht").struct("<~@4 A ~@47 B ~@31 C ~@27 B ~@7 D ~@3>".pickRestart({
  A: "~@2 x!2", B: "~@3 x ~ x ~@2", C: "~@6 x ~@2 x ~ x ~@4", D: "~@6 x ~ x ~@3 x ~@2 x",
})).gain(0.46)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@7 A ~@7 A ~@3 A ~ A ~ A ~@3 A ~@7 A ~@3 A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@7 A ~@3 A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@2
>`.pickRestart({
  A: "x",
})).gain(0.46)

// drums · ride
const ride = s("rd").struct("<~@121 [x ~ x!10 ~ x!3] [x ~ x!2 ~@2 x!2 ~@8] ~>").gain(0.31)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B ~@3
>`.pickRestart({
  A: "x ~ x!3 ~ x!7 ~ x!2", B: "x!16",
})).gain(1.82)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct(`<
  ~ 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 ~ A ~ A ~ A
  ~ A ~@4
>`.pickRestart({
  A: "~ x ~@3 x ~@7 x ~@2",
})).gain(1.04)

stack(
  bass, piano, electric_guitar_clean, alto_sax, vibraphone, kick, snare, clap, low_tom, hihat, hihat_soft, mid_tom,
  open_hat, high_tom, crash, ride, cabasa, cabasa_soft
)

More by Blondie