Strudelify

Every Day

Phil Collins

KeyE♭ majorTempo94 bpm
0:00/0:00
// Every Day — Collins Phil
// 94 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 116 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. 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 · fretless bass
const bass = note(`<
  A@2 B@2 A@2 C@2 D E F@2 G H@3 I@6 J K L@2 B@2 L@2 C@2 D M@4 N@3 O@2 P@2 Q@2 J K L@2 B@2 L@2 C@2 R S R S R T U V L@2
  B@2 L@2 C@2 W X Y Z D E AA AB O@2 P@2 Q@2 J K L@2 B@2 L@2 AC@2 L@2 AD@2 L@2 C@2 L@2 AE@7 ~@3
>`.pickRestart({
  A: "[eb2@3 ab2@3 g2 f2@4 eb2@5]/2", B: "[bb1@3 eb2@4 ab1@7 bb1@2]/2", C: "[bb1@3 eb2@3 bb1 ab1@7 bb1@2]/2",
  D: "eb2@3 f2@5", E: "bb1@3 eb2@5", F: "[bb2@3 eb3@4 f2@6 bb1 f2 bb1]/2", G: "eb3@3 f3@5",
  H: "[bb2@3 eb3@6 eb2 bb1@2 f2@3 bb1@6 bb2 f3@2]/3", I: "[f2@3 g2@4 ab2@9]/2", J: "bb2@3 g3@5", K: "c3@3 ab2@2 bb2@3",
  L: "[eb2@3 ab2@2 g2@2 f2@4 eb2@5]/2",
  M: "[bb1@3 eb2@6 eb2 bb1 f2@4 ~@5 c4 d4@2 bb3@2 eb2 eb3 f2@5, ~@45 bb1@26 ~@25]/4",
  N: "[bb1@9 eb2@21 bb1@3 f2@12 bb1@26 ~]/3", O: "[f2@3 g2@4 ab2@8 eb3]/2",
  P: "[f2@3 g2@4 ab2@3 ~@2 bb3 c4 ab3@2, ~@5 eb3@3]/2", Q: "[f2@3 g2@3 eb3 ab2@4 eb3 ab2@4]/2", R: "bb1@5 bb1@2 bb1",
  S: "c2@3 f2@3 bb1@2", T: "c2@3 f2@5", U: "~@4 bb3 c4 f3@2, bb1, ~@3 f3@3 ~@2",
  V: "~@12 ab3@3 bb3@3 eb3@5 ~, ab1, ~@3 eb3@3 ~@2", W: "eb2@3 f2@4 f2", X: "bb2@3 eb3@4 bb2", Y: "eb3@2 bb2 f3@5",
  Z: "bb2@2 c3 d3@4 bb1", AA: "bb1@3 eb2@2 bb1 eb2@2", AB: "~@15 d3@3 bb2@5 ~, bb1",
  AC: "[bb1@9 eb2@9 bb1@3 ~@9 bb3@3 c4@5 ~ ab3@3 bb1@6, ~@7 ab1@7 ~@2]/2",
  AD: "[bb1@3 eb2@4 ~@4 bb3 c4 ab3 bb1@2, ~@7 ab1@7 ~@2]/2",
  AE: "[bb1@9 eb2@12 ~@12 bb3@3 c4@3 ab3@121 ~@8, ~ ab1 ~@6]/7",
})).s("gm_fretless_bass").gain(0.4)

