Strudelify

Nobody Does It Better

Carly Simon

KeyE♭ majorTempo66 bpm
0:00/0:00
// Nobody Does It Better — Carly Simon
// 66 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 57 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(66/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("<~@10 A@7 B@7 C@2 D E F G H E I J D K L M N O@2 P@7 Q R S T@5 ~>".pickRestart({
  A: "[~@36 g1@24 ~ b1@24 c2@23 ~ c2@25 g1@24 b1@24 a1@24 ~ ab1@24 g1@25 b1@24 c2@24 ~ c2@24 b1@7]/7",
  B: "[~@5 e2@12 a1@12 d2@12 ~ g1@48 c2@48 ~ g1@37 ~@3 g1@3 b1@5 ~ c2@49 g1@48 c2@49 b1@2]/7",
  C: "[~@22 e2@15 ~ b1@2 ~@4 g1@3 a1@24 d2@24 ~]/2", D: "g1", E: "g1 b1", F: "c2@11 ~ c2@12", G: "g1@23 ~ b1@24",
  H: "a1 ab1", I: "c2@23 ~ c2@24", J: "b1 e2 a1 d2", K: "c2", L: "~ g1@37 ~@3 g1@3 b1@4", M: "~ c2@23", N: "~ g1@23",
  O: "[~@3 c2@49 b1@24 e2@15 b1@2 ~@3]/2",
  P: "[~ g1@3 ~ a1@24 b1@24 c2@12 ~ db2@11 d2@24 g1@24 b1@24 c2@23 eb2@9 f2@9 gb2@6 g2@24 b1@23 c2@24 eb2@9 f2@9 gb2@6 g2@23 b1@22]/7",
  Q: "~@2 c2@23 eb2@8 ~ f2@9 gb2@5", R: "~ g2@24 b1@23", S: "c2@24 eb2@8 ~ f2@9 gb2@6",
  T: "[g2@23 b1@24 c2@23 eb2@9 f2@9 gb2@6 g2@24 b1@24 c2@23 eb2@8 ~ f2@9 gb2@6 g2@32 ~@19, ~@63 g1@9 ~@8]/5",
})).s("gm_fretless_bass").gain(0.48)

