Strudelify

The Rose

Amanda McBroom

KeyC majorTempo66 bpm
0:00/0:00
// The Rose — Amanda McBroom
// 66 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 61 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.

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note("<~@20 A B C D E F G H@2 I J K L@4 M@5 N O@3 P Q@3 R S T U@3 ~@6>".pickRestart({
  A: "~@12 c4@2 d4 c4", B: "[g3,c4]@10 [c4,e4]@2 [g3,d4,f4]@3 [c4,e4], e4 ~",
  C: "[g3,c4,e4]@3 [b3,d4] [g3,b3,d4]@8 ~@2 c4@2", D: "[a3,c4] [a3,c4]@9 ~@2 [g3,b3,d4]@2 [b3,d4] [c4,e4], f3@3 ~",
  E: "[g3,c4]@12 c4@2 d4 c4, e4 ~", F: "[g3,c4,e4]@5 [c4,e4] [d4,f4] [c4,e4]",
  G: "[g3,c4,e4]@3 [g3,b3,d4] [g3,d4]@8 ~@2 [b3,d4]@2, ~@4 b3 ~@11", // C G G5 Bm
  H: "[[f3,b3,d4] [f3,a3,c4]@7 ~@4 [g3,b3,d4]@2 [g3,b3,d4] [g3,c4,e4]@3 [g3,c4,e4]@6 ~@4 [c4,e4]@2 [d4,f4] [c4,e4]]/2", // Bdim F G C Dm C
  I: "[b3,e4,g4]@5 [b3,e4,g4]@2 [b3,e4,g4]", J: "[a3,c4,e4,g4]@4 g4 c4 [g3,a3]@6 ~@2 [a3,c4,e4]@2, ~@3 c4@4 ~",
  K: "[f3,a3,f4]@10 [f3,e4]@2 [f3,d4]@3 c4", // F Fmaj7 Dm
  L: "[a3@6 g3@32 [g3,c4]@7 d4@3 ~ c4@3 [g3,c4]@30 [c4,e4]@6 [d4,f4]@6 [c4,e4]@6 [g3,c4,e4]@9 [b3,d4]@3 [g3,b3,d4]@24 ~@6 [b3,d4]@6 [f3,b3,d4]@3 [f3,a3,c4]@27 ~@6 [g3,b3,d4]@8, ~@45 g3@7 e4@24 ~@116]/4", // C5 C Dm C Bm G Bm Bdim …
  M: "[~ c4@3 c4@60 ~@24 [g3,c4]@6 d4@3 c4@3 [g3,c4]@30 [c4,e4]@6 [g3,d4,f4]@9 [c4,e4]@3 [g3,c4,e4]@9 [b3,d4]@3 [g3,b3,d4]@24 d4@6 c4@6 c4@30 ~@6 [g3,b3,d4]@6 [b3,d4]@2, ~@47 g3@3 e4@12 ~@36 [f3,a3]@18 ~@4, ~@113 c4@7]/5", // C5 C G7 C Bm G Bm F
  N: "~ [c4,e4]@3 [g3,c4]@36 c4@6 d4@2, ~ e4@6 ~@5", // C C5
  O: "[~ c4@3 [g3,c4,e4]@30 [c4,e4]@6 [d4,f4]@6 [c4,e4]@6 [g3,c4,e4]@9 [g3,b3,d4]@3 [g3,d4]@24 d4@6 [b3,d4]@6 [f3,b3,d4]@3 [f3,a3,c4]@21 ~@12 [g3,b3,d4]@6 [g3,b3,d4]@2, ~@64 b3@3 ~@77]/3", // C Dm C G G5 Bm Bdim F …
  P: "~ [g3,c4,e4]@9 [g3,c4,e4]@18 ~@12 [c4,e4]@6 [d4,f4]@2", // C Dm
  Q: "[~ [c4,e4]@3 g4@6 g4@24 [b3,e4,g4]@12 [b3,e4,g4]@6 [a3,c4,e4,g4]@12 [g3,a3,c4]@24 e4@6 e4@6 [f3,a3,f4]@30 [f3,e4]@6 [f3,d4]@8, ~@2 [b3,e4]@15 ~@27 [a3,c4]@6 ~@22]/3", // C Em Am7 F Fmaj7 Dm E5 Am
  R: "~ c4@3 a3@6 g3@32 [g3,c4]@6", S: "~ d4@3 ~ c4@3 [g3,c4]@30 [c4,e4]@6 [d4,f4]@4, ~ g3@7 e4@24 ~@16",
  T: "~@2 [c4,e4]@6 [g3,c4,e4]@9 [b3,d4]@3 [g3,b3,d4]@24 d4@4", // C Bm G
  U: "[~@2 [b3,d4]@6 a3@6 f3@6 g3@6 ~ e3@6 [g3,a3]@6 ~ [f3,a3,c4]@6 [b3,d4]@7 ~@4 c4@3 ~ c4@48 ~@35, ~@8 c4@25 ~@20 g3@7 ~@84]/3", // Bm Gsus2 F Bm
})).s("gm_epiano1").gain(0.35).pan(0.3)