// chords · piano
const piano = note(`<
  A@2 B@2 A@2 C@2 D ~@15 A@2 B@2 A@2 C@2 D ~@7 E@4 F@2 G H A@2 B@2 A@2 C@2 I J K L K L M N O@2 P@2 O@2 Q@2 ~@6 R@2 E@4
  F@2 G H A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@2 S@2 ~@8
>`.pickRestart({
  A: "[g4@3 ab4@3 bb4@3 [c4,eb4]@4 ~@2 [bb3,eb4]@4 ~@2 [bb3,d4,f4]@9 bb4@3 [bb3,eb4]@13 ~@2, [bb3,eb4]@7 ~@2 ab4@6 g4@6 ~@12 g4@15]/2", // Cm Eb5 Bb Eb5
  B: "[[bb3,d4,f4]@6 bb4@3 g4@6 bb4@6 [c4,eb4]@21 [bb3,d4,f4]@4 ~@2, ~@9 [bb3,eb4]@10 ~@2 ab4@19 ~@8]/2", // Bb Cm Bb Eb5
  C: "[[bb3,d4,f4]@6 bb4@3 g4@6 bb4@6 [c4,eb4,ab4]@20 ~ [bb3,d4,f4]@4 ~@2, ~@9 [bb3,eb4]@10 ~@29]/2", // Bb Ab Bb Eb5
  D: "[bb3,eb4,g4]@3 ~@5", E: "[[c3,eb3,ab3]@3 bb3@3 eb4 [eb3,ab3,c4]@9, ~@3 [eb3,f3]@4 ~@9]/2",
  F: "[[c3,eb3,ab3]@3 [eb3,f3,bb3]@4 [eb3,ab3,c4]@9]/2", G: "[bb3,d4,f4]",
  H: "[bb3,eb4,g4]@3 [ab3,c4,eb4]@2 [bb3,d4,f4]@3", I: "[d4,f4]@23 ~, bb3@7 ~",
  J: "[c4,e4,g4]@8 ~ [c4,f4,a4]@9 [e4,g4]@5 ~, ~@6 c4 ~", K: "[bb3,d4,g4]@11 ~",
  L: "[c4,e4,g4]@8 ~ [c4,f4,a4]@8 ~ [e4,g4]@5 ~, ~@6 c4 ~", M: "~@3 [g5,c6], [bb3,d4,g4]@11 ~",
  N: "[ab3,c4,eb4,eb5]@11 ~, bb4@5 ~", O: "[g4 ab4 bb4 ab4@2 g4@2 f4@3 bb4 g4@5]/2",
  P: "[f4@2 bb4 g4@2 bb4@2 c4@7 ~@2]/2", Q: "[f4@6 bb4@3 g4@6 bb4@6 c4@20 ~@7]/2", R: "[~@2 bb3@11 ~@3, ~ f3@12 ~@3]/2",
  S: "[[bb3,d4,f4]@2 bb4 g4@2 bb4@2 [c4,eb4]@7 ~@2, ~@9 [bb3,eb4]@10 ~@2 ab4@19 ~@8]/2", // Bb Cm Eb5
})).s("gm_piano").gain(0.45).pan(0.3)