// chords · piano · "Keyboard"
const piano = note("<A@2 B C D E@7 F@5 G@3 H@7 I J K L M N O P@2 ~@5 Q R@6 S@2 T U@6>".pickRestart({
  A: "[~@22 g5@18 [f4,d5]@3 [d4,b4]@4 [e4,db5]@3 [db4,bb4]@3 [bb3,g4]@3 [e4,db5]@3 [eb4,c5]@3 [c4,a4]@3 [a3,gb4]@3 [eb4,gb4,c5]@3 [g4,b4]@15 ~@4 e5@3 [gb4,bb4,eb5]@3, ~@19 b4@20 ~@50 [g4,b4]@4 ~@3, ~@20 g4@19 ~@32 d4@18 ~@7, ~@21 d5@19 ~@56]/2", // Dm G Dbm Gb Eb Dbm Cm F …
  B: "[f4,a4,d5]@12 g2@3 ab2@3 a2@3 b2@3 ~ [g4,c5,e5]@9 ~@3 [g4,c5,e5]@9 g2@2, ~@12 c3@11 ~", // Dm C
  C: "~ [g4,c5,eb5]@12 ~ [g4,c5,eb5]@9 ~@3 [g2,g4,b4,d5]@12 ~ a5@9, ~ c3@25 ~@12 [f3,b4,f5]@10", // Cm G Fdim
  D: "~@3 [e3,b4,e5,g5]@12 g2@3 ab2@3 a2@3 b2@3 ~ [g4,c5,e5]@9 ~@3 [g4,c5,e5]@8, ~@5 [b4,d5,f5]@4 c3@7", // Em C Bdim
  E: "[~ g2@3 [g4,c5,eb5]@12 ~ [g4,c5,eb5]@9 ~@3 [g2,g4,b4,d5]@12 ~ a5@9 ~@3 [e3,b4,e5,g5]@12 g2@3 ab2@3 a2@3 b2@3 ~ [g4,c5,e5]@9 ~@3 [g4,c5,e5]@9 g2@3 [g4,c5,eb5]@12 ~ [g4,c5,eb5]@9 ~@3 g4@6 ~@7 c5@8 ~@4 a4@6 ~@6 [d4,b4]@10 ~@3 [c4,e4,a4]@9 ~@3 [c4,e4,a4]@9 ~@3 [c4,e4,g4]@9 ~@4 [c4,e4,g4]@9 ~@3 d4@19 [f4,d5]@3 [d4,b4]@3 [e4,db5]@3 [db4,bb4]@3 [bb3,g4]@3 [e4,db5]@3 [eb4,c5]@3 [c4,a4]@3 [a3,gb4]@3 ~@3 [g3,b3,d4]@10 ~@2 [g3,b3,d4]@10 ~@3 [g3,b3,d4,f4]@10 ~@2 [g3,b3,d4,f4]@10 ~@2 [c3,g3,a3,c4,e4]@11, ~@4 c3@25 ~@12 [f3,b4,f5]@12 ~@13 [b4,d5,f5]@12 c3@22 ~@3 c3@25 b2@25 e3@25 ~@24 d3@25 ~@47 [gb4,c5]@4 ~@58, ~@128 [eb4,a4,c5]@12 [eb4,a4]@9 ~@4 [d4,b4]@12 ~@12 a2@25 ~@25 [g2,g3,b3]@28 ~@21 g2@24 ~ b2@24 ~@11, ~@134 gb4@18 ~@7 g4@18 ~@96 eb4@3 ~@60]/7", // Cm G Em C Cm G Am C …
  F: "[~ [g3,a3,c4,e4]@10 ~@3 [a3,c4]@11 ~ [g3,a3,c4,eb4]@10 ~@2 [g3,b3,d4]@11 ~ [g3,b3,d4]@10 ~@2 [g3,b3,d4,f4]@10 ~@3 f4@11 ~ [g3,b3,db4,e4]@10 ~@2 [g3,b3,db4,e4]@9 ~@3 [gb3,bb3,c4,eb4]@11 ~ [gb3,bb3,c4,eb4]@9 ~@3 [g3,b3,d4]@10 ~@3 [g3,b3,d4]@10 ~@2 [g3,b3,d4,f4]@11 ~ [g3,b3,d4,f4]@8 ~@4 [g3,a3,c4,e4]@11 ~ [g3,a3,c4,e4]@10 ~@3 [a3,c4,eb4]@10 ~@2 [g3,a3,c4,eb4]@11 ~ [b2,a3,b3,eb4,gb4]@7, ~@13 c3@25 g2@24 b2@24 a2@24 ~ ab2@25 ~@24 b2@23 ~ c3@24 g3@10 ~@22, ~@13 [g3,eb4]@11 ~@50 [g3,b3,d4]@12 ~@49 g2@25 ~@49 c3@24 ~@7]/5", // Am7 Am Am7b5 G G7 Dbm7b5 Cm7b5 G …
  G: "[~@5 [ab3,b3,d4,f4]@9 ~@3 [a2,g3,a3,c4,e4]@12 [g3,c4,e4]@8 ~@23 [b4,e5]@3 [gb4,bb4,eb5]@3 [f4,a4,d5]@12 g2@3 ab2@3 a2@3 b2@3 [g4,c5,e5]@9 ~@3 [g4,c5,e5]@9 ~ g2@3 [g4,c5,eb5]@12 [g4,c5,eb5]@9 ~@3 [g2,g4,b4,d5]@5, ~@5 e3@12 ~@12 [d3,a3]@12 [a3,b3]@38 ~@65, ~@41 g2@33 ~@16 c3@16 ~@9 c3@24 ~@5, ~@21 [g3,d4]@19 ~@32, ~@59 g4@4 ~@81]/3", // Abdim Am7 C E5 Ebm Dm C Cm …
  H: "[~@7 [f3,b4,f5,a5]@12 [e3,b4,e5,g5]@12 ~@3 ab2@3 a2@3 ~ b2@3 [g4,c5,e5]@9 ~@3 [g4,c5,e5]@9 g2@3 [g4,c5,eb5]@12 [g4,c5,eb5]@9 ~@4 [b4,d5]@9 ~@3 a5@9 ~@3 [e3,b4,e5,g5]@12 g2@3 ab2@3 a2@3 b2@3 [g4,c5,e5]@9 ~@3 [g4,c5,e5]@9 g2@3 ~ [g4,c5,eb5]@12 [g4,c5,eb5]@9 ~@3 g4@6 ~@7 c4@8 ~@3 a4@6 ~@7 d4@10 ~@2 [c4,e4,a4]@9 ~@3 [c4,e4,a4]@9 ~@3 [c4,e4,g4]@9 ~@3 [c4,e4,g4]@9 ~@22 [f4,d5]@3 [d4,b4]@3 [e4,db5]@3 [db4,bb4]@3 [bb3,g4]@3 [e4,db5]@3 [eb4,c5]@3 [c4,a4]@3 [a3,gb4]@3 [eb4,gb4,c5]@3, ~@31 g2@3 ~@10 c3@21 ~@3 c3@24 [g2,g4]@12 [f3,b4,f5]@12 ~@25 c3@21 ~@4 c3@24 b2@24 e3@24 ~ a2@24 d3@24 [g2,b3]@27 ~@22, ~@32 [b4,d5,f5]@12 ~@85 [b4,d5,f5]@12 ~@49 [a3,c4,eb4]@12 [a3,eb4]@9 ~@3 [b3,d4]@12 b3@10 ~@51 d4@21 ~@28, ~@196 gb4@18 ~@6 g4@18 ~@50 g3@27 ~@21]/7", // Bm7b5 Em C Cm Bm Em C Cm …
  I: "[g3,b3,d4]@10 ~@2 [g3,b3,d4]@10 ~@5 [b4,d5,g5] ~@2 [b4,d5,g5] ~@5 [g3,b3,d4,f4]@10 ~@2, g2 b2, ~@8 [g3,b3,d4,f4]@3 [b4,d5,g5]@4 ~", // G G7 G
  J: "[g3,a3,c4,e4]@11 ~ [g3,a3,c4,e4]@10 ~@2 [g3,a3,c4,eb4]@11 ~ [g3,a3,c4,eb4]@9 ~@3, c3@11 ~ c3@12", // Am7 Am7b5
  K: "[g3,b3,d4]@5 ~ [g3,b3,d4]@5 ~ [g3,b3,d4,f4]@5 ~ [g3,b3,d4,f4]@6, g2 b2", // G G7
  L: "[g3,b3,db4,e4]@10 ~@2 [g3,b3,db4,e4]@9 ~@3 [gb3,bb3,c4,eb4]@11 ~ [gb3,bb3,c4,eb4]@9 ~@3, a2 ab2", // Dbm7b5 Cm7b5
  M: "[g3,b3,d4]@10 ~@2 [g3,b3,d4]@9 ~@3 [g3,b3,d4,f4]@10 ~@2 [g3,b3,d4,f4]@8 ~@4, g2@24 b2@23 ~", // G G7
  N: "[g3,a3,c4,e4]@11 ~ [g3,a3,c4,e4]@10 ~@2 [g3,a3,c4,eb4]@10 ~@2 [g3,a3,c4,eb4]@11 ~, c3@23 ~ c3@24", // Am7 Am7b5
  O: "[b2,a3,b3,eb4,gb4]@3 [e3,ab3,b3]@3 [a2,g3,a3,c4,e4]@3 [g3,a3,c4,e4]@2 ~, ~@3 [d4,f4]@2 ~@4 d3@3", // B7 E Am7 Dm
  P: "[d4@15 b4@3 [e4,c5]@3 [f4,d5]@4 ~@2 [f4,d5] ~@2 [f4,d5]@3 [g4,e5]@3 [a4,f5] ~@2 [a4,f5]@3 [g4,e5]@3 [f4,d5]@6 ~@45, [g3,a3,b3]@37 ~@59, g2 ~@2, ~@15 d4@22 ~@59]/2", // C Dm C Dm C Dm G
  Q: "~@5 [a3,c4,e4]@10 ~@2 [a3,c4,e4]@9 ~@3 [b3,eb4,g4]@9 ~@3 [b3,eb4,g4]@7", // Am Baug
  R: "[~@5 [c4,e4,g4]@9 ~@4 e4@8 ~@4 [d4,e4,g4]@22 ~@13 [b3,d4,g4]@10 ~@2 [b3,d4,g4]@11 ~ [b3,d4,g4]@8 ~@4 [g3,c4,e4]@10 ~@2 [g3,c4]@7 ~@4 [eb3,g3,bb3,eb4]@9 [f3,a3,c4]@9 [a3,c4,gb4]@4 ~@2 [b3,d4,g4]@10 ~@2 [b3,d4,g4]@11 ~ [b3,d4]@11 [b3,d4,g4]@9 ~@3 [g3,c4,e4]@10 ~@2 [g3,c4,e4]@8 ~@4 [eb3,g3,bb3,eb4]@9 [f3,a3,c4]@8 ~ gb4@4 ~@13 [b3,d4,g4]@10 ~@2 [b3,d4,g4]@11 ~ [b3,d4,g4]@8 ~@2, ~@17 [db4,g4]@9 ~@27 [b3,d4,g4]@11 ~@48 e4@9 ~@12 f4@5 ~@33 g4@10 ~@14 c3@24 ~@9 f4@5 ~@3 [a3,c4]@4 ~@2 [b3,d4,g4]@11 ~@13 b2@22, ~@54 g2@23 b2@24 c3@24 ~@17 gb3@6 g3@24 b2@24 ~@40 gb3@7 g3@24 ~@21]/6", // C Em7 G C C5 Eb F Gbdim …
  S: "[~@2 [g3,c4,e4]@10 ~@2 [g3,c4]@7 ~@4 [eb3,g3,bb3,eb4]@9 [f3,a3,c4]@9 [a3,c4,gb4]@4 ~@2 [b3,d4,g4]@10 ~@2 [b3,d4,g4]@11 ~ [b3,d4,g4]@11 ~ [b3,d4,g4]@9 ~@2, ~@2 c3@24 ~@17 gb3@6 g3@23 ~ b2@23, ~@13 e4@9 ~@12 f4@5 ~@57]/2", // C C5 Eb F Gbdim G
  T: "[g3,c4,e4]@10 ~@2 [g3,c4,e4]@8 ~@4 [eb3,g3,bb3,eb4]@8 ~ [f3,a3,c4]@9 [gb3,a3,c4,gb4]@6, c3@23 ~@10 f4@5 ~@10", // C Eb F Gbdim
  U: "[[b3,d4,g4]@11 ~ [b3,d4,g4]@10 ~ [b3,d4,g4]@11 ~ [b3,d4,g4]@8 ~@4 [g3,c4,e4]@10 ~@2 [g3,c4,e4]@9 ~@3 eb4@6 ~@2 [f3,a3,c4]@9 [a3,c4,gb4]@4 ~@2 [b3,d4,g4]@10 ~@2 [b3,d4,g4]@11 ~ [b3,d4,g4]@11 ~ [b3,d4,g4]@9 ~@3 [g3,c4,e4]@10 ~ [g3,c4,e4]@8 ~@4 [eb3,g3,bb3,eb4]@9 [f3,a3,c4]@9 [a3,c4,gb4]@4 ~@2 [g2,d3,b3]@16 ~@2 [f4,d5]@3 [d4,b4]@3 [e4,db5]@3 [db4,bb4]@3 [bb3,g4]@3 [e4,db5]@3 [eb4,c5]@3 [c4,a4]@3 ~ [a3,gb4]@3 [eb4,gb4,c5]@3 ~ b4@35 ~@14, g3@23 b2@24 c3@23 [eb3,g3,bb3]@9 f4@5 ~@4 gb3@6 g3@24 b2@23 c3@24 ~@9 f4@5 ~@4 gb3@6 g3@49 [d4,g4]@34 ~@16]/6", // G C F Gbdim G C Eb F …
})).s("gm_piano").gain(0.42)

