Strudelify
Modern Love cover art

1983 · Let's Dance

Modern Love

David Bowie

KeyC majorTempo180 bpm
0:00/0:00
// Modern Love — BOWIE DAVID
// 180 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 11 lead 2 sawtooth (copy of ch 9 lead 1 square)
// note: Full arrangement: all 172 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(180/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@2 B@2 C@2 A@2 D@4 E@2 F@2 G@2 H@2 D@2 E@2 I@2 D@4 E@2 F@2 G@2 H@2 D@2 J@2 K@2 L M N O P Q R S T U V W X Y Z AA AB AC
  AD O AE AF AG AH D@4 E@2 F@2 G@2 H@2 D@2 E@2 I@2 D@4 E@2 F@2 G@2 H@2 D@2 J@2 K@2 AI AJ AK AL AM AN AO AP AQ AR AS AT
  AU AV AW AX AY AZ BA AL AE BB BC BD AQ BE AK BF BG AN BH BI AQ BJ AS BK AU BL AW BM AY BN BA AL BO BB AG BD AQ BJ AS
  BK AU BL AW BM A@2 B@2 C@2 BP BQ BR BS A@2
>`.pickRestart({
  A: "[[a4,d5,f#5]@5 ~ [b4,e5,g5]@25 ~]/2", B: "[[a4,d5,f#5]@5 ~ [g4,c5,d5,g5]@25 ~]/2",
  C: "[[a4,d5,f#5]@5 ~ [g4,b4,c5,e5]@25 ~]/2", D: "[[c5,e5,g5]@5 ~ [c5,e5,g5]@25 ~]/2",
  E: "[[b4,d5,g5]@5 ~ [b4,d5,g5]@25 ~]/2", F: "[[a4,c5,e5]@5 ~ [a4,c5,e5]@25 ~]/2",
  G: "[~ b4@5 [e4,g#4,b4,d5]@25 ~, [e4,g#4,d5]@5 ~@27]/2", H: "[[f4,a4,c5]@5 ~ [f4,a4,c5]@25 ~]/2",
  I: "[~ b4@5 [e4,g4,b4,e5]@25 ~, [e4,g4,d5]@5 ~@27]/2", J: "[~ [b4,d5]@5 ~ d5@25, g5@5 ~ [b4,g5]@25 ~]/2",
  K: "[~ [e4,g4,b4,d5]@5 ~ [e4,g4,b4]@25, ~@6 e5@25 ~]/2", // Em7 Em
  L: "~@2 [e4,g4]@2 ~@2 [e4,g4,c5] ~@3 [e4,g4] ~@3 [g4,c5]@2, ~@2 c5 ~@7 c5@2 ~@2 e4 ~", // Em C Em C5
  M: "~@2 [e4,g4]@2 ~@2 [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~, ~@2 c5 ~@13", // Em C
  N: "~@2 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3 [a4,d5]@2, ~@14 f#4 ~", // D D5
  O: "~@2 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4]@2, ~@14 d5 ~", // D F#m
  P: "~@2 [e4,b4]@2 ~@2 [e4,g4,b4] ~@3 [e4,g4,b4] ~@3 [e4,b4]@2, ~@2 g4 ~@11 g4 ~", // E5 Em E5
  Q: "~@2 [e4,g4]@2 ~@2 [e4,g4,b4]@2 [g4,b4]@2 [e4,b4]@2 [g4,b4] ~ [e4,g4,b4]@2, ~@2 b4 ~@5 e4 ~ g4 ~ e4@2 ~@2", // Em G E5 G Em
  R: "~@2 [a4,c5]@2 ~@2 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [a4,c5]@2, ~@2 f4 ~@11 f4 ~", // Am F Am
  S: "~@2 [a4,c5]@2 ~@2 [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,c5]@2 [f4,a4,c5] ~ [f4,a4,c5] ~, ~@2 f4 ~@7 a4 ~@5", // Am F F5 F
  T: "~@2 [g4,c5]@2 ~@2 [e4,g4,c5] ~@3 [g4,c5] ~@3 [g4,c5]@2, ~@2 e4 ~@7 e4@2 ~@2 e4 ~", // C5 C C5
  U: "~@2 [g4,c5]@2 ~@2 [e4,g4,c5] ~ [e4,g4,c5] ~ [g4,c5]@2 [e4,g4,c5] ~ [e4,g4,c5] ~, ~@2 e4 ~@7 e4 ~@5", // C5 C C5 C
  V: "~@2 [a4,d5]@2 ~@2 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3 [a4,d5]@2, ~@2 f#4 ~@11 f#4 ~", // D5 D D5
  W: "~@2 [a4,d5]@2 ~@2 [f#4,a4,d5]@2 [f#4,a4,d5] ~ [a4,d5]@2 [f#4,a4,d5] ~ [f#4,d5]@2, ~@2 f#4 ~@7 f#4 ~@3 a4 ~", // D5 D D5 D
  X: "~@2 [e4,g4,b4] ~@3 [e4,g4,b4] ~@3 [e4,g4,b4] ~@3 [e4,g4]@2, ~@14 b4 ~", // Em
  Y: "~@2 [e4,g4,b4] ~@3 [e4,g4,b4] ~ [g4,b4]@2 [e4,b4]@2 [e4,g4,b4] ~ [e4,g4,b4]@2, ~@8 e4 ~ g4 ~@5", // Em G E5 Em
  Z: "~@2 [a4,c5]@2 ~@2 [f4,a4,c5] ~@3 [f4,c5]@2 ~@2 [f4,a4]@2, ~@2 f4 ~@7 a4 ~@3 c5 ~", // Am F F5 F
  AA: "~@2 [f4,a4,c5] ~@3 [f4,a4,c5] ~ [f4,a4,c5] ~ [a4,c5]@2 [f4,a4,c5] ~ [f4,a4,c5]@2, ~@10 f4 ~@5", // F Am F
  AB: "~@2 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [g4,c5] ~@3 [e4,g4]@2, ~@10 e4@2 ~@2 c5 ~", // C C5 Em
  AC: "~@2 [e4,g4,c5] ~@3 [e4,g4,c5]@2 [e4,g4,c5] ~ [g4,c5]@2 [e4,g4,c5] ~ [e4,g4,c5]@2, ~@10 e4 ~@5", // C C5 C
  AD: "~@2 [a4,d5]@2 ~@2 [f#4,a4,d5] ~@3 [f#4,a4,d5]@2 ~@2 [f#4,a4,d5] ~, ~@2 f#4 ~@13", // D5 D
  AE: "~@2 [g4,e5] ~@3 [g4,b4,e5] ~@3 [g4,e5] ~@3 [g4,e5] ~, ~ b4 ~@3 b4 ~ b4", // C Em C
  AF: "~@2 [g4,b4] ~@3 [g4,b4,e5]@2 [g4,e5]@2 [g4,e5] ~ [g4,b4,e5] ~ [g4,e5]@2, ~@2 e5@2 ~@4 b4 ~ b4@2 ~@2 b4 ~", // G Em C Em C
  AG: "~@2 [c5,f5] ~@3 [a4,c5,f5] ~@3 [a4,f5] ~@3 [a4,f5] ~, ~ a4 ~@3 c5 ~ c5", // F5 F Dm
  AH: "~@2 [c5,f5] ~@3 [a4,c5,f5] ~ [c5,f5] ~ [c5,f5] ~ [a4,c5,f5] ~ [a4,c5]@2, ~@2 a4@2 ~@4 a4@2 a4@2 ~@2 f5 ~", // F5 F F5 F Am
  AI: "~@2 [e4,g4]@2 ~@2 [e4,g4,c5] ~@3 [e4,c5] ~@3 [e4,c5] ~, ~@2 c5 ~@7 g4@2 ~@2 g4@2", // Em C
  AJ: "~@2 [e4,c5] ~@3 [e4,c5] ~ [e4,g4,c5] ~ [e4,g4] ~ [e4,g4,c5] ~ [e4,g4,c5]@2, ~ g4 ~ g4 ~ c5 ~@2", // C Em C
  AK: "~@2 [f#4,a4] ~@3 [f#4,a4,d5] ~@3 [f#4,d5] ~@3 [f#4,a4] ~, ~ d5 ~@3 a4 ~ d5", // F#m D F#m
  AL: "~@2 [f#4,d5] ~@3 [f#4,d5] ~ [f#4,a4,d5] ~ [f#4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5]@2, ~ a4 ~ a4 ~ a4 ~@2", // D
  AM: "~@2 [e4,g4,b4] ~@3 [e4,g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~, ~@5 e4 ~ e4", // Em G
  AN: "~@2 [g4,b4] ~@3 [g4,b4] ~ [e4,g4,b4] ~ [e4,g4] ~ [e4,g4,b4] ~ [e4,b4]@2, ~@2 e4@2 ~@2 e4@2 ~@2 b4@2 ~@2 g4 ~", // G Em E5
  AO: "~@2 [f4,a4] ~@3 [f4,a4,c5] ~@3 [f4,c5] ~@3 [f4,a4] ~, ~ c5 ~@3 a4 ~ c5", // F F5 F
  AP: "~@2 [f4,a4] ~@3 [f4,a4] ~ [f4,a4,c5] ~ [f4,a4] ~ [f4,a4,c5] ~ [f4,a4,c5]@2, ~ c5 ~ c5 ~ c5 ~@2", // F
  AQ: "~@2 [e4,c5] ~@3 [e4,g4,c5] ~@3 [e4,c5] ~@3 [e4,c5] ~, ~ g4 ~@3 g4 ~ g4", // C
  AR: "~@2 [g4,c5] ~@3 [e4,c5] ~ [e4,g4,c5] ~ [e4,g4] ~ [e4,g4,c5] ~ [g4,c5]@2, ~@2 e4@2 ~@2 g4@2 ~@2 c5@2 ~@2 e4 ~", // C5 C Em C C5
  AS: "~@2 [f#4,a4] ~@3 [f#4,a4,d5] ~@3 [f#4,a4] ~@3 [f#4,a4] ~, ~ d5 ~@3 d5 ~ d5", // F#m D F#m
  AT: "~@2 [f#4,a4] ~@3 [f#4,a4] ~ [f#4,a4,d5] ~ [f#4,a4] ~ [f#4,a4,d5] ~ [f#4,a4]@2, ~@2 d5@2 ~@2 d5@2 ~@2 d5@2 ~@2 d5 ~", // F#m D F#m D F#m
  AU: "~@2 [e4,b4] ~@3 [e4,g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~, ~ g4 ~@3 e4 ~ e4", // E5 Em G
  AV: "~@2 [g4,b4] ~@3 [g4,b4] ~ [e4,g4] ~ [g4,b4] ~ [e4,g4,b4] ~ [e4,b4]@2, ~@2 e4@2 ~@2 e4@2 b4@2 e4@2 ~@2 g4 ~", // G Em G Em E5
  AW: "~@2 [f4,a4] ~@3 [f4,a4,c5] ~@3 [f4,a4] ~@3 [f4,c5] ~, ~ c5 ~@3 c5 ~ a4", // F F5
  AX: "~@2 [f4,a4] ~@3 [f4,c5] ~ [f4,a4,c5] ~ [f4,a4] ~ [f4,a4,c5] ~ [f4,a4,c5]@2, ~ c5 ~ a4 ~ c5 ~@2", // F F5 F
  AY: "~@2 [e4,g4] ~@3 [e4,g4,c5] ~@3 [e4,c5] ~@3 [e4,c5] ~, ~ c5 ~@3 g4 ~ g4", // Em C
  AZ: "~@2 [g4,c5] ~@3 [g4,c5] ~ [e4,g4,c5] ~ [e4,g4] ~ [e4,g4,c5] ~ [e4,g4,c5] ~, ~ e4 ~ e4 ~ c5 ~@2", // C5 C Em C
  BA: "~@2 [f#4,a4] ~@3 [f#4,a4,d5] ~@3 [f#4,d5] ~@3 [f#4,d5] ~, ~ d5 ~@3 a4 ~ a4", // F#m D
  BB: "~@2 [g4,b4] ~@3 [g4,e5] ~ [g4,b4,e5] ~ [g4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5]@2, ~ e5 ~ b4 ~ b4 ~@2", // G C Em C Em
  BC: "~@2 [a4,c5] ~@3 [a4,c5,f5] ~@3 [a4,f5] ~@3 [a4,f5] ~, ~ f5 ~@3 c5 ~ c5", // Am F Dm
  BD: "~@2 [c5,f5] ~@3 [a4,f5] ~ [a4,c5,f5] ~ [c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5]@2, ~ a4 ~ c5 ~ a4 ~@2", // F5 Dm F F5 F
  BE: "~@2 [e4,g4,c5] ~@3 [e4,c5] ~ [e4,g4,c5] ~ [e4,g4] ~ [e4,g4,c5] ~ [e4,g4,c5]@2, ~@3 g4 ~ c5 ~@2", // C Em C
  BF: "~@2 [f#4,d5] ~@3 [f#4,d5] ~ [f#4,a4,d5] ~ [f#4,d5] ~ [f#4,a4,d5] ~ [f#4,a4] ~, ~ a4 ~ a4 ~ a4 ~ d5", // D F#m
  BG: "~@2 [e4,g4] ~@3 [e4,g4,b4] ~@3 [g4,b4] ~@3 [e4,b4] ~, ~ b4 ~@3 e4 ~ g4", // Em G E5
  BH: "~@2 [f4,a4] ~@3 [f4,a4,c5] ~@3 [f4,a4] ~@3 [f4,a4] ~, ~ c5 ~@3 c5 ~ c5", // F
  BI: "~@2 [f4,c5] ~@3 [f4,a4] ~ [f4,a4,c5] ~ [f4,a4] ~ [f4,a4,c5] ~ [f4,a4,c5]@2, ~ a4 ~ c5 ~ c5 ~@2", // F5 F
  BJ: "~@2 [e4,g4] ~@3 [e4,c5] ~ [e4,g4,c5] ~ [e4,g4] ~ [e4,g4,c5] ~ [g4,c5]@2, ~@2 c5@2 ~@2 g4@2 ~@2 c5@2 ~@2 e4 ~", // Em C Em C C5
  BK: "~@2 [f#4,a4] ~@3 [f#4,d5] ~ [f#4,a4,d5] ~ [a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5]@2, ~ d5 ~ a4 ~ f#4 ~@2", // F#m D D5 D
  BL: "~@2 [g4,b4] ~@3 [g4,b4] ~ [e4,g4,b4] ~ [g4,b4] ~ [e4,b4] ~ [e4,g4,b4]@2, ~ e4 ~ e4 ~ e4 g4 ~", // G Em G E5 Em
  BM: "~@2 [f4,a4] ~@3 [f4,c5] ~ [f4,a4,c5] ~ [f4,a4] ~ [f4,a4,c5] ~ [a4,c5] ~, ~ c5 ~ a4 ~ c5 ~ f4", // F F5 F Am
  BN: "~@2 [g4,c5] ~@3 [g4,c5] ~ [e4,g4,c5] ~ [e4,g4] ~ [e4,g4,c5] ~ [e4,g4,c5]@2, ~ e4 ~ e4 ~ c5 ~@2", // C5 C Em C
  BO: "~@2 [b4,e5] ~@3 [g4,b4,e5] ~@3 [g4,e5] ~@3 [g4,e5] ~, ~ g4 ~@3 b4 ~ b4", BP: "[f2,f4]!4", BQ: "[f2,f4,a4]!4",
  BR: "[f2,f4,a4,c5]!4", BS: "[f2,f4,a4,c5,f5]!4",
})).s("gm_piano").gain(0.4)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  A ~ A ~ A ~ A ~ B@2 C@2 D@2 E@2 F@2 G@2 B@2 H@2 I@2 B@2 C@2 D@2 E@2 F@2 G@2 B@2 H@2 J@2 K@2 L@2 M@2 N@2 K@2 L@2 M@2
  N@2 K@2 L@2 M@2 N@2 B@2 C@2 D@2 E@2 F@2 G@2 B@2 H@2 I@2 B@2 C@2 D@2 E@2 F@2 G@2 B@2 H@2 J@2 K@2 L@2 O@2 P@2 Q@2 R@2
  O@2 P@2 Q@2 L@2 M@2 N@2 Q@2 R@2 O@2 P@2 Q@2 R@2 O@2 N@2 K@2 L@2 M@2 P@2 Q@2 R@2 O@2 N@2 A ~ A ~ A ~ S@4 A ~
>`.pickRestart({
  A: "[d4,f#4]@5 ~ [e4,g4] ~@9", B: "[[c4,e4,g4]@5 ~ [c4,e4,g4]@25 ~]/2", C: "[[c4,e4,g4]@5 ~ [c4,e4,g4]@26]/2",
  D: "[[b3,d4,g4]@5 ~ [b3,d4,g4]@25 ~]/2", E: "[[a3,c4,e4]@5 ~ [a3,c4,e4]@25 ~]/2",
  F: "[[b3,d4,e4,g#4]@5 ~ [b3,d4,e4,g#4]@25 ~]/2", G: "[[a3,c4,f4]@5 ~ [c4,f4,a4]@25 ~]/2",
  H: "[[b3,d4,g4]@5 ~ [d4,g4,b4]@25 ~]/2", I: "[[b3,d4,e4,g4]@5 ~ [b3,e4,g4,b4]@25 ~]/2",
  J: "[[b3,d4,e4,g4]@5 ~ [b3,e4,g4,b4]@26]/2", K: "[[c3,e3]@5 ~ [c3,e3]@25 ~]/2", L: "[[d3,f#3]@5 ~ [d3,f#3]@25 ~]/2",
  M: "[[e3,g3]@5 ~ [e3,g3]@25 ~]/2", N: "[[f3,a3]@5 ~ [f3,a3]@25 ~]/2", O: "[[e3,g3]@5 ~ [e3,g3]@26]/2",
  P: "[[f3,a3]@5 ~ [f3,a3]@26]/2", Q: "[[c3,e3]@5 ~ [c3,e3]@26]/2", R: "[[d3,f#3]@5 ~ [d3,f#3]@26]/2",
  S: "[c3,f3,a3]@3 [f3,a3,c4]@5", // F
})).s("gm_electric_guitar_clean").gain(0.4)

