Strudelify

Ashes To Ashes

David Bowie

KeyB♭ minorTempo120 bpm
0:00/0:00
// Ashes To Ashes — BOWIE DAVID
// 120 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 4 "Strings 1" named as a string part, played on string ensemble 1 (its pad sweep patch is not one); ch 8 "Strings 2" named as a string part, played on string ensemble 1 (its pad warm patch is not one)
// note: Full arrangement: all 135 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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.

// bass · fretless bass · "Bass"
const bass = note(`<
  A B C D E C F G C F G C H I C D J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ
  AR AS AT AU AV AT AW AX AT AW AY AT AZ BA C BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW BX BY BZ
  CA CB CC CD CE CF CG CH CI CJ CK CL CM CN CO CP CQ CR CM CQ CS CM CT CU CM CN CV CW CX CS CM CX CV CW CX CY CW CX CZ
  CM CX CS CM CX ~
>`.pickRestart({
  A: "~ bb1@2 ~@2 bb1@4 ~@4 bb2@3 ~@13 gb1@3", B: "~ ab1@2 ~@2 ab1@4 ~@4 ab2@3 ~@13 db2@3",
  C: "~ eb2@3 ~ eb2@3 ~@5 eb3@3 ~@5 gb1@3 ~@5 ab1@3", D: "~ bb1@2 ~@2 bb1@4 ~@4 bb2@3 ~@16",
  E: "~ ab1@3 ~ ab1@3 ~@5 ab2@3 ~@16", F: "~ bb1@3 ~ bb1@3 ~@5 bb2@2 ~@17", G: "ab1@2 ~@3 ab1@4 ~@4 ab2@2 ~@17",
  H: "~ bb1@2 ~@2 bb1@4 ~@4 bb2@4 ~@12 gb1@3", I: "ab1@2 ~@3 ab1@4 ~@4 ab2@3 ~@13 db2@3",
  J: "~ ab1@2 ~@2 ab1@3 ~@5 ab2@2 ~@6 ab1@3 ~@8", K: "ab1@2 ~@3 ab1@3 ~@5 ab2@2 ~@17",
  L: "~ f1@3 ~ f1@2 ~@6 f2@3 ~@5 f1@3 ~@8", M: "~ f1@3 ~ f1@3 ~@5 f2@3 ~@13 c2@3",
  N: "~ db2@3 ~ db2@3 ~@5 db3@3 ~@5 db2@4 ~@4 ab1@3", O: "~ db2@3 ~ db2@3 ~@5 db3@3 ~@16",
  P: "~ eb2@3 ~ eb2@3 ~@5 eb3@3 ~@5 eb2@4 ~@4 bb1@3", Q: "~ eb2@3 ~ eb2@2 ~@6 eb2@3 ~@16",
  R: "~ gb1@2 ~@2 gb1@3 ~@5 gb2@3 ~@5 f2@3 ~@5 db2@3", S: "~ gb2@4 f2@4 db2@4 gb1@8 ~@8 c2@3",
  T: "~ db2@2 ~@2 db2@3 ~@5 db3@2 ~@6 c3@2 ~@6 ab2@3", U: "~ f2@3 ~@5 eb2@3 ~@5 c2@4 f1@9 ~@2",
  V: "~ gb1@2 ~@2 gb1@4 ~@4 gb2@3 ~@5 f2@2 ~@6 db2@3", W: "~ gb1@2 ~@2 gb1@4 ~@4 gb2@12 ~@7",
  X: "~ ab1@2 ~@2 ab1@4 ~@4 ab2@3 ~@5 ab1@3 ~@8", Y: "~ a1@3 ~ a1@3 ~@5 a2@3 ~@5 a1@4 ~@7",
  Z: "~ bb1@2 ~@2 bb1@4 ~@4 bb2@3 ~@5 bb1@3 ~@8", AA: "~ bb1@2 ~@2 bb1@2 ~@6 bb2@3 ~@16",
  AB: "~ f1@3 ~ f1@3 ~@5 f2@2 ~@6 f1@3 ~@8", AC: "~ f1@2 ~@2 f1@3 ~@5 f2@3 ~@16",
  AD: "~ ab1@2 ~@2 ab1@3 ~@5 ab2@3 ~@5 ab1@3 ~@8", AE: "~ ab1@2 ~@2 ab1@3 ~@5 ab2@4 ~@12 db2@3",
  AF: "~ eb2@3 ~ eb2@2 ~@6 eb3@2 ~@6 eb2@2 ~@9", AG: "~ eb2@2 ~@2 eb2@2 ~@6 eb3@2 ~@17",
  AH: "~ gb1@3 ~ gb1@4 ~@4 gb2@4 ~@4 f2@5 ~@3 db2@3", AI: "~ gb1@2 ~@2 gb1@4 ~@4 gb2@13 ~@6",
  AJ: "~ db2@3 ~ db2@3 ~@5 db3@2 ~@6 db2@4 ~@7", AK: "~ f2@2 ~@2 f2@4 ~@4 f1@13 ~@6",
  AL: "~ gb1@3 ~ gb1@4 ~@4 gb2@3 ~@5 gb1@4 ~@3 gb1@3 ~", AM: "~ ab1@3 ~ ab1@3 ~@5 ab2@4 ~@4 ab1@4 ~@3 ab1@4",
  AN: "~ db2@2 ~@2 db2@3 ~@5 db3@4 ~@4 db2@4 ~@3 db2@3 ~", AO: "~ bb1@2 ~@2 bb1@3 ~@5 bb2@4 ~@4 bb1@4 ~@3 bb1@3 ~",
  AP: "~ gb1@4 ~@4 gb1@5 ~@3 gb1@4 ~@4 gb1@6 ~", AQ: "~ ab1@5 ~@3 ab1@5 ~@3 ab1@5 ~@3 ab1@5 ~@2",
  AR: "~ bb1@2 ~@2 bb1@3 ~@4 bb2@4 ~@12 gb1@4", AS: "~ ab1@2 ~@2 ab1@4 ~@4 ab2@3 ~@12 db2@3 ~",
  AT: "~ eb2@3 ~ eb2@3 ~@5 eb3@2 ~@6 gb1@3 ~@5 ab1@3", AU: "~ bb1@2 ~@2 bb1@4 ~@3 bb2@4 ~@16",
  AV: "~ ab1@3 ~ ab1@3 ~@4 ab2@3 ~@17", AW: "~ bb1@3 ~ bb1@3 ~@4 bb2@2 ~@18", AX: "~ ab1@2 ~@2 ab1@3 ~@5 ab2@2 ~@17",
  AY: "~ ab1@2 ~ ab1@4 ~@5 ab2@2 ~@17", AZ: "~ bb1@2 ~ bb1@4 ~@5 bb2@3 ~@12 gb1@4",
  BA: "~ ab1@2 ~ ab1@4 ~@5 ab2@3 ~@12 db2@3 ~", BB: "~ bb1@2 ~ bb1@4 ~@5 bb2@3 ~@16",
  BC: "~ ab1@2 ~ ab1@3 ~@5 ab2@2 ~@6 ab1@3 ~@9", BD: "~ ab1@2 ~ ab1@3 ~@5 ab2@2 ~@18",
  BE: "~ f1@3 f1@3 ~@5 f2@3 ~@5 f1@3 ~@9", BF: "f1@3 ~ f1@3 ~@5 f2@3 ~@13 c2@4",
  BG: "~ db2@3 db2@3 ~@5 db3@3 ~@5 db2@4 ~@4 ab1@3 ~", BH: "db2@3 ~ db2@4 ~@4 db3@3 ~@17",
  BI: "eb2@4 eb2@3 ~@6 eb3@2 ~@5 eb2@4 ~@4 bb1@3 ~", BJ: "eb2@3 ~ eb2@2 ~@6 eb2@3 ~@17",
  BK: "gb1@2 ~@2 gb1@3 ~@5 gb2@3 ~@5 f2@3 ~@5 db2@4", BL: "gb2@4 f2@4 db2@4 gb1@9 ~@7 c2@3 ~",
  BM: "db2@2 ~@2 db2@3 ~@5 db3@3 ~@5 c3@3 ~@5 ab2@3 ~", BN: "f2@3 ~@5 eb2@3 ~@5 c2@4 f1@9 ~@3",
  BO: "gb1@2 ~@2 gb1@4 ~@4 gb2@3 ~@5 f2@2 ~@6 db2@4", BP: "gb1 ~ gb1@2 ~@2 gb2@6 ~@4",
  BQ: "ab1@3 ~ ab1@4 ~@4 ab2@3 ~@5 ab1@3 ~@9", BR: "a1@3 ~ a1@3 ~@5 a2@4 ~@4 a1@4 ~@8",
  BS: "bb1@2 ~@2 bb1@4 ~@4 bb2@3 ~@5 bb1@3 ~@9", BT: "bb1@3 ~ bb1@3 ~@5 bb2@3 ~@17",
  BU: "f1@3 ~ f1@4 ~@4 f2@2 ~@6 f1@3 ~@9", BV: "f1@2 ~@2 f1@4 ~@4 f2@3 ~@17",
  BW: "ab1@3 ~ ab1@3 ~@5 ab2@3 ~@5 ab1@4 ~@8", BX: "ab1@2 ~@2 ab1@3 ~@5 ab2@4 ~@12 db2@4",
  BY: "eb2@3 ~ eb2@2 ~@7 eb3@2 ~@5 eb2@2 ~@10", BZ: "eb2@2 ~@2 eb2@2 ~@7 eb3@2 ~@17",
  CA: "gb1@3 ~ gb1@4 ~@4 gb2@4 ~@4 f2@5 ~@3 db2@4", CB: "gb1@3 ~ gb1@4 ~@4 gb2@14 ~@6",
  CC: "db2@3 ~ db2@4 ~@4 db3@2 ~@6 db2@4 ~@8", CD: "~ f2@2 ~ f2@4 ~@4 f1@13 ~@7",
  CE: "~ gb1@3 gb1@4 ~@4 gb2@4 ~@4 gb1@4 ~@4 gb1@3 ~", CF: "ab1@3 ~ ab1@4 ~@4 ab2@4 ~@4 ab1@4 ~@4 ab1@4",
  CG: "~ db2@2 ~ db2@4 ~@4 db3@4 ~@4 db2@4 ~@4 db2@3 ~", CH: "~ bb1@2 ~ bb1@4 ~@4 bb2@4 ~@4 bb1@5 ~@3 bb1@3 ~",
  CI: "~ gb1@4 ~@3 gb1@5 ~@3 gb1@5 ~@3 gb1@6 ~@2", CJ: "~ ab1@5 ~@2 ab1@5 ~@3 ab1@5 ~@3 ab1@5 ~@3",
  CK: "~ bb1@2 ~ bb1@4 ~@4 bb2@3 ~@13 gb1@4", CL: "ab1@2 ~@2 ab1@4 ~@4 ab2@3 ~@13 db2@3 ~",
  CM: "~ eb2@3 eb2@3 ~@5 eb3@3 ~@5 gb1@3 ~@5 ab1@3 ~", CN: "~ bb1@2 ~ bb1@4 ~@4 bb2@4 ~@16",
  CO: "ab1@3 ~ ab1@3 ~@5 ab2@3 ~@17", CP: "~ eb2@3 eb2@3 ~@6 eb3@2 ~@5 gb1@3 ~@5 ab1@3 ~",
  CQ: "~ bb1@3 bb1@3 ~@5 bb2@2 ~@18", CR: "ab1 ~ ab1@2 ~@2 ab2 ~@9", CS: "~ ab1@2 ~ ab1@4 ~@4 ab2@2 ~@18",
  CT: "~ bb1@2 ~ bb1@4 ~@4 bb2@4 ~@12 gb1@4", CU: "~ ab1@2 ~ ab1@4 ~@4 ab2@3 ~@13 db2@3 ~",
  CV: "~ ab1@3 ab1@3 ~@5 ab2@3 ~@17", CW: "eb2@3 ~ eb2@3 ~@5 eb3@3 ~@5 gb1@3 ~@5 ab1@3 ~",
  CX: "~ bb1@2 ~ bb1@3 ~@5 bb2@2 ~@18", CY: "~ ab1@2 ~@2 ab1@4 ~@3 ab2@2 ~@18", CZ: "~ ab1@3 ab1@4 ~@4 ab2@3 ~@17",
})).s("gm_fretless_bass").gain(0.36)