// other · string ensemble 2 · "Strings 1"
const string_ensemble_2 = note("<~@10 A@7 B@8 ~@2 C@3 D E F ~ G H I J K@8 L M N O P Q@5 ~>".pickRestart({
  A: "[~@36 [g3,g4]@147 e3@12 b3@12 bb3@12 eb3@12 [d3,g3]@24 b3@11 ~@2 b3@6 a3@3 b3@3 c4@24 a3@25 ~@7]/7", // G G5
  B: "[~@41 g3@47 ~@2 e4@25 eb4@24 d4@37 f4@11 ~ e4@24 eb4@24 d4@24 ~ g3@6 a3@6 b3@6 d4@6 e4@25 eb4@48 e4@24 ~@2]/8",
  C: "[g3,g4]/3", D: "e3 b3 bb3 eb3", E: "[d3,g3]@24 b3@11 ~ b3@6 a3@3 b3@3", F: "c4 a3", G: "g3@47 ~",
  H: "e4@25 eb4@23", I: "~ d4@37 f4@10", J: "~ e4@12 eb4@11",
  K: "[~@2 d4@24 ~ g3@6 a3@6 b3@6 d4@6 e4@25 eb4@48 e4@24 ~ a3@24 b3@24 c4@12 db4@12 d4@24 g2@24 b2@23 c3@24 eb3@9 f3@8 ~ gb3@6 g3@24 b2@20]/8",
  L: "~@3 c3@24 eb3@8 ~ f3@8 gb3@4", M: "~ g3@12 b2@11", N: "~@2 c3@23 eb3@9 f3@9 gb3@5", O: "~ g3@24 b2@23",
  P: "c3@8 eb3@3 f3@3 gb3@2",
  Q: "[g3@23 b2@24 c3@23 eb3@8 ~ f3@9 gb3@6 g3@23 ~ b2@23 c3@24 eb3@9 f3@9 gb3@6 g2@16 ~@35]/5",
})).s("gm_string_ensemble_2").gain(0.35)