// other · guitar harmonics
const guitar_harmonics = note("<~@7 [~@4 e2@3 ~ b2@3 ~ e3@3 ~] ~@164>").s("gm_guitar_harmonics").gain(0.27)

// bass · slap bass 2
const bass = note(`<
  A@2 B@2 C@2 A@2 D@2 E@2 F@2 G@2 H@2 I@2 D@2 F@2 H@2 D@2 J@2 F@2 G@2 H@2 I@2 D@2 F@2 K@2 L M N O P Q R S L T N O P U R
  S L T N V P W R X D@2 E@2 F@2 G@2 H@2 I@2 D@2 F@2 H@2 D@2 J@2 F@2 G@2 H@2 I@2 D@2 F@2 K@2 Y Z AA AB AC Q R AD L AE N
  AF P AG R AD L Z N AB P AH AI AJ AK AL N AM P AN R AD L AE N AO P Q R AP L AL N AQ AR AH AS AD L AE N AO P Q R AP A@2
  B@2 C@2 AT@4 A@2
>`.pickRestart({
  A: "[d2@5 ~ e2@25 ~]/2", B: "[d2@5 ~ c2@25 ~]/2", C: "[d2@5 ~ d2@25 ~]/2", D: "[c2@3 ~ g2@2 c2@25 ~]/2",
  E: "[c2@3 ~ g2@2 c2@13 ~ c2 ~ e2 ~ g2@2 e2 ~ c2@2 c2@2]/2", F: "[g1@3 ~ d2@2 g1@25 ~]/2",
  G: "[a1@3 ~ e2@2 a1@21 ~ a1@2 e2 ~]/2", H: "[e1@3 ~ b1@2 e1@25 ~]/2", I: "[f1@3 ~ c2@2 f1@21 ~ f1@2 a1@2]/2",
  J: "[c2@3 ~ g2@2 c2@13 ~ c2@2 e2 ~ g2@2 e2 ~ c2@2 c2@2]/2", K: "[~ e1@3 b1@2 e1@26]/2", L: "c2 ~@3 g2@2 c2 ~@9",
  M: "c2 ~@3 c2 ~@3 c2 ~@3 c2 ~ c2 ~", N: "d2 ~@3 a2@2 d2 ~@9", O: "d2 ~@3 d2@2 ~@2 d2 ~@3 d2 ~ d2@2",
  P: "b1 ~@3 e2@2 b1 ~@9", Q: "e2 ~@3 e2 ~@3 e2@2 ~@2 e2@2 e2 ~", R: "f1 ~@3 c2@2 f1 ~@9",
  S: "f1 ~@3 f1@2 ~@2 f1 ~@3 f1 ~ f1 ~", T: "c2 ~@3 c2@2 ~@2 c2 ~@3 c2 ~ c2 ~", U: "e2 ~@3 e2@2 ~@2 e2@2 ~@2 e2 ~ e2 ~",
  V: "d2 ~@3 d2@2 ~@2 d2 ~@3 d2@2 d2@2", W: "e2 ~@3 e2 ~@3 e2 ~@3 e2@2 e2 ~", X: "f1 ~@3 f1 ~@3 f1 ~@3 f1@2 f1 ~",
  Y: "c2 ~@3 g2 ~ c2 ~@9", Z: "c2 ~@3 c2 ~@3 c2@2 ~@2 c2@2 c2@2", AA: "d2 ~@3 a2@2 d2@2 ~@8",
  AB: "d2 ~@3 d2 ~@3 d2@2 ~@2 d2@2 d2@2", AC: "b1 ~@3 e2@2 b1@2 ~@8", AD: "f1 ~@3 f1 ~@3 f1@2 ~@2 f1@2 f1 ~",
  AE: "c2 ~@3 c2 ~@3 c2@2 ~@2 c2@2 c2 ~", AF: "d2 ~@3 d2 ~@3 d2@2 ~@2 d2 ~ d2 ~",
  AG: "e2 ~@3 e2@2 ~@2 e2@2 ~@2 e2@2 e2 ~", AH: "e2 ~@3 e2 ~@3 e2@2 ~@2 e2@2 e2@2", AI: "f1 ~@3 c2 ~ f1 ~@9",
  AJ: "f1 ~@3 f1 ~@3 f1@2 ~@2 f1@2 f1@2", AK: "c2 ~@3 g2@2 c2@2 ~@8", AL: "c2 ~@3 c2 ~@3 c2 ~@3 c2@2 c2@2",
  AM: "d2 ~@3 d2 ~@3 d2 ~@3 d2@2 d2 ~", AN: "e2 ~@3 e2 ~@3 e2@2 ~@2 e2 ~ e2 ~", AO: "d2 ~@3 d2 ~@3 d2@2 ~@2 d2@2 d2 ~",
  AP: "f1 ~@3 f1@2 ~@2 f1 ~@3 f1@2 f1@2", AQ: "d2 ~@3 d2 ~@3 d2@2 ~@2 d2 ~ d2@2", AR: "b1 ~@3 e2 ~ b1 ~@9",
  AS: "f1 ~@3 c2@2 f1@2 ~@8", AT: "f2 ~@2 f2@5",
})).s("gm_slap_bass_2").gain(0.4)

