Strudelify
Holiday cover art

Madonna

Holiday

Madonna

KeyD majorTempo123 bpm
0:00/0:00
// Holiday — Madonna
// 123 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 140 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(123/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.

// chords · epiano1 · "Elec. Piano"
const epiano1 = note(`<
  A B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A
  C D B A C D B A C D B A C D B A C D B A C D B A C D B A C D B A C ~@8 D B A C D B A C D B A C D B A C D B A C D B A C
  D B A C D B A C ~@8
>`.pickRestart({
  A: "[b3,d4,g4]@3 [c#4,e4,a4]@5", B: "[c#4,e4,a4]@3 [d4,f#4,b4]@5", C: "[a3,c#4,f#4]@3 [b3,d4,g4]@5",
  D: "[d4,g4,b4]@3 [c#4,e4,a4]@5", // G A
})).s("gm_epiano1").gain(0.49)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  ~@7 A ~@4 B C B D E C B D B C B D B C B D F C B D F C B D F C B D F C B D F C B D F C B D F C B D F C B D F C B D F C
  B D B C B D F C B D E C B D F C B D E C B D E C B D ~@8 E C B D B C B D E C B D B C B D B C B D B C B D F C B D E C B
  D E G B H E G B I
>`.pickRestart({
  A: "~@6 [d4,g4,b4] ~", B: "[d4,f#4,b4]@3 [d4,f#4,b4] ~@2 [e4,a4,c#5]@4 [e4,a4,c#5] ~@2 [e4,a4,c#5] ~@2",
  C: "[c#4,e4,a4]@2 b4 [e4,a4,c#5] ~@2 [f#4,b4,d5]@4 [f#4,b4,d5] ~@2 [f#4,b4,d5] ~@2", // A Bm
  D: "[c#4,e4,a4]@2 b4 [e4,a4,c#5] ~@2 [d4,f#4,b4]@4 [d4,f#4,b4] ~@2 [d4,f#4,b4] ~@2", // A Bm
  E: "[d4,f#4,b4]@3 [d4,f#4,b4] ~@2 a4@2 a4@2 [e4,a4,c#5] ~@2 [e4,a4,c#5] ~@2, ~@3 [e4,c#5]@2 ~@3", // Bm A C#m
  F: "[d4,f#4,b4]@3 [d4,f#4,b4] ~@2 [e4,f4,a4,c#5]@4 [e4,a4,c#5] ~@2 [e4,a4,c#5] ~@2", // Bm A
  G: "[c#4,e4,a4]@2 b4 [e4,a4,c#5] ~@2 [f#4,b4,d5]@4 [f#4,b4,d5]!2 [f#4,b4,d5]@3 ~", // A Bm
  H: "[c#4,e4,a4]@2 b4 [e4,a4,c#5] ~@2 [d4,f#4,b4]@4 [d4,f#4,b4]!2 [d4,f#4,b4]@2 [d4,f#4,b4]!2", // A Bm
  I: "[c#4,e4,a4]@2 b4 [e4,a4,c#5] ~@12", // A
})).s("gm_acoustic_guitar_steel").gain(0.35)

// other · brass section · "Brass"
const brass_section = note(`<
  ~@7 A ~@3 B@2 C@2 D@2 C@2 D@2 C@2 E F G ~@2 H I ~@18 F G ~@2 H I ~ J@4 ~@17 F G ~ K H I ~@2 L M L N L M L N ~@8 F G ~
  K H I ~ O F G ~ P H I ~ P F G ~ K H I ~@2 F G ~ P H I ~ B@2 C@2 D@2 Q@2 R
