Strudelify
Do You Remember cover art

1989 · ...But Seriously

Do You Remember

Phil Collins

KeyF majorTempo94 bpm
0:00/0:00
// Do You Remember — Collins Phil
// 94 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(94/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 · "Bass Guitar"
const bass = note(`<
  A B C D E B C D F G H I F G H I J E J E J K B L A M N O A M N D E B C D E B H I L A L A L G B P Q K R S Q M N O T U V
  W X Y Z AA AB AC AD AE F G H I F G H I J E J E J K B L A M N O A M N D E B C D
>`.pickRestart({
  A: "f1@4 ~@2 f1@2 f1@4 ~@2 f1 ~", B: "a1@2 ~ a1 a1@2 ~ a1", C: "bb1@4 ~@2 bb1 ~ bb1@4 ~@2 bb1 ~",
  D: "c2@2 ~ c2 c2@2 ~ c2", E: "f1@4 ~@2 f1 ~ f1@4 ~@2 f1 ~", F: "f1@4 ~@2 f1 ~ f1@4 ~@2 f1@2",
  G: "a1@4 ~@2 a1@2 a1@4 ~@2 a1 ~", H: "bb1@4 ~@2 bb1 ~ bb1@4 ~@2 bb1@2", I: "c2@4 ~@2 c2@2 c2@4 ~@2 c2 ~",
  J: "g1@2 ~ g1 g1@2 ~ g1", K: "a1@4 ~@2 a1 ~ a1@4 ~@2 a1 ~", L: "g1@4 ~@2 g1 ~ g1@4 ~@2 g1@2",
  M: "a1@4 ~@2 a1 ~ a1@4 ~@2 a1@2", N: "bb1@4 ~@2 bb1@2 bb1@4 ~@2 bb1 ~", O: "c2@4 ~@2 c2 ~ c2@4 ~@2 c2@2",
  P: "g1@4 ~@2 g1 ~ g1@4 ~@2 g1 ~", Q: "f1@2 ~ f1 f1@2 ~ f1", R: "bb1@2 ~ bb1 bb1@2 ~ bb1",
  S: "c2@4 ~@2 c2 ~ c2@4 ~@2 c2 ~", T: "a1@5 ~@2 a1 a1@4 ~@2 c2 db2", U: "d2@5 ~@2 a1 d2@4 ~@2 g1 ab1",
  V: "a1@5 ~@2 a1 a1@4 ~@2 e2 eb2", W: "d2@5 ~@2 a1 d2@4 ~@2 b1 bb1", X: "a1@5 ~@2 e1 a1@4 ~@2 c2 db2",
  Y: "d2@5 ~@2 a1 d2@4 ~@2 a1 f1", Z: "g1@5 ~@2 g1 g1@3 ~ bb1@3 ~", AA: "c2@5 ~@2 c2 c2@4 ~@2 c2 e1",
  AB: "f1@5 ~@2 c1 f1@4 ~@2 b1 ab1", AC: "a1@5 ~@2 e1 a1@4 ~@2 c2 b1", AD: "bb1@5 ~@2 bb1 bb1@4 ~@2 d2 db2",
  AE: "c2@5 ~@2 c2 c2@4 ~@2 g1 e1",
})).s("gm_electric_bass_finger").gain(0.56)