// other · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note("<~@19 A@2 ~@15 B@2 ~@15 C@2 ~@6>".pickRestart({
  A: "[c4@5 ~@3]/2", B: "[~ c4@15 ~@8]/2", C: "[~@13 c4@72 ~@11]/2",
})).s("gm_synth_strings_1").gain(0.22).pan(0.4)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<A@8 B@8 C@4 D E@2 F G H I@2 J K L M@7 N@6 O@4 P@6 Q@7>".pickRestart({
  A: "[~@16 [g3,c4,e4,g4]@6 g3@15 ~@6 e4@3 [g3,c4,e4,g4]@24 g3@15 ~@6 e4@3 g3@15 ~@9 g3@15 ~@3 f4@6 a3@6 ~@6 g3@3 g3@3 ~@6 [c3,g3,c4,e4]@24 [g3,c4,e4]@2, [g3,c4,e4,g4]@32 ~@12 g4@48 ~@78 g3@18 c4@36 c4@12 [b3,d4,f4,g4]@36 [b3,d4,g4]@35 ~ [d4,g4]@24 ~@52, ~@26 c3@18 e4@42 ~@54 e4@42 ~@6 g4@48 ~@60 a3@11 ~ b3@18 b3@54 ~@4, ~@44 c4@36 c4@12 ~@48 c4@36 c4@12 e4@42 e4@54 f4@23 ~@13 g3@12 ~@52, ~@37 g3@9 ~@24 [c3,g4]@24 ~@15 g3@9 ~@15 g3@9 c4@9 c4@15 ~@26]/8", // C G7 G G5 C5
  B: "[~@74 g3@6 [g3,f4]@12 f3@6 ~@6 a3@6 ~@6 g3@12 ~@6 b3@6 c3@30 ~@6 [e4,g4]@12 [c3,b3,d4,e4,g4]@48 f3@30 ~@6 c4@12 a3@30 ~@12 f4@6 d4@25 ~@20 d4@7, ~@26 g3@18 ~@48 a3@12 ~@6 [a3,c4,f4,a4]@30 ~@30 c3@18 ~@126 a3@18 g3@25 b3@6 g3@21, ~@32 c4@12 [b3,d4,f4,g4]@36 [b3,d4,g4]@35 ~ b3@18 ~@102 [c4,d#4,g4,a4]@36 ~@12 f4@42 ~@6 f4@6 ~@19 [f4,g4]@27, ~@38 e4@54 [c4,f4]@18 ~@6 d4@24 ~@132 [d#4,g4,a4]@60 ~@25 d4@13 b3@14, ~@98 f3@17 ~@13 g3@12 [g3,c4,e4]@36 [g3,c4]@60 ~@30 f3@18 c4@36 c4@12 [c4,a4]@52]/8", // G7 Em Cmaj7 F G7 G Am7b5 Fsus2 …
  C: "[g3@5 ~@3 g3@5 ~@9 c4@2 [c3,g3,c4,e4,g4]@8, e4@7 e4@9 ~@16, c4@6 c4@2 d4@7 d4@9 ~@8, ~@5 g3@3 b3@6 b3@2 [a3,c4,f4]@6 [a3,f4,a4]@10, ~@13 g3@3 ~@5 f3@3 ~@8]/4", // C F Dm
  D: "[g3,c4,e4,g4]", E: "[g3@5 ~@3 g3@5 g3 [g3,b3,d4]@2, e4@7 e4@9, c4@3 c4 [b3,d4]@3 ~, ~@5 g3@3 ~@8]/2",
  F: "~@4 g3!3 [g3,b3,d4,g4], [a3,c4,f4], ~@4 [b3,d4,g4]@3 ~", G: "g3@5 ~@2 e4, [c3,g4], e4@7 ~, c4@3 c4, ~@5 g3@3",
  H: "[c3,g3,c4,e4]", // C
  I: "[g3@5 ~@5 a3 ~ g3@2 ~ b3, d4@42 d4@29 ~ [d4,g4]@24, b3@6 b3@2 [c4,f4]@3 ~ b3@3 ~, ~@5 g3@3 a3@2 ~ [a3,c4,f4,a4]@5, ~@54 f3@17 ~@13 g3@12]/2", // G5 F5 F
  J: "g3@5 ~@2 e4, c3, e4@7 ~, c4@3 c4, ~@5 g3@3", K: "~@3 [g3,b3,e4,g4], [g3,b3,e4]@3 ~, ~@5 b2@3",
  L: "[c4,a4]@7 ~ [c4,e4,g4,a4]@4 g4 ~@2 c4, [e4,g4] ~@2 [c4,a4], ~@6 e4!2, ~@13 g4@3", // F Am7 Em F
  M: "[~@24 [g3,b3,d4]@26 g3@15 ~@9 g3@15 g3@3 [g3,b3,d4]@6 ~@12 g3@3 g3@3 g3@3 [g3,b3,d4,g4]@3 ~@18 [g3,c4,e4]@6 [g3,c4,e4,g4]@22, [a3,c4,f4]@18 [a3,c4,f4]@32 e4@21 e4@27 ~@12 [b3,d4,g4]@9 ~@49, ~@15 f3@9 ~@26 c3@24 ~@63 c3@9 ~@22, ~@25 c4@9 c4@3 g4@12 ~@35, ~@65 g3@9 [b3,d4]@18 ~@6 [a3,c4,f4]@24 [g3,c4,e4]@18 ~@28]/7", // G C F G Bm F C
  N: "[~@2 g3@15 ~@9 g3@15 ~@9 a3@6 ~@6 g3@3 g3@3 ~@6 [c3,g3,c4,e4,g4]@24 ~@15 c3@3 [c3,g3]@6 [g3,b3,d4]@22, ~@4 [c3,g4]@48 ~@30 g3@18 ~@12 a3@11 ~ b3@18 b3@54 ~@92, ~@4 e4@42 e4@54 [f4,a4]@23 ~@13 g3@12 ~@48 [g3,c4,e4]@36 ~@56, ~@4 c4@36 c4@12 d4@42 d4@29 ~ [d4,g4]@24 ~@140, ~@17 g3@9 b3@18 b3@6 c4@9 c4@15 ~@42 [c4,e4,g4]@28]/6", // C C5 G C5 F C G5 C
  O: "[~@28 g3@6 g3@6 g3@6 [g3,b3,d4,g4]@6 ~@36 [g3,e4]@12 ~@30 b2@6 [b2,e4,g4]@12 a2@6 ~@12 e4@6 g4@3 ~@6 c4@3 [e4,g4,a4]@8, ~@4 [a3,c4,f4,a4]@48 [g3,c4,e4]@36 c4@60 e4@12 c4@12 [c4,a4]@12 c4@3 ~@5, ~@14 [b3,d4,g4]@9 ~@3 g4@24 ~@24 [g4,a4]@12 e4@3 e4@3 ~@4, ~@82 c3@18 [g3,b3,e4]@36 [g3,b3]@36 ~@3 g4@9 ~@8, ~@74 c4@3 a2@9 ~@10]/4", // G C Em A7 F C F G …
  P: "[~@4 a3@30 ~@18 [g3,b3,d4]@52 g3@30 ~@18 [g3,b3,d4]@48 a3@12 ~@7 c4@5 ~ [f3,a3,c4,f4,a4]@11 ~@2 [g3,b3,d4]@12 ~@3 c3@30 c3@5, ~ a4@12 ~@59, ~@2 f4@21 f4@29 e4@21 e4@27 f4@12 ~@32, ~@2 c4@18 c4@6 ~@26 c4@18 c4@6 ~@24 c4@9 ~@35, ~@34 a3@18 ~@82 g3@18 ~@60 a3@12 ~@29 [g3,c4,e4]@35]/6", // G F G C
  Q: "[~ [g3,c4,e4]@12 g3@30 ~@12 e4@6 g3@30 ~@12 e4@6 g3@30 ~@12 e4@6 g3@30 ~@12 e4@6 [g3,c4,e4]@96 ~@35, ~ g4@60 e4@42 ~@6 e4@42 ~@6 g4@48 ~@131, ~@13 c3@48 c3@48 [c3,g4]@48 ~@30 g3@18 ~@131, ~@13 e4@36 c4@12 c4@36 c4@12 c4@36 c4@12 e4@42 ~@137, ~@13 c4@30 g3@18 ~@30 g3@18 ~@30 g3@18 c4@36 c4@12 ~@131]/7", // C C5
})).s("gm_string_ensemble_1").gain(0.09).pan(0.6)

