Strudelify

Sussudio

Phil Collins

KeyF majorTempo120 bpm
0:00/0:00
// Sussudio — Phil Collins
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 3 pad poly (copy of ch 9 epiano2); ch 6 electric guitar clean (copy of ch 5 electric guitar muted)
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · slap bass 2
const bass = note(`<
  ~@5 A B A C D E D E D E D E D E D E D E D E D E D E D E D E F G H I J K J L D E D E D E D E D E D E D E D E D E D E D
  E D E F G H I J K J L D E D E D E D E D E D E D E D E J K J L D E D E D E D E D E D E D E D M ~@8
>`.pickRestart({
  A: "~@5 c2 a1 g1 c2!2 ~@6", B: "~@13 c2 ~ c2", C: "~@4 a1@2 ~@2 a1@2 ~@2 a1@2 ~ c2",
  D: "c1 ~@2 c2 ~ c2 a1 g1 c2!2 ~@5 c2", E: "~ c2 a1 g1 c2!2 a1 g1 c2 g1 a1 c2 ~ c2 ~ c2",
  F: "a1 ~@3 a1 ~@3 a1 ~@3 a1 ~@2 a1", G: "a1 ~@3 a1 ~@3 a1 ~ a1 ~ a1 ~@3", H: "a1 ~@3 a1 ~@3 a1@2 ~@2 a1 ~@2 a1",
  I: "a1@2 ~@2 a1 ~@3 a1 ~ a1 ~ g1 a1 ~ a1", J: "a1@2 ~@2 a1 ~@3 a1 ~@3 a1 ~@2 a1",
  K: "a1@2 ~@2 a1 ~@3 a1 ~ a1 ~ a1@2 ~@2", L: "a1@2 ~@2 a1@2 ~@2 a1@2 ~@2 c3@2 c2 ~",
  M: "~ c2 a1 g1 c2!2 a1 g1 c2 g1 a1 c2 ~@4",
})).s("gm_slap_bass_2").gain(0.36)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@8 A B C B C B C B C ~@4 D E F G H ~@3 I J K L M N O@2 P N Q@2 B R B C B C B C ~@4 D E F G H ~@3 I J K L M N O@2 P N
  Q@2 B R B C B C B C S@3 T U V W X P N Q@2 B R B C B C B C Y R B C B C B Z ~@8
>`.pickRestart({
  A: "~@4 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~@2 [e4,g4]", B: "c4!5 ~@5 c4 ~@5", C: "c4!5 ~@4 c4 ~@3 c4 ~@2",
  D: "bb3 c4 ~ c4 ~ c4!5 ~ c4 ~@2 c4 ~", E: "~ c4!9 d4 ~ c4 ~ c4 a3", F: "~ c4 ~ c4 ~ c4!5 ~ c4 ~ c4!3",
  G: "c4!9 ~ d4 ~ c4 ~@2 c4", H: "~ c4!3 ~@12", I: "c4!2 ~ c4 ~ c4 ~ c4 ~ c4!4 ~@2 c4",
  J: "~ c4!6 ~ c4!2 ~ c4 ~ c4 ~ c4", K: "~ c4!4 ~@2 c4!5 ~ c4 ~ c4", L: "~ c4!6 ~ c4!2 d4 ~ c4 ~@3",
  M: "~@8 g3 ~@3 g3 ~@3", N: "f3@13 ~@3", O: "[a3!4 ~@2 a3@2 g3 ~@3 g3@2 ~ [f3,a3]@15 ~@2, ~@15 c4@13 ~@4]/2",
  P: "[a4,c5]@2 ~@2 g3 ~@3 g3 ~@3 g3@2 ~@2", Q: "[a3!4 ~@2 a3@2 g3 ~@3 g3 ~@2 f3@15 ~@2]/2",
  R: "c4!4 ~ c4 ~ c4 ~ c4 ~@6",
  S: "[~ c4 a3 g3 ~@2 a3 g3 d4 ~ d4 ~ c4 a3 g3 c4@2 c4 a3 g3 c4!2 a3 g3 bb3!2 a3 g3 eb3 e3 g3 ~ c4!2 a3 g3 c4 a3 g3 ~ d4 ~ d4 ~@2 a3 g3 c4, ~@31 a3@3 ~@14]/3",
  T: "~ c4 a3 g3 a3 g3 a3 bb3 e4 ~ g4 a4 eb4 d4 c4!2", U: "~ c4 a3 g3 c4!2 a3 g3 d4 ~ d4 ~@2 a3 g3 c4",
  V: "~ c4 a3 g3 c4!2 a3 g3 bb3 a3 g3 a3 eb3 e3 g3 a3", W: "c4!2 a3 g3 c4!2 a3 g3 ~@2 d4 ~ [c4,d4] a3 g3 c4",
  X: "~ c4 a3 g3 c4 a3@2 g3 d4 ~ d4 c4 ~ c4 a3 ~", Y: "c4!4 ~@6 c4 ~@5", Z: "c4!5 ~@4 c4 ~@6",
})).s("gm_electric_guitar_muted").gain(0.25).pan(0.3)

// other · brass section
const brass_section = note(`<
  ~@8 A B C ~ D E F@2 G ~@7 H ~@4 I@2 ~@2 J ~ K L ~@2 M N ~@2 O P ~@2 Q R ~ C ~@2 S T H C ~ C U ~ V@2 ~@2 W ~ M X ~@2 M
  N ~@2 Y Z ~@2 AA AB AC AD AC AE AF AG AC AH W ~ M N ~@2 Y Z ~@2 AA R AC AD AC AE AF AG AC AI ~@8
