Strudelify

Life On Mars

David Bowie

KeyB♭ majorTempo65 bpm
0:00/0:00
// Life On Mars — David Bowie
// 65 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 26, 4/4 at bar 26) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 53 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(65/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 · "Electric Grand Piano"
const piano = note(`<
  A B C D E F G H I J K L M N O P Q R O S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN@2 AO AP AQ@2 AR AS@3
  ~@3
>`.pickRestart({
  A: "a4@3 f4 c4 f4 bb4 c5 a4@3 c4@2 e4 bb4 c5",
  B: "a4@3 c4@3 eb4@3 c4@6 c4@3 bb4@3 c5@3 d5@3 a4@3 g4@3 d4@3 gb4@3 a4@3 ~ a4@2 ~ d4@2, ~@42 c5@2 ~ gb4@2 ~",
  C: "bb4@3 g4 [bb4,g5]@2 d5@2 bb4 d5@2 bb4!2 g4 bb4 d5", // Eb
  D: "[e4,bb4]@9 g3@3 c4@3 e4@3 g4@3 bb4@3 c5@3 c4@3 e4@3 [c4,e4,g4]@6 bb3@3 g3 bb3 ~ g3 bb3 ~", // Edim C
  E: "[a3,c4,f4]@3 f3 a4 g4@2 f4 [c4,e4,a4]@2 e4@2 [a4,c5]@4", // F Am
  F: "~@6 c4@3 eb4@3 a4@3 bb4@3 c5@3 bb4@3 a4@3 d4@3 g4@3 d5@3 d4 g4 ~ a4 d4 ~ gb4 a4 ~ c5 a4 ~",
  G: "bb4@3 g4@3 bb4@3 [g4,g5]@6 d5@3 bb4 d5 bb4 g4@3 [d4,f4,bb4]@3 f3@3 bb3@3 c4@6 f4@3 g4@3 bb4@3", // G Bb
  H: "d5@2 e4 bb4@2 g4@2 e4 g4 c5 c4 e4@2 g4 c5 g4",
  I: "[eb4,g4,c5]@6 eb4@3 g4@3 [eb4,g4,c5]@6 g4 eb4 ~ g4 eb4 ~ [e4,ab4,c5]@6 e4@3 ab4@3 [e4,ab4,c5]@6 [e4,c5] ab4 ~ [e4,c5] ab4 ~", // Cm Eaug C
  J: "[f4,ab4,c5]@6 f4@3 ab4@3 [f4,ab4,c5]@6 c5 ab4 ~ g4 f4 ~ [gb4,bb4,db5]@6 gb4@3 ab4@3 [gb4,bb4,db5]@3 ab4@3 [gb4,bb4,db5] bb4 ~ ab4 gb4 ~", // Fm Gb
  K: "[f4,f5]@3 db5@3 ab4 db5 ab4 f4@3 db4@3 ab3@3 f3@3 f3 f4 ~ [a4,c5,f5]@3 db5@3 a4@3 f4@3 [bb3,db4,f4]@6 [f3,bb3,db4]@6", // F Bbm
  L: "[bb3,db4,f4]@3 bb3@3 f3@3 bb3@3 [bb3,db4,f4]@3 db4@3 bb3@3 db4@3 [b3,db4,f4]@3 db4@3 ab3@3 f3@3 d4@2 eb4@2 f4@2 gb4@2 ab4@2 a4@2", // Bbm Db7
  M: "[d4,f4,bb4]@12 f5 eb5 ~ d5 c5 ~ bb4 a4 ~ g4 f4 ~ eb4@3 bb3@3 eb4@3 g4@3 [eb4,g4,bb4]@6 bb4 g4 ~ f4 eb4 ~", // Bb Eb
  N: "d4@3 bb3@3 d4@3 g4@3 d5 c5 ~ bb4 a4 ~ d5 c5 ~ bb4 a4 ~ gb4@3 d4@3 gb4@3 bb4@3 [d4,bb4]@3 [d4,bb4]@3 [d4,bb4]@3 [d4,bb4]@3", // Gm
  O: "[a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]!2 ~ [ab4,c5,f5]@3", // F Fm
  P: "[g4,c5,eb5]@7 f6@2 ~ c6@2 g5@12 db4@3 bb3@3 db4@3 eb4@3 eb4@3 gb4@3 eb4@3 db4@3, ~@9 d6@2 ~@37", // Cm
  Q: "[d4,f4,bb4]@6 f4 bb4 ~ d5 f5 ~ f5 eb5 ~ d5 c5 ~ bb4 a4 ~ g4 f4 ~ g4@3 eb4@3 g4 bb4 ~ eb5 c5 ~ [eb4,g4,bb4]@12", // Bb Eb
  R: "[g4,bb4,d5]@7 g4 ~ bb4 g4 ~ d5@3 bb4@3 g4@3 d4@3 f4@3 d4@3 f4 bb4 ~ d5 bb4 ~ [f4,bb4,d5]@6 bb4@6", // Gm Bb
  S: "[g4,c5,eb5]@7 f7@2 ~ c7@2 g6@12 db4@3 bb3@3 db4@3 eb4@3 eb4@3 gb4@3 eb4@3 db4@3, ~@9 d7@2 ~@37", // Cm
  T: "[bb3,d4,f4] bb3 d4 g4 [g4,bb4,d5] bb4 f4 d4 [gb4,bb4,d5] bb4 gb4 d4 [gb4,bb4,d5]@4", // Bb Gm Gbaug
  U: "[bb3,d4,f4] d4 f4 bb4 [f4,bb4,d5] bb4 f4 d4 [bb3,d4,g4] bb3 d4 g4 [g4,bb4,d5] c4 d4 f4", // Bb Gm
  V: "[c4,f4,a4]@12 [c5,f5,a5]@9 [f4,a4,c5]@3 [c4,gb4,a4]@12 [gb4,a4,c5]@6 a4@2 g4@2 f4@2", // F Gbdim
  W: "[bb3,d4,g4]@6 [g5,bb5,d6]@6 b4 ab4 f4 d4@3 [ab5,bb5,d6]@6", // Gm Bb7
  X: "c5 b4 c5@2 [e5,a5,c6]@4 c5 b4 c5@2 [f5,bb5,d6]@2 [f5,bb5,d6]@2", // Am Bb
  Y: "c5@3 bb4@3 ~ ab4@3 f4@3 g4@3 f4@3 ~ g4@3 ab4@4 a4@12 a4@3 c4@3 bb4@3",
  Z: "c5@3 a4@9 c4@6 ~ bb4@3 ~@3 c5@3 a4@4 eb4 ~ c4@3 c5@3 c4@3 bb4@3 c5@2",
  AA: "~ d5@3 a4@3 g4@3 d4@3 gb4@3 d4 gb4 ~ a4 gb4 ~ c5 a4 ~ gb4 d4 ~ bb4@4 g4 ~ bb4@3 d5@3 g5@3 d4@3 bb3@2",
  AB: "~ g3@3 f3@3 f4@3 bb4@3 d5@3 g5@3 d4@3 bb3@3 f3@3 e3@3 c4@3 g4@3 bb4@3 e5@3 c4@5",
  AC: "~ e4@6 g4@3 c5@3 e3@3 c4@3 e4@3 c5 bb4 ~ g4 e4 ~ a4@15 f4 g4 ~ a4 c5",
  AD: "~ a4 g4 ~ a4@3 e4@3 f4@3 d5@3 d5@6 d5@3 a4@3 ~@3 c4 eb4 ~ g4@3 a4@6 g4@3 eb4@2",
  AE: "~ c4@3 a4@3 d4 g4 ~ a4 c4 ~ d4 a3 ~ c4 d4 ~ gb4 a4 ~ d4 gb4 ~ a4 c5 ~ [d4,g4,bb4]@15 g4@3 a4@2", // Gm
  AF: "~ c5@3 [bb3,d4,f4]@6 [d4,f4,bb4]@3 [d4,f4,bb4]@6 [f4,bb4,d5]@3 f4@3 bb4@3 [g3,bb3,g4]@6 c4@3 bb3@3 c4@3 bb3@3 c4@2", // Bb Gm
  AG: "~ bb3@3 g4@3 c5@3 eb4@3 g4@3 eb4@3 g4@3 eb4@6 [eb4,g4,c5]@6 eb4@3 g4@3 [eb4,g4,c5]@6 g4 eb4", // Cm
  AH: "~ g4@3 [e4,ab4,c5]@6 e4@3 ab4@3 [e4,ab4,c5]@6 [e4,c5] ab4 ~ [e4,c5] ab4 ~ [f4,ab4,c5]@6 f4@3 ab4@3 [f4,ab4,c5]@6 c5 ab4", // Eaug C Fm
  AI: "~ g4 f4 ~ [gb4,bb4,db5]@6 gb4@3 ab4@3 [gb4,bb4,db5]@3 ab4@3 [gb4,bb4,db5] bb4 ~ ab4 gb4 ~ [f4,f5]@3 db5@3 ab4 db5 ab4 f4@3 db4@3 ab3@3 f3@2", // Gb F
  AJ: "~ f3 f4 ~ [a4,c5,f5]@3 db5@3 a4@3 f4@3 [bb3,db4,f4]@6 [f3,bb3,db4]@6 [bb3,db4,f4]@3 bb3@3 f3@3 bb3@3 [bb3,db4,f4]@3 db4@3 bb3@2", // F Bbm
  AK: "~ db4@3 [b3,db4,f4]@3 db4@3 ab3@3 f3@3 d4@2 eb4@2 f4@2 gb4@2 ab4@2 a4@2 [d4,f4,bb4]@12 f5 eb5 ~ d5 c5 ~ bb4 a4", // Db7 Bb
  AL: "~ g4 f4 ~ eb4@3 bb3@3 eb4@3 g4@3 [eb4,g4,bb4]@6 bb4 g4 ~ f4 eb4 ~ d4@3 bb3@3 d4@3 g4@3 d5 c5 ~ bb4 a4 ~ d5 c5", // Eb
  AM: "~ bb4 a4 ~ gb4@3 d4@3 gb4@3 bb4@3 [d4,bb4]@3 [d4,bb4]@3 [d4,bb4]@3 [d4,bb4]@3 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@2", // Gm F
  AN: "[~ [a4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]!2 ~ [ab4,c5,f5]@3 [g4,c5,eb5]@7 f6@2 ~ c6@2 g5@12 db4@3 bb3@3 db4@3 eb4@3 eb4@3 gb4@3 eb4@3 db4@3 [d4,f4,bb4]@6 f4 bb4 ~ d5 f5 ~ f5 eb5 ~ d5 c5 ~ bb4 a4, ~@37 d6@2 ~@57]/2", // F Fm Cm Bb
  AO: "~ g4 f4 ~ g4@3 eb4@3 g4 bb4 ~ eb5 c5 ~ [eb4,g4,bb4]@12 [g4,bb4,d5]@6 [g4,bb4,d5] g4 ~ bb4 g4 ~ d5@3 bb4@3 g4@2", // Eb Gm
  AP: "~ d4@3 f4@3 d4@3 f4 bb4 ~ d5 bb4 ~ [f4,bb4,d5]@6 bb4@6 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@3 [a4,c5,f5]@2", // Bb F
  AQ: "[~ [a4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]@3 [ab4,c5,f5]!2 ~ [ab4,c5,f5]@3 [g4,c5,eb5]@7 f7@2 ~ c7@2 g6@12 db4@3 bb3@3 db4@3 eb4@3 eb4@3 gb4@3 eb4@3 db4@3 [bb3,d4,f4]@3 bb3@3 d4@3 g4@3 [g4,bb4,d5]@3 bb4@3 f4@2, ~@37 d7@2 ~@57]/2", // F Fm Cm Bb Gm
  AR: "~ d4@3 [gb4,bb4,d5]@3 bb4@3 gb4@3 d4@3 [gb4,bb4,d5]@12 [bb3,d4,f4]@3 d4@3 f4@3 bb4@3 [f4,bb4,d5]@3 bb4@3 f4@2", // Gbaug Bb
  AS: "[~ d4@3 [bb3,d4,g4]@3 bb3@3 d4@3 g4@3 [g4,bb4,d5]@3 c4@3 d4@3 f4@3 [c4,f4,a4]@12 [c5,f5,a5]@12 ~@3 d4@3 eb4@3 f4@3 f4@3 a4@3 f4@3 d4@3 c4@3 bb3@3 g3@3 bb3@3 [g5,bb5,d6]@6 c5@6 [d4,f4,bb4]@6 [bb3,d4,f4]@6 [d4,f4,bb4]@6 [f4,bb4,d5]@6 ~@20]/3", // Gm F Gm Bb
})).s("gm_piano").gain(0.2)

