Strudelify

Close to You

Carpenters

KeyC minorTempo92 bpm
0:00/0:00
// Close to You — Carpenters
// 92 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 80 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(92/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 A C D E F G H@2 I J D K F L@2 H I M N O P Q R@2 S ~ D K F L@2 H I T U V W X@2 Y Z AA AB AC AD AE AF@2 AG AH U V W
  X@2 Y Z AA AI AJ AK@4 AL@6 AM@8
>`.pickRestart({
  A: "[d5,e5,g5]@3 [d5,e5,g5]@2 g4 [c5,e5,g5]@3 [c5,e5,g5]@2 g4", // Em7 C
  B: "[d5,e5,g5]@2 [e5,g5] [d5,g5]@2 g4 [c5,e5,g5]@3 [c5,e5,g5]@2 g4", C: "[d5,e5,g5]@3 ~",
  D: "[c4,d4,e4,g4]@3 [c4,d4,e4,g4]@3 [c4,d4,e4,g4]@3 [c4,d4,e4,g4]@2 c4", // C
  E: "[e4,gb4]@3 [e4,gb4]@3 [b3,eb4,gb4]@3 [b3,eb4,gb4]@2 b3, b3 ~", // Esus2 B
  F: "[a3,b3,d4,gb4] [a3,b3] [a3,d4,gb4]!2, ~@3 [d4,gb4]@2 ~@7", // Bm7 Asus2 D
  G: "[g3,b3,d4,g4] [g3,d4,g4] [b3,e4,g4]!2, ~@3 b3@2 ~@7", H: "[c4,e4,g4]!2 [d4,e4,g4]!2",
  I: "[b3,d4]!2 [a3,d4,gb4]!2", J: "[a3,d4,gb4]@5 ~", K: "[b3,e4,gb4]@3 [e4,gb4]@2 ~ [b3,eb4,gb4]@3 [b3,eb4,gb4]@2 b3",
  L: "[[g3,b3,d4,g4] [g3,d4,g4] [b3,e4,g4] [e4,g4] [c4,e4,g4] [e4,g4] [d4,e4,g4]!2, ~@3 b3@2 ~@4 b3@14 ~, ~@15 c4@8 ~]/2", // G G5 Em C Em Em7
  M: "[b3,d4,f4]!2 [b3,d4,f4]@2", // Bdim
  N: "[g3,c4,e4,g4]@6 [c4,e4,g4]@3 ~ [c4,e4,g4] ~ [c4,e4,g4]@3 ~ [c4,e4] ~ [c4,e4,g4]@3 ~@3, ~@6 a3@4 ~@2 b3@4 ~@2 a3@5 ~", // C
  O: "[g3,c4,e4,g4]@5 ~ [c4,e4,g4]@2 ~@2 e4 ~ [c4,e4,g4]@2 ~@2 [c4,e4,g4] ~ [a3,c4]@3 ~@3, ~@6 a3@4 ~@2 b3@4 ~@2 [e4,g4] ~@5", // C Am Em
  P: "[gb3,b3,d4,gb4]@5 ~ [gb3,d4,gb4]@4 b3 ~ [gb3,d4,gb4]@4 [b3,d4] ~ [gb3,d4,gb4]@3 ~ [b3,d4] ~, ~@6 b3@2 ~@4 b3@2 ~@4 b3 ~@5", // Bm D Bm D Bm
  Q: "[b3,d4,a4]@4 ~@2 [b3,d4,a4]@3 ~ b3 ~ [e4,ab4,b4]@5 ~ [e4,ab4,b4]@3 ~@3", // Bm7 E
  R: "[[d4,e4,g4]@5 ~@5 d4 ~ [c4,e4,g4]@5 ~@5 [c4,e4,g4]@2 [b3,e4,g4]@5 ~@5 [b3,e4,g4]@2 [c4,e4,g4]@4 ~@2 [c4,e4,g4]@4 ~@2, c3@10 ~@2 c3@9 ~ c3@11 ~ c3@9 ~@5]/2", // Em7 C Em C
  S: "[d2,d4,gb4,a4] ~@5", T: "[a3,d4,gb4] ~@5",
  U: "[db4,eb4,f4,ab4]@3 [db4,eb4,f4,ab4]@3 [db4,eb4,f4,ab4]@3 [db4,eb4,f4,ab4]@2 db4", // Db
  V: "[c4,f4,g4]@3 [f4,g4]@2 ~ [c4,e4,g4]@3 [c4,e4,g4]@2 c4", // Csus4 Fsus2 C
  W: "[bb3,c4,eb4,g4] [bb3,c4] [bb3,eb4,g4]!2, ~@3 [eb4,g4]@2 ~@7", // Cm7 Bbsus2 Eb
  X: "[[ab3,c4,eb4,ab4]@3 [ab3,eb4,ab4]@3 [c4,f4,ab4]@3 [f4,ab4]@3 ab5@2 ~@3 ab5 [eb4,f4,ab4]@3 [eb4,f4,ab4]@3, ~@3 c4@2 ~@4 c4@14 ~, ~@12 [db4,f4,ab4]@3 db4@8 ~, ~@14 ab5@3 ~ ab5@5 ~, ~@5 [f4,ab4] ~@2]/2", // Ab Ab5 Fm Fm7 Db Fm
  Y: "f5@3 ~@7 f6@2 [eb4,f4,ab4]@6 [eb4,f4,ab4]@6, [db4,f4,ab4]!2 ~@2, ~@4 ab5@5 ~@3 eb6@11 ~", // Fm7 Db
  Z: "f5@2 ~@4 [bb3,eb4,g4]@3 [bb3,eb4,g4]@3, [c4,eb4]!2 ~@2, ~@4 ab5@6 eb6@13 ~", AA: "[c4,eb4,gb4]!2 [c4,eb4,gb4]@2",
  AB: "[ab3,db4,f4,ab4]@6 [db4,f4,ab4]@3 ~ [db4,f4,ab4] ~ [db4,f4,ab4]@3 ~ [db4,f4] ~ [db4,f4,ab4]@3 ~@3, ~@6 bb3@4 ~@2 c4@4 ~@2 bb3@5 ~", // Db
  AC: "[ab3,db4,f4,ab4]@5 ~ [db4,f4,ab4]@2 ~@2 f4 ~ [db4,f4,ab4]@2 ~@2 [db4,f4,ab4] ~ [bb3,db4]@3 ~@3, ~@6 bb3@4 ~@2 c4@4 ~@2 [f4,ab4] ~@5", // Db Bbm Fm
  AD: "[g3,c4,eb4,g4]@5 ~ [g3,eb4,g4]@4 c4 ~ [g3,eb4,g4]@4 [c4,eb4] ~ [g3,eb4,g4]@3 ~ [c4,eb4] ~, ~@6 c4@2 ~@4 c4@2 ~@4 c4 ~@5", // Cm
  AE: "[c4,eb4,bb4]@4 ~@2 [c4,eb4,bb4]@3 ~ c4 ~ [f4,a4,c5]@5 ~ [f4,a4,c5]@3 ~@3", // Cm7 F
  AF: "[[eb4,f4,ab4]@5 ~@5 eb4 ~ [db4,f4,ab4]@5 ~@5 [db4,f4,ab4]@2 [c4,f4,ab4]@5 ~@5 [c4,f4,ab4]@2 [db4,f4,ab4]@4 ~@2 [db4,f4,ab4]@4 ~@2, db3@10 ~@2 db3@9 ~ db3@11 ~ db3@9 ~@5]/2", // Fm7 Db Fm Db
  AG: "[eb4,ab4,bb4], eb2 ~@5", AH: "[eb2,eb3,eb4,g4,bb4] ~@7",
  AI: "ab5@2 ~@3 ab5 [eb4,f4,ab4]@3 [eb4,f4,ab4]@3, [db4,f4,ab4]@3 db4@8 ~, ~@2 ab5@3 ~ ab5@5 ~, ~ [f4,ab4] ~@2", // Fm7 Db Fm
  AJ: "f5@3 ~@7 f6@2 [eb4,f4,ab4]@6 ~@6, [db4,f4,ab4]!2 ~@2, ~@4 ab5@5 ~@3 eb6@11 ~", // Fm7 Db
  AK: "[~@5 [bb4,c5,eb5]@3 [bb4,c5,eb5]@2 eb4 [ab4,c5,eb5]@3 [ab4,c5,eb5]@2 eb4 [bb4,c5,eb5]@2 [c5,eb5] [bb4,eb5]@2 eb4 [ab4,c5,eb5]@3 [ab4,c5,eb5]@2 eb4 [bb4,c5,eb5]@3 [bb4,c5,eb5]@2 eb4 [ab4,c5,eb5]@3 [ab4,c5,eb5]@2 eb4 [bb4,c5,eb5]@7]/4", // Cm7 Ab Cm7 Cm Eb5 Ab Cm7 Ab …
  AL: "[~@10 [db4,eb4]@5 ~@13 [db4,eb4]@5 ~ [db4,eb4]@5 ~ [db4,eb4]@5 ~ [db4,eb4]@5 ~ [db4,eb4]@4 ~@12 ab2@8 ~@7 c4@5 [c4,eb4,g4]@3 ~ [c4,eb4,g4] ~@7 [eb4,g4]@4 ~@2 [db4,eb4]@5 ~@13 [db4,eb4]@5 ~ [db4,eb4]@5 ~ [db4,eb4]@5 ~ [ab3,db4,eb4]@2, ~@10 ab3@11 ~ ab3@12 ab3@11 ~ ab3@11 ~@5 eb4@20 ab2@20 ~@42, ~@16 [db4,eb4]@11 ~@31 g4@29 ~@10 c4@6 ~@9 [db4,eb4]@11 ~@21, ~@68 c4@12 c3@23 ~@41, ~@76 g3@27 ~@3 ab3@11 ~ ab3@12 ab3@11 ~@3]/6", // Dbsus2 Cm Eb Dbsus2 Absus4 Dbsus2
  AM: "[~@4 [db4,eb4]@4 ~@12 ab2@8 ~@7 c4@5 [c4,eb4,g4]@3 ~ [c4,eb4,g4] ~@7 [eb4,g4]@3 db4@5 ~@16 [db4,eb4]@5 ~ [db4,eb4]@5 ~ [db4,eb4]@5 ~ [db4,eb4]@5 ~ [db4,eb4]@4 ~@12 ab2@8 ~@7 c4@5 [c4,eb4,g4]@3 ~ [c4,eb4,g4] ~@7 [eb4,g4]@3 [ab3,db4]@13 ~@28, ~@10 g4@29 ~@10 c4@6 eb4@3 ~@6 [db4,eb4]@11 ~@31 g4@29 ~@10 c4@6 eb4@3 ~@38, ~@14 eb4@20 ab2@20 ~@70 g3@27 ~@41, ~@20 c4@12 c3@23 ~@61 c4@12 c3@23 ~@41, ~@28 g3@27 ab3@11 ~@4 ab3@12 ab3@11 ~ ab3@11 ~@5 eb4@20 ab2@20 ~ ab2@20 ~@21]/8", // Dbsus2 Cm Eb Dbsus2 Cm Eb Db5 Dbsus2
})).s("gm_piano").gain(0.36).pan(0.3)

// chords · piano
const piano_2 = note(`<
  ~@4 A B C D E A F@2 A B C G E A H@2 I J K L ~@2 M ~ A B C G E A N ~ O P Q R S O T U V W X Y ~@4 O P Q R S O T Z AA O
  ~@18
>`.pickRestart({
  A: "c2 ~", B: "b1@6 ~@5 gb2", C: "b1@6 ~@5 b2", D: "e2 ~", E: "c2@4 ~ c2 c3@3 ~@3",
  F: "[b2@42 ~@2 [d2,d3] ~ [db2,db3]@2, g2]/2", G: "e2 b1 ~@2", H: "[g2@12 ~@6 a3 b3 ~ b3@2 a3, b2@7 ~]/2",
  I: "[c4,e4]@5 ~ [c4,e4]@5 ~ [c4,e4]@5 ~ [c4,e4]@5 ~", J: "[c4,e4]@5 ~ [c4,e4]@5 ~ [c4,e4]@4 g5@2 [c4,e4,g6]@4 g5@2",
  K: "[b3,d4]@5 ~ [b3,d4]@5 ~ [b3,d4]@5 ~ d4@2 ~@2 d4 ~, gb5@2 ~@16 b3 ~@5", // Bm
  L: "[d4,gb4]@4 ~@2 [d4,gb4]@4 ~@2 [e4,ab4,ab5]@5 ~ [e4,ab4,ab5]@2 ~@4", // D E
  M: "~@9 a6 [gb6,g6] [d6,e6] ~@9 a5 [gb5,g5] [d5,e5]", N: "[g2,b2]", O: "db2 ~", P: "c2@6 ~@5 g2", Q: "c2@6 ~@5 c3",
  R: "[f2,ab4] [c2,g4] f4@2", S: "db2@4 ~ db2 db3@3 ~@3", T: "[ab2,c3]",
  U: "[eb4,c5]@2 [db4,bb4] ~ ab4@9 ~ [c4,ab4]@2 db4 ~ c4@4 ab3@2, [ab2,c3]@11 ~, ~@4 c4@7 ~@7 ab4@6", // Cm Gb Fm Ab
  V: "[db4,f4]@5 ~ [db4,f4]@5 ~ [db4,f4]@5 ~ [db4,f4]@5 ~", // Db
  W: "[db4,f4]@5 ~ [db4,f4]@5 ~ [db4,f4]@4 ab5@2 [db4,f4,ab6]@4 ab5@2", // Db
  X: "[c4,eb4]@5 ~ [c4,eb4]@5 ~ [c4,eb4]@5 ~ eb4@2 ~@2 eb4 ~, g5@2 ~@16 c4 ~@5", // Cm
  Y: "[eb4,g4]@4 ~@2 [eb4,g4]@4 ~@2 [f4,a4,a5]@5 ~ [f4,a4]@2 ~@4, ~@18 a5 ~@5", // Eb F
  Z: "[ab4,c5] ~ [db4,bb4] ~ ab4@9 ~ [eb4,ab4]@2 [db4,eb4] ~ [c4,eb4,ab4]@2 ab4@2 [bb3,eb4,g4]@2, [ab2,c3]@11 ~, eb4@2 c5@2 c4@7 ~@3 c4 ~@9", // Ab Gb Ab5 Dbsus2 Ab Eb Ab
  AA: "[db2,db3]@4 ~ db2 db3@3 ~@3", // Db
})).s("gm_piano").gain(0.8).pan(0.7)

// bass · electric bass finger · "BASS"
const bass = note(`<
  ~@12 A B@2 C A@2 D E F G H I A J K ~ A L M N A@2 D O P Q R S P@2 T U V W X Y Z AA AB AC P Q@2 S P@2 T AD P AE@2 ~@3
  AF@8 AG@6
>`.pickRestart({
  A: "c2 g2", B: "b1@12 gb2@9 ~ gb2@2", C: "e2 b1 e2@2", D: "g2@6 d2@5 d2", E: "g2@8 ~ g2@3", F: "c2@6 g2@5 g2",
  G: "c2@5 c2 g2@3 c2!3", H: "b1@5 b1 gb2@6", I: "e2@5 e2 b1@5 b1", J: "c2@2 g2 c2", K: "d2", L: "b1 gb2",
  M: "~@2 b1 gb2@2 f2 e2@2 d2 b1@3", N: "e2@3 e2", O: "g2 ~@3", P: "db2 ab2", Q: "c2@12 g2@9 ~ g2@2",
  R: "c2@12 g2@9 ~ g2 ~", S: "f2 c2 f2@2", T: "ab2@6 eb2@5 eb2", U: "ab2 bb2 ab2 gb2", V: "db2@6 ab2@5 ab2",
  W: "db2@5 db2 ab2@3 db2!3", X: "c2@5 c2 g2@6", Y: "f2@5 f2 c2@5 c2", Z: "db2@5 db2 ab2@6", AA: "db2@2 ab2 db2",
  AB: "eb2", AC: "eb2 ~@3", AD: "ab2@11 ~", AE: "[db2@4 ab2@5 ~@7]/2",
  AF: "[~@5 db2@6 ab2@6 db2@5 eb2 f2@3 db2@3 g2@5 g2 eb2@6 ab1@5 bb1 c2@3 eb2@2 eb2 db2@6 ab2@6 db2@5 eb2 f2@3 db2@3 g2@5 g2 eb2@6 ab1@5 bb1 c2]/8",
  AG: "[~@4 eb2@3 db2@15 ab2@12 db2@10 eb2@2 f2@6 db2@6 g2@10 g2@2 eb2@12 ab1@10 bb1@2 c2@6 eb2@3 ab1@21 ~@20]/6",
})).s("gm_electric_bass_finger").gain(0.71)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@12 A B@2 C@2 D@3 E@4 F@2 G ~ A H I J@4 ~ K@3 L M N O@2 P@4 Q@2 R S T@3 U@3 V ~ W@3 ~@17
>`.pickRestart({
  A: "d5@3 c5", B: "[b4@5 gb5@3]/2", C: "[g5 gb5 e5@4 d5@2]/2", D: "[g5@6 d5@23 ~@7]/3",
  E: "[g3@6 a3@6 b3@6 a3@6 g3@6 a3@6 b3@6 ~@30 a3@12 [ab3,e4,ab4]@11 ~, [c4,e4]@46 ~@2 [d4,gb4]@35 ~@13, ~@42 a3@29 ~@25]/4", // Dbm C D
  F: "[[e4,g5]@23 ~]/2", G: "d5 ~@23", H: "b4", I: "~ gb5@3, b4",
  J: "[[b4,g5]@3 [a4,gb5]@3 e5@12 d5@6 [c5,g5]@6 ~@6 gb4@11 ~, ~ g4@5 ~@2, ~@30 d5@17 ~]/4", // Em D C5
  K: "[db4@23 ~@13 e4@12 eb4@12 g4@12, f4 ~, ~ c4@2]/3", L: "ab4@6 g4@6 f4@11 ~",
  M: "[eb4,eb5]@2 ~ [eb4,eb5]@2 [eb4,eb5] [db4,db5]@2 ~ [db4,db5]@2 [ab3,ab4]", // Eb Db Ab
  N: "[eb4,eb5]@2 ~ [eb4,eb5]@2 [eb4,eb5] [db4,db5]@2 ~ [db4,db5]@3", O: "[[c4,c5]@5 ~]/2",
  P: "[ab3@6 bb3@6 c4@6 bb3@6 ab3@6 bb3@6 c4@6 ~@30 bb3@12 [a3,f4,a4]@11 ~, [db4,f4]@46 ~@2 [eb4,g4]@35 ~@13, ~@42 bb3@29 ~@25]/4", // Dm Db Eb
  Q: "[[db4,f4,ab5]@23 ~]/2", R: "ab4@23 ~", S: "g4 ~@23",
  T: "[eb5@3 db5 ~@2 e4@2 eb4@2 g4@2, f4@3 ~ g5@2, db4 [c4,c5]@2]/3", // C
  U: "[[c5,ab5] [bb4,g5] ~@2 f5@2 eb5@2 ab5@2 [db5,f5]@2, ~@2 ab4@5 ~@5, ~@2 db5@3 ~]/3", V: "[c5,eb5]",
  W: "[f4@8 f4@9 ~@7, ab4@17 ~@7]/3",
})).s("gm_string_ensemble_1").gain(0.22)

// other · vibraphone · "VIBE"
const vibraphone = note("<~@2 A B ~@19 C D ~@22 E F ~@15 G@2 ~@14>".pickRestart({
  A: "d5@2 c5!2", B: "d5@11 ~", C: "gb5@5 ~ gb5@5 ~ ab5@5 ~ ab5@2 ~@4", D: "g5@5 ~@19",
  E: "g5@5 ~ g5@5 ~ a5@5 ~ a5@2 ~@4", F: "ab5@5 ~@19", G: "[~@5 bb4@2 ~ bb4@2 ~ ab4@2 ~ ab4@2 ~ bb4@2 ~@5]/2",
})).s("gm_vibraphone").gain(0.21).pan(0.6)

// other · marimba
const marimba = note("<~@2 [~@3 e5 ~ g4 e5 ~@2 e5 ~ g4] [e5 ~@11] ~@76>").s("gm_marimba").gain(0.3).pan(1)

// other · french horn · "SYNTH BRS"
const french_horn = note(`<
  ~@12 A B A C D E@2 F ~@3 G H I ~@2 A B A C D E@2 ~@12 J K L ~@10 M N ~@7 O P ~@2 O P ~@2 O Q ~
>`.pickRestart({
  A: "d4", B: "e4 eb4", C: "d4 e4", D: "c4 d4", E: "[c4 d4@3]/2", F: "f4@2 ~ f4@2 ~ f4@6, a3", G: "e5@9 b4 a4@2 b4@12",
  H: "d5 c5", I: "b4 a4", J: "f5@9 c5 bb4@2 c5@12", K: "eb5 db5", L: "c5 bb4", M: "c4 db4", N: "eb4",
  O: "~@10 c5 bb4@2 ab4@11", P: "~ c4 db4@2 c4@3 ~@17", Q: "~ c4 db4@2 c4@4 ab3@14 ~@2",
})).s("gm_french_horn").gain(0.57).pan(0.7)

// other · orchestral harp · "HARP"
const orchestral_harp = note("<~@19 A ~@3 B ~@15 C ~@7 D ~@7 C ~@24>".pickRestart({
  A: "~@12 [g2,b2,d3] [g2,b2,d3,f3]!2 [f3,g3,b3,d4] [g3,b3,d4,f4] [f4,g4,b4,d5] [g4,b4,d5,f5] [b4,d5,f5] [b4,d5,f5,g5] [g5,b5,d6] [f5,g5,b5,d6,f6] g6", // G G7 Bdim G7 G G7
  B: "~@19 e3 [ab3,b3] [e4,ab4] [b3,e4,b4,e5] [ab4,d5,g5]", // Abm E E5 G
  C: "~@12 [f2,ab2] [ab2,c3] [c3,f3] [c3,ab3] [f3,ab3] [f3,c4] [ab3,c4] [ab3,f4] [c4,f4] [c4,ab4] [f4,ab4] [f4,c5]", // Fm Ab F5 Fm F5 Ab Db F5 …
  D: "~@19 f3 [a3,c4] [f4,a4] [c4,f4,c5,f5] [a4,eb5,ab5]", // Am F F5 Ab
})).s("gm_orchestral_harp").gain(0.14)

// chords · harpsichord · "HARPSICOR"
const harpsichord = note(`<
  ~@20 A B C D E F G ~@9 H I J K L M N ~ O P Q R S T U ~ H I J K L M V@2 L M ~@2 W@3 ~@3 X Y Z@3 Y AA@3 ~
>`.pickRestart({
  A: "~@2 b5 a5", B: "g5@5 ~ a5@6 b5@5 ~ a5@4 g5@2", C: "d6@10 ~@2 d6@11 ~", D: "d6@11 ~ e6@9 ~@3",
  E: "[d5,e5,g5]@3 [d5,e5,g5]@2 g5 [c5,e5,g5]@3 [c5,e5,g5]@2 g5", // Em7 C
  F: "[b4,g5]@3 [b4,e5,g5]@2 g5 [c5,e5,g5]@3 [c5,e5,g5]@2 g5", G: "[d5,gb5,a5] ~@23",
  H: "[db4,eb4,f4,ab4]@5 ~ [db4,eb4,f4,ab4]@5 ~ [db4,eb4,f4,ab4]@5 ~ [db4,eb4,f4,ab4]@4 ~@2", // Db
  I: "[c4,f4]@5 ~ [c4,f4]@5 ~ [c4,e4,g4]@5 ~ [c4,e4,g4]@5 ~", // F5 C
  J: "[c4,eb4,g4]@5 ~ [c4,eb4,g4]@5 ~ [c4,eb4,g4]@5 ~ [c4,eb4,g4]@4 ~@2", // Cm
  K: "[c4,f4,ab4]@5 ~ [c4,f4,g4]@5 ~ [c4,f4]@9 ~@3", L: "f4@2 eb5@2 ~ eb5 db5@5 ~", M: "f4@2 eb5 ~@2 eb5 db5@5 ~",
  N: "c5@3 ~ c5@2 ~@4 c5@13 ~", O: "~@2 c6 bb5", P: "ab5@5 ~ bb5@6 c6@5 ~ bb5@4 ab5@2", Q: "eb6@10 ~@2 eb6@11 ~",
  R: "eb6@11 ~ f6@9 ~@3", S: "[eb5,f5,ab5]@3 [eb5,f5,ab5]@2 ab5 [db5,f5,ab5]@3 [db5,f5,ab5]@2 ab5",
  T: "[c5,ab5]@3 [c5,f5,ab5]@2 ab5 [db5,f5,ab5]@3 [db5,f5,ab5]@2 ab5", U: "[eb5,g5,bb5] ~@23",
  V: "[c5@3 ~ c5@2 ~@6 bb5@4 g5@6 eb5@4 ~@22, ~@10 c5@13 ~@25]/2",
  W: "[~@5 [bb5,c6,eb6]@3 [bb5,c6,eb6]@2 eb5 [ab5,c6,eb6]@3 [ab5,c6,eb6]@2 eb5 [bb5,c6,eb6]@9 ~@10]/3", // Cm7 Ab Cm7
  X: "~@6 ab5@2 g5@2 f5@13 ~", Y: "~@2 bb5 c6 bb5 ab5@5 ~@2",
  Z: "[~@10 bb5@3 ~ g5@5 ~ eb5@12 eb5@2 eb5@8 ~@2 db6@2 c6@4 bb5@2 ab5@4 ~@16]/3",
  AA: "[~@10 bb5@3 ~ g5@5 ~ eb5@12 eb5@2 eb5@8 ~@2 db6@2 c6@4 bb5@2 ab5@3 ~ eb5@4 ~@12]/3",
})).s("gm_harpsichord").gain(0.15).pan(0.3)

// other · tenor sax
const tenor_sax = note("<~@35 A B C D@2 ~@40>".pickRestart({
  A: "~@12 f3@5 ~ ab3@5 ~", B: "eb4@11 ~ eb4@4 db4@2 eb4@4 f4@2", C: "c4@18 ~@2 c4 ~ eb4@2",
  D: "[g4@15 c4@2 ~ eb4@3 ~ ab4@15 ~@11]/2",
})).s("gm_tenor_sax").gain(0.8)

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

// drums · low tom
const low_tom = s("lt").struct("<~@19 A ~@7 B ~@15 C ~@6 D ~@23 E ~@3 E ~>".pickRestart({
  A: "~@6 x ~@3 x!2", B: "~@3 x", C: "~@7 x!5", D: "~@8 x ~@2 x ~@3 x ~@8", E: "~@3 x!2 ~@19",
})).gain(0.62)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@12 A@7 ~ B@5 C ~@2 A@7 ~ A@7 ~ B@5 D ~@2 A@7 ~ A E ~@2 F ~ G@8 H G@2 I J ~
>`.pickRestart({
  A: "x!4", B: "~ x ~ x", C: "~@3 x ~@3 x!3 ~@2", D: "~@3 x ~@3 x!4 ~", E: "x!2 ~@2", F: "~ x ~@4",
  G: "~@2 x ~@2 x ~@2 x ~@2 x", H: "~@2 x ~@5 x ~@2 x", I: "~@2 x ~@2 x ~@2 x ~ x!2", J: "~ x!2 ~@9",
})).gain(0.62)

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 A ~@7 B ~@15 C ~@6 D ~@23 E ~@3 E ~>".pickRestart({
  A: "~@5 x ~@2 x!2 ~@2", B: "~@6 x!3 ~@3", C: "~@5 x", D: "x ~@3 x ~@2 x ~ x ~@14", E: "~ x ~@10",
})).gain(0.62)

// drums · open hat
const open_hat = s("oh").struct("<~@49 A ~@11 B ~@2 C ~ C ~@7 D ~@3 D ~>".pickRestart({
  A: "~@11 x", B: "~ x", C: "~ x ~@10", D: "~@7 x ~@16",
})).gain(0.62)

// drums · high tom
const high_tom = s("ht").struct("<~@43 [~@3 x!4 ~ x ~@3] ~@36>").gain(0.62)

// drums · crash
const crash = s("cr").struct("<~@20 x ~@23 x ~@35>").gain(0.62)

// drums · ride
const ride = s("rd").struct("<~@19 A@2 ~@5 A ~@8 A ~@8 A ~@5 A@2 ~@28>".pickRestart({
  A: "x",
// … 9 more lines

More by Carpenters