Strudelify
Take Me Home cover art

1985 · No Jacket Required

Take Me Home

Phil Collins

KeyE♭ majorTempo120 bpm
0:00/0:00
// Take Me Home — Collins Phil
// 120 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 136 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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@23 A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@10 C@2 D E F G A@18 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@14 C@2 D E F G A@2 C@2 A@2
  C@2 H@14 I@2 ~@5
>`.pickRestart({
  A: "[eb1@31 ~]/2", B: "~@4 eb3 f3 eb3@9 ~", C: "[eb1@15 ~]/2", D: "[f1,f2]", E: "[g1,g2]", F: "[ab1,ab2]",
  G: "[f1,f2]@7 ~", H: "[[eb1,eb2]@15 ~]/2", I: "[[eb1,eb2]@29 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.42)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@3 A B C D A B C D A B C D A B C D A B C D E@2 F@2 E@2 G@2 H@2 I@2 J@2 K@2 L M N O P Q N R L S N T ~@4 A B C D A B C
  D A B C D A B C D E@2 F@2 E@2 G@2 H@2 I@2 J@2 K@2 L M N O L M N O P Q N R L S N T ~@4 L M N O L M N O U@2 V@14 ~@5
>`.pickRestart({
  A: "[eb2,eb3,bb3,eb4,g4]@15 ~", B: "[eb2,eb3,bb3,d4,f4]@15 ~", C: "[eb2,eb3,db4,f4,ab4]@15 ~",
  D: "[eb2,eb3,c4,eb4,ab4]@15 ~", E: "[[c4,eb4,bb4]@8 [c4,eb4,ab4]@7 ~, eb3@15 ~]/2",
  F: "[eb3@2 ~@2 eb3 f3 ~@12 [eb1,eb2]@13 ~, [bb3,eb4,g4]@31 ~, ~@6 eb3@25 ~]/2", // Eb
  G: "[eb3@3 ~ eb3 f3 ~@12 [eb1,eb2]@13 ~, [bb3,eb4,g4]@15 ~, eb2 ~, ~@3 eb3@12 ~]/2", // Eb
  H: "[[eb4,ab4,c5,eb5]@15 ~ [f4,ab4,db5]@6 ~@2 [eb4,ab4,c5]@8, eb3@15 ~, ~@16 eb5@15 ~]/2", // Ab Db Ab
  I: "[eb3@2 ~@2 eb3 f3 ~@12 [eb1,eb2]@13 ~, [eb4,g4,bb4,eb5]@31 ~, eb2 ~, ~@6 eb3@25 ~]/2", // Eb
  J: "[[eb4,ab4,c5,eb5]@15 ~ [f4,ab4,db5,eb5]@7 ~ [eb4,ab4,c5,eb5]@8, eb3@31 ~, db5 ~@31]/2", // Ab Db Ab
  K: "[eb3@3 ~ eb3 f3 ~@22 bb3@4, [eb4,g4,bb4,eb5]@13 ~@3, eb2@16 ~@2 [eb1,eb2]@13 ~, ~@3 eb3@12 ~]/2", // Eb
  L: "[bb3,eb4,g4]@15 ~", M: "[bb3,eb4,g4]@5 ~ [bb3,d4,f4]@6 [eb4,g4] ~@3, ~@6 bb3 ~", N: "[ab3,c4,eb4]",
  O: "[ab4,bb4,eb5]", P: "[bb3,eb4,g4]@7 ~", Q: "[bb3,eb4,g4]@5 ~ [bb3,f4]@6 [bb3,eb4,g4] ~@3, ~@3 d4@2 ~@3",
  R: "[c4,eb4,ab4]@5 ~@3 [eb4,f4]@6 ~@2, ~@2 ab3 ~", S: "[bb3,eb4,g4]@3 [bb3,f4]@3 [bb3,eb4] ~, ~@6 d4@4 ~@2 g4 ~@3",
  T: "[f3,bb3,d4]", U: "[[ab3,c4,eb4,f4]@27 ~@5]/2", V: "[[ab3,c4,eb4,f4]@7 ~]/2",
})).s("gm_epiano2").gain(0.22)

// other · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@23 A B@3 A C@3 D E F@2 D@2 F@2 G@2 H@2 ~ I J@2 ~ I K L M N O M P@8 Q@4 R@4 A K S@2 A T U@2 V D F@2 W E F@2 G@2 X@2 ~
  I H@2 ~ I Y@2 Z I K L M N O M AA I AB AC Z I AD@2 AE AF K AG A AH AI@3 AF AI@3 AF X@2 ~@5