// chords · synth brass 1
const synth_brass_1 = note(`<
  ~@40 A B C D E F G H I J K L F@2 M N I@2 O L E P Q H R S K T ~@32 A B C D ~@68
>`.pickRestart({
  A: "[b4,d5,g5] ~@5 [b4,d5,g5] ~ [b4,d5,g5] ~@5 [d5,g5]@2, ~@14 b4 ~", // G G5
  B: "[b4,d5,g5] ~@5 [d5,g5]@2 [b4,d5,g5] ~@5 [d5,g5]@2, ~@6 b4 ~@7 b4 ~", // G G5 G G5
  C: "[e4,g4,b4] ~@5 [e4,g4,b4] ~ [e4,g4,b4] ~@5 [e4,g4,b4] ~", // Em
  D: "[e4,g4,b4] ~@5 [e4,g4,b4] ~ [e4,g4,b4] ~@5 [e4,g4,b4]@2", E: "[c4,e4] ~@5 [c4,e4] ~ e4@2 ~@6, ~@8 c4 ~@7",
  F: "[c4,e4] ~@5 [c4,e4] ~ [c4,e4] ~@7", G: "[d4,f#4] ~@5 d4@2 d4@2 ~@6, ~@6 f#4 ~ f#4 ~@7",
  H: "[d4,f#4] ~@5 [d4,f#4] ~ [d4,f#4] ~@7", I: "[e4,g4] ~@5 [e4,g4] ~ [e4,g4] ~@7",
  J: "[e4,g4] ~@5 g4@2 [e4,g4] ~@7, ~@6 e4 ~@9", K: "[f4,a4] ~@5 [f4,a4] ~ [f4,a4] ~@7",
  L: "[f4,a4] ~@5 f4@2 [f4,a4] ~@7, ~@6 a4 ~@9", M: "[d4,f#4] ~@5 f#4@2 f#4@2 ~@6, ~@6 d4 ~ d4 ~@7",
  N: "[d4,f#4] ~@5 d4@2 [d4,f#4] ~@7, ~@6 f#4 ~@9", O: "[f4,a4] ~@5 [f4,a4] ~ f4@2 ~@6, ~@8 a4 ~@7",
  P: "[c4,e4] ~@5 c4@2 [c4,e4] ~@7, ~@6 e4 ~@9", Q: "[d4,f#4] ~@5 f#4@2 d4@2 ~@6, ~@6 d4 ~ f#4 ~@7",
  R: "[e4,g4] ~@5 [e4,g4] ~ g4@2 ~@6, ~@8 e4 ~@7", S: "[e4,g4] ~@5 g4@2 e4@2 ~@6, ~@6 e4 ~ g4 ~@7",
  T: "[f4,a4] ~@5 f4@2 f4@2 ~@6, ~@6 a4 ~ a4 ~@7", // F
})).s("gm_synth_brass_1").gain(0.4)

