Strudelify

Please Come Home for Christmas

Eagles

KeyA majorTempo91 bpm
0:00/0:00
// Please Come Home for Christmas — Eagles
// 91 bpm, 6/8, key A 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: Full arrangement: all 88 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(91/3)

// 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.

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A@4 B C D@2 E@2 F@2 B E B G F@2 H I B C D@2 E@2 F@2 B E B G F H B D J@2 K@2 L M N@2 J@2 K@2 O@2 P ~ B C D@2 E@2 F@2 Q
  R S T U V L W B C D@2 E@2 F@2 Q R S T U ~@3 X@4
>`.pickRestart({
  A: "[~@7 [c#5,c#6]@8 ~, [a5,a6] ~, ~@7 [e5,e6]@24 ~@17, ~@7 [f#5,f#6]@12 ~@5]/4", // C# A E F#
  B: "[c#4,e4,a4] ~@3 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~@3", // A
  C: "[c#4,e4,g#4] ~@3 [c#4,e4,g#4] ~@3 [c#4,e4,g#4] ~@3 [c#4,e4,g#4] ~@3 [c#4,e4,g#4] ~@3 [c#4,e4,g#4] ~@3", // C#m
  D: "[c#4,e4,g4] ~@3 [c#4,e4,g4] ~@3 [c#4,e4,g4] ~@3 [c#4,e4,g4] ~@3 [c#4,e4,g4] ~@3 [c#4,e4,g4] ~@3", // C#dim
  E: "[d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3", // D
  F: "[d#4,f#4,a4] ~@3 [d#4,f#4,a4] ~@3 [d#4,f#4,a4] ~@3 [d#4,f#4,a4] ~@3 [d#4,f#4,a4] ~@3 [d#4,f#4,a4] ~@3", // D#dim
  G: "[c#4,f#4,a4] ~@3 [c#4,f#4,a4] ~@3 [c#4,f#4,a4] ~@3 [c#4,f#4,a4] ~@3 [c#4,f#4,a4] ~@3 [c#4,f#4,a4] ~@3", // F#m
  H: "[b3,e4,g#4] ~@3 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~@3", // E
  I: "[c4,e4,g#4] ~@3 [c4,e4,g#4] ~@3 [c4,e4,g#4] ~@3 [c4,e4,g#4] ~@3 [c4,e4,g#4] ~@3 [c4,e4,g#4] ~@3", // Caug
  J: "[a3,d4,f#4,a4] ~@3 [a3,d4,f#4,a4] ~@3 [a3,d4,f#4,a4] ~@3 [a3,d4,f#4,a4] ~@3 [a3,d4,f#4,a4] ~@3 [a3,d4,f#4,a4] ~@3", // D
  K: "[a3,d4,f4,a4] ~@3 [a3,d4,f4,a4] ~@3 [a3,d4,f4,a4] ~@3 [a3,d4,f4,a4] ~@3 [a3,d4,f4,a4] ~@3 [a3,d4,f4,a4] ~@3", // Dm
  L: "[a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3", // A
  M: "[c4,e4,g#4,c5] ~@3 [c4,e4,g#4,c5] ~@3 [c4,e4,g#4,c5] ~@3 [c4,e4,g#4,c5] ~@3 [c4,e4,g#4,c5] ~@3 [c4,e4,g#4,c5] ~@3", // Caug
  N: "[a3,c#4,e4,g4] ~@3 [a3,c#4,e4,g4] ~@3 [a3,c#4,e4,g4] ~@3 [a3,c#4,e4,g4] ~@3 [a3,c#4,e4,g4] ~@3 [a3,c#4,e4,g4] ~@3", // A7
  O: "[b3,d#4,f#4,a4] ~@3 [b3,d#4,f#4,a4] ~@3 [b3,d#4,f#4,a4] ~@3 [b3,d#4,f#4,a4] ~@3 [b3,d#4,f#4,a4] ~@3 [b3,d#4,f#4,a4] ~@3", // B7
  P: "[b3,e4,g#4,b4] ~@23", // E
  Q: "~@4 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3", // A
  R: "[g#3,c#4,f4,g#4] ~@3 [g#3,c#4,f4,g#4] ~@3 [g#3,c#4,f4,g#4] ~@3 [g#3,c#4,f4,g#4] ~@3 [g#3,c#4,f4,g#4] ~@3 [g#3,c#4,f4,g#4] ~@3", // C#
  S: "[a3,c#4,f#4,a4] ~@3 [a3,c#4,f#4,a4] ~@3 [a3,c#4,f#4,a4] ~@3 [a3,c#4,f#4,a4] ~@3 [a3,c#4,f#4,a4] ~@3 [a3,c#4,f#4,a4] ~@3", // F#m
  T: "[a3,d4,f#4,a4] ~@3 [a3,d4,f#4,a4] ~@3 [a3,d4,f#4,a4] ~@3 [b3,d#4,f#4,a4] ~@3 [b3,d#4,f#4,a4] ~@3 [b3,d#4,f#4,a4] ~@3", // D B7
  U: "[a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@3 [a3,c#4,f#4,a4] ~@3 [a3,c#4,f#4,a4] ~@3 [a3,c#4,f#4,a4] ~@3", // A F#m
  V: "[b3,d#4,f#4,a4] ~@3 [b3,d#4,f#4,a4] ~@3 [b3,d#4,f#4,a4] ~@3 [g#3,b3,e4,g#4] ~@3 [g#3,b3,e4,g#4] ~@3 [g#3,b3,e4,g#4] ~@3", // B7 E
  W: "[g#3,c4,e4,g#4] ~@3 [g#3,c4,e4,g#4] ~@3 [g#3,c4,e4,g#4] ~@3 [g#3,c4,e4,g#4] ~@3 [g#3,c4,e4,g#4] ~@3 [g#3,c4,e4,g#4] ~@3", // G#aug
  X: "[~@17 [c#5,c#6]@24 ~@7, ~ [a5,a6]@6 ~@5, ~ [e5,e6]@3 ~@2, ~@25 [f#5,f#6]@48 ~@23]/4", // C# A E F#
})).s("gm_piano").gain(0.3).pan(0.4)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@4 A B C D E F G H I J K L M N O P A B C D E F G H I J K L Q R S T E U E V W X Y Z AA AB AC AD M AE AF ~ A B C D E F
  G H S AG AH AI AJ AK AL AM A B C D E F G H S AG AH AI AJ AK AN ~@5
>`.pickRestart({
  A: "a1@15 ~@5 c#2@2 ~@2", B: "e2@7 ~ f#2 ~ e2 ~", C: "a1@17 ~@3 e2@2 ~@2", D: "a2@11 ~ f#2@3 ~ e2@3 ~ c#2@4",
  E: "d2@13 ~@7 d2@2 ~@2", F: "d2@12 ~@4 c#2@3 ~ d2@3 ~", G: "d#2@13 ~@7 d#2@3 ~", H: "d#2@13 ~@3 e2@2 ~@2 f#2@3 ~",
  I: "a1@14 ~@2 b1@3 ~ c#2@3 ~", J: "d2@15 ~ e2@3 ~ f#2@3 ~", K: "a1@11 ~ g#1@11 ~", L: "f#1@12 f#2@4 c#2@3 ~ c2@3 ~",
  M: "b1@7 ~@3 b1 ~", N: "b1@14 ~@2 d2@3 ~ d#2@3 ~", O: "e2@16 ~@4 b1@3 ~", P: "e1@12 ~@4 f#1@3 ~ g#1@3 ~",
  Q: "b1@7 ~@3 b1@2", R: "d2@15 ~@5 e2@4", S: "a1@17 ~@3 a1@3 ~", T: "a1@15 ~ b1@3 ~ c#2@4", U: "d2@12 ~@8 a1@3 ~",
  V: "d2@13 ~@3 e2@2 ~@2 e1@3 ~", W: "a1@13 ~@7 a1@2 ~@2", X: "d2@7 ~@3 e2 ~", Y: "a1@13 ~@3 a1@2 ~@2 e2@3 ~",
  Z: "a2@12 a2@4 f#2@3 ~ e2@4", AA: "d2@7 ~@3 d2 ~", AB: "d2@15 ~ a2@2 ~@2 a1@2 ~@2", AC: "d2@15 ~@5 d2@2 ~@2",
  AD: "d2@13 ~@3 a1@3 ~ a#1@3 ~", AE: "b1@13 ~@3 d2@3 ~ d#2@3 ~", AF: "e2@7 ~@5", AG: "c#2@18 ~@2 c#2@3 ~",
  AH: "f#2@12 e2@11 ~", AI: "d2@12 d#2@11 ~", AJ: "e2 f#2", AK: "b1 e2", AL: "a1@14 ~@2 d2@3 ~ d#2@3 ~", AM: "e2@23 ~",
  AN: "a1@11 ~",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · electric guitar clean · "+CHORUS GT"
const electric_guitar_clean = note(`<
  ~@4 A B C@2 D@2 E@2 F D F@2 G@2 H I A B C@2 D@2 J E F D F@2 G K F@2 ~@4 F I A@2 L@2 M@2 N O P ~ A B C@2 D@2 Q E F R F
  G F H F ~ A B C@2 D@2 J E F R F G F ~ S@4 ~@2
>`.pickRestart({
  A: "~@12 [e4,a4,c#5,e5] ~@11", B: "~@12 [e4,g#4,c#5,e5] ~@11", C: "~@12 [e4,g4,c#5,e5] ~@11",
  D: "~@12 [d4,f#4,a4,d5] ~@11", E: "~@12 [d#4,f#4,a4,d#5] ~@11", F: "~@12 [c#4,e4,a4,c#5] ~@11",
  G: "~@12 [d#4,f#4,b4,d#5] ~@11", H: "~@12 [e4,g#4,b4,e5] ~@11", I: "~@12 [e4,g#4,c5,e5] ~@11",
  J: "~@12 [d#4,f#4,a4,c#5] ~@11", K: "~@12 [e4,g#4,b4,d5] ~@11",
  L: "[d4,f#4] ~ [d4,f#4] [a4,d5] [d4,f#4] [a4,d5] [d4,f#4] ~@5", // D D5 D D5 D
  M: "[d4,f4] ~ [d4,f4] [a4,d5] [d4,f4] [a4,d5] [d4,f4] ~@5", // Dm D5 Dm D5 Dm
  N: "[b3,d#4] ~ [b3,d#4] [f#4,b4] [b3,d#4] [f#4,b4] [b3,d#4] ~@5", // B B5 B B5 B
  O: "[b3,d#4] [f#4,b4] [b3,d#4] [f#4,b4] [b3,d#4] [f#4,b4] [b3,d#4] ~@3 [f#4,b4] ~", P: "[e4,g#4,b4,e5]@11 ~@13",
  Q: "~@12 [c#4,d#4,f#4,a4,c#5,d#5] ~@11", R: "~@12 [c#4,f4,g#4,c#5] ~@11",
  S: "[~@17 a3@4 ~@2 a3@5 ~ a3@6 ~@2 [e3,a3]@58 ~, ~@15 d3@6 d3@6 ~ [d3,f#3]@44 ~@24, ~@16 f#3@6 f#3@6 ~@7 a2@59 ~@2, ~@18 c#3@29 ~]/4", // A5 D
})).s("gm_electric_guitar_clean").gain(0.38).pan(0.2)

// chords · electric guitar clean · "+CHORUS GT" · soft notes · D5 D D5 D D5 Dm D5 Dm …
const electric_guitar_clean_2 = note(`<
  ~@44
  [[a4,d5] ~ [a4,d5] [d4,f#4] [a4,d5] [d4,f#4] [a4,d5] ~@5]!2
  [[a4,d5] ~ [a4,d5] [d4,f4] [a4,d5] [d4,f4] [a4,d5] ~@5]!2
  [[f#4,b4] ~ [f#4,b4] [b3,d#4] [f#4,b4] [b3,d#4] [f#4,b4] ~@5]
  [[f#4,b4] [b3,d#4] [f#4,b4] [b3,d#4] [f#4,b4] [b3,d#4] [f#4,b4] ~@3 [b3,d#4] ~]
  ~@38
>`).s("gm_electric_guitar_clean").gain(0.22).pan(0.2)

// chords · tubular bells · "TUBULARBEL"
const tubular_bells = note("<A@4 ~@80 B C ~@2>".pickRestart({
  A: "[~@7 c#5@8 ~, a5 ~, ~@7 e5@24 ~@17, ~@7 f#5@12 ~@5]/4", B: "~@8 a5 ~@7 e5 ~@7", C: "~ f#5 ~@8 c#5 ~@13",
})).s("gm_tubular_bells").gain(0.09)

// other · electric guitar clean · "+CHORUS GT"
const electric_guitar_clean_3 = note(`<
  ~@4 A@3 B@2 C@2 D@8 E F G F H I J K L M N O P Q R M S I J T U M V W X Y Z AA U AB AC AD@2 F G F H I J K L ~@8 F G F H
  I J K L M AE AF AG AH@6 ~@2
>`.pickRestart({
  A: "[~@6 [c#4,e4]@5 ~ [c#4,e4]@5 ~, ~@23 [e3,a3]@20 ~@4 [g3,a3]@20 ~@5]/3", // C#m A5 Gsus2
  B: "[~@6 [d4,f#4]@5 ~, ~@23 [f#3,a3]@20 ~@5]/2", C: "[~@25 d#4@20 ~@3, ~@23 d#3@20 ~@5, ~@6 [f#3,b3]@5 ~]/2",
  D: "[~@24 [a3,c#4]@20 ~@5 d4@20 ~@4 c#4@20 ~@3 [a3,c#4]@20 ~@5 d#4@20 ~@3 [b3,d#4]@20 ~@4 [b3,e4]@20 ~@3 [e3,g#3], ~@23 [c#3,e3]@20 ~@4 [d3,f#3]@20 ~@4 [c#3,e3]@20 ~@4 [c#3,f#3]@20 ~@4 [d#3,f#3]@20 ~@4 [d#3,f#3]@20 ~@4 [e3,g#3]@20 ~@5, ~@12 a3@5 ~ a3@5 ~@7 b3@5 ~@13]/8", // A B E5 E C#m D C#m F#5 …
  E: "[c4,e4]@5 ~", F: "~@3 c#4 a3 e3", G: "b3@4 a3@4 e3@4 g#3@5 ~@7", H: "b3 a3 e3 b3 ~@2", I: "~@3 f#4 d4 a3",
  J: "d4 a3 f#3 a3 f#3 d3", K: "~@3 f#4 d#4 b3", L: "d#4 b3 f#3 b3 f#3 d#3", M: "a2 e3 a3 c#4 a3 e3",
  N: "d3 f#3 a3 d4 a3 f#3", O: "a2 e3 a3 g#2 e3 g#3", P: "f#2 c#3 f#3 a3 f#3 c#3", Q: "b2 d#3 a3 d#4 a3 d#3",
  R: "b2 d3 g#3 d4 g#3 d3", S: "d4 a3 g3 e4 a3 g3", T: "~@3 f4 d4 a3", U: "d4 a3 f3 a3 f3 d3", V: "e3 g#3 c4 e4 c4 g#3",
  W: "e3 g3 a3 c#4 a3 e3", X: "d4 g3 e3 e4 g3 e3", Y: "d3 a3 d4 f#4 d4 a3", Z: "d4@4 a3@4 f#3@4 a3@3 f#3@5 d3@4",
  AA: "d3 a3 d4 f4 d4 a3", AB: "b2 d#3 f#3 d#4 b3 f#3", AC: "e4 b3 f#3 f#4 b3 f#3",
  AD: "[~ e4, ~ e3@3, ~ g#3@2, ~@5 c4@7]/2", AE: "c#3 f3 b3 c#4 b3 f3", AF: "f#3@3 a3@4 ~ c#4@4 e3@4 a3@4 c#4@4",
  AG: "f#3 a3 d4 f#3 a3 d#4",
  AH: "[e3@4 a3@4 c#4@4 f#3@4 a3@4 ~@4 a3@10 ~@2 b3@11 ~@17 [a3,d4]@5 ~@2 d4@5 ~@8 c#4@52 ~@8, ~@22 b2@11 ~ [b2,d3]@12 ~ c#3@48 ~@49, ~@23 [d#3,f#3]@11 ~ g#3@11 ~@2 e3@28 a3 d4@48 ~@19, ~@48 a3@15 f#3@6 f#3 a3@6 f#3@48 ~@20, ~@49 c#4@34 [e3,a3]@53 ~@8]/6", // D5 Bm D#m A5
})).s("gm_electric_guitar_clean").gain(0.35).pan(0.8)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@67 A B C@2 D E F G@2 H I J K L M ~@6>".pickRestart({
  A: "~@11 e4 f#4@4 a4@2 ~@2 a4@2 ~@2", B: "f#5@7 ~ e5@2 ~@2 b4@8 a4@4, e5 ~@23",
  C: "[b4@8 e5@4 b4@7 a4@12 ~ b4@5 ~@11]/2", D: "~@12 e4@3 ~ f#4@2 ~@2 a4@2 ~@2", E: "b4@8 a4 ~@3 b4@8 a4@2 ~ e5",
  F: "f#5@5 ~@3 e5@4 ~@4 b4@7 ~", G: "[a4@11 ~@5]/2", H: "a2 e3 a3 c#4 a3 e3", I: "c#3 f3 b3 c#4 b3 f3",
  J: "~@3 a3@5 c#4@4 e3@4 a3@4 c#4@4, f#3@5 ~@19", K: "f#3 a3 d4 f#3 a3 d#4", L: "e3 a3 c#4 f#3 a3 c#4",
  M: "d#3@5 ~@19",
})).s("gm_overdriven_guitar").gain(0.32)

// drums · kick
const kick = s("bd").struct("<~@4 [x ~@4 x]!46 x ~ [x ~@4 x]!29 x ~@6>").gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@4 A@46 ~@2 A@15 B A@2 C A@10 ~@7>".pickRestart({
  A: "~ x", B: "~ x!3 ~@2", C: "~@6 x ~@2 x ~ x",
})).gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~@67 [~@4 x!2] ~@20>").gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~@4 [x ~ x!3 ~ x ~ x ~ x ~]!46 x ~ [x ~ x!3 ~ x ~ x ~ x ~]!29 x ~@6>").gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<~@70 [~@3 x] ~@17>").gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@52 x ~@15 x ~@19>").gain(0.2)

stack(
  piano, bass, electric_guitar_clean, electric_guitar_clean_2, tubular_bells, electric_guitar_clean_3,
  overdriven_guitar, kick, snare, low_tom, hihat, open_hat, crash
)

More by Eagles