// chords · epiano2 · "E Piano"
const epiano2 = note("<~@16 A B C D E F G H I J K L I J M N ~@34 O P Q R S T U V W X Y Z W AA AB AC ~@53>".pickRestart({
  A: "~ [eb3,ab3,c4] ~@3 [eb3,ab3,c4] ~@3 [eb3,ab3,db4] ~@7 [eb3,ab3,c4] ~@7 [eb3,ab3,db4] ~@3 [eb3,ab3,c4] ~@2", // Ab Dbsus2 Ab Dbsus2 Ab
  B: "~@5 [eb3,ab3,c4] ~@3 [eb3,ab3,db4] ~@7 [eb3,ab3,c4] ~@3 [eb3,ab3,c4] ~@3 [eb3,ab3,db4] ~@6", // Ab Dbsus2 Ab Dbsus2
  C: "~ [f3,ab3,c4] ~@3 [f3,ab3,c4] ~@3 [f3,ab3,eb4] ~@7 [f3,ab3,c4] ~@7 [f3,ab3,eb4] ~@3 [f3,ab3,c4] ~@2", // Fm Fm7 Fm Fm7 Fm
  D: "~@5 [f3,ab3,c4] ~@3 [f3,ab3,eb4] ~@7 [f3,ab3,c4] ~@3 [f3,ab3,c4] ~@3 [f3,eb4] ~@6, ~@25 ab3@2 ~@5", // Fm Fm7 Fm F7
  E: "~ [f3,ab3,db4] ~@3 [f3,ab3,db4] ~@3 [f3,ab3,eb4] ~@7 [f3,ab3,db4] ~@7 [f3,ab3,eb4] ~@3 [f3,ab3,db4] ~@2", // Db Fm7 Db Fm7 Db
  F: "~@5 [f3,ab3,db4] ~@3 [f3,ab3,eb4] ~@7 [f3,ab3,db4] ~@3 [f3,ab3,db4] ~@3 [f3,ab3,eb4] ~@6", // Db Fm7 Db Fm7
  G: "~ [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~@3 [ab3,bb3,eb4] ~@7 [g3,bb3] ~@7 [ab3,bb3,eb4] ~@3 [g3,bb3,eb4] ~@2, ~@17 eb4@2 ~@13", // Eb Absus2 Gm Absus2 Eb
  H: "~@5 [g3,bb3,eb4] ~@3 [ab3,bb3,eb4] ~@7 [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~@3 [ab3,bb3]@2 ~@5, ~@25 eb4 ~@6", // Eb Absus2 Eb Absus2
  I: "~ [db3,gb3,bb3] ~@3 [db3,gb3,bb3] ~@3 [db3,gb3,c4] ~@7 [db3,gb3,bb3] ~@7 [db3,gb3,c4] ~@3 [db3,gb3,bb3] ~@2", // Gb
  J: "~@5 [db3,gb3,bb3] ~@3 [db3,gb3,c4] ~@7 [db3,gb3,bb3] ~@3 [db3,gb3,bb3] ~@3 [db3,gb3,c4] ~@6", // Gb
  K: "~ [f3,ab3,db4] ~@3 [f3,ab3,db4] ~@3 [f3,ab3,eb4] ~@7 [f3,ab3,db4] ~@7 [f3,ab3,eb4] ~@3 [f3,ab3] ~@2, ~@29 c4@2 ~", // Db Fm7 Db Fm7 Fm
  L: "~@5 [f3,ab3,c4] ~@3 [f3,eb4] ~@7 [f3,ab3] ~@3 [f3,ab3,c4] ~@3 [f3,ab3,eb4] ~@6, ~@9 ab3@2 ~@6 c4@2 ~@13", // Fm F7 Fm Fm7
  M: "~ [f3,ab3,c4] ~@7 [f3,ab3,eb4] ~@7 [f3,ab3] ~@7 [f3,ab3,eb4] ~@3 [a3,c4,eb4] ~@2, ~@17 c4@2 ~@13", // Fm Fm7 Fm Fm7 Adim
  N: "~@5 [a3,c4,eb4] ~@3 [a3,c4,f4]@2 ~@6 [a3,c4,eb4] ~@3 [a3,c4,eb4] ~@3 [c4,f4]@2 ~@5, ~@25 a3 ~@6", // Adim F Adim F5
  O: "~ [eb3,ab3,c4] ~@3 [eb3,ab3,c4] ~@2 ab3 [eb3,db4] ~@6 ab3 [eb3,c4] ~@6 db4 [eb3,ab3] ~@2 ab3 [eb3,c4] ~@2", // Ab Eb7 Cm Ab5 Cm
  P: "~@5 [eb3,ab3,c4] ~@2 ab3 [eb3,db4] ~@7 [eb3,ab3,c4] ~@2 ab3 [eb3,c4] ~@2 ab3 [eb3,db4] ~@6", // Ab Eb7 Ab Cm Eb7
  Q: "~ [f3,ab3,c4] ~@3 [f3,ab3,c4] ~@3 [ab3,eb4] ~@7 [f3,ab3] ~@6 ab3 [f3,eb4] ~@3 [f3,ab3] ~@2, ~@4 f3 ~@3 c4 ~@5 c4 ~", // Fm Ab5 Fm F7 Fm
  R: "~@5 [f3,ab3,c4] ~@2 ab3 [f3,eb4] ~@7 [f3,ab3,c4] ~@2 c4 [f3,ab3] ~@3 [f3,eb4] ~@6, ~@12 ab3 ~@3", // Fm F7 Fm F7
  S: "~ [f3,ab3,db4] ~@3 [f3,ab3,db4] ~@2 ab3 [f3,eb4] ~@6 ab3 [f3,db4] ~@6 ab3 [f3,eb4] ~@3 [f3,ab3,db4] ~@2", // Db F7 Db F7 Db
  T: "~@5 [f3,ab3,db4] ~@2 ab3 [f3,eb4] ~@7 [f3,ab3,db4] ~@2 db4 [f3,ab3] ~@3 [f3,eb4] ~@6, ~@12 ab3 ~@3", // Db F7 Db Fm F7
  U: "~ [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~@3 [ab3,eb4] ~@7 eb4@2 ~@5 bb3 [ab3,eb4] ~@3 [g3,bb3,eb4] ~@2, ~@4 bb3 ~@3 bb3 ~@7, ~@17 g3 ~@14", // Eb Ab5 Eb
  V: "~@5 [g3,bb3,eb4] ~@3 [bb3,eb4] ~@6 bb3 [g3,eb4] ~@3 [g3,eb4] ~@3 [ab3,eb4] ~@6, ~@4 ab3 ~@5 bb3 ~ bb3 ~@3", // Eb Eb5 Cm Ab5
  W: "~ [db3,gb3,bb3] ~@3 [db3,gb3,bb3] ~@2 db3 [gb3,c4] ~@6 bb3 [db3,gb3] ~@6 gb3 [db3,c4] ~@3 [db3,gb3,bb3] ~@2", // Gb Gbdim Gb5 Dbmaj7 Gb
  X: "~@5 [db3,gb3,bb3] ~@3 [db3,gb3,c4] ~@7 [db3,gb3] ~@2 bb3 [db3,gb3] ~@2 gb3 [db3,c4] ~@6, ~@8 bb3 ~@7", // Gb Gb5 Dbmaj7
  Y: "~ [f3,ab3,db4] ~@3 [f3,ab3,db4] ~@2 ab3 [f3,eb4] ~@6 ab3 [f3,db4] ~@7 [f3,eb4] ~@3 [f3,ab3,c4] ~@2, ~@12 ab3 ~@3", // Db F7 Db F7 Fm
  Z: "~@4 f3 [ab3,c4] ~@3 [f3,ab3,eb4] ~@7 [f3,ab3,c4] ~@3 [f3,ab3,c4] ~@2 f3 [ab3,eb4] ~@6", // Ab Fm7 Fm Ab5
  AA: "~@5 [db3,gb3,bb3] ~@2 gb3 [db3,c4] ~@7 [db3,gb3] ~@2 bb3 [db3,gb3] ~@2 gb3 [db3,c4] ~@6, ~@8 bb3 ~@7", // Gb Dbmaj7 Gb5 Dbmaj7
  AB: "~ [f3,ab3,c4] ~@7 [f3,eb4] ~@7 [f3,ab3] ~@6 ab3 [f3,eb4] ~@3 [c4,eb4] ~@2, ~@4 ab3 ~@3 c4 ~@5 a3 ~", // Fm F7 Fm F7 Cm
  AC: "~@5 [a3,c4,eb4] ~@3 [a3,f4] ~@7 [a3,c4] ~@3 [a3,c4,eb4] ~@3 f4@2 ~@5, ~@4 c4 ~@3 eb4 ~@3 c4 ~@3, ~@25 a3 ~@6", // Adim Dm Am Adim
})).s("gm_epiano2").gain(0.36)