// chords · string ensemble 2 · "Strings 2"
const string_ensemble_2_2 = note("<~@10 A@7 B@6 C@4 D E D F D G H I J@4 K@5 ~@10 L@2 ~>".pickRestart({
  A: "[~@36 g2@25 b2@25 c3@48 g2@24 b2@24 a2@25 ab2@24 g2@25 b2@25 c3@48 b2@7]/7",
  B: "[~@5 e3@12 a2@12 d3@12 g2@43 ~@6 c4@49 g3@49 ~@18 c5@6 d5@19 c5@5 ~ [g3,b4]@48 [d4,d5]@3, ~@45 g4@58 ~@3 a4@36 ~@2, ~@94 c4@25 ~@25, ~@212 g4@23 ~@53]/6", // G D
  C: "[~@10 [c4,c5]@12 [a3,b3,b4]@12 [a3,a4]@12 g5@12 gb5@11 ~ a5@13 g5@12 [a3,a4]@24 d4@24 ~ d4@17 ~@31, ~@46 [b3,a4]@24 [e4,b4]@25 [e4,c5]@48 g3@29 ~@20, ~@119 g4@40 ~@33, ~@143 b4@15 ~@34]/4", // C Asus2 A B7 E5 C
  D: "g2 b2", E: "~ c3@47", F: "a2@24 ab2@23 ~", G: "c3", H: "b2 e3 a2 d3", I: "g2@43 ~@5",
  J: "[c4@49 g3@49 ~@18 c5@6 d5@18 c5@5 ~ [g3,b4]@46, g4@58 ~@3 a4@35, ~@49 c4@25 ~@22, ~@122 g4@23 ~@47]/4", // G
  K: "[~@3 [d4,d5]@12 [c4,c5]@12 ~ b3@12 [a3,a4]@12 g5@12 gb5@11 ~ a5@12 g5@12 ~ [c4,e4,g4]@24 [eb4,g4,b4]@24 ~@24 c5@24 ~@43, ~@27 [a3,b4]@13 ~@12 [b3,a4]@24 [e4,b4]@25 ~@48 g4@47 ~@44, ~@149 b4@23 ~@68, ~@25 e4@8 ~@7]/5", // D C A C Ebaug Asus2 B7 E5
  L: "[~@45 d4@16 ~@35]/2",
})).s("gm_string_ensemble_2").gain(0.24)