>`.pickRestart({
  A: "~@2 [a4,a5] ~ [a4,a5] ~ [a4,a5] ~", B: "[c5,c6]@2 b4 [g4,a4,g5,a5,b5] [f4,f5] ~@11", C: "~@15 [c5,c6]",
  D: "~@12 [c5,c6] ~ [d5,d6] [c5,c6]", E: "~@6 [c5,c6] ~",
  F: "[~@10 [c5,c6] [a4,a5]!2 [c5,c6] [a4,a5] [c5,c6]@2 [d5,d6] [e5,e6] ~@13]/2", // C A C A C D E
  G: "~@4 [c5,c6] ~ [c5,c6] ~ [c5,c6] ~ [d5,d6] [c5,c6] ~ [d5,d6] [c5,c6] ~", H: "[c5,c6] ~ [c5,c6]!2 ~@12",
  I: "[~@15 f5@2 [e4,e5] [c4,c5] ~@13, ~@15 f4@16 ~]/2", J: "[a4,a5]@3 ~@13", K: "~@15 [g4,g5]",
  L: "[a4,a5] ~ [a4,a5] ~ [g4,g5] [a4,a5] ~ [a4,a5] ~@4 [g4,g5] [a4,a5] ~ [a4,a5]", M: "~@15 [a4,a5]",
  N: "~ [e4,e5] [g4,g5]!2 ~ [g4,g5] ~ [a4,a5] ~@4 [bb4,bb5] [b4,b5] ~ [c5,c6]", // E G A Bb B C
  O: "~@9 [c5,c6] [a4,a5]!2 [c5,c6] ~ [a4,a5] [c5,c6]", // C A C A C
  P: "~ [c5,c6] [a4,a5] ~ [c5,c6] ~ [c5,c6] ~ [a4,a5] [c5,c6] ~@2 [c5,c6]!2 ~ [c5,c6]", // C A C A C
  Q: "~@10 [c4,c5] ~ [e4,e5] [g4,g5] [a4,g5,a5] ~", // C E G A7
  R: "[bb4,bb5] [g4,g5] [a4,a5] [bb4,bb5] ~@4 [c5,c6] ~ [c5,c6] ~@2 [c5,c6]!3", S: "~@11 [c5,c6] ~@4",
  T: "[c5,c6] ~ [c5,c6,eb6] [c5,c6] ~@4 [c5,c6]!2 [a4,a5] [g4,g5] [c5,c6]!2 [a4,a5] [g4,g5]", U: "~ [a4,a5] ~@14",
  V: "[~@8 [f4,f5] ~ [f4,f5] ~@2 [f4,f5]!2 f5@2 [e4,e5] [c4,c5] ~@13, ~@15 f4@16 ~]/2", W: "[a4,a5] ~@7",
  X: "~@2 [e4,e5] ~ [g4,g5] [a4,a5] ~ [a4,a5] ~@2 [e4,e5] ~ [g4,g5] [a4,a5] ~ [a4,a5]", // E G A E G A
  Y: "~@9 [c5,c6] [a4,a5] [g4,g5] [c5,c6] ~ [a4,a5] [c5,c6]", // C A G C A C
  Z: "~ [c5,c6] [a4,a5] ~ [c5,c6] ~ [c5,c6] ~ [c5,c6]!2 ~ [c5,c6]!3 ~ [c5,c6]", // C A C
  AA: "~@10 [c4,c5] ~ [e4,e5] [g4,g5] [a4,a5] ~", // C E G A
  AB: "[bb4,bb5] [ab4,g5] [a4,a5] [bb4,bb5] ~@4 [c5,c6] ~ [c5,c6] ~@2 [c5,c6]!3", // Bb Abmaj7 A Bb C
  AC: "~@3 [c5,c6] ~ [c5,c6] [a4,a5] [g4,g5] [c5,c6]!2 ~@5 [c5,c6]", // C A G C
  AD: "~ [c5,c6] [a4,a5] [g4,g5] [c5,c6]!2 [a4,a5] [g4,g5] [c5,c6] [g4,g5] [a4,a5] [c5,c6] ~ [c5,c6] ~ [c5,c6]", // C A G C A G C G …
  AE: "~ [c5,c6] [a4,a5] [g4,g5] [c5,c6]!2 [a4,a5] [g4,g5] [c5,c6] [g4,g5] [a4,a5] [c5,c6] ~ [b4,c5,c6] ~ [c5,c6]", // C A G C A G C G …
  AF: "~ [c5,c6] ~ [c5,c6] ~ c6 [a4,a5] [g4,g5] [c5,c6]!2 ~@5 [c5,c6], ~@5 c5@2 ~@9", // C A G C
  AG: "~ [c5,c6] [a4,a5] [g4,g5] [c5,c6]!2 ~@2 [c5,c6] ~@2 [c5,c6] ~ [c5,c6] ~ [c5,c6]", // C A G C
  AH: "~ [c5,c6] [a4,a5] [g4,g5] [c5,c6]!2 ~@2 [c5,c6] ~@2 [c5,c6] ~ [c5,c6] ~@2", // C A G C
  AI: "~ [c5,c6] [a4,a5] [g4,g5] [c5,c6]!2 ~@2 [c5,c6] ~@2 [c5,c6] ~@4", // C A G C
})).s("gm_brass_section").gain(0.4)

// other · trombone
const trombone = note("<~@81 A B A B C D E F ~@28>".pickRestart({
  A: "~@3 c5 ~ c5 a4 g4 c5!2 ~@5 c5", B: "~ c5 a4 g4 c5!2 a4 g4 c5 g4 a4 c5 ~ c5 ~ c5",
  C: "~@3 c5 ~ c5 a4 g4 c5 ~@2 d4 e4 g4 a4 g4", D: "bb4 g4 a4 g4 c5!2 a4 g4 c5 g4 a4 c5 ~ c5 ~ c5",
  E: "~ c5 ~ c5 ~ c5 a4 g4 c5!2 ~ d4 e4 g4 a4 g4", F: "bb4 g4 a4 g4 c5!2 a4 g4 c5 g4 a4 c5 ~ c5 ~@2",
})).s("gm_trombone").gain(0.4)

// chords · epiano2
const epiano2 = note(`<
  ~ A@2 B@2 A@2 C ~ A@2 B@2 A@2 D@2 E@2 F@2 G@2 F@2 G@2 H@2 G@2 I@2 J@2 K@2 L@2 M@2 A@2 B@2 A@2 D@2 E@2 F@2 G@2 F@2 G@2
  H@2 G@2 I@2 J@2 N@2 L@2 M@2 A@2 B@2 A@2 D@2 O@2 B@2 A@2 P@2 Q@2 M@2 A@2 B@2 A@2 D@2 R@2 B@2 A@2 S@2 ~@8