// chords · piano · "A.PIANO 1"
const piano = note("<A@8 B@8 C D E F G ~@32 H@8>".pickRestart({
  A: "[[c5,g5]@2 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [b4,g5]@3 [b4,g5]@3 [b4,g5]@3 [b4,g5]@3 [a4,f5]@3 [a4,f5]@3 [a4,f5]@3 [b4,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]@3 [c5,g5]]/8", // C5 Em Dm Em C5
  B: "[~@8 [c5,g5]@12 [c5,g5]@12 [c5,g5]@12 [b4,g5]@12 [b4,g5]@12 [b4,g5]@12 [b4,g5]@12 [a4,f5]@12 [a4,f5]@12 [a4,f5]@12 [b4,g5]@12 [c5,g5]@12 [c5,g5]@12 [c5,g5]@12 [c5,g5]@12 [b4,c5,g5]@12 [b4,c5,g5]@12 [b4,c5,g5]@12 [b4,c5,g5]@12 [a4,c5,g5]@12 [a4,c5,g5]@12 [a4,c5,g5]@12 [a4,c5,g5]@12 [a4,c5,f5]@12 [a4,c5,f5]@12 [a4,c5,f5]@12 [a4,c5,f5]@12 [g4,c5,f5]@12 [g4,c5,f5]@13 [g4,b4,f5]@27]/8", // C5 Em Dm Em C5 Cmaj7 Am7 F …
  C: "[c5,g5]!4", D: "[b4,g5]!4", E: "[a4,f5]!3 g4", F: "c3@7 g2", G: "[c2,g2]",
  H: "[~@13 c4@42 g3@6 c4@42 g3@6 c4@42 g3@6 c4@42 g3@6 c4@42 g3@6 [c3,g3,c4]@96 ~@35]/8", // C5
})).s("gm_piano").gain(0.27).pan(0.7)