// bass · piano · "Unnamed-001"
const bass = note("<A B C D A E C F G H I J K L M N K L O N L P H Q R S ~@27>".pickRestart({
  A: "f2 e2", B: "eb2@8 d2@6 e2 gb2", C: "g2 f2", D: "c2@7 c3@6 g2@3", E: "eb2@4 d2@3 gb2", F: "c2@7 c2 c3@6 g2@2",
  G: "[eb1,eb2] [e1,e2]", H: "[f1,f2] [gb1,gb2]", I: "[db2,db3] [a1,a2]", J: "[bb1,bb2]!2 [b1,b2]@2",
  K: "[bb1,bb2]@8 [eb1,eb2]@6 eb2 c2", L: "[g1,g2] [gb1,gb2]", M: "[c2,f2]@36 f2@3 e2@3 eb2 d2 ~ db2@3",
  N: "c2@6 c2 d2 eb2@8", O: "[f1,f2]@36 f2@3 e2@3 ~ d2@2 db2@3, ~@21 eb2 ~@2", P: "[f1,f2] [e1,e2]",
  Q: "[g1,g2] [d1,d2]", R: "[a1,a2] [bb1,bb2]", S: "[bb1,bb2]@13 ~@11",
})).s("gm_piano").gain(0.31)

// bass · electric bass finger · "Unnamed-001"
const bass_2 = note("<~@25 A B@3 C@4 D@8 E@4 F@5 ~@3>".pickRestart({
  A: "~@9 f2@7", B: "[~@3 e2@24 ~ eb2@24 d2@18 e2@3 gb2@3 g2@24 f2@21 f2@3 c2@20]/3",
  C: "[~ c2@3 c3@18 g2@6 f2@24 eb2@21 eb2@3 eb2@24 d2@18 gb2@6 g2@24 f2@21 f2@3 c2@20]/4",
  D: "[~ c2@3 c3@18 g2@6 [eb1,eb2]@24 [e1,e2]@24 [f1,f2]@24 [gb1,gb2]@24 [db2,db3]@24 [a1,a2]@24 [bb1,bb2]@12 [bb1,bb2]@12 [b1,b2]@24 [bb1,bb2]@24 [eb1,eb2]@18 eb2@3 c2@3 [g1,g2]@24 [gb1,gb2]@24 [f1,f2]@36 f2@3 e2@3 eb2 d2 ~ db2@3 c2@18 c2@2]/8", // Eb E F Gb Db A Bb B …
  E: "[~ d2@3 eb2@24 [bb1,bb2]@24 [eb1,eb2]@18 eb2@3 c2@3 [g1,g2]@24 [gb1,gb2]@24 [f1,f2]@36 f2@3 e2@3 eb2 d2 ~ db2@3 c2@18 c2@2]/4", // Bb Eb G Gb F
  F: "[~ d2@3 eb2@24 [g1,g2]@24 [gb1,gb2]@24 [f1,f2]@24 [e1,e2]@24 [f1,f2]@24 [gb1,gb2]@24 [g1,g2]@24 [f1,f2]@24 ~@20]/5", // G Gb F E F Gb G F
})).s("gm_electric_bass_finger").gain(0.36)