>`.pickRestart({
  A: "f4", B: "[eb4@17 [eb2,g2,bb2,eb3] ~@6]/3", C: "[eb4@34 [eb2,bb2,eb3]@3 ~@11]/3", D: "c5", E: "db5 c5",
  F: "[bb4@18 [eb2,bb2,eb3]@3 ~@11]/2", G: "[g4@11 f4@3 g4@2]/2", H: "[eb4@31 ~]/2", I: "g4@3 f4@3 g4@2",
  J: "[eb4@29 ~@3]/2", K: "eb4", L: "[eb3,bb3]", M: "f2", N: "g2", O: "ab2", P: "[[eb2,bb2,eb3]@31 ~]/4",
  Q: "[[eb2,bb2,eb3]@63 ~]/4", R: "[[eb2,bb2], eb3@57 ~@7]/4", S: "[bb3@18 [eb2,bb2,eb3]@3 ~@11, ~@18 g2 ~@13]/2",
  T: "eb4@7 c4", U: "[bb3@18 [eb2,bb2,eb3]@3 ~@11]/2", V: "c5@13 eb4 ab4 c5", W: "c5@3 eb5", X: "[eb4@25 ~@7]/2",
  Y: "[eb4@24 ab4 eb4 bb4 eb5 ~ eb4 bb4 eb5]/2", Z: "bb4", AA: "[eb2,bb2]", AB: "eb4@8 ~ eb4 ab4 eb4 bb4 eb4 eb5 ab4",
  AC: "~ ab4 bb4 eb5 bb4 eb5 f5 bb4 ab5 g5 eb5 bb4 ab4 g4 ab4 eb5, eb5 ~@7", AD: "[eb4@24 c4@4 eb4@3 ~]/2", AE: "f3",
  AF: "~@8 c4@4 eb4@3 ~", AG: "eb4@13 bb3 eb4 g4", AH: "eb4@8 c4@4 eb4@3 ~", AI: "[eb4@17 ~@7]/3",
})).s("gm_distortion_guitar").gain(0.35).pan(0.4)

// other · xylophone
const xylophone = note(`<
  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 ~@4 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 ~@4 B C B C B C B C B C B C B C B
  C B C B C B C B D ~@5
>`.pickRestart({
  A: "~@14 eb5!2", B: "bb5!2 eb5!2 bb5!2 eb5!2 eb6 ~@2 eb6 ~@2 eb5!2",
  C: "bb5!2 eb5!2 bb5!2 eb5!2 eb6!2 ~ eb6 ~@2 eb5!2", D: "bb5!2 eb5!2 bb5!2 eb5!2 eb6!2 ~@6",
})).s("gm_xylophone").gain(0.25).pan(0.7)

// chords · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note(`<
  ~@39 A@2 B@2 A@2 B@2 A@2 C D E F G E ~@32 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C D E F G E A@2 B@2 A@2 B@2 H@8 ~@13
>`.pickRestart({
  A: "[bb3, g3@15 ~]/2", B: "[ab3,c4]/2", C: "[ab3,c4]@15 ~", D: "[f3,bb3,d4]", E: "[ab3,c4,eb4]@15 ~", F: "[bb3,eb4]",
  G: "[ab3,db4,f4]", H: "[[g3,bb3]@31 ~ [ab3,c4]@32 ~@64, bb5]/8",
})).s("gm_synth_strings_2").gain(0.25)

// bass · slap bass 2 · "SLAPBASS 2"
const bass_2 = note("<~@26 A ~@3 A ~@3 A ~@3 A ~@35 A ~@3 A ~@3 A ~@3 A ~@20 B@4 C@2 D@2 ~@21>".pickRestart({
  A: "~@2 [eb2,eb3] ~@13", B: "[~@12 eb3@19 ~]/2", C: "[~@3 eb3@4 ~]/2", D: "[~@12 eb3@15 ~@5]/2",
})).s("gm_slap_bass_2").gain(0.4)

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

// drums · clap
const clap = s("cp").struct("<~ [~ x]!130 ~@5>").gain(0.35)

// drums · snare
const snare = s("sd").struct(`<
  ~@26 A ~@3 A ~@3 A ~@3 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 D ~@5
>`.pickRestart({
  A: "~ x ~@6", B: "~@8 x ~@2 x ~@2 x!2", C: "~@8 x!2 ~ x ~@2 x ~", D: "~@8 x!2 ~@6",
})).gain(0.2)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@40 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 ~@7
>`.pickRestart({
  A: "~@15 x",
})).gain(0.1)

// drums · low tom
const low_tom = s("lt").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 C D A D A D A D A D A D A D A D A D A D A
  D A D A D A D A D A D A D A D A D A D A D A D A D A D A D A D A E A D A E A D A E A D A D A D A E A D A E A D A D A D
  A D A D A D A D A D A D A ~@5
>`.pickRestart({
  A: "~ x ~@2", B: "~ x ~@6", C: "~ x ~@5 x", D: "~@3 x!2 ~@11", E: "~@3 x!2 ~ x!2 ~@8",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~ [x!16]!129 [x!11 ~@5] ~@5>").gain(0.1)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C@52 D C@3 D C@3 D C@7 D C@3 D C@18 E
  ~@5
>`.pickRestart({
  A: "~@3 x ~@11 x", B: "~@11 x!2 ~@3", C: "~@2 x ~@11 x!2", D: "~@2 x ~@2 x ~@8 x!2", E: "~ x ~@6",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").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 ~ C@52 D C@3 D C@3 D C@7 D C@3 D C@18 ~@6
>`.pickRestart({
  A: "~@2 x ~@5 x ~@2 x ~@2 x ~", B: "~@8 x ~@2 x ~@2 x ~", C: "~@13 x ~@2", D: "~ x ~@11 x ~@2",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@39 A ~@47 A ~@7 A ~@7 A ~@3 A ~@3 B ~@3 A ~@20>".pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.25)

// drums · congas
const congas = s("conga:33").struct("<~ [~@8 x ~@2 x ~@2 x ~]!129 [~ x] ~@5>").gain(0.79)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ [x!2 ~@14]!37 ~@98>").gain(1.51)

stack(
  bass, epiano2, distortion_guitar, xylophone, synth_strings_2, bass_2, kick, clap, snare, snare_soft, low_tom, hihat,
  mid_tom, high_tom, crash, congas, cabasa
)

More by Phil Collins