// other · lead 1 square
const lead_1_square = note("<~@68 A@2 B C D E F C D G H I J@2 K@2 L M ~@86>".pickRestart({
  A: "[a4@27 e4@4 ~]/2", B: "g4@3 g4", C: "f4 e4 d4 c4", D: "d4", E: "e4@2 g4@2 e4 d4 c4@2, ~@12 d4 ~@3",
  F: "d4@4 c4@11 [d4,e4]", G: "e4 d4 c4 b3", H: "a3", I: "a4",
  J: "[g4@6 g4 ~ g4@4 ~@2 g4@4 g4@3 ~ g4 ~ g4@3 ~ g4@3 ~]/2", K: "[g4@5 ~ g4 ~ g4@5 ~ g4@4 g4@3 ~ g4@2 a4@4 g4@3 ~]/2",
  L: "g4@6 ~ g4 g4@5 ~ g4@2", M: "~@2 g4@3 ~ g4@2 b4@2 a4 ~ g4@3 ~",
})).s("gm_lead_1_square").gain(0.4)

// chords · brass section
const brass_section = note("<~@68 A B A B C D E F G ~@95>".pickRestart({
  A: "[c4,e4] ~@2 [c4,e4]!2 ~@3", B: "[g4,c5] [e4,g4] [d4,f4] [c4,e4]", C: "[g3,b3] ~@2 [g3,b3]!2 ~@3",
  D: "[d4,g4] [b3,d4] [a3,c4] [g3,b3]", E: "[a3,c4] ~@2 [a3,c4]!2 ~@3", F: "[e4,a4] [c4,e4] [b3,d4] [a3,c4]",
  G: "[e4,g#4] ~ [e4,g#4]!2 ~@4", // E
})).s("gm_brass_section").gain(0.2)