// other · string ensemble 1 · "Unnamed-001"
const string_ensemble_1 = note("<~@49 A@4>".pickRestart({
  A: "[~@28 [f1,f2]@24 [f1,f2]@24 [eb1,eb2]@25 ~@26 [bb1,bb2]@60 ~@5]/4", // F Eb Bb
})).s("gm_string_ensemble_1").gain(0.46)

// other · string ensemble 1
const string_ensemble_1_2 = note("<~@11 A B ~@3 B ~@8 C@6 D@7 E F@3 G ~@6 H I@2 J>".pickRestart({
  A: "~@18 d4 eb4 f4 gb4 ab4 a4", B: "bb4@12 f5 eb5 ~ d5 c5 ~ bb4 a4 ~ g4 f4 ~ eb4@24",
  C: "[~@27 a4@49 g4@24 gb4@24 d4@48 c4@48 a4@48 g4@20]/6",
  D: "[~@4 gb4@24 d4@48 c4@48 eb4@24 e4@24 f4@24 gb4@24 db4@48 db4@24 ~@12 d4@2 eb4@2 f4@2 gb4@2 ab4@2 a4@2 bb4@12 f5 eb5 ~ d5 c5 ~ bb4 a4]/7",
  E: "~ g4 f4 ~ eb4@24 g4@12 f5 eb5 ~ d5 c5 ~ a4!2",
  F: "[~ g4 f4 ~ gb4@24 f4@36 f4@3 e4@3 eb4 d4 ~ db4@3 c4@24 eb4@24 bb4@12 f5 eb5 ~ d5 c5 ~ bb4 a4]/3",
  G: "~ g4 f4 ~ eb4@24 ~@20", H: "~@28 f5 eb5 ~ d5 c5 ~ eb5 d5 ~ c5 bb4 ~ d5 c5 ~ bb4 a4 ~ c5 bb4",
  I: "[~ a4 g4 ~ bb4 a4 ~ g4 f4 ~ a4 g4 ~ f4 eb4 ~ g4 f4 ~ eb4 d4 ~ f4 eb4 ~ d4 c4 ~ bb3 a3 ~ g3 f3 ~ a3 g3 ~ f3 eb3 ~ g3 f3 ~ eb3 d3 ~@2 eb3@2 d3@2 ~ [bb1,bb2]@3 ~ [c2,c3]@3 [db2,db3]@3 [eb2,eb3]@3 ~ [gb2,gb3]@3 [ab2,ab3]@3 ~ [bb2,bb3]@3 [c3,c4]@3 ~@17, ~@46 f3@2 ~@3 c3@2 ~@43]/2", // Bb C Db Eb Gb Ab Bb C
  J: "~@13 bb2@30 ~@5",
})).s("gm_string_ensemble_1").gain(0.26)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<A B C D A B C D E F G H ~ I J K ~ I L K M N ~@3 O ~@16 P Q@7 ~@3>".pickRestart({
  A: "a4", B: "g4 gb4", C: "d4", D: "c4", E: "eb4 e4", F: "f4 gb4", G: "db4", H: "db4 ~",
  I: "g4@12 f5 eb5 ~ d5 c5 ~ a4!2 ~ g4 f4 ~ gb4@24", J: "f4@36 f4@3 e4@3 eb4 d4 ~ db4@3", K: "c4 eb4",
  L: "f4@36 f4@3 e4@3 ~ d4@2 db4@3, ~@21 eb4 ~@2", M: "bb5", N: "~ f5@2 d5@2 bb4@3 ~@8",
  O: "c5@3 bb4@3 ~ ab4@3 f4@3 g4@3 f4@3 ~ g4@3 ab4@4 ~@21", P: "~@28 g4@12 f5 eb5 ~ d5 c5 ~ a4!2",
  Q: "[~ g4 f4 ~ gb4@24 f4@36 f4@3 e4@3 ~ d4@2 db4@3 c4@24 eb4@24 bb5@51 f5@6 d5@6 bb4@9 ~@24 [a4,f5]@24 [gb4,d5]@24 [d4,bb4]@48 ~@20, ~@35 eb4 ~@132]/7", // Dm D Gm
})).s("gm_string_ensemble_1").gain(0.1)