>`.pickRestart({
  A: "[~@4 [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~@3 [c4,f4,a4] ~@2 [bb3,d4,f4]@16 ~]/2", // C F Bb
  B: "[~@4 [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,f4,a4] ~@3 [c4,f4,a4] ~@2 [bb3,d4,f4]@7 ~@2 [d4,bb4]@2 ~@2 [c4,f4,a4]@2 ~ [c4,e4,g4], ~@24 f4 ~@7]/2", // C F Bb Gm F C
  C: "~@4 [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,f4,a4] ~@3 [c4,f4,a4] ~@2 [bb3,d4,f4]", // C F Bb
  D: "[~@4 [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,f4,a4] ~@3 [c4,f4,a4] ~@2 [bb3,d4,f4]@8 ~ [d4,f4,bb4]@2 ~@2 [c4,f4,a4]@2 ~ [c4,e4,g4]]/2", // C F Bb F C
  E: "[~@8 [c4,e4,g4] ~@6 [c4,f4,a4]@15 ~@2]/2", F: "[~@8 [d4,g4,bb4] ~@6 [c4,f4,a4]@16 ~]/2",
  G: "[~@8 [c4,e4,g4] ~@6 [c4,f4,a4]@16 ~]/2", H: "[~@8 [d4,g4,bb4]@2 ~@5 [c4,f4,a4]@16 ~]/2",
  I: "[~@8 [d4,g4,bb4] ~@6 [c4,f4,a4]@14 ~@3]/2", J: "[[a3,c4,e4]@7 ~ [g3,b3,d4]@7 [f3,a3,c4,e4]@16 ~]/2",
  K: "[[a3,c4,e4]@7 ~ [g3,b3,d4]@3 ~@4 [f3,e4]@15 ~@2, ~@15 c4@13 ~@4]/2", // Am G Fmaj7
  L: "[[a3,c4,e4]@8 [g3,b3,d4]@6 ~ [f3,a3,c4,e4]@16 ~]/2", M: "[[a3,c4,e4]@7 ~ [g3,b3,d4]@6 ~ [f3,a3,c4,e4]@15 ~@2]/2",
  N: "[[a3,c4,e4]@7 ~ [g3,b3,d4]@4 ~@3 [f3,e4]@15 ~@2, ~@15 c4@13 ~@4]/2", // Am G Fmaj7
  O: "[~@4 [c4,g4] ~ [c4,g4] ~ [c4,e4,g4] ~@3 [c4,f4,a4] ~@2 [bb3,d4,f4]@16 ~]/2", // C5 C F Bb
  P: "[~@4 [c4,e4,g4] ~ [c4,e4,g4] ~ [f4,a4] ~@3 [c4,f4,a4] ~@2 [bb3,d4,f4]@8 ~ [d4,f4]@2 ~@2 [c4,f4,a4]@2 ~ [c4,e4,g4]]/2", // C F Bb Dm F C
  Q: "[[c4,e4]@8 [g3,b3,d4]@6 ~ [f3,a3,c4,e4]@16 ~]/2", // C G Fmaj7
  R: "[~@4 [e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~@3 [c4,f4,a4] ~@2 [bb3,d4,f4]@16 ~]/2", // Em C F Bb
  S: "[~@4 [c4,e4,g4] ~ [c4,e4,g4] ~ [f4,a4] ~@3 [c4,f4,a4] ~@2 [d4,f4]@7 ~@2 [d4,f4,bb4]@2 ~@6]/2", // C F Dm Bb
})).s("gm_epiano2").gain(0.32).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@9 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 C ~@8
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x!3 ~", C: "x ~ x ~ x!2 ~@2",
})).gain(0.42)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@11 A ~@3 A B ~ A ~@18 A B A C ~@12 A D ~@5 B ~@11 C ~@4 A ~@8 C A B ~@9 B ~@18
>`.pickRestart({
  A: "~@15 x", B: "~@13 x ~ x", C: "~@13 x ~@2", D: "~ x ~@2",
})).gain(0.24)