// other · string ensemble 1 · "Strings 3"
const string_ensemble_1 = note("<~@26 A B ~@3 C D ~@10 E F G H I J K L M@4 N@2>".pickRestart({
  A: "~@18 [f3,d4]@3 [d3,b3]@3 [e3,db4]@3 [db3,bb3]@2 ~ [bb2,g3] ~@2 [e3,db4]@2 ~ eb3@3 [c3,a3]@2 ~ [a2,gb3] ~@2 eb3@2 ~, ~@36 c4 ~@8 c4 ~@2", // Dm G Dbm Gb Eb Dbm F D
  B: "[d3,b3] ~", C: "~@10 b3 c4 b3 c4 b3 c4",
  D: "[b3,b4]@3 [c4,c5]@3 [b3,b4]@3 [c4,c5]@3 [b3,b4]@3 [c4,c5]@3 [b3,b4]@3 [c4,c5]@3 [d4,d5]@22 ~@2", // B C B C B C B C …
  E: "~@6 g4@38 [e4,e5] ~@2 [d4,d5], ~@5 g5@37 ~@6", F: "~@2 [e4,e5] ~@2 [g3,g4]@43",
  G: "~@4 [g4,g5]@38 [e4,e5] ~@2 [d4,d5] ~@2", H: "[e4,e5] ~@2 [g3,g4]@45",
  I: "~@2 [g4,g5]@39 [e4,e5] ~@2 [d4,d5] ~@2 [e4,e5]", J: "~ [g3,g4]@23",
  K: "~ [g4,g5]@38 e5@2 ~ d5 d4 ~ [e4,e5] ~@2, ~@39 e4 ~@8", L: "[g3,g4]@47 ~",
  M: "[[g4,g5]@38 [e4,e5] ~@2 [d4,d5] ~@2 [e4,e5] ~@2 [g3,g4]@46 ~ [g4,g5]@39 [e4,e5] ~ d5 d4 ~@2 [e4,e5] ~@2 [g3,g4]@47 ~@3]/4", // G E D E G E G
  N: "[~@15 [f3,d4]@3 [d3,b3]@3 [e3,db4]@3 [db3,bb3]@2 ~ [bb2,g3] ~@2 [e3,db4]@2 ~ [eb3,c4]@3 [c3,a3]@3 ~ [a2,gb3] ~@2 eb3@2 ~ [d3,b3]@28 ~@22, ~@43 c4 ~@52]/2", // Dm G Dbm Gb Eb Dbm Cm F …
})).s("gm_string_ensemble_1").gain(0.35)