// chords · synth strings 1
const synth_strings_1 = note("<A@6 B@7 C D@8 E@8 B@7 C D@8 E@8 F@7 G@7 H@5 I@4 C D@8 E@8 J@8 K@4 L@8 ~@2>".pickRestart({
  A: "[[g3,bb3]@8 [ab3,c4]@6 [g3,bb3]@6 [f3,d4]@12 [g3,eb4]@15 [f3,d4]@9 g3@12 [ab3,c4]@21 [f3,bb3,d4]@6 [g3,bb3]@9 [ab3,c4]@6 [g3,bb3]@6 [f3,d4]@12 [g3,eb4]@15 [f3,d4], eb4@5 bb3@12 ~@12 bb3@7, ~@56 eb4@33 ~@6 eb4@21 ~@28]/6", // Gm Ab Gm Dm Cm Dm Ab Bb …
  B: "[~@8 g3@12 [ab3,c4]@21 [f3,bb3,d4]@6 [bb3,g4]@9 [c4,ab4]@15 [bb3,d4,f4]@9 [bb3,eb4,g4]@15 [bb3,g4]@9 [c4,ab4]@12 [bb3,d4,f4]@27 [bb3,g4]@9 [c4,ab4]@15 [bb3,d4,f4], ~@8 eb4@33 ~@6 eb4@24 ~@24 eb4@21 ~@27 eb4@24 ~]/7", // Ab Bb Eb Fm Bb Eb Fm Bb …
  C: "~@8 [bb3,eb4,g4]@15 [bb3,eb4,g4]", // Eb
  D: "[~@8 [c4,ab4]@12 [bb3,d4,f4]@27 [f3,ab3]@9 [g3,bb3]@12 [ab3,c4]@27 [f3,ab3]@9 [g3,bb3]@12 [ab3,c4]@27 [f3,ab3]@9 [g3,bb3]@12 [ab3,c4]@27 [bb3,d4,f4], ~@47 eb4@144 ~]/8", // Fm Bb Fm Gm Ab Fm Gm Ab …
  E: "[~@7 bb4@16 g4@9 ab3@6 [bb3,d4,f4]@9 [g3,bb3]@9 [ab3,c4]@6 [g3,bb3]@6 [f3,d4]@12 [g3,eb4]@15 [f3,d4]@9 g3@12 [ab3,c4]@21 [f3,bb3,d4]@6 [g3,bb3]@9 [ab3,c4]@6 [g3,bb3]@6 [f3,d4]@12 [g3,eb4]@15 [f3,d4], ~@23 [c4,eb4]@15 ~@9 eb4@21 bb3@48 ~@48 bb3@28, ~@104 eb4@33 ~@6 eb4@21 ~@28]/8", // Bb Gm Ab Gm Dm Cm Dm Ab …
  F: "[~@8 g3@12 [ab3,c4]@21 [f3,bb3,d4]@6 [bb3,d4,f4]@24 [e4,g4]@9 [f4,a4]@15 [bb3,d4,g4]@24 [e4,g4]@9 [f4,a4]@15 [bb3,d4,g4]@24 [c4,e4,g4], ~@8 eb4@33 ~@30 c4@24 ~@24 c4@24 ~@25]/7", // Ab Bb Em F Gm Em F Gm …
  G: "[~@8 [f4,a4]@15 [bb3,d4,g4]@24 [ab3,c4,eb4]@24 [g3,bb3]@9 [ab3,c4]@6 [g3,bb3]@6 [f3,d4]@12 [g3,eb4]@15 [f3,d4]@9 g3@12 [ab3,c4]@21 [f3,bb3,d4]@6 [g3,bb3,eb4], ~@71 eb4@21 bb3@48 ~@28, ~@128 eb4@33 ~@7]/7", // F Gm Ab Gm Ab Gm Dm Cm …
  H: "[~@8 [ab3,c4]@6 [g3,bb3]@6 [f3,d4]@12 [g3,eb4]@15 [f3,d4]@9 g3@12 [ab3,c4]@21 [f3,bb3,d4]@6 [bb3,g4]@9 [c4,ab4]@15 [bb3,d4,f4], ~@5 bb3@12 ~@13, ~@56 eb4@33 ~@6 eb4@24 ~]/5", // Ab Gm Dm Cm Dm Ab Bb Eb …
  I: "[~@8 [bb3,eb4,g4]@15 [bb3,g4]@9 [c4,ab4]@12 [bb3,d4,f4]@27 [bb3,g4]@9 [c4,ab4]@15 [bb3,d4,f4], ~@23 eb4@21 ~@27 eb4@24 ~]/4", // Eb Fm Bb Eb Fm Bb
  J: "[~@8 g3@12 [ab3,c4]@21 [f3,bb3,d4]@6 [g3,bb3]@9 [ab3,c4]@6 [g3,bb3]@6 [f3,d4]@12 [g3,eb4]@15 [f3,d4]@9 g3@12 [ab3,c4]@21 [f3,bb3,d4]@6 [g3,bb3]@9 [ab3,c4]@6 [g3,bb3]@6 [f3,d4]@12 [g3,eb4]@15 [f3,d4], ~@8 eb4@33 ~@6 eb4@21 bb3@48 ~@48 bb3@28, ~@104 eb4@33 ~@6 eb4@21 ~@28]/8", // Ab Bb Gm Ab Gm Dm Cm Dm …
  K: "[~@8 g3@12 [ab3,c4]@21 [f3,bb3,d4]@6 [g3,bb3]@9 [ab3,c4]@6 [g3,bb3]@6 [f3,d4]@12 [g3,eb4]@15 [f3,d4], ~@8 eb4@33 ~@6 eb4@21 bb3@28]/4", // Ab Bb Gm Ab Gm Dm Cm Dm
  L: "[~@8 g3@12 [ab3,c4]@21 [f3,d4]@10 ~@141, ~@8 eb4@33 bb3@151]/8", // Ab Dm
})).s("gm_synth_strings_1").gain(0.13)

