Strudelify

Die Another Day

Madonna

KeyA♭ majorTempo69 bpm
0:00/0:00
// Die Another Day — Madonna
// 69 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 16, 4/4 at bar 16, 2/4 at bar 50, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 52 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(69/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 · piano
const piano = note("<A B C ~ D@4 E@3 F@2 G@2 H I@2 ~@9 J K L M@5 N@7 O@2 P@3 Q R@2 S T>".pickRestart({
  A: "~@11 [eb3,c4]", B: "~ [eb3,c4]@6 [eb3,c4]@3 [f3,db4]@6 [gb3,eb4]@9 [gb3,eb4]@6 [gb3,eb4]@3 [f3,db4]@6 [eb3,c4]@8",
  C: "~ [eb3,c4]@6 [eb3,c4]@3 [db3,bb3]@6 [c3,ab3]@8 [c3,ab3]@18 ~@6", // Cm Gb Fm
  D: "[~@35 eb4@6 c4@22 f4@17 f4@5 [g3,eb4]@17 [bb3,db4]@6 [ab3,c4]@17 ~@2 [ab3,c4]@3 [f3,db4]@11 [eb3,c4]@11 ~ db3@22 [ab3,c4]@11 db4@6, ~@41 eb4@8 ~@14 ab4@22 ~@68 bb3@11 ~@28]/4", // Cm Bbm Ab Db Cm Ab
  E: "[c4@5 [g3,bb3]@8 ~ [bb3,eb4]@5 bb3@3 eb3@6 eb4@5 eb4@6 f4@6 g4@5 ab4@3 g4@8 ab4@6 c5@6 [g3,eb4]@16 [g3,eb4]@6 [ab3,f4]@5 c4@11 ~@3 c4@3 [g3,eb4]@9 db4@2 c4@6 bb3@6 ab3@4, ~@28 c4@22 f4@22 ~@56 g3@11 ~@5]/3", // Gm Eb5 Cm Db Cm
  F: "[~ f3@17 [eb3,bb3]@8 c4@3 [eb3,c4]@11 ~@6 ab4@3 ab4@3 ab4@2 [c4,eb4,c5]@8 ~ eb4@3 c4@3 [db4,f4]@3 [db4,f4]@3 [db4,f4]@3 [db4,f4]@6 [db4,f4] [db4,f4]@2 [db4,f4]@3 [c4,eb4]@3 [c4,ab4]@3, ~@46 [c4,eb4]@8 ~@12 eb4@21 ~@9]/2", // Eb5 Cm Db Cm Fm Cm
  G: "[ab4@3 ab4@3 c5@9 ~@6 [db4,f4]@3 [db4,f4]@3 [db4,f4]@3 [db4,f4]@6 [db4,f4] [db4,f4]@2 [db4,f4]@3 c4@3 [c4,ab4]@6 c4@3 c4@6 eb4@3 c4@3 ~@3 [f3,ab3]@3 f3@3 f3@3 [f3,ab3]@3 [f3,ab3]@3 f3@3 [g3,bb3]@6 [ab3,c4]@3, ~@5 eb4@9 eb4@3 ~@4 f3@2 ~@9, ~@22 bb3@2 ab3@2 ~@2 ab3@3 ~]/2", // Db Fm Gm Ab
  H: "[f3,ab3]@6 c4@3 ~@3 eb4@3 [f3,c4]@3 bb3@6 ab3@3 [db4,f4]@4 [c4,eb4]@5 [bb3,db4]@3 [eb3,c4]@5 [eb3,c4]@4, ~@3 c4@2 ~@11", // Fm F5 Db Cm Bbm Cm
  I: "[~@2 [eb3,c4]@3 [f3,db4]@5 [gb3,eb4]@8 ~ [gb3,eb4]@5 [gb3,eb4]@3 [f3,db4]@6 [eb3,c4]@8 [eb3,c4]@6 [eb3,c4]@3 [db3,bb3]@5 [c3,ab3]@8 ~ [c3,ab3]@17 ~@15]/2", // Cm Db Ebm Db Cm Gb Fm
  J: "eb4@3 c4@3 [db4,f4]@3 [db4,f4]@3 [db4,f4]@3 [db4,f4]@6 [db4,f4] [db4,f4]@2 [db4,f4]@3 [c4,eb4]@3 [c4,ab4]@3 ab4@3 ab4@3 c5@9, ~ eb4@7 ~@8", // Db Cm Fm
  K: "~@6 [db4,f4]@3 [db4,f4]@3 [db4,f4]@3 [db4,f4]@6 [db4,f4] [db4,f4]@2 [db4,f4]@3 c4@3 [c4,ab4]@6 c4@3 c4@6 eb4@3, eb4@9 eb4@3 ~@4", // Db Fm
  L: "c4 ~ [f3,ab3] f3!2 [f3,ab3]!2 f3 [g3,bb3]@2 [ab3,c4] [f3,ab3]@2 c4 ~ eb4, f3 ~@7, ~ bb3@2 ab3@2 ~@2 ab3@3 ~@4 c4@2", // Fm Gm Ab Fm
  M: "[[f3,c4]@3 bb3@6 ab3@3 [db4,f4]@4 [c4,eb4]@5 [bb3,db4]@3 [ab3,c4]@18 ~@4 [c4,ab4]@9 [ab3,c4]@3 [ab3,c4]@24 c4@3 bb3@3 ab3@2 bb3@3 [ab3,c4]@9 [c4,eb4]@3 [ab3,c4]@35 ~ [c4,ab4]@9 [ab3,c4]@3 [ab3,c4]@23 [c4,eb4]@3 [bb3,db4]@3 [ab3,c4]@3 [bb3,db4]@3 [ab3,c4]@44 c4@3 [c4,ab4]@5]/5", // F5 Db Cm Bbm Ab Fm Ab Cm …
  N: "[~@4 [ab3,c4]@3 [ab3,c4]@24 c4@3 bb3@3 ab3@3 bb3@3 [eb3,c4]@12 [c4,eb4]@24 ~@2 bb4@3 bb4@3 c5@3 bb4@3 ab4@12 bb4@3 bb4@3 c5@3 [f4,bb4]@9 ab4@2 f4@9 ab4@3 [c4,ab4]@12 eb5@3 db5@3 c5@3 bb4@3 [c4,ab4]@24 eb4@8 eb4@3 f4@5 g4@6 ~@2 g4@3 ~@11 [f4,c5]@6 [g3,eb4]@16 [bb3,db4]@6 [ab3,c4]@17 ~@2 [ab3,c4]@3 [f3,db4]@11 [eb3,c4]@11 db3@22 [ab3,c4]@11 db4@6 c4@2, ~@90 [db4,f4]@24 db4@24 ~@47 c4@22 f4@16 ~@72 bb3@11 ~@30, ~@207 ab4@5 ab4@17 ~@107]/7", // Ab Cm Bb5 Fm F5 Cm Bbm Ab …
  O: "[~@3 [g3,bb3]@8 [bb3,eb4]@6 bb3@3 eb3@5 eb4@6 eb4@5 f4@6 g4@5 ab4@3 g4@8 ab4@6 c5@5 [g3,eb4]@17 [g3,eb4]@6 [ab3,f4]@4, ~@25 c4@22 f4@22 ~@27]/2", // Gm Eb5 Cm Db
  P: "[~ c4@11 ~@3 c4@3 [g3,eb4]@8 db4@3 c4@5 bb3@6 ab3@5 f3@17 [eb3,bb3]@8 c4@3 [eb3,c4]@11 ~@5 ab4@3 ab4@3 ab4@3 [c4,eb4,c5]@8 eb4@3 c4@3 [db4,f4]@3 [db4,f4]@3 [db4,f4]@3 [db4,f4]@6 [db4,f4] [db4,f4]@2 [db4,f4]@3 [c4,eb4]@3 [c4,ab4]@3 ab4@3 ab4@2, ~@29 g3@11 ~@49 [c4,eb4]@8 ~@12 eb4@21 ~@14]/3", // Cm Eb5 Cm Db Cm Fm Cm
  Q: "~ c5@9 ~@6 [db4,f4]@3 [db4,f4]@3 [db4,f4]@3 [db4,f4]@6 [db4,f4] [db4,f4]@2 [db4,f4]@3 c4@3 [c4,ab4]@6 c4@2, ~@10 eb4@27 eb4@9 ~@2", // Db Fm
  R: "[~ c4@6 eb4@3 c4@3 ~@3 [f3,ab3]@3 f3@3 f3@3 [f3,ab3]@3 [f3,ab3]@3 f3@3 [g3,bb3]@6 [ab3,c4]@3 [f3,ab3]@6 c4@3 ~@3 eb4@3 c4@3 bb3@6 ab3@3 ab3@3 ab3@6 ab3 ab3@2 [eb3,c4]@6 [eb3,c4]@6 [eb3,c4]@2, ~@10 f3@6 ~@42 ab3@9 ~@29, ~@13 bb3@6 ab3@6 ~@6 ab3@9 ~@12 c4@6 ~@38]/2", // Fm Gm Ab Fm Cm
  S: "~ [f3,db4]@6 [gb3,eb4]@9 [gb3,eb4]@6 [gb3,eb4]@3 [f3,db4]@6 [eb3,c4]@9 [eb3,c4]@6 [eb3,c4]@2", // Db Ebm Db Cm
  T: "~ [db3,bb3]@6 [c3,ab3]@27 ~@14", // Gb Fm
})).s("gm_piano").gain(0.44)