// other · brass section · "Brass"
const brass_section = note(`<
  ~@51
  [~@2 d5 ~@2 e5 ~@2 g5@12 ~@6 e5 ~@2 d5 ~@2 g4@11 ~@5]
  [~@2 g5 ~@2 a5 ~@2 g5 ~@2 d6@5 ~ g5@9 ~@22]
  [~ d5 ~@2 e5 ~@2 g5@10 ~@8 e5 ~@2 d5 ~@2 g4@8 ~@9]
  [g5 ~@2 a5 ~@2 g5 ~@2 d6@4 ~@2 g5@7 ~@26]
  ~@2
>`).s("gm_brass_section").gain(0.45)

// chords · french horn
const french_horn = note("<~@13 A@3 B@3 ~@11 C D ~ E F G H I J K L M N@2 O@2 P Q R S T U@5 ~>".pickRestart({
  A: "[~@39 e5@24 eb5@24 d5@49 ~@8]/3",
  B: "[~@41 [a3,b3,eb4,gb4]@12 [ab3,b3,d4,f4]@12 [g3,a3,c4,e4]@12 ~ [g3,a3,c4,e4]@12 [g3,a3,b3,d4]@36 ~@18]/3", // B7 Abdim Am7 G
  C: "e5 eb5", D: "d5", E: "[a3,b3,eb4,gb4] [ab3,b3,d4,f4] [g3,a3,c4,e4]!2", F: "[g3,a3,b3,d4]@3 ~",
  G: "e4@23 ~ eb4@22 ~@2, [g3,c4]@15 ~", H: "~ [g3,b3,d4]@45 ~@2", I: "~ e4@11 ~ eb4@11, ~ [g3,c4]@23",
  J: "~ [g3,b3,d4]@22 ~", K: "~@3 e4@23 ~ eb4@21, ~ [g3,c4]@15", L: "~@2 [a3,b3,eb4]@11 ~ [g3,b3,e4]@10",
  M: "~@5 [a3,c4,e4]@22 ~@2 [b3,eb4,g4]@19", // Am Baug
  N: "[~@5 c4@12 db4@9 ~@3 [d4,e4,g4]@23 ~@2 d4@21 ~@2 [b3,d4]@19, ~@5 [e4,g4]@21 ~@27 g4@21 ~@22]/2", // Em7 Bm Em
  O: "[~@5 [c4,e4]@19 ~@4 [bb3,eb4]@6 ~@3 c4@9 gb4@4 ~@2 [d4,g4]@21 ~@2 [b3,d4]@21, ~@37 f4@8 ~@51]/2", // C Eb5 G5 Bm
  P: "~@3 [c4,e4]@20 ~@4 [bb3,eb4]@7 ~@2 [c4,f4]@8 [c4,gb4]@4", Q: "~@3 g4@23 b3@22, ~@2 d4@45 ~",
  R: "~@2 [c4,e4]@20 ~@4 bb3@6 ~@2 f4@9 gb4@4 ~, ~@25 eb4@6 ~@3 c4@13 ~", S: "~ g4@23 b3@22 ~@2, ~ d4@44 ~@3",
  T: "[c4,e4]@20 ~@4 [bb3,eb4]@6 ~@3 f4@8 ~ gb4@6, ~@11 c4@5", // C Eb5
  U: "[g4@23 b3@24 [c4,e4]@20 ~@4 [bb3,eb4]@6 ~@2 f4@9 gb4@6 g4@23 ~ b3@23 [c4,e4]@24 [bb3,eb4]@9 f4@8 ~ gb4@6 g4@23 ~@28, d4@47 ~@32 c4@15 d4@47 ~@33 c4@15 ~@51]/5", // C Eb5 C Eb5
})).s("gm_french_horn").gain(0.24)