>`.pickRestart({
  A: "~@12 [d4,g4,b4,d5,f#5] ~@3", B: "[~@12 a4 b4 d5 e5@3 d5@2 ~@8 a4@2 ~@2]/2",
  C: "[a4@3 b4 ~@8 a4 b4 d5 e5@3 d5@2 ~@4 a4!2 ~@2 a4@2 ~@2]/2", D: "[a4@3 b4 ~@8 a4 b4 d5 e5@3 d5@2 ~@8 a4@2 ~@2]/2",
  E: "a4@3 b4 ~@12", F: "~@14 f#4 ~", G: "a4@3 b4 ~@2 f#4 ~ a4@3 b4 ~@4", H: "~@14 f#5 ~",
  I: "a5@3 b5 ~@2 f#5 ~ a5@3 b5 ~@4", J: "[~@12 a4 b4 d5 e5@3 d5@2 ~@12]/2", K: "a4@2 ~ c#5@3 b4@8 ~@2",
  L: "~@2 e5@2 d5@2 a4 b4@4 ~ b4@2 a4@2", M: "b4@3 ~ b4@2 a4 b4@7 ~@2", N: "b4@3 ~ b4@2 a4 b4@3 d5@5 ~",
  O: "~@6 [g4,b4,d5,f#5] ~", P: "a4@3 c#5@3 b4@8 ~@2",
  Q: "[a4@3 b4 ~@8 a4 b4 d5 e5@3 d5@2 ~@4 [a4,a5]!2 ~@2 [a4,a5]@2 ~@2]/2", R: "[a4,a5]@3 [b4,b5] ~@12",
})).s("gm_brass_section").gain(0.49)

// other · synth strings 1 · "Strings"
const synth_strings_1 = note(`<
  ~@3 A B C D E ~@7 F@2 G@2 H@2 G@2 I J K ~@2 L M ~@10 N O N P ~@4 J K ~@2 L M ~ Q@4 ~@9 R S R T ~@2 U V J K ~ W L M X Y
  Z AA Z AB Z AA Z AB ~@8 J K ~ W L M ~ AC J K ~ AD L M ~ AD J K ~ W L M ~@2 J K ~ AD L M ~ AE AF G@2 H@2 AG@2 AH
>`.pickRestart({
  A: "~@12 a4 b4 d5@2", B: "f#5@3 e5@3 d5@2 c#5@3 b4@3 a4@2", C: "f#4@9 ~@3 a4 b4 d5@2",
  D: "f#5@3 e5@3 d5@2 c#5@3 b4@3 a5@2", E: "f#5@9 ~@3 [b4,d5,f#5] ~@3", F: "[~@12 a4 b4 d5 e5@3 d5@2 ~@8 a4@2 ~@2]/2",
  G: "[a4@3 b4 ~@8 a4 b4 d5 e5@3 d5@2 ~@4 a4!2 ~@2 a4@2 ~@2]/2", H: "[a4@3 b4 ~@8 a4 b4 d5 e5@3 d5@2 ~@8 a4@2 ~@2]/2",
  I: "a4@3 b4 ~@12", J: "~@14 f#4 ~", K: "a4@3 b4 ~@2 f#4 ~ a4@3 b4 ~@4", L: "~@14 f#5 ~",
  M: "a5@3 b5 ~@2 f#5 ~ a5@3 b5 ~@4", N: "b4@3 a4@5", O: "a4@3 b4@5", P: "a4@3 f#4@5",
  Q: "[~@12 a4 b4 d5 e5@3 d5@2 ~@12]/2", R: "b4@5 ~ a4@9 ~", S: "a4@5 ~ b4@9 ~", T: "a4@5 ~ f#4@9 ~",
  U: "~@6 f#4@2 b4@2 a4 ~ a4@2 f#4 ~", V: "b4@3 a4@3 ~@2", W: "[c#4,a4]@2 ~ [e4,c#5]@3 [d4,b4]@8 ~@2",
  X: "~@12 [a4,c#5] ~ [a4,c#5] ~", Y: "[a4,c#5]@3 ~ [c#5,e5]@3 ~ [b4,d5]@3 ~@5", Z: "~@2 e5@2 d5@2 a4 b4@4 ~ b4@2 a4@2",
  AA: "b4@3 ~ b4@2 a4 b4@7 ~@2", AB: "b4@3 ~ b4@2 a4 b4@3 d5@5 ~", AC: "~@6 [g4,b4,d5,f#5] ~",
  AD: "[c#4,a4]@3 [e4,c#5]@3 [d4,b4]@8 ~@2", AE: "~@12 a4 b4 d5 ~", AF: "~ d5 ~@4 a4 ~",
  AG: "[a4@3 b4 ~@8 a4 b4 d5 e5@3 d5@2 ~@4 [a4,a5]!2 ~@2 [a4,a5]@2 ~@2]/2", AH: "[a4,a5]@3 [b4,b5] ~@12",
})).s("gm_synth_strings_1").gain(0.59).pan(1)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@7 A B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E
  B C D E B C D E B C D E B C D E B C D E B C D E B C D E B F ~@6 B C D E B C D G B C D E B C D E B C D E B C D E B C D
  E B C D H@2 I@2 J@2 I@2 K
>`.pickRestart({
  A: "~@3 [g1,g2]", B: "g1@3 g1@3 a1@2 ~@6 a1!2", C: "a1@3 a1@3 b1@2 ~@2 b1!3 d2 b1 a1", D: "g1@3 g1@3 a1@2 ~@6 a1 g1",
  E: "f#1@3 f#1@3 g1@2 ~@6 d2@2", F: "a1@3 a1@3 b1@2 ~@2 b1!2 ~@4", G: "f#1@3 f#1@3 g1@2 ~@4 g2@2 d2@2",
  H: "[f#1@3 f#1@3 g1@2 ~@4 a1 b1 d2 e2@3 d2@2 ~@8 a1@2 ~@2]/2",
  I: "[a1@3 b1 ~@8 a1 b1 d2 e2@3 d2@2 ~@4 a1@2 ~@2 a1@2 ~@2]/2", J: "[a1@3 b1 ~@8 a1 b1 d2 e2@3 d2@2 ~@8 a1@2 ~@2]/2",
  K: "a1@3 b1 ~@12",
})).s("gm_electric_bass_finger").gain(0.7)