// chords · epiano1 · "Electric Piano"
const epiano1 = note(`<
  A B C@2 D B E@5 F G@2 H@5 I J K B L M@2 N@2 A O@2 P Q@6 R@3 A S T@3 U@8 V@2 W@2 B X@4 Y@3 Z@8 AA AB@2 AC AD@2 AE K
  AF@2 AG@2 AH AI@2 AJ AK@4 AL@2
>`.pickRestart({
  A: "[f3,a3,c4,f4]", B: "[c4,e4,g4,a4]",
  C: "[bb2@5 ~@3 [g3,c4,e4,g4]@8, [bb3,d4,f4]@3 [bb3,d4,f4,bb4]@5, ~@5 bb2@3 ~@8]/2", D: "[a3,c4,f4,a4]",
  E: "[f3@5 ~@3 c3@5 ~ c4@2 f3@5 f3 c4@2 a2@5 ~@3 [bb2,bb3,d4,f4]@8, f4 g4 a4 ~@2, d4@7 d4@9 [a3,c4,f4]@6 [f3,a3,f4]@10 ~@8, bb3@6 bb3@2 ~@5 c3@3 ~@13 a2@3 ~@8, ~@5 f3@3 [g3,c4,e4]@6 [g3,e4]@10 [c4,e4,g4,a4]@6 [c4,e4,g4,a4]@10]/5", // Bb F C Am7
  F: "[g3,c4,e4]", G: "[a3@5 ~@3 [c4,e4,g4,a4]@8, f4@7 f4@9, c4@3 c4 ~@4, ~@5 a3@3 ~@8]/2",
  H: "[bb3@5 ~@3 g3@5 ~@9 f4@2 ~@6 f4@2 bb3@5 ~@2 f4, f4@7 f4@9 ~@16 f4@6 d4@2, d4@6 d4@2 e4@7 e4@9 ~@5 f3@3 [g3,g4]@8, ~@5 bb3@3 c4@6 c4@2 [bb3,d4,f4,g4]@6 [bb3,d4,g4]@10 d4@5 bb3@3, ~@13 g3@3 ~@5 g3@3 [a3,c4,f4]@6 [a3,c4]@10]/5", // G Gm7 Gm F Am
  I: "a3@5 ~@2 f4, f4@7 ~, c4@3 c4, ~@5 a3@3", J: "[bb3,d4,f4,g4]", K: "~@3 [c4,e4,g4,a4], [c4,e4,g4,a4]@3 ~, ~@5 a2@3",
  L: "[g3,bb3,d4,f4,g4]", M: "[~@3 c4 [a2,c4,e4,g4,a4]@4, a4 ~, [a3,c4,f4]@3 [a3,f4]@5, ~@5 f3@3 ~@8]/2",
  N: "[bb2@5 ~@3 [c3,g3,c4,e4]@8, [bb3,d4,f4,bb4]@3 [bb3,d4,f4,bb4]@5, ~@5 bb2@3 ~@8]/2", // C Bb
  O: "[c4@5 ~@3 [bb3,d4,f4,bb4]@8, a4 ~, g4@7 g4@9, e4@3 e4 ~@4, ~@5 c4@3 ~@8]/2", P: "[c3,g3,c4,e4,g4]",
  Q: "[~@6 [c4,a4]@2 c4@5 ~@11 g3@5 ~@9 c4@2 [c4,e4,g4,a4]@8, [a3,c4,f4]@6 [a3,f4]@9 g4@9 g4@7 e4@9 ~@8, ~@5 f3@3 a4@8 bb4@8 e4@6 c4@2 ~@16, ~@8 g4@6 e4@2 ~@5 bb2@3 c4@5 g3@3 ~@5 f3@3 ~@8, ~@8 e4@5 c4@3 [bb3,d4,f4]@6 [bb3,d4,f4]@10 [a3,c4,f4]@6 [a3,f4]@10]/6", // F Am7 F Dm Bb F Dm
  R: "[bb2@5 ~@3 c3@5 c3 [g3,g4]@2 bb3@5 ~@2 f4, [f3,bb3,d4]@3 [f3,bb3,d4]@5 [g3,g4]@4, ~@5 bb2@3 [g3,c4,e4]@6 [c3,c4,e4]@10, ~@8 f4@3 d4, ~@16 d4@5 bb3@3]/3", // G Bb G C
  S: "bb3@5 ~@2 f4, g4, f4@7 ~, d4@3 d4, ~@5 bb3@3",
  T: "[~@6 f4@2 bb3@5 ~@9 [c4,e4,g4,a4]@2, a4@8 g4@7 f4@9, [a3,c4,f4]@6 [a3,c4]@10 ~@5 a2@3, ~@5 f3@3 f4@6 d4@2 [c4,e4,g4,a4]@6 ~@2, ~@8 d4@5 bb3@3 ~@8]/3", // Am7 F Am Am7
  U: "[~@5 a2 g4@2 ~@5 g3 f4@2 ~@5 f3 c4@2 ~@8 bb3@5 ~@3 g3@5 ~@3 f3@5 ~ c4@2 [c4,e4,g4,a4]@8, [c4,e4,g4,a4]@6 [a2,c4,e4,a4]@10 [a3,c4,f4]@6 [f3,a3,f4]@10 f4@6 d4 f4@8 e4@9 ~@8, ~@4 [bb3,d4,f4,g4]@3 [g3,bb3,d4,g4]@5 [c4,e4,g4,a4]@3 [c4,e4,g4,a4]@5 g4@4 a4@4 ~@4, ~@29 a2@3 bb2@8 c4@5 g3@3 [a3,c4,f4]@6 [a3,f4]@10, ~@32 d4@5 bb3@3 e4@6 c4@2 ~@5 f3@3 ~@8]/8", // Am7 Am F Gm7 Gm Am7 F Dm
  V: "[bb3@5 ~@3 g3@5 ~@2 e4, [bb2,bb4]@8 c4@5 g3@3, f4@7 f4@9, d4@3 d4 g4@4, ~@5 bb3@3 e4@6 c4@2]/2", // Bb
  W: "[c4@5 ~@3 [a3,d4,f4,a4]@8, a4 ~, g4@7 g4@9, e4@3 e4 ~@4, ~@5 c4@3 ~@8]/2", // Dm
  X: "[a3@10 ~@16 a2@2 ~@16 [d4,f4]@4 d4@4 ~@2 f4@2 [d4,f4,g4,bb4]@3 ~ [f3,bb3,d4]@3 ~, f4@7 f4@9 ~@5 d3@3 [g4,bb4]@4 ~@4, d4@3 d4 [c4,e4,g4,a4]@3 ~ [a3,d4,f4]@3 a3@3 ~@2, ~@5 a3@3 ~@6 [a2,c4,e4,g4,a4]@10 f4@3 ~@5, ~@13 d4 ~@2]/4", // Dm Gm7 Bb Gm Am7 Dm Am7
  Y: "[~@5 c3 c4@2 a3@5 ~@3 [c4,e4,g4,a4]@8, [g3,c4,e4]@2 [c3,g3,e4]@3 f4@3, ~ a4 ~, ~@4 f4@3 c4 ~@4, ~@8 c4@5 a3@3 ~@8]/3", // Am7 C
  Z: "[~@13 c3 c4@2 ~@6 [c4,a4]@2 a2@5 a2 ~@2 bb2@5 ~@3 c3@5 c3 c4@2 a3@5 ~@3 [c4,e4,g4,a4]@8, [bb3,d4,f4]@6 [bb3,d4,f4]@10 [a3,c4,f4,a4]@6 [a3,f4]@10 [bb3,d4,f4]@6 [bb3,d4,f4]@10 f4@7 f4@9, ~@5 bb2@3 [g3,c4,e4,g4]@6 [c3,g3,e4,g4]@10 ~@6 [a2,c4,e4,g4,a4]@10 ~@6 [c3,g3,e4,g4]@10 ~@8, ~@21 f3@3 [c4,e4,g4,a4]@6 ~@7 bb2@3 [g3,c4,e4,g4]@6 ~@2 c4@6 c4@2 ~@8, ~@53 a3@3 ~@8]/8", // F Am7 Bb F Dm Bb C Am7 …
  AA: "[f3,bb3,d4,f4]", AB: "[c3@5 ~@3 [f4,g4,bb4,d5]@8, g4 ~, [g3,c4,e4]@3 [g3,c4,e4]@5, ~@5 c3@3 ~@8]/2",
  AC: "[f3,a3,c4,f4,a4]", // F
  AD: "[g3@5 ~ f4@2 a3@5 ~@2 f4, [bb3,d4,f4,g4]@3 [bb3,d4,g4]@5, ~@5 g3@3 f3@8, ~@4 f4@3 c4, ~@8 c4@5 a3@3]/2", // Gm7 Gm
  AE: "[f4,g4,bb4,d5]", // Gm7
  AF: "[a2@5 ~ g4@2 bb3@5 ~@2 f4, [c4,e4,g4,a4]@3 [c4,e4,a4]@5, ~@5 a2@3 g4@8, ~@4 f4@3 d4, ~@8 d4@5 bb3@3]/2", // Am7 Am
  AG: "[f3@5 f3 [c4,a4]@2 [c4,e4,g4,a4]@8, [a3,c4,f4,a4]@3 [f3,a3,f4]@5]/2", AH: "[bb2,bb3,d4,f4,bb4]",
  AI: "[g3@5 ~@3 [f3,a3,c4,f4,a4]@8, [c3,g4] ~, e4@7 e4@9, c4@3 c4 ~@4, ~@5 g3@3 ~@8]/2", AJ: "[a2,c4,e4,g4,a4]",
  AK: "[bb3@5 ~@3 g3@5 ~@3 a3@5 ~@3 [c4,e4,g4,a4]@8, [bb2,bb4]@8 ~@5 g3@3 [f3,a4]@7 f4@9, f4@7 f4@9 f4@6 c4@2 ~@8, d4@6 d4@2 e4@7 e4@9 ~@8, ~@5 bb3@3 c4@6 c4@2 c4@5 a3@3 ~@8]/4", // Am7 Bb F
  AL: "[bb2@5 bb2 ~@2 g3@5 ~@2 e4, [f3,bb3,d4]@3 [bb2,f3,bb3,d4]@5, ~ g4, ~@4 e4@3 c4, ~@8 c4@5 g3@3]/2", // Bb
})).s("gm_epiano1").gain(0.48)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@25 A@3 B C D E@2 ~@15 F@2 ~ G H I@2 J ~@3 K L M N O P Q R@2 ~@16 S ~ T ~ S ~ U ~ V ~ W ~
>`.pickRestart({
  A: "[~@2 f4 g4 a4@2 d5 c5@14 ~@3]/3", B: "~@2 bb4 ~ bb4@2 g4@2 c5@2 c5@6", C: "~@5 c5 a4 c5",
  D: "a4@2 g4 ~@2 f4@8 ~@3", E: "[~@10 bb4 ~ bb4 ~ bb4 ~ bb4@2 c5@3 ~@11, ~@15 c5@2 ~@15]/2",
  F: "[~@4 f4@2 g4@2 a4@3 d5@3 c5@17 ~]/2", G: "~@4 bb4 ~ bb4@2 a4@2 bb4@2 c5@2 bb4@2", H: "c5 c5@3 ~@4",
  I: "[~@2 c5 ~ c5@2 a4@2 c5@2 a4@2 g4@2 f4@7 ~@11]/2", J: "~@2 bb4@2 a4@2 bb4@2 c5 ~ c5@4 ~@2",
  K: "~@2 a5 f5 d5 a4 d5 f5", L: "~@6 c5@2 a4@2 c5@2 e5@3 ~, ~@4 e5@4 ~@4 a4 ~@3",
  M: "~ f5 d5 ~ d5 f5 a5 d5, ~@3 a4@3 ~@2", N: "~@2 d5@2 f5@2 g5@2 a5@2 ~ f5@3 d5@2, bb4@2 ~@3 g5 ~@2",
  O: "~@2 e5@2 g5@3 c6@3 g5@2 e5@2 c5 ~, c5@3 ~@5", P: "~@3 a4 c5@2 a4 f4, ~@4 f4@5 ~@7",
  Q: "~@6 bb4 ~ bb4@2 a4@2 bb4@2 c5@2", R: "[~@4 [e4,g4]@5 ~@3 d5@2 ~@2 [e4,g4]@12 ~@4, c5@6 ~ c5@7 ~@2]/2",
  S: "~@2 a4 ~ a4@2 g4@2 a4@2 c5@6", T: "~@2 bb4 ~ bb4@2 a4@2 bb4@2 c5@4 ~@2",
  U: "~@2 bb4 ~@2 a4@2 bb4@2 ~ c5@4 ~@2, ~@2 bb4 ~@5", V: "~@2 a4 a4@2 ~@2 a4@2 ~ c5@2 ~@4, ~@3 g4 ~@4",
  W: "~@2 bb4 bb4@2 a4@2 bb4@3 c5@3 ~@3",
})).s("gm_string_ensemble_1").gain(0.3)

// chords · pad new age · "Fantasy"
const pad_new_age = note("<A@2 B@4 C D ~@76 E@2 F@2 ~ G ~ H ~ I ~ J>".pickRestart({
  A: "[~@4 f5@2 g5@2 ~ f5@4 ~@7 c6@2 g5@2 a5@6 ~@2, ~@4 c5@25 ~@3, ~@8 a5@5 ~@7 e5@9 ~@3]/2",
  B: "[[f5,bb5]@6 a5@2 ~@8 e5@4 ~@2 f5@2 g5@6 f5@5 f5@3 g5@2 [f5,a5]@5 ~@7 c6@2 g5@2 [e5,a5]@6 ~@2, d5@12 ~@4 c5@13 ~@6 c5@26 ~@3, ~@8 g5@13 ~@31 e5@4 ~@8]/4", // Bb5 F A5
  C: "~@2 [f5,bb5] a5 g5@3 ~, ~@4 d5@9 ~@3, ~@6 f5@7 ~@3", D: "g5@2 f5 [c5,e5,g5]@4 ~, [c5,e5]@3 ~@5",
  E: "[~@14 d5@6 c5@3 c5@3 d5@6]/2", F: "[~@14 c5@5 ~ c5@4 d5@2 c5@5 ~]/2", G: "d5@4 d5@3 c5@3 d5@6",
  H: "c5@4 c5@4 d5@2 c5@5 ~", I: "d5@4 c5@3 ~ c5@2 d5@5 ~", J: "c5@5 ~@11",
})).s("gm_pad_new_age").gain(0.3)

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

// drums · rim
const rim = s("rim").struct(`<
  A@6 B@2 A@7 B A@9 B A@5 B A@7 B A@9 B A@5 B ~@12 A@7 B A@7 B A B A B A@3 B A@3 B
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct(`<
  ~@6 A B ~@7 C ~@9 D ~@5 E ~@7 F ~@9 F ~@5 G H@11 I ~@7 B ~@7 J ~ K ~ L ~@3 K ~@3 M
>`.pickRestart({
  A: "~@12 x ~ x!2", B: "~@3 x", C: "~@12 x ~@2 x", D: "~@10 x!3 ~ x ~", E: "~@10 x!3 ~@3", F: "~@10 x ~ x ~ x!2",
  G: "~@10 x!3 ~@2 x", H: "~ x ~ x", I: "~@4 x ~@5 x ~ x ~ x!2", J: "~@10 x!3 ~ x!2", K: "~@10 x ~ x ~@2 x",
  L: "~@11 x!2 ~@3", M: "~@6 x!2",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@4 C D E A B@3 C@2 B E A B@5 C B@2 E F B@3 C E A B@3 C B@2 G A B C B C B@3 C E A B@4 E H I J K@2 I J@2 K L J E A C
  B@5 G A B@6 D F G A E A B@2 D A B@2 E
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", D: "x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~",
  E: "x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~@2", F: "~@2 x ~ x ~ x ~ x ~ x ~ x ~ x!2", G: "x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~ x",
  H: "~@2 x!3 ~ x!3 ~ x!3 ~ x!2", I: "x ~ x!3 ~ x!3 ~ x!3 ~ x ~", J: "x ~ x!3 ~ x!3 ~ x!6", K: "x ~ x!3 ~ x!3 ~ x!5 ~",
  L: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A ~@2 B ~@8 A ~@2 A ~ A ~@6 A@2 ~ A ~@2 A@2 ~@4 A ~@12 A@2 C ~ A ~ A@3 ~@2 A ~@5 A ~@6 A ~@4 A@2 ~ C ~@2 D ~@4 A ~
  C
>`.pickRestart({
  A: "~@15 x", B: "~@14 x!2", C: "~@7 x", D: "x",
})).gain(0.48)

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

stack(bass, epiano1, string_ensemble_1, pad_new_age, kick, rim, snare, hihat, open_hat, crash)

More by Phil Collins