// drums · kick
const kick = s("bd").struct(`<
  ~@10 A B C D E F G H I J K L M N O P Q R@2 S@3 R T Q U V W X Y Z AA AB AA AC AD AE AF AG AH R AI AJ AK AL ~@2
>`.pickRestart({
  A: "~@37 x ~@10", B: "~@10 x ~@2 x ~@20 x ~@2 x ~@10", C: "~@11 x ~@2 x ~@20 x ~@2 x ~@9",
  D: "~@11 x ~@2 x ~@24 x ~@8", E: "~@4 x!2 ~@7 x ~@2", F: "~@13 x ~@2 x ~@23 x ~@7",
  G: "~@13 x ~@2 x ~@21 x ~@2 x ~@6", H: "~@17 x ~@21 x ~@2 x ~@5", I: "~@7 x", J: "~@19 x ~@23 x ~@4",
  K: "~@19 x ~@21 x ~@2 x ~@3", L: "~@5 x ~@5 x", M: "~@7 x ~@6 x!2", N: "~@11 x ~@11 x", O: "~@22 x ~@24 x",
  P: "~@20 x ~@2 x ~@21 x ~@2", Q: "x", R: "x ~@6 x!2 ~@6 x", S: "x ~@6 x!2 ~@7", T: "x ~@7 x ~@6 x",
  U: "x ~@21 x ~@2 x ~@20 x ~", V: "~ x ~@23 x ~@22", W: "~@2 x ~@20 x ~@2 x ~@21", X: "~@2 x ~@24 x ~@20",
  Y: "~@3 x ~@21 x ~@2 x ~@19", Z: "~ x ~@5 x ~@4", AA: "~@5 x ~@20 x ~@2 x ~@18", AB: "~@2 x ~@2 x ~@42",
  AC: "~@5 x ~@19 x ~@2 x ~@19", AD: "~@4 x ~@20 x ~@2 x ~@19", AE: "x!2 ~@6 x!2 ~@6",
  AF: "x ~@2 x ~@19 x ~@2 x ~@20 x", AG: "~@2 x ~@19 x ~@2 x ~@20 x ~", AH: "~ x ~@20 x ~@2 x ~@20 x ~",
  AI: "x ~@19 x ~@2 x ~@20 x ~@2 x", AJ: "~@20 x ~@2 x ~@19 x ~@2 x ~", AK: "~@19 x ~@2 x ~@19 x ~@2 x ~@2",
  AL: "~@6 x!2 ~@6 x!2",
})).gain(0.35)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@17 A ~ B C D E F G ~@8 H ~@2 I ~ J ~ K ~@3 L M ~@11>".pickRestart({
  A: "~@7 x ~@16", B: "~@2 x ~@2 x", C: "~ x ~", D: "~@17 x ~@24 x ~@5", E: "~@3 x ~@4", F: "~@19 x ~@23 x ~@4",
  G: "~@19 x ~@24 x ~@3", H: "~@7 x ~@8", I: "~@11 x ~@12", J: "~ x", K: "~@25 x ~@22", L: "~ x ~@22", M: "~ x ~@46",
})).gain(0.2)