// drums · hihat
const hihat = s("hh").struct("<[x!4]!108 [x!3 ~] ~@8>").gain(0.36)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@7 A ~@15 A ~@7 A ~@7 A ~@15 A ~@7 A ~@6 B A ~@3 A ~@2 C A ~@3 A ~@7 A ~@3 A ~@11
>`.pickRestart({
  A: "x", B: "~@7 x", C: "~@15 x",
})).gain(0.3)

// drums · ride bell
const ride_bell = s("rd").struct("<~@81 A@2 B A C B A@2 ~@12 C A@3 C D ~ E ~@8>".pickRestart({
  A: "x!4", B: "x ~ x ~ x!3 ~", C: "~ x!3", D: "x", E: "x!2 ~@2",
})).gain(0.3)

// drums · ride bell · soft notes
const ride_bell_soft = s("rd").struct("<~@106 [~ x!3] [x!4] [~ x] ~@8>").gain(0.18)

// drums · tambourine
const tambourine = s("tb").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 C B A B A B A B A B A B A B A B C B C B A B A B A B A B A B A B A B A B A B A B D E ~@8
>`.pickRestart({
  A: "x ~@3 x ~@2 x!2 ~@2 x!3 ~ x", B: "x ~@2 x!2 ~@2 x!2 ~@2 x!3 ~ x", C: "x ~@3 x ~@2 x!2 ~@2 x ~ x ~ x",
  D: "x ~@3 x ~@2 x ~@3 x!3 ~ x", E: "x ~@2 x!2 ~@2 x!2 ~@2 x ~@4",
})).gain(0.24)

// drums · bongos
const bongos = s("bongo:18").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 ~@9
>`.pickRestart({
  A: "~@15 x", B: "~@12 x!2 ~ x",
})).gain(0.79)

stack(
  bass, electric_guitar_muted, brass_section, trombone, epiano2, kick, snare, snare_soft, hihat, crash, ride_bell,
  ride_bell_soft, tambourine, bongos
)

More by Phil Collins