// chords · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~@14 A B C@4 D@2 E F G@2 H@2 G@2 I@2 J K J L M K J N O P Q P R P N S T K@2 U T K@2 V W X Y Z Y X AA AB T K@2 U T K@2 V
  J K J L M K J N O P Q P R P N S T K@2 U T K@2 V T K@2 U T K@2 V T K@2 U ~@8
>`.pickRestart({
  A: "~@3 [bb3,eb4,ab4]@2 [bb3,eb4,ab4]@3", B: "[bb3,d4,f4]@11 ~",
  C: "[[c3,eb3,ab3]@3 bb3@3 eb4 [eb3,ab3,c4]@9, ~@3 [eb3,f3]@4 ~@9]/2", // Ab Ebsus2
  D: "[[c3,eb3,ab3]@3 [eb3,f3,bb3]@4 [eb3,ab3,c4]@9]/2", E: "[bb3,d4,f4]",
  F: "[bb3,eb4,g4]@3 [ab3,c4,eb4]@2 [bb3,d4,f4]@3", // Eb Ab Bb
  G: "[[bb3,eb4,g4]@8 ~ [c4,eb4,ab4]@5 ~ [bb3,eb4,g4]@5 ~ [bb3,d4,f4]@11 ~ [bb3,eb4,g4]@14 ~]/2", // Eb Ab Eb Bb Eb
  H: "[[bb3,d4,f4]@8 ~ [bb3,eb4,g4]@11 ~ [ab3,c4,eb4]@20 ~ [bb3,d4,f4]@5 ~]/2", // Bb Eb Ab Bb
  I: "[[bb3,d4,f4]@8 ~ [bb3,eb4,g4]@11 ~ [ab3,c4,eb4]@20 ~ [bb3,d4,f4]@4 ~@2]/2", // Bb Eb Ab Bb
  J: "~@6 [bb4,eb5,g5] ~@8 [c5,eb5,ab5]@2 ~@7", K: "~@6 [bb4,d5,f5] ~@8 [bb4,eb5,g5] ~@8",
  L: "~@6 [bb4,d5,f5] ~@8 [bb4,d5,f5] ~@5 [bb4,d5,f5] ~@2", M: "~@6 [bb4,eb5,g5] ~@8 [c5,eb5,ab5] ~@8",
  N: "~@6 [bb4,d5,f5] ~@8 [bb4,d5,f5] ~@8", O: "~@6 [c4,eb4,ab4]@2 ~@7 [eb4,f4,bb4]@2 ~@7",
  P: "~@6 [eb4,ab4,c5] ~@8 [eb4,ab4,c5] ~@8", Q: "~@6 [c4,eb4,ab4]@2 ~@7 [eb4,f4,bb4] ~@8",
  R: "~@6 [c4,eb4,ab4] ~@8 [eb4,f4,bb4] ~@8", S: "~@6 [ab4,c5,eb5] ~@8 [bb4,d5,f5] ~@8",
  T: "~@6 [bb4,eb5,g5] ~@8 [eb5,g5,bb5] ~@8", U: "~@6 [ab4,c5,eb5] ~@8 [c5,eb5,ab5] ~@8",
  V: "~@6 [ab4,c5,eb5] ~@8 [ab4,c5,eb5] ~@8", W: "[bb3,d4,f4]@2 ~ [bb3,d4,f4]@2 ~@19",
  X: "[c4,e4,g4]@9 [c4,f4,a4]@10 ~@5", Y: "[bb3,d4,f4,g4]@2 ~ [bb3,d4,f4,g4]@2 ~@19",
  Z: "[c4,e4,g4]@9 [c4,f4,a4]@11 ~@4", AA: "[bb3,d4,f4,g4]@2 ~ [bb3,d4,f4,g4]@3 ~@18", AB: "[ab3,c4,eb4]",
})).s("gm_electric_guitar_jazz").gain(0.29).pan(0.7)

// other · lead 3 calliope
const lead_3_calliope = note("<A@2 B@2 A@2 B@2 ~@88 C@2 D@2 C@2 D@2 C@2 D@2 ~@8>".pickRestart({
  A: "[g5@3 ab5@3 bb5@3 ab5@5 ~ g5@4 ~@2 f5@9 bb5 ~@2 g5@2 ~@13]/2", B: "[f5@6 bb5 ~@2 g5 ~@5 bb5@2 ~@4 c5@20 ~@7]/2",
  C: "[g5 ab5 bb5 ab5@2 g5@2 f5@3 bb5 g5@5]/2", D: "[f5@6 bb5@3 g5@6 bb5@6 c5@20 ~@7]/2",
})).s("gm_lead_3_calliope").gain(0.19).pan(0.6)

// other · marimba
const marimba = note(`<
  A B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@2 ~@8 A B A@3 B A@3 B A@3 B A@3 B
  A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A C ~@8