// drums · rim
const rim = s("rim").struct("<~@19 A B C D E F G ~@31>".pickRestart({
  A: "~@7 x ~@23 x ~@16", B: "~@7 x ~@24 x ~@15", C: "~ x ~@2 x ~", D: "~@3 x ~@7 x ~@4", E: "~@9 x ~@24 x ~@13",
  F: "~@5 x ~@11 x ~@6", G: "~@11 x ~@23 x ~@12",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@11 A B C D E F G ~@9 H@3 I H@3 ~ J K L M N O P ~ P Q R S L T U V W X Y Z ~@2
>`.pickRestart({
  A: "~ x ~@23 x ~@22", B: "~ x ~@24 x ~@21", C: "~@2 x ~@24 x ~@20", D: "~ x ~@7 x!2 ~@5", E: "~ x ~@5 x ~@4",
  F: "~@4 x ~@24 x ~@18", G: "~@5 x ~@23 x ~@18", H: "~ x ~ x", I: "~@4 x ~@7 x!2 ~@2", J: "~@12 x ~@24 x ~@10",
  K: "~@13 x ~@24 x ~@9", L: "~@7 x ~@11 x ~@4", M: "~@5 x ~@7 x ~@2", N: "~@15 x ~@24 x ~@7", O: "~@2 x ~@2 x",
  P: "~@17 x ~@23 x ~@6", Q: "~@17 x ~@10 x ~@2 x ~@8 x ~@2 x ~@4", R: "~@16 x ~@22 x ~@8", S: "~@5 x ~ x ~@8",
  T: "~@13 x ~@5 x ~@2 x ~@25", U: "~@13 x ~@23 x ~@10", V: "~@9 x!4 ~@3", W: "~@12 x ~@22 x ~@12", X: "~@11 x ~@36",
  Y: "~@5 x ~@11 x ~@6", Z: "~@3 x ~@11 x",
})).gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~@9 A B ~@3 C ~@11 D ~@3 E ~@3 F ~@7 G H I J E K L ~ M ~@3 N ~@2>".pickRestart({
  A: "~@47 x", B: "~@5 x ~@2", C: "~@11 x!2 ~@3", D: "~ x ~@2", E: "~@14 x!2", F: "~@7 x",
  G: "~@38 x ~@2 x ~@2 x ~@2 x", H: "~ x ~@22", I: "~@17 x ~@5 x", J: "~ x ~@46", K: "x", L: "~@25 x ~@20 x ~",
  M: "~@13 x!3", N: "~@39 x!2 ~ x!2 ~@4",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@10 A B C D E F G H I J K L M N O P Q R S T S T S@2 Q U V W X Y Z AA AB AC AD AE AF AG AH AI Q AJ AK F AL ~@2
>`.pickRestart({
  A: "~@7 x", B: "x ~@6 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4", C: "~ x ~@5 x ~@6 x ~@5 x ~@5 x ~@11 x ~@5 x ~@3",
  D: "~@2 x ~@5 x ~@5 x ~@5 x ~@6 x ~@5 x ~@5 x ~@5 x ~@2", E: "~@3 x ~@5 x ~@5 x ~@5 x ~@5 x ~@11 x ~@6 x ~",
  F: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x", G: "~@4 x ~@5 x ~@6 x ~@4 x ~@6 x ~@11 x ~@5 x",
  H: "~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@18", I: "~@10 x!2 ~@2 x ~", J: "x ~@5 x ~@5 x ~@6 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4",
  K: "~ x ~@5 x ~@5 x ~@5 x ~@6 x ~@5 x ~@11 x ~@3", L: "~@2 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@6 x ~@5 x ~@2",
  M: "~ x ~ x ~ x ~ x ~ x ~ x ~@3 x", N: "~@3 x ~@6 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~",
  O: "~@4 x ~@5 x ~@5 x ~@5 x ~@5 x ~@6 x ~@11 x", P: "~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@12", Q: "~@12 x!2 ~@2",
  R: "~ x!7", S: "x!7 ~", T: "x!8", U: "x ~@5 x ~@5 x ~@5 x ~@6 x ~@5 x ~@5 x ~@5 x ~@4",
  V: "~ x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@6 x ~@9", W: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  X: "~@2 x ~@6 x ~@4 x ~@6 x ~@5 x ~@5 x ~@5 x ~@8", Y: "~@3 x ~@5 x ~@5 x ~@6 x ~@5 x ~@5 x ~@5 x ~@5 x ~",
  Z: "~@4 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x!2 ~@6", AA: "~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@6",
  AB: "~@41 x ~@2 x ~@3", AC: "~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x",
  AD: "~@5 x ~@5 x ~@5 x ~@4 x ~@5 x ~@5 x ~@5 x ~@7", AE: "~@4 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4 x ~@5 x ~@2",
  AF: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2", AG: "~@3 x ~@4 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@3",
  AH: "~@2 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4 x ~@5 x ~@10", AI: "~ x ~@5 x ~@5 x ~@5 x ~@5 x ~@4 x ~@6 x ~@10",
  AJ: "x ~@5 x ~@4 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x", AK: "~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4 x ~@11 x ~",
  AL: "~ x ~ x ~ x ~ x ~ x ~ x ~@4",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@9 A B ~@15 C ~@7 D ~@7 E ~@3 F ~ G ~ H ~ I ~ J ~@2>".pickRestart({
  A: "~@47 x", B: "~@3 x!2 ~@3", C: "~@4 x ~@8 x!3", D: "~@8 x ~@2 x ~@4", E: "~@7 x ~@2 x ~@5", F: "~@8 x ~ x!3 ~@3",
  G: "~@31 x ~@2 x ~@2 x ~@2 x ~@2 x ~@4", H: "~@13 x!3", I: "~@34 x ~@2 x ~@2 x ~@2 x ~@4",
  J: "~@31 x ~ x!2 ~ x!2 ~@10",
})).gain(0.45)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@12 A ~@3 B C@2 ~ D ~@3 E@2 F ~ F ~@3 F@3 ~ G ~@3 H@3 ~ I ~@3 G@2 F ~ J ~@4
>`.pickRestart({
  A: "~@2 x", B: "~@35 x ~@12", C: "~@3 x", D: "~@19 x ~@4", E: "~@41 x ~@6", F: "~@7 x", G: "~@43 x ~@4", H: "~@47 x",
  I: "~@23 x", J: "~@5 x",
})).gain(0.35)

// drums · crash
const crash = s("cr").struct("<~@10 A ~@6 B ~@8 C@2 ~@6 C ~@7 D ~@7 E ~@3 F ~@2>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "x", D: "~ x ~@6", E: "~ x ~@46", F: "~@15 x",
})).gain(0.45)

// … 15 more lines

More by Carly Simon