Strudelify

Sky Fits Heaven

Madonna

KeyD minorTempo126 bpm
0:00/0:00
// Sky Fits Heaven — Madonna
// 126 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 164 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/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 · pad halo
const pad_halo = note(`<
  A@2 B C D@2 E F A@2 G@2 H@2 I C J@2 K C J@2 K C A@2 B C D@2 E F A@2 G@2 H@2 I C L@4 M@2 N O P@4 M@2 N Q@2 R@3 S T U V
  S T W X S Y Z V AA AB AC X AD AE AF@2 AA AG AH X AI AJ AK V J@2 K C J@2 K C A@2 B C D@2 E F A@2 G@2 H@2 I L@4 M@2 N O
  P@4 M@2 N Q@2 R@3 S T U V S T W X S Y Z V AA AB AC X AD AE AF@2 AA AG AH X AL@5 ~@4
>`.pickRestart({
  A: "[[a3,d4,f4]@3 ~ [a3,d4,f4]@3 ~ [a3,d4,f4]@3 ~ [a3,d4,f4]@2 e4@2 f4@3 ~ f4@3 ~ e4@2 d4@2 c4@3 ~, ~@14 [a3,c4]@9 ~@9]/2", // Dm Am
  B: "[a3,c4]@3 ~@5 [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~, ~@4 d4@11 ~", // Am
  C: "[a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~", // Am
  D: "[[a3,d4,f4]@3 ~ [a3,d4,f4]@3 ~ [a3,d4,f4]@3 ~ [a3,d4,f4]@2 [a3,c4,f4]@4 f4@2 f4@3 ~ e4@3 ~ d4@3 ~]/2", // Dm F
  E: "[a3,c4]@7 ~ d4@4 c4@3 ~", F: "[a3,c4]@4 [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~",
  G: "[[c4,e4,a4]@3 ~ [c4,e4]@3 ~ [c4,e4]@2 d4@3 ~ [a3,c4,e4]@6 [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~]/2", // Am C Am
  H: "[[a3,d4,f4]@3 ~ [a3,d4,f4]@3 ~ [a3,d4,f4]@3 ~ [a3,d4,f4]@2 [a3,d4,f4]@4 f4@2 f4@3 ~ e4@3 d4@3 c4@2]/2", // Dm
  I: "c4@4 [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~", // Am
  J: "[[a3,d4,f4]@3 ~ [a3,d4,f4]@3 ~ [a3,d4,f4]@3 ~ [a3,d4,f4]@2 [a3,c4,e4]@5 ~ [a3,c4,e4]@3 ~ [a3,c4,e4]@2 [a3,c4,e4]@2 [a3,c4,e4]@3 ~]/2", // Dm Am
  K: "[a3,c4,e4]@3 ~ [a3,c4,e4]@2 [a3,c4,e4]@2 [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~", // Am
  L: "[[bb3,d4,f4]@7 ~ [bb3,d4,f4]@2 f4@2 f4@2 [a3,c4]@9 ~ [a3,c4,f4]@5 ~ [e3,g3,c4]@9 ~ [g3,c4,e4]@2 d4@2 e4@2 [a3,d4,f4]@7 ~ [a3,e4]@5 ~ [a3,d4]@3 ~]/4", // Bb Am F C Dm A5 D5
  M: "[[f3,bb3]@5 ~ bb3@2 [bb3,d4,f4]@2 f4@3 ~ [a3,c4]@4 [a3,c4,f4]@9 ~ c4@3 ~]/2", N: "[c4,g4]@11 ~ c4@2 c4@2",
  O: "bb4@2 a4@3 ~ f4@2 f4@3 ~ f4@3 ~, c4@15 ~",
  P: "[[bb3,d4,f4]@7 ~ [bb3,d4,f4]@2 f4@2 f4@2 [a3,c4]@9 ~ [a3,c4,f4]@2 f4@3 ~ [e3,g3,c4]@9 ~ [g3,c4,e4]@2 d4@2 e4@2 [a3,d4,f4]@7 ~ [bb3,e4]@5 ~ [a3,d4]@3 ~]/4", // Bb Am F C Dm Bbdim D5
  Q: "[bb4@2 a4@3 ~ f4@2 bb4@2 a4@3 ~ f4@7 ~ d4@9 ~, c4@15 ~@17]/2", R: "d3!8", S: "d4@3 ~ a4@3 ~ e5@3 ~ f5@3 ~",
  T: "c4@2 c4@2 c4@2 c4@4 d4@2 c4@3 ~, [f3,a3]@15 ~", U: "g3@3 ~ f4@3 ~ c5@3 ~@5, b3@15 ~", V: "[d4,g4]@15 ~",
  W: "[g3,b3]@4 a3@2 g3@9 ~", X: "[g3,b3,d4]@15 ~", Y: "f4@2 f4@2 f4@2 f4@4 g4@2 f4@3 ~, [a3,d4]@7 ~@9",
  Z: "[g3,b3]@3 ~ f4@3 ~ c5@3 ~@5, d4", AA: "f5@3 ~ a4@2 a4@2 e5@3 ~ f5@3 ~",
  AB: "f4@2 f4@2 f4@2 f4@4 g4@3 ~ f4@2, [a3,c4]@15 ~", AC: "g4@2 f4@2 d4@11 ~, b3@15 ~",
  AD: "a5@3 ~ a4@2 a4@2 e5@3 ~ f5@3 ~", AE: "e4@5 ~ d4@2 d4@7 ~, [f3,a3]@15 ~",
  AF: "[[g3,b3,e4]@5 ~ d4@2 [d4,g4]@12 f4@2 e4@2 [b3,d4]@7 ~, ~ b3@2 ~]/2", // Em G5 Bm
  AG: "f4@2 f4@2 f4@2 f4@4 g4@3 ~ f4@2, [a3,c4]@7 ~@9", AH: "[g4,a4]@2 f4@2 d4@11 ~, b3@15 ~",
  AI: "a5@3 ~ a4@3 ~ e5@3 ~ f5@3 ~", AJ: "[a3,c4,f4]@15 ~", AK: "g5@3 ~ g4@3 ~ c5@3 ~@5",
  AL: "[[g3,b3,d4]@5 g3 a3 f4@2 g3 a3 f4@2 g3 a3 f4@2 g3 a3 f4@2 g3 a3 f4@2 g3 a3 f4@2 g3 a3 f4@2 g3 a3 f4@2 g3 a3 ~]/5", // G
})).s("gm_pad_halo").gain(0.72)