// chords · alto sax · "Che" · Cm Db Cm Fm Db Cm Fm Gm …
const alto_sax = note(`<
  ~@27
  [~@3 [c3,eb3]@3 [db3,f3]@3 [db3,f3]@3 [db3,f3]@3 [db3,f3]@6 [db3,f3] [db3,f3]@2 [db3,f3]@3 [c3,eb3]@3 [c3,ab3]@12 ~@6]
  [~@6 [db3,f3]@3 [db3,f3]@3 [db3,f3]@3 [db3,f3]@6 [db3,f3] [db3,f3]@2 [db3,f3]@3 [c3,eb3]@3 [c3,ab3]@12 ~@6]
  [~@2 [f2,ab2]!6 [g2,bb2]@2 [ab2,c3] [f2,ab2]@3 ~@2]
  ~@22
>`).s("gm_alto_sax").gain(0.57)

// bass · electric bass finger · "Bass"
const bass = note("<A@6 B@2 C@5 D E F@3 G@2 H@5 I J K L M N ~@7 O@2 P@5 Q R S T@4>".pickRestart({
  A: "[~@44 ab1@17 eb2@6 ab2@18 eb2@6 ab1@18 eb2@5 ab2@12 eb2@6 eb2@6 ab2@18 eb2@6 ab2@18 eb2@5 ab1@47 ~ ab2@17 bb2@2 c3@3 db3@17 db3@5 eb3@11]/6",
  B: "[~ eb2@11 ab2@17 bb2@2 c3@3 db3@11 c3@11 ~ bb2@11 eb2@11 ab2@11 eb2@6]/2",
  C: "[eb2@5 eb3@8 ~ g2@8 eb2@6 ab2@17 ab2@5 db3@17 eb2@3 f2@3 eb2@11 eb2@2 a2@3 bb2@3 eb2@3 f2@8 c3@6 ab2@3 f2@5 eb2@11 eb2@3 f2@3 g2@3 eb2@3 db3@11 ab2@5 f2@3 db2@3 ab1@8 c2@3 ab2@8 ~ c2@2 ab2@6 c3@8 bb2@3 ab2@3 f2@3 eb2@9 bb2@3 eb2@9 eb2@3 ab2@9]/5",
  D: "~ ab2 bb2 c3@2 eb2@6 eb2@2 ab2@3", E: "~ ab2!2 bb2 c3 db3@6 ab2@2 f2@3",
  F: "[~@3 f2@6 ab2@6 db2@9 ab2@3 db3@4 c3@5 bb2@2 ~ ab1@17 eb2@5 ab2@17 eb2@6 ab1@16 eb2@6 ab2@11 eb2@6 eb2@5 ab2@16]/3",
  G: "[~ eb2@6 ab2@17 eb2@5 ab1@45 ab2@17 bb2@2 c3@3]/2",
  H: "[db3@17 db3@6 eb3@11 eb2@11 ab2@17 bb2@3 c3@2 db3@11 ~ c3@11 bb2@11 eb2@11 ab2@11 eb2@6 eb2@6 eb3@8 g2@8 eb2@6 ab2@17 ab2@5 db3@17 eb2@3 f2@3 eb2@11 eb2@3 a2@2 bb2@3 eb2@3 f2@8 c3@6 ab2@2]/5",
  I: "~ f2@5 eb2@11 ~ eb2@2 f2@3 g2@3 eb2@3 db3@11 ab2@6 f2@2",
  J: "db2@3 ab1@8 ~ c2@2 ab2@8 ~ c2@3 ab2@5 c3@8 ~ bb2@2 ab2@3 f2@3", K: "eb2@3 bb2 eb2@3 eb2 ab2@4 ab2 bb2 c3@2",
  L: "eb2@6 eb2@2 ab2@4 ab2!2 bb2 c3", M: "db3@3 ab2 f2@2 f2 ab2",
  N: "db2@9 ab2@3 db3@4 c3@5 bb2@3 ab2@12 ab2@6 g2@5 ~", O: "[~@41 ab2@16 bb2@3 c3@3 db3@16 db3@6 eb3@11]/2",
  P: "[eb2@11 ab2@16 bb2@3 c3@3 db3@11 c3@11 bb2@11 eb2@11 ab2@11 eb2@6 eb2@5 eb3@8 g2@8 ~ eb2@5 ab2@17 ab2@5 db3@17 eb2@3 f2@2 eb2@11 eb2@3 a2@3 bb2@3 eb2@3 f2@8 c3@5 ab2@3 f2@6 eb2@11 eb2@2 f2@3 g2@3 eb2@3 db3@8]/5",
  Q: "~@3 ab2@5 f2@3 db2@3 ab1@8 c2@3 ab2@8 c2@3 ab2@5 c3@7",
  R: "~@2 bb2@2 ab2@3 f2@3 eb2@9 bb2@3 eb2@9 eb2@3 ab2@12 ab2@2", S: "~ bb2@3 c3@6 eb2@18 eb2@6 ab2@12 ab2@2",
  T: "[~ ab2@3 bb2@3 c3@3 db3@18 ab2@6 f2@12 f2@6 ab2@6 [db2,ab2]@24 ab1@18 eb2@6 ab2@18 eb2@6 ab1@18 eb2@6 ab1@24 ~@14]/4", // Db5
})).s("gm_electric_bass_finger").gain(0.52)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note("<~@12 A@3 B ~@3 C D@5 E F G H I J ~@21>".pickRestart({
  A: "[~@18 [c3,eb3]@3 [db3,f3]@3 [db3,f3]@3 [db3,f3]@3 [db3,f3]@6 [db3,f3] [db3,f3]@2 [db3,f3]@3 [c3,eb3]@3 [c3,ab3]@12 ~@12 [db3,f3]@3 [db3,f3]@3 [db3,f3]@3 [db3,f3]@6 [db3,f3] [db3,f3]@2 [db3,f3]@3 [c3,eb3]@3 [c3,ab3]@12 ~@12 [f2,ab2]@3 [f2,ab2]@3 [f2,ab2]@3 [f2,ab2]@3 [f2,ab2]@3 [f2,ab2]@3 [g2,bb2]@6 [ab2,c3]@3]/3", // Cm Db Cm Fm Db Cm Fm Gm …
  B: "[f2,ab2]@3 ~@13", C: "~@26 eb4@8 eb4@3 f4@6 g4@5, ~@13 c4@11",
  D: "[~@3 g4@3 ~@11 [f4,c5]@6 [g3,eb4]@16 [bb3,db4]@6 [ab3,c4]@17 ~@3 [ab3,c4]@2 [f3,db4]@11 ~ [eb3,c4]@11 db3@22 [ab3,c4]@11 db4@6 c4@6 [g3,bb3]@8 [bb3,eb4]@6 bb3@2 eb3@6 eb4@5 eb4@6 f4@6 g4@5 ab4@3 g4@8 ab4@6 c5@6 [g3,eb4]@16 [g3,eb4]@6 [ab3,f4]@6 c4@10, f4@17 ~@73 bb3@11 ~@56 c4@22 ~@61, ab4@6 ab4@17 ~@156 f4@22 ~@39]/5", // F5 Cm Bbm Ab Db Cm Ab Gm …
  E: "~@4 c4@2 [g3,eb4]@9 db4@3 c4@5 bb3@6 ab3@5 f3@14, ~@18 g3@11 ~@19", // Cm
  F: "~@3 [eb3,bb3]@9 c4@2 [eb3,c4]@11 ~@6 ab4@3 ab4@3 ab4@3 [c4,eb4,c5]@8, ~@31 [c4,eb4]@8 ~@9", // Eb5 Cm
  G: "eb4@3 c4@3 [db4,f4]@3 [db4,f4]@3 [db4,f4]@3 [db4,f4]@6 [db4,f4] [db4,f4]@2 [db4,f4]@3 [c4,eb4]@3 [c4,ab4]@3 ab4@3 ab4@3 c5@9, ~ eb4@7 ~@8", // Db Cm Fm
  H: "~@6 [db4,f4]@3 [db4,f4]@3 [db4,f4]@3 [db4,f4]@6 [db4,f4] [db4,f4]@2 [db4,f4]@3 c4@3 [c4,ab4]@6 c4@3 c4@6 eb4@3, eb4@9 eb4@3 ~@4", // Db Fm
  I: "c4 ~ [f3,ab3] f3!2 [f3,ab3]!2 f3 [g3,bb3]@2 [ab3,c4] [f3,ab3]@2 c4 ~ eb4, f3 ~@7, ~ bb3@2 ab3@2 ~@2 ab3@3 ~@4 c4@2", // Fm Gm Ab Fm
  J: "[f3,c4]@3 bb3@6 ab3@3 [db4,f4]@4 [c4,eb4]@5 [bb3,db4]@3 [ab3,c4]@18 ~@6", // F5 Db Cm Bbm Ab
})).s("gm_acoustic_guitar_steel").gain(0.52)