>`.pickRestart({
  A: "~@6 bb4 ~@2 eb4 ~@2 bb4 ~@2 eb4 ~@5 eb4 ~@2", B: "~@3 eb4 ~@2 bb4 ~@2 eb4 ~@2 bb4 ~@2 eb4 ~@5 eb4 ~@2",
  C: "~@6 bb4 ~@2 eb4 ~@2 bb4 ~@2 eb4 ~@8",
})).s("gm_marimba").gain(0.21)

// other · bandoneon
const bandoneon = note("<~@64 A@4 B C D E F ~@43>".pickRestart({
  A: "[~@9 bb5!2 ~ bb5 ~@3 bb5 ~@4 bb5@5 ~ bb4@2 ~ bb5 ~@8 bb5 ~@5 bb5@5 ~ bb4@3 bb5 ~@14 bb5@6 ab5@3 g5@3 f5@2 ~@7 g5 f5 ~ eb5 ~@2]/4",
  B: "eb5@9 bb5@13 ~@2", C: "~@3 bb5@3 eb6@3 bb5 eb5@3 bb5 ~ eb6@3 bb5 eb5@3 bb5 ~",
  D: "eb6@3 bb5 eb5@6 ~ bb5@4 ab5 [ab5,bb5] bb5 ab5 [ab5,bb5] bb5 ab5 [g5,bb5] bb5", // Absus2 Gm
  E: "g5 [g5,bb5] bb5 g5 [g5,bb5] bb5 g5 [g5,bb5] bb5 g5 [g5,bb5] bb5 g5 [g5,bb5] bb5@7 ab5 bb5 ~", F: "eb6@23 ~",
})).s("gm_bandoneon").gain(0.74)

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

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!107 [~ x ~@2] ~@8>").gain(0.5)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!107 [~ x ~@2] ~@8>").gain(0.35)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@23 A ~@7 B ~@15 C ~@7 B ~@7 B ~@15 D ~ D ~ D ~ D ~ E ~@7 B ~@3 F G ~@2 B ~@3 F ~@8
>`.pickRestart({
  A: "~ x!2 ~@2 x ~@2", B: "~@3 x!3 ~ x", C: "~ x!2 ~ x!2 ~@2", D: "~@6 x!2", E: "~ x!2 ~ x!4", F: "~@5 x ~@2", G: "x",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@79 [~@4 x!2 ~@2] ~@19 [~@3 x!2 ~@3] ~@7 [~@3 x!2 ~@3] ~@8>").gain(0.3)

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

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

// drums · ride · soft notes
const ride_soft = s("rd").struct(`<
  ~ A ~ A ~ A ~ A ~ A B A ~ A B A ~ A B A ~ A B A ~ A ~@3 A ~@3 A B A ~ A B A ~ A B A ~ A B ~@2 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A B A ~ A B A ~ A B A ~ A B ~@2 A ~@3 A ~@3 A ~@3 A ~@3 A ~@10
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@3 x ~@4",
})).gain(0.2)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!8]!107 [x!6 ~@2] ~@8>").gain(1.26)

stack(
  bass, piano, synth_strings_1, electric_guitar_jazz, lead_3_calliope, marimba, bandoneon, kick, rim, snare, low_tom,
  mid_tom, crash, ride, ride_soft, cabasa
)

More by Phil Collins