// chords · string ensemble 1 · "Unnamed-002"
const string_ensemble_1_3 = note("<~@51 A@2>".pickRestart({
  A: "[~@31 [g3,bb3,d4]@11 ~@2 [a3,bb4]@2 [d4,d5]@4 [f4,f5]@2 [bb4,bb5]@4 [d5,d6]@2 [f5,f6]@3 [d4,f4,bb4,d5,f6,d7]@30 ~@5, ~@43 [eb3,f4]@2 ~@51]/2", // Gm Bbmaj7 D F Bb D F Bb …
})).s("gm_string_ensemble_1").gain(0.36)

// other · acoustic bass · "Unnamed-002"
const acoustic_bass = note(`<
  ~@22
  [a4@4 a5@3 c5 a4@4 c5@4]
  [g4@6 g5@6 b4 ab4 f4 d4@3 ab5@6]
  [c5 b4 c5@6 c5 b4 c5@6]
  [c5@3 bb4@3 ~ ab4@3 f4@3 g4@3 f4@3 ~ g4@3 ab4@4 ~@21]
  ~@27
>`).s("gm_lead_8_bass_lead").gain(0.2)

stack(
  piano, bass, bass_2, string_ensemble_1, string_ensemble_1_2, string_ensemble_1_soft, string_ensemble_1_3,
  acoustic_bass
)

More by David Bowie