// other · french horn · "A.PIANO 1"
const french_horn = note("<~@21 A B C D E B F D G H I J@5 K@8 L@4 M@5 ~@7>".pickRestart({
  A: "c2", B: "g2", C: "f2@3 g2", D: "c3", E: "[c2,g2]", F: "f2@2 f2 g2", G: "b2@7 e2", H: "a2@3 g2", I: "f2",
  J: "[g2@52 c3@48 g2@48 f2@24 f2@3 f2@3 f2@6 g2@12 c2@12 c2@12 c2@20]/5",
  K: "[~ g2@3 c2@24 c2@24 [c2,g2]@48 c2@48 f2@36 g2@12 c3@48 [c2,g2]@48 g2@48 f2@24 f2@12 g2@8]/8", // C5
  L: "[~@2 c3@24 b2@21 e2@3 a2@18 g2@6 f2@22]/4", M: "[~@4 g2@52 c3@48 g2@48 f3@38 g3@10 ~ c4@3 ~@36]/5",
})).s("gm_french_horn").gain(0.31).pan(0.3)

// chords · piano · "A.PIANO 1"
const piano_2 = note("<~@19 A B ~@15 C@2 ~@15 D E@4 F@3>".pickRestart({
  A: "[c4,e4,g4] d4 [e4,g4] c4 [e4,g4] d4 [e4,g4] c4", B: "[e4,g4] d4 [e4,g4] c4 [e4,g4] d4 ~@2",
  C: "[~@2 [c4,e4]@3 g3@3 [c4,e4]@3 g3@3 [c4,e4]@3 g3@3 [c4,e4]@3 g3@3 [c4,e4]@3 g3@3 [c4,e4]@3 g3@3 [c4,e4]@3 g3@3 ~@4]/2", // C
  D: "~@13 [e5,g5]@6 d5@6 [e5,g5]@6 c5@6 [e5,g5]@6 d5@5", // Em
  E: "~ [e5,g5]@6 c5@6 [e5,g5]@6 d5@6 [e5,g5]@6 c5@6 [e5,g5]@6 d5@5", F: "[~ [e5,g5]@6 c5@6 [e4,g4,c5]@96 ~@35]/3",
})).s("gm_piano").gain(0.27).pan(0.7)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  A@8 B@8 C D E C@2 F G H I J G 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@2 AK@4 AL@3
>`.pickRestart({
  A: "[c2@13 ~ c2@4 ~@2 c2@13 ~@5 c2@4 ~@2 c2@13 ~@5 c2@4 ~@2 c2@13 ~@5 c2@4 ~@2 c2@13 ~@5 c2@4 ~@2 c2@13 ~@5 c2@4 ~@2 c2@13 ~@5 c2@4 ~@2 c2@13 ~@5 c2@4 ~@2 c2@13 ~@5 c2@4 ~@2 c2@13 ~@5 c2@4 ~@2 g1@13 ~@5 g1@4 ~@2 g1@13 ~@5 g1@4 ~@2 f1@13 ~@5 f1@4 ~@2 g1@13 ~@5 g1@4 ~@2 c2@13 ~@5 c2@4 ~@2 c2@13 ~@5 c2@4 ~@2 c2@4]/8",
  B: "[~@14 c2@4 ~@2 c2@13 ~@5 c2@4 ~@2 g1@13 ~@5 g1@4 ~@2 g1@13 ~@5 g1@4 ~@2 f1@13 ~@5 f1@4 ~@2 g1@13 ~@5 g1@4 ~@2 c2@13 ~@5 c2@4 ~@2 c2@13 ~@5 c2@4 ~@2 c2@13 ~@5 c2@4 ~@2 c2@13 ~@5 c2@4 ~@2 f1@13 ~@5 f1@4 ~@2 f1@13 ~@5 f1@4 ~@2 f1@13 ~@5 f1@4 ~@2 f1@13 ~@5 f1@4 ~@2 g1@14 ~@4 g1@5 ~@2 g1@15 ~@5 g1@5 ~@2]/8",
  C: "c2@13 ~@5 c2@5 ~ c2@13 ~@5 c2@5 ~", D: "g1@13 ~@5 g1@5 ~ g1@13 ~@5 g1@5 ~",
  E: "f1@13 ~@5 f1@5 ~ f1@13 ~@5 f1@5 ~", F: "c2@16 ~@5 g1@2 ~ c2@13 ~@5 f1@2 ~ f#1@2 ~",
  G: "g1@16 ~@5 g1@2 ~ g1@13 ~@5 g1@2 ~ f#1@2 ~", H: "f1@16 ~@5 f#1@2 ~ g1@13 ~@5 d2@2 ~ c#2@2 ~",
  I: "c2@16 ~@5 c2@2 ~ c2@13 ~@5 g1@2 ~ c#2@2 ~", J: "c2@16 ~@5 g1@2 ~ c2@13 ~@5 a1@2 ~ g#1@2 ~",
  K: "f1@16 ~@5 f#1@2 ~ g1@13 ~@5 a#1@2 ~ b1@2 ~", L: "c2@16 ~@5 c2@2 ~ c2@13 ~@5 c#3@2 ~ a#2@2 ~",
  M: "b1@16 ~@5 b1@2 ~ b1@13 ~@5 b1@2 ~ g1@2 ~", N: "a1@16 ~@5 a1@2 ~ a1@9 ~@3 g1@9 ~@3",
  O: "f1@16 ~@5 f1@2 ~ f1@13 ~@5 a1@2 ~ g#1@2 ~", P: "g1@16 ~@6 d1@2 ~ g1@15 ~@5 d2@3",
  Q: "~ c#2@3 c2@16 ~@5 c2@2 ~ c2@13 ~@5 a1@2", R: "~ g#1@2 ~ g1@16 ~@5 d1@2 ~ g1@13 ~@5 g1@2",
  S: "~ f#1@2 ~ f1@16 ~@5 f#1@2 ~ g1@13 ~@5 d2@2", T: "~ c#2@2 ~ c2@16 ~@5 c2@2 ~ c2@13 ~@5 a2@2",
  U: "~ g2@2 ~ c2@16 ~@5 c2@2 ~ c2@13 ~@5 a2@2", V: "~ g2@2 ~ c2@16 ~@5 g1@2 ~ c2@13 ~@5 a1@2",
  W: "~ g#1@2 ~ g1@16 ~@5 g1@2 ~ g1@13 ~@5 g1@2", X: "~ f#1@2 ~ f1@16 ~@5 f1@2 ~ g1@13 ~@5 a#1@2",
  Y: "~ b1@2 ~ c2@16 ~@5 g1@2 ~ c2@13 ~@5 g1@2", Z: "~ c#2@2 ~ c2@16 ~@5 c2@2 ~ c2@13 ~@5 f1@2",
  AA: "~ f#1@2 ~ g1@16 ~@5 g1@2 ~ g1@13 ~@5 g1@2", AB: "~ d1@2 ~ f1@16 ~@5 f1@2 ~ g1@13 ~@5 d2@2",
  AC: "~ c#2@2 ~ c2@16 ~@5 g1@2 ~ c2@13 ~@5 c#3@2", AD: "~ a#2@2 ~ b1@16 ~@5 b1@2 ~ b1@13 ~@5 b1@2",
  AE: "~ g1@2 ~ a1@16 ~@5 a1@2 ~ a1@9 ~@3 g1@8", AF: "~@4 f1@16 ~@5 c1@2 ~ f1@13 ~@5 f1@2",
  AG: "~ f#1@2 ~ g1@16 ~@6 g1@2 ~ g1@15 ~@4", AH: "~ d2@3 ~ c#2@3 c2@16 ~@5 c2@2 ~ c2@13 ~@3",
  AI: "~@2 a1@2 ~ g#1@2 ~ g1@16 ~@5 g1@2 ~ g1@13 ~@3",
  AJ: "[~@2 g1@2 ~ d1@2 ~ f1@16 ~@6 f1@2 ~ f1@10 ~@3 g2@11 ~@4 c2@13 ~@5 c2@4 ~@2 c2@11]/2",
  AK: "~@7 c2@4 ~@2 c2@13 ~@5 c2@4 ~@2 c2@11", AL: "[~@7 c2@4 ~@2 c2@44 ~@4 c2@44 ~@39]/3",
})).s("gm_fretless_bass").gain(0.22).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A B C@2 B@2 C@3 B C@3 B C D E@2 F E G H I H I H I H I H I H J K L K L M K L K L K L K L K L K N O P Q R S T@3 U V ~
>`.pickRestart({
  A: "x ~@6 x ~@2 x ~@2 x ~@5 x ~@2 x ~", B: "~@7 x ~@2 x ~@8 x ~@2 x ~", C: "~@7 x ~@2 x ~@2 x ~@5 x ~@2 x ~",
  D: "~@14 x ~@6 x ~@19 x ~@6", E: "x ~@2 x!3 ~ x", F: "x ~@2 x!2 ~@2 x", G: "x ~@2 x!2 ~@3", H: "x ~@6 x!2 ~@5 x ~",
  I: "x ~@6 x!2 ~ x ~@3 x ~", J: "x ~@21 x ~@2 x ~@5 x ~@13 x ~@2", K: "~@4 x ~@20 x ~@2 x ~@17 x ~",
  L: "~@4 x ~@20 x ~@2 x ~@5 x ~@11 x ~", M: "~@2 x ~@8 x ~@2 x ~@9", N: "~@4 x ~@21 x ~@2 x ~@6 x ~@11",
  O: "~ x ~@6 x ~@20 x ~@2 x ~@15", P: "~@2 x ~@5 x ~@20 x ~@2 x ~@5 x ~@9", Q: "~@2 x ~@5 x ~@18 x ~@5 x ~@14",
  R: "~@13 x ~@17 x ~@5 x ~@10", S: "~@7 x ~@5 x ~@17 x ~@5 x ~@5 x ~@4", T: "~@7 x ~@5 x ~@17 x ~@5 x ~@10",
  U: "~@13 x ~@20 x ~@2 x ~@10", V: "~@7 x ~@5 x ~@34",
})).gain(0.25).pan(0.2)