// chords · string ensemble 1 · "Strings 1"
const string_ensemble_1 = note(`<
  ~@32 A@2 B@2 C@2 D@2 E@2 F G H I J K H I ~@32 A@2 B@2 C@2 D@2 E@2 F G H I J K H I ~@35
>`.pickRestart({
  A: "[~ [f4,bb4,d5]@63]/2", B: "[~ [f4,a4,c5]@63]/2", C: "[~ [eb4,ab4,c5]@63]/2", D: "[~ [eb4,g4,bb4]@63]/2",
  E: "[~ [db4,gb4,bb4]@63]/2", F: "~ [db4,f4,ab4]@31", G: "~ [c4,f4,ab4]@31", H: "~ [db4,gb4,bb4]@31",
  I: "~ [eb4,ab4,c5]@31", J: "~ [f4,ab4,db5]@31", K: "~ [db4,f4,bb4]@31",
})).s("gm_string_ensemble_1").gain(0.2)

// other · ocarina · "Flutey"
const ocarina = note("<~@109 A B C A B C A B C A B C A B C A B C A B C A B C ~@2>".pickRestart({
  A: "~ f5@31", B: "~ eb5@31", C: "~ bb4@31",
})).s("gm_ocarina").gain(0.31)

// bass · lead 2 sawtooth · "Synth Bass"
const bass_2 = note("<~@103 A B C A B C A B C A B C A B C A B C A B C A B C A B C ~@5>".pickRestart({
  A: "bb2", B: "ab2", C: "eb2",
})).s("gm_lead_2_sawtooth").gain(0.41)