// bass · acoustic bass · "Bass2"
const bass_2 = note("<~@30 A@8 B ~@13>".pickRestart({
  A: "[~@46 f2@18 f2@6 f2@18 f2@5 ab2@18 ab2@6 ab2@18 ab2@3 g2@3 f2@17 f2@6 f2@18 f2@3 g2@3 ab2@18 ab2@6 ab2@17 ab2@6 f2@18 f2@6 f2@18 f2@6 c2@17 c2@6 c2@18 c2@6 db2@18 db2@6 db2@17 db2@6 ab2@7]/8",
  B: "~@11 ab2@6 ab2@24 ~@7",
})).s("gm_acoustic_bass").gain(0.47)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<~@30 A@5 B@4 ~@13>".pickRestart({
  A: "[~@46 [c4,ab4]@9 [ab3,c4]@3 [ab3,c4]@24 c4@3 bb3@3 ab3@2 bb3@3 [ab3,c4]@9 [c4,eb4]@3 [ab3,c4]@35 ~ [c4,ab4]@9 [ab3,c4]@3 [ab3,c4]@23 [c4,eb4]@3 [bb3,db4]@3 [ab3,c4]@3 [bb3,db4]@3 [ab3,c4]@44 c4@3 [c4,ab4]@5]/5", // Fm Ab Cm Ab Fm Ab Cm Bbm …
  B: "[~@4 [ab3,c4]@3 [ab3,c4]@24 c4@3 bb3@3 ab3@3 bb3@3 [eb3,c4]@12 [c4,eb4]@24 ~@2 bb4@3 bb4@3 c5@3 bb4@3 ab4@12 bb4@3 bb4@3 c5@3 [f4,bb4]@9 ab4@2 f4@9 ab4@3 [c4,ab4]@12 eb5@3 db5@3 c5@3 bb4@3 [c4,ab4]@24 ~@7, ~@15 [db4,f4]@4 db4@4 ~@9]/4", // Ab Cm Bb5 Fm Db
})).s("gm_string_ensemble_1").gain(0.44)

stack(piano, alto_sax, bass, acoustic_guitar_steel, bass_2, string_ensemble_1)

More by Madonna