// drums · kick
const kick = s("bd").struct(`<
  A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A
  C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B
  A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C D@2 E@2 F@2 E@4 ~@2
>`.pickRestart({
  A: "x ~@2 x ~ x ~@2", B: "x!2", C: "x ~@3 x!2 ~@2", D: "x", E: "x ~ x ~ x ~ x!2", F: "~ x ~ x ~ x ~ x ~@8",
})).gain(0.36)

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

// drums · low tom
const low_tom = s("lt").struct("<~@160 [~@12 x!2 ~ x]!2 [~@3 x]!2 [~@15 x]!2 [~@3 x]!4 ~@2>").gain(0.29)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@160 [~@7 x]!2 ~@2 [~@7 x]!2 ~@6>").gain(0.18)

// drums · hihat
const hihat = s("hh").struct("<[x!4]!160 ~@12>").gain(0.36)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@160 [x!4]!4 [x!8]!2 [x!4]!4 ~@2>").gain(0.22)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@160
  [~@8 x!4 ~@4]!2
  [~@7 x!2 ~ x ~@5]!2
  [~@4 x!2 ~@7 x ~@2]!2
  [~@7 x!2 ~ x ~@5]!4
  ~@2
>`).gain(0.32)

// drums · open hat
// … 21 more lines

More by David Bowie