// chords · string ensemble 1 · "Strings 2"
const string_ensemble_1_2 = note(`<
  ~@32 A@2 B@2 C@2 D@2 E@2 F G H I J K H I ~@32 A@2 B@2 C@2 D@2 E@2 F G H I J K H I ~@35
>`.pickRestart({
  A: "[~ [f3,bb3,d4]@63]/2", B: "[~ [f3,a3,c4]@63]/2", C: "[~ [eb3,ab3,c4]@63]/2", D: "[~ [eb3,g3,bb3]@63]/2",
  E: "[~ [db3,gb3,bb3]@63]/2", F: "~ [db3,f3,ab3]@31", G: "~ [c3,f3,ab3]@31", H: "~ [db3,gb3,bb3]@31",
  I: "~ [eb3,ab3,c4]@31", J: "~ [f3,ab3,db4]@31", K: "~ [db3,f3,bb3]@31",
})).s("gm_string_ensemble_1").gain(0.2)

// chords · synth brass 1 · "Brass"
const synth_brass_1 = note("<~@113 A B C A D C E F@2 E G@2 A B C A D C E D C ~>".pickRestart({
  A: "~@13 [ab4,c5]@19", B: "~@13 bb4@19, ~@3 gb4@5", C: "~@13 db5@19, ~@3 bb4@5", D: "~@13 [gb4,bb4]@19",
  E: "~@13 c5@19, ~@3 ab4@5", F: "[~@13 [gb4,bb4]@22 ~@10 [bb4,db5]@19]/2",
  G: "[~@13 bb4@22 ~@10 [bb4,db5]@19, ~@6 gb4@11 ~@15]/2", // Bbm
})).s("gm_synth_brass_1").gain(0.31)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  A B C A B C A B C A B C A B C A D@2 E@2 F G@3 H I J K L M N O ~@18 P B C A B C A B C A B C A B C A Q@2 E@2 F R@3 H S J
  T L M N O ~@18 U V W X Y C X V C X V C X V Z AA V C X AB C X V C X V C A V C X AB C AC ~