// bass · fretless bass
const bass = note("<A@16 B@7 C D@14 E@5 F@8 G H G I@2 J@28 D@4 J@8 D@14 K@4 F@8 G H G I@2 J@32 L ~@4>".pickRestart({
  A: "[d2@31 ~]/2", B: "d2@3 ~ d2@3 ~ d2@3 ~ d2@3 ~", C: "d2@3 ~ d2@3 ~ d2@3 ~ d2@4", D: "d2/2",
  E: "[d2@20 d2@4 d2@4 ~@4 bb2@3 ~ bb2@3 ~ bb2@3 ~ bb2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~, ~@7 d2@13]/5",
  F: "[d2@4 d2@4 d2@4 ~@4 bb2@3 ~ bb2@3 ~ bb2@3 ~ bb2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ bb2@3 ~ bb2@3 ~ bb2@3 ~ bb2@3 ~ a2@3 ~ a2@3 ~ a2@3 ~ a2@3 ~ g2@3 ~ g2@3 ~ g2@3 ~ g2@3 ~, ~@3 d2@29]/8",
  G: "a2@3 ~ a2@3 ~ a2@3 ~ a2@3 ~", H: "bb2@3 ~ bb2@3 ~ bb2@3 ~ bb2@3 ~", I: "[c2@31 ~]/2", J: "d2!4",
  K: "[~@16 bb2@3 ~ bb2@3 ~ bb2@3 ~ bb2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~, d2]/4",
  L: "d2@4 d2@11 ~",
})).s("gm_fretless_bass").gain(0.72)

// other · pizzicato strings · "Trond Hoiland"
const pizzicato_strings = note("<~@160 [d4 db4 c4 b3 bb3 a3 ab3 g3]!3 [gb3 f3 e3 eb3 d3 db3 c3 b2]>")
  .s("gm_pizzicato_strings").gain(0.46)

// drums · kick
const kick = s("bd").struct("<~@24 A@30 B ~@5 A@22 B ~@14 A@31 B ~@2 A@23 B ~@9>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.41)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@15 [~ x ~@2 x ~@3 x ~@3 x ~@3] [x!4]!5 [x ~@3 x ~@4 x ~@2 x ~@3] [x!4]!2 ~@140>")
  .gain(0.26)

// drums · snare
const snare = s("sd").struct("<~@24 A@30 ~@5 B A@22 ~@11 C D ~@2 A@31 ~ E F A@23 ~@10>".pickRestart({
  A: "~ x ~ x", B: "x ~ x ~ x!2 ~ x!2 ~ x ~ x!2 ~@2", C: "~ x!2 ~@2 x ~@2 x ~ x ~ x!2 ~ x",
  D: "x ~ x ~ x!2 ~ x!2 ~ x ~ x ~ x ~", E: "x ~ x ~ x!2 ~ x ~@2 x ~ x!4", F: "x ~ x ~ x ~@2 x!3 ~ x!4 ~",
})).gain(0.31)

// drums · hihat
const hihat = s("hh").struct("<~@24 A@30 ~@6 A@22 ~@15 A@31 ~@3 A@23 B@6 ~@4>".pickRestart({
  A: "x!8", B: "x!4",
})).gain(0.41)

stack(pad_halo, bass, pizzicato_strings, kick, kick_soft, snare, hihat)

More by Madonna