// drums · kick
const kick = s("bd").struct("<~@8 [x!2]!124 ~@2 [~@2 x!2] [x ~@2 x ~@12] ~@2 [~@2 x!2] [x ~@2 x ~@12]>").gain(0.49)

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

// drums · clap
const clap = s("cp").struct("<~@8 [~ x ~ x]!124 ~@8>").gain(0.49)

// drums · low tom
const low_tom = s("lt").struct("<~@134 [~@14 x!2] [x ~@2 x ~@12] ~@2 [~@8 x ~@5 x!2] [x ~@2 x ~@12]>").gain(0.49)

// drums · mid tom
const mid_tom = s("mt").struct("<~@94 A B ~ B ~ C ~@34 D ~@3 D ~>".pickRestart({
  A: "~@15 x", B: "~@3 x ~@4", C: "~@3 x!2 ~@3", D: "~@5 x!2 ~",
})).gain(0.49)

// drums · high tom
const high_tom = s("ht").struct("<~@95 A ~ B C D ~@34 E ~@3 E ~>".pickRestart({
  A: "x!3 ~ x ~@3 x ~@7", B: "x ~@2 x!2 ~@3 x!2 ~@6", C: "~ x!2 ~@2 x!2 ~", D: "~@9 x ~ x!2 ~@3", E: "~@9 x ~@6",
})).gain(0.49)

// drums · crash
const crash = s("cr").struct("<~@8 x ~@123 x ~@2 x ~@3 [x ~@2 x ~@12]>").gain(0.49)

// drums · tambourine
const tambourine = s("tb").struct("<[~ x ~ x]!8 [x!16]!8 ~@124>").gain(0.49)

// drums · cowbell
const cowbell = s("cb").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 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
>`.pickRestart({
  A: "x ~ x ~@5 x!2 ~ x ~@4", B: "x!2 ~ x ~@4", C: "x ~@2 x ~@12",
})).gain(0.49)

// drums · shaker
const shaker = s("sh").struct("<[x!16]!139 [x!4 ~@12]>").gain(0.49)

stack(
  epiano1, acoustic_guitar_steel, brass_section, synth_strings_1, bass, kick, snare, clap, low_tom, mid_tom, high_tom,
  crash, tambourine, cowbell, shaker
)

More by Madonna