>`.pickRestart({
  A: "~@9 [db4,f4,bb4] ~@11 [db4,f4,bb4]@11", B: "~@9 [c4,eb4,ab4] ~@11 [c4,eb4,ab4]@11",
  C: "~@9 [bb3,eb4,gb4]@2 ~@10 [bb3,eb4,gb4]@11", // Ebm
  D: "[~@9 [c4,eb4,ab4] ~@11 [c4,eb4,ab4]@14 ~@6 [c4,eb4,ab4] ~@11 [c4,eb4,ab4]@11]/2", // Ab
  E: "[~@9 [eb4,ab4,c5]@2 ~@10 [eb4,ab4,c5]@15 ~@5 [eb4,ab4,c5] ~@11 [eb4,ab4,c5]@11]/2", // Ab
  F: "~@9 [db4,f4,ab4]@3 ~@9 [db4,f4,ab4]@11", // Db
  G: "[~@9 [db4,f4,ab4]@2 ~@10 [db4,f4,ab4]@14 ~@6 [eb4,g4,bb4]@2 ~@10 [eb4,g4,bb4]@16 ~@4 [eb4,g4,bb4]@2 ~@10 [eb4,g4,bb4]@9 ~@2]/3", // Db Eb
  H: "~ [db4,gb4,bb4]@30 ~", I: "~ [db4,gb4,bb4]@28 ~@3", J: "~ [db4,f4,ab4]@25 ~@6", K: "~ [eb4,ab4,c5]@29 ~@2",
  L: "~ [db4,gb4,bb4]@31", M: "~ [db4,gb4,bb4]@29 ~@2", N: "~ [eb4,ab4,c5]@30 ~", O: "~ [f4,a4,c5]@30 ~",
  P: "~@9 [db4,f4,bb4]@2 ~@10 [db4,f4,bb4]@11", // Bbm
  Q: "[~@9 [c4,eb4,ab4] ~@11 [c4,eb4,ab4]@14 ~@6 [c4,eb4,ab4]@2 ~@10 [c4,eb4,ab4]@11]/2", // Ab
  R: "[~@9 [db4,f4,ab4]@3 ~@9 [db4,f4,ab4]@14 ~@6 [eb4,g4,bb4]@2 ~@10 [eb4,g4,bb4]@16 ~@4 [eb4,g4,bb4]@2 ~@10 [eb4,g4,bb4]@9 ~@2]/3", // Db Eb
  S: "~ [db4,gb4,bb4]@27 ~@4", T: "~ [eb4,ab4,c5]@28 ~@3", U: "~@8 db4 [f4,bb4] ~@11 [f4,bb4]@11, ~@5 db4@3",
  V: "~@9 [c4,eb4,ab4] ~@11 [eb4,ab4]@11, ~@5 c4@3", W: "~@9 [eb4,gb4]@2 ~@10 [bb3,eb4,gb4]@11, ~@4 bb3 ~@11",
  X: "~@9 [db4,f4,bb4] ~@11 [f4,bb4]@11, ~@5 db4@3", Y: "~@8 c4 [eb4,ab4]@2 ~@10 [eb4,ab4]@11, ~@5 c4@3",
  Z: "~@9 [bb3,eb4,gb4]@2 ~@10 [eb4,gb4]@11, ~@5 bb3@3", AA: "~@9 [db4,f4,bb4] ~@11 bb4@11, ~@5 [db4,f4]@3",
  AB: "~@9 [c4,eb4,ab4] ~@11 ab4@11, ~@5 [c4,eb4]@3", AC: "~@8 db4 [f4,bb4] ~@11 bb4@11, ~@5 [db4,f4]@3",
})).s("gm_acoustic_guitar_steel").gain(0.36)

// drums · kick
const kick = s("bd").struct(`<
  A@7 B A@2 B A@2 B A@3 B A@6 C D C D C D C D A@8 C D C D E F E F G H I@10 J A J A J A@2 J A J A J A@2 C D C K C D C D
  J@8 L M L M L D N F O H I@2 J@2 I J@3 I J I J@2 I@2 J I@2 J@2 I J I J@3 I J I@2 J I@2 J ~
>`.pickRestart({
  A: "~ x ~@3 x ~@11 x ~@14", B: "x ~@4 x ~@11 x ~@14", C: "~ x ~@3 x ~@11 x ~@3 x ~@10",
  D: "~ x ~@3 x ~@7 x ~@7 x ~@10", E: "~ x ~@2 x ~@12 x ~@2 x ~@11", F: "~ x ~@2 x ~@8 x ~@6 x ~@11",
  G: "~ x ~@7 x ~@6 x ~@7 x ~@7", H: "~ x ~@6 x ~@8 x ~@6 x ~@7", I: "~ x ~@2 x ~@11 x ~@15",
  J: "~ x ~@3 x ~@10 x ~@15", K: "~ x ~@3 x ~@6 x ~@8 x ~@10", L: "~ x ~@3 x ~@10 x ~@4 x ~@10",
  M: "~ x ~@3 x ~@7 x ~@6 x ~@11", N: "~ x ~@2 x ~@11 x ~@3 x ~@11", O: "~ x ~@7 x ~@7 x ~@7 x ~@6",
})).gain(0.2)

// drums · snare
const snare = s("sd").struct(`<
  A@24 B@8 A@8 B@6 C@2 D E F G@11 F@2 H F A@8 B@7 I H G H G H G H G C@8 J K F@2 H F G@2 F G@2 F G@2 F@2 H F G@2 F G@2 F
  G@2 F G@2 A G@2 F G@2 F ~
>`.pickRestart({
  A: "~@9 x ~@11 x ~@10", B: "~@9 x ~@15 x ~@6", C: "~ x ~ x", D: "~ x ~@6 x ~@8 x ~@7 x ~@6",
  E: "~ x ~@7 x ~@7 x ~@7 x ~@6", F: "~@9 x ~@10 x ~@11", G: "~@2 x ~@2 x ~@2", H: "~@8 x ~@12 x ~@10",
  I: "~@9 x ~@14 x ~@7", J: "~ x ~@6 x ~@7 x ~@8 x ~@6", K: "~ x ~@6 x ~@7 x ~@7 x ~@7",
})).gain(0.31)

// drums · hihat
const hihat = s("hh").struct(`<
  A@4 B A@2 C A@2 C A@2 C A D B E B@2 A@3 B@8 D B@7 A B@2 F B@5 G H I J@6 K L J@2 M N@2 O P A Q A Q A Q R A B S G T U@3
  V U W U W U W@2 U@10 X Y Z AA@2 AB AC AD@2 W@17 AE W AF W@6 ~
>`.pickRestart({
  A: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@6", B: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  C: "x ~@4 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@6", D: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@7 x!3",
  E: "x ~@4 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", F: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3",
  G: "~ x ~@2 x ~@4 x ~@3 x ~@3 x ~@2 x ~@4 x ~@2 x ~@3", H: "~ x ~@2 x ~@4 x ~@3 x ~@3 x ~@2 x ~@7 x ~ x!2",
  I: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@4 x ~@2", J: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@7",
  K: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@6 x ~ x!2", L: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3",
  M: "~ x ~@2 x ~@4 x ~@3 x ~@3 x ~@3 x ~@2 x ~@7", N: "~ x ~@3 x ~@3 x ~@3 x ~@2 x ~@4 x ~@2 x ~@7",
  O: "~ x ~@2 x ~@4 x ~@3 x ~@3 x ~@2 x ~@3 x ~@7", P: "~ x ~@3 x ~@3 x ~@2 x ~@4 x ~@3 x ~@6 x ~ x!2",
  Q: "~ x ~@3 x ~@3 x ~@3 x ~@2 x ~@4 x ~@3 x ~@6", R: "~ x ~@3 x ~@3 x ~@2 x ~@4 x ~@3 x ~@3 x ~@6",
  S: "~ x ~@3 x ~@3 x ~@2 x ~@4 x ~@2 x ~@4 x ~@2 x ~@3", T: "~ x ~@2 x ~@4 x ~@2 x ~@3 x ~@3 x ~@4 x ~@2 x ~@3",
  U: "~ x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3", V: "~ x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@7 x ~ x!2",
  W: "~ x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@7", X: "~ x ~@2 x ~@4 x ~@2 x ~@4 x ~@2 x ~@2 x ~ x ~ x!2 ~@2 x",
  Y: "~ x ~ x ~ x ~ x ~ x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~ x!2", Z: "x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~ x!2",
// … 32 more lines

More by David Bowie