// drums · rim
const rim = s("rim").struct(`<
  [~ x ~@2 x ~]!15
  [~@4 x ~@12 x ~@6]
  [~ x ~ x]!4
  [~ x ~@2]
  ~@32
  [~@25 x ~@22]
  [~ x ~@23 x ~@22]!4
  ~@3
>`).gain(0.3).pan(0.2)

// drums · snare
const snare = s("sd").struct("<~@20 A B@11 C D@4 E D@11 F G@2 H I ~@3 J K L ~>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@6 x ~@12 x ~@4", D: "~@2 x ~@2 x", E: "~@16 x ~@17 x ~@2 x ~@2 x ~@5 x ~",
  F: "~@8 x ~@12 x ~@2", G: "~@5 x ~@5 x", H: "~@20 x ~@19 x ~@2 x ~@2 x ~", I: "~@5 x ~@3 x ~@38", J: "~@23 x",
  K: "~ x ~@8 x ~@14 x ~@22", L: "~ x ~@46",
})).gain(0.3).pan(0.2)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@22 A B C D E F D A G H I J K L M ~ N O P Q O N R ~ R N S T U V ~@6 W X ~
>`.pickRestart({
  A: "~@11 x ~ x ~@2", B: "~@3 x ~@9 x ~@2", C: "~@3 x ~@12", D: "~@3 x ~@3 x ~@5 x ~@2", E: "~@3 x ~@7 x ~@4",
  F: "~@3 x ~@3 x ~@3 x ~@4", G: "~@7 x ~@3 x ~@4", H: "~@7 x ~@8", I: "~@9 x ~@12 x ~@19 x ~@5",
  J: "~@13 x ~@11 x ~@11 x ~@10", K: "~@25 x ~@17 x ~@4", L: "~@13 x ~@29 x ~@4", M: "~@13 x ~@34",
  N: "~@25 x ~@11 x ~@10", O: "~@43 x ~@4", P: "~@13 x ~@11 x ~@22", Q: "~@25 x ~@22", R: "~@13 x ~@23 x ~@5 x ~@4",
  S: "~@25 x ~@11 x ~@5 x ~@4", T: "~@13 x ~@25 x ~@8", U: "~@41 x ~@5 x", V: "~@17 x ~@11 x ~@17 x", W: "~@23 x",
  X: "~ x ~@10",
})).gain(0.1).pan(0.2)

// drums · open hat
const open_hat = s("oh").struct(`<
  A ~@8 B ~@6 A ~@8 C ~ C@2 ~ C ~@3 D@2 ~ D ~ D ~ D@4 ~ D ~ D ~@2 E@3 ~@2 F ~@4
>`.pickRestart({
  A: "x", B: "~@41 x ~@6", C: "~@15 x", D: "~ x ~@46", E: "~@5 x ~@42", F: "~@5 x ~@18",
})).gain(0.25).pan(0.2)

// drums · crash
const crash = s("cr").struct("<~@21 A ~@16 B ~@14 C ~@5 C ~>".pickRestart({
  A: "x", B: "~ x ~@10", C: "~@13 x ~@34",
})).gain(0.3).pan(0.2)

stack(
  epiano1, synth_strings_1, string_ensemble_1, piano, french_horn, piano_2, bass, kick, rim, snare, hihat, hihat_soft,
  open_hat, crash
)