Strudelify

Top of the World

Lynn Anderson

KeyF majorTempo158 bpm
0:00/0:00
// Top of the World — Lynn Anderson
// 158 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(158/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 · "MIDI"
const bass = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V K W X Y Z AA M N AB P AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS
  AT AS AU AV AW K AX AB AY AZ BA AO N BB BC BD BE BF BG BH AW BI W AB AY BJ BK BL BM AB BC BN BO BP T BQ BR AI AJ BS BT
  BU BV BW N BX AJ BY BZ CA CB
>`.pickRestart({
  A: "f1", B: "g1", C: "a1@8 d2@7 ~", D: "g1 c2", E: "f1@11 ~ f1@4", F: "c2 bb1", G: "f1@3 f1@3 c2@2",
  H: "f2@7 ~ f1@4 g1@4", I: "a1@5 ~ a1@10", J: "bb1@5 ~ bb1@2 c2@8", K: "f1@5 ~ f1@6 c2@4", L: "f2@3 ~ f1@4 g1@4 a1@4",
  M: "bb1@7 ~ f1@4 bb1@4", N: "c2@5 ~ c2@2 g1@4 c2@4", O: "a1@2 a2 e2", P: "d2@5 ~ d2@2 a1@4 d2@4",
  Q: "g1@7 ~ d2@5 ~ g1@2", R: "g2 db2", S: "c2@5 ~ c2@2 g1@5 ~ g1@2", T: "c2 ~ c2@2 d2@2 e2@2", U: "f1@4 ~@2 f1 ~ f1@8",
  V: "c2@7 ~ bb1@7 ~", W: "f2@6 f1 ~ f1@4 g1@4", X: "a1@2 e2 a1", Y: "bb1@5 ~ bb1@2 c2@4 a1@4", Z: "f1@2 ~ f1 c2@4",
  AA: "f2 ~ f1@2 g1@2 a1@2", AB: "a1@5 ~ a1@2 e2@4 a1@4", AC: "g1@2 ~ g1 d2@2 g1@2", AD: "g2@5 ~ g2@2 d2@4 g1@3 ~",
  AE: "c2@2 ~ c2 g1@2 ~ g1", AF: "c2 ~@3 c2@4 d2@4 e2@3 ~", AG: "f1@5 ~ f1@2 c2@7 ~", AH: "f2@5 ~ f1@2 g1@4 a1@4",
  AI: "bb1@6 ~@2 f1@7 ~", AJ: "bb1@5 ~ bb1@2 a1@4 g1@3 ~", AK: "f1@3 ~ c2@2 f1@2", AL: "g1@5 ~ g1@2 c2@6 ~@2",
  AM: "f1@5 ~ f1@2 c2@6 f1@2", AN: "f2@3 ~ f2@3 ~ f2@2 d2@2 c2@4", AO: "bb1@5 ~ bb1@2 f1@4 bb1@4",
  AP: "c2@2 ~ c2 g1@2 c2@2", AQ: "f1@3 c2 f2@2 c2@2", AR: "bb1@3 ~ bb1@4 a1@4 g1@4", AS: "f1@5 ~ f1@2 c2@4 f1@4",
  AT: "g1@5 ~ g1@2 d2@4 c2@3 ~", AU: "g1@5 ~ g1@2 c2@2 d2@2 c2@3 ~", AV: "f1@5 ~ f1@5 ~ f1@4", AW: "c2@7 ~ bb1@8",
  AX: "f2@6 c2 ~ f1@4 g1@4", AY: "bb1@5 ~ bb1@2 c2@4 e2@4", AZ: "f2@4 ~@2 f2@2 c2@5 ~ c2@2",
  BA: "f1@2 ~@2 f1@3 ~ g1@4 a1@4", BB: "a1@6 e2 ~ e2@4 a1@4", BC: "d2@2 ~ d2 a1@2 d2@2",
  BD: "g1@4 ~@2 g1@2 d2@3 ~ d2@4", BE: "g2@2 db2 g1", BF: "c2@4 ~@2 c2@2 g1@5 ~ g1@2",
  BG: "c2@2 ~@2 c2@3 ~ c2@2 a1@2 g1@3 ~", BH: "f1@2 ~ f1 c2@2 f1@2", BI: "f1@2 ~ f1@3 c2@2",
  BJ: "f2@5 ~ f2@2 c2@5 ~ c2@2", BK: "f2@3 d2 c2@2 a1@2", BL: "bb1@3 ~@3 bb1@2 f1@4 bb1@4", BM: "c2@7 ~ g1@4 c2@4",
  BN: "g1@3 ~ d2@3 ~", BO: "g2@6 ~@2 db2@4 g2@3 ~", BP: "c2@5 ~@3 g1@7 ~", BQ: "f1@5 ~ f1@2 c2@6 ~@2",
  BR: "f1@5 ~ f1@2 g1@4 a1@4", BS: "f1@6 ~@2 c2@3 ~ f1@4", BT: "g1@7 ~ d2@4 c2@4", BU: "f1@7 ~ c2@5 ~ c2@2",
  BV: "f2@5 ~ f2@2 c2@4 f1@4", BW: "bb1@7 ~ f1@4 bb1@3 ~", BX: "f2 f1 g1 a1", BY: "f1@5 ~ f1@2 c2@3 ~ f1@4",
  BZ: "g1@7 ~ c2@6 ~@2", CA: "f1@5 ~ f1@2 c2@4 f2@3 ~", CB: "f1@3 ~",
})).s("gm_fretless_bass").gain(0.25)

// other · piano
const piano = note(`<
  A B C D E F G H I J K L M N O P Q R S T U F V H I W K X Y Z O AA AB AC AD AE AF@2 AG AH AI AJ AK AL AM AN AO AP AQ AR
  AS AT E F G H I J K L M N O P Q R S T U F V H I W K X Y Z O AA AB AC AD AE AF@2 AG AH AI AJ AK AL AM AN AO AP AQ AR AS
  AU
>`.pickRestart({
  A: "~ [f3,a3]@3", B: "~ [g3,bb3]@3", C: "~ a3 d3@2, ~ c4@3", D: "~@2 g3@2 [c3,bb3]@3 ~",
  E: "[f3,a3]@3 ~ [f3,a3]@11 ~", F: "[c3,g3] [bb2,f3]", G: "a2 c3 f3 d3", H: "c3@13 ~@3", I: "[a3,c4]@15 ~",
  J: "[bb3,d4]@7 ~ [g3,bb3]@7 ~", K: "f3 a3 c4 a3", L: "f3@3 ~", M: "~@4 [g3,d4]@11 ~", N: "c4 bb3 g3@2",
  O: "~ a3 e3@2", P: "~@4 d3@11 ~", Q: "g3@15 ~", R: "[d3,g3]@7 ~ [db3,g3]@7 ~", S: "c3@4 f3@2 g3@2 f3@4 g3@3 ~",
  T: "g3@2 c3@5 ~", U: "[f3,a3]@2 ~@2 [f3,a3]@11 ~", V: "a2@3 ~ c3@4 f3@4 d3@4", W: "[g3,bb3] c4", X: "f3@13 ~@3",
  Y: "~ f3 bb2@2", Z: "~ bb3 c3@2", AA: "~@2 d3@5 ~", AB: "g3 d3", AC: "[db3,g3]@15 ~", AD: "c3@2 f3 g3 f3@2 g3@2",
  AE: "[c3,e3] ~@3", AF: "f3@7 ~ f3@7 ~", AG: "bb3@7 ~ bb3@7 ~", AH: "bb3@8 g3@7 ~", AI: "f3 c4", AJ: "bb3@7 ~ c4@8",
  AK: "f3@2 a3 c4", AL: "~@4 f3@11 ~, eb4@15 ~", AM: "bb3@3 ~ bb3@12", AN: "~@4 c4@11 ~", AO: "[f3,c4]",
  AP: "~ bb3 c4 d4", AQ: "c4 f3", AR: "~@4 [g3,bb3]@11 ~", AS: "[f3,a3] d4 c4 a3", AT: "bb3 g3 c3@2", AU: "f3 c3 f2 ~",
})).s("gm_piano").gain(0.36)

// chords · piano
const piano_2 = note(`<
  A B C D A E F@2 G H I@2 J K L M N O P@2 A E F@2 Q R S@2 T U V M W X Y@2 Z AA AB AC AD AE AF@2 AG AH AI AJ AK AL AM AN
  A E F@2 G H I@2 J K L M N AO P@2 A E F@2 Q R S@2 T U V M W X Y@2 Z AA AB AC AD AE AF@2 AG AH AI AJ AK AL AP@2
>`.pickRestart({
  A: "~@3 a4 g4@2 f4@2, c4@15 ~", B: "~@3 d5 c5@2 bb4@2, e4", C: "c5@2 bb4 a4, ~@8 gb4@7 ~",
  D: "[f4,bb4]@2 a4 g4, ~@4 e4@3 ~", E: "[c4,e4] [d4,f4] [bb3,d4] [c4,e4]",
  F: "[[a3,c4]@21 ~@3 [f4,a4]@4 [g4,bb4]@4]/2", G: "c5@3 ~ c5@3 ~ c5@4 a4@4, e4@7 ~", H: "g4@3 a4 bb4@2 g4@2, f4 e4",
  I: "[f4@11 ~ [g4,bb4]@2 [a4,c5]@2, a4@5 ~@3]/2", J: "[bb4,d5]@7 ~ [bb4,d5]@4 [g4,bb4]@4",
  K: "[e4,g4]@3 ~ g4@2 d5@2, ~@8 e4@7 ~", L: "[e4,c5]@8 bb4@3 ~ c5@4, ~@8 g4@7 ~", M: "[gb4,a4]@2 [e4,g4] [gb4,a4]",
  N: "~@4 [g4,bb4]@3 ~ [g4,bb4]@4 a4@4", O: "bb4 a4 g4 f4, f4@3 ~", P: "[[bb3,c4]@21 ~@3 [d4,f4]@4 [e4,g4]@4]/2",
  Q: "c5@3 ~ c5@3 ~ c5@4 a4@4, e4@15 ~", R: "g4 a4 bb4 d5, d4@8 e4@7 ~",
  S: "[[f4,a4]@5 ~ [g4,bb4] [a4,c5], c5@23 ~@9]/2", T: "[bb4,d5]@2 d5 bb4", U: "[e4,g4]@7 ~ g4@4 d5@4, ~@4 e4@3 ~",
  V: "[e4,c5]@2 bb4 c5, ~@8 g4@7 ~", W: "bb4@4 bb4@3 ~ bb4@4 a4@4, [f4,g4]@15 ~", X: "[f4,g4,bb4] a4 g4 f4",
  Y: "[c4@19 ~ c4@4 f4@4 g4@4, bb3@15 ~@17]/2", Z: "~@4 [c4,a4]@3 ~ [c4,a4]@3 ~ [c4,a4]@4",
  AA: "[d4,bb4] [c4,a4] [bb3,g4] [a3,f4]", AB: "~@4 [f4,d5]@3 ~ [f4,d5]@3 ~ [f4,d5]@4",
  AC: "[g4,eb5] [f4,d5] [eb4,c5] [d4,bb4]", AD: "[f4,a4]@4 [a4,c5]@3 ~ [a4,c5]@4 [f4,a4]@4",
  AE: "g4@4 a4@4 [d4,bb4]@4 [f4,d5]@3 ~, d4@3 ~@5", AF: "[[f4,d5] c5@5 [g4,bb4] [a4,c5], ~@2 a4@9 ~@5]/2",
  AG: "[bb4,d5]@2 [a4,c5] [bb4,d5]", AH: "[c5,e5]@2 [bb4,d5] [c5,e5]", AI: "f5@3 ~ f5@3 ~ f5@2 c5@6, a4@7 ~ a4@8",
  AJ: "d5@7 ~ [a4,c5]@4 [g4,bb4]@4, bb4@3 ~@13", AK: "[f4,a4] [a4,c5] [g4,bb4] [f4,a4]",
  AL: "[d4,g4]@2 [d4,f4] [c4,e4]", AM: "f4@15 ~", AN: "[d4,f4,g4]@8 [bb3,c4]@7 ~", AO: "bb4 a4 g4 f4, f4@11 ~@5",
  AP: "[f4@7 ~]/2",
})).s("gm_piano").gain(0.48).pan(0.6)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  A B C D A E F@2 G H I@2 J B K L M N O@2 A E P@2 G Q I@2 J R@2 L J N S B A T J U A M V@2 J B W@2 X Y A Y A E F@2 G H
  I@2 J B K L M N O@2 A E P@2 G Q I@2 J R@2 L J N S B A T J U A M V@2 J B W@2 X Y Z@2
>`.pickRestart({
  A: "[f3,a3,c4]", B: "[g3,bb3,e4]", C: "f4 gb4, [a3,c4]", D: "d4 e4, [bb3,g4]", E: "[g3,c4,e4] [f3,bb3,d4]",
  F: "[[f3,a3,c4]@31 ~]/2", G: "[a3,c4,e4]", H: "[f3,bb3,d4]@7 ~ [g3,bb3,e4]@8", I: "[f4@3 eb4, [a3,c4]]/2",
  J: "[f3,bb3,d4]", K: "a3 g3, [c4,e4]", L: "[a3,d4,gb4]", M: "[g3,bb3,d4]", N: "[f3,bb3,db4]",
  O: "[[f3,d4] [g3,e4], bb3@31 ~]/2", P: "[f3,a3,c4]/2", Q: "[f3,bb3,d4] [g3,bb3,e4]", R: "[[g3,bb3] [a3,c4], e4]/2",
  S: "[f3,bb3,d4]@15 ~", T: "[bb3,d4] [a3,c4]@3, f3", U: "[g3,eb4] [f3,d4]@3, bb3", V: "[c4 [c4,eb4], [f3,a3]]/2",
  W: "[[a3,c4] [bb3,d4], f4]/2", X: "[a3,c4,f4]", Y: "[f3,d4] [g3,e4], bb3", Z: "[[f3,a3,c4]@27 ~@5]/2",
})).s("gm_string_ensemble_2").gain(0.21).pan(0.1)

// chords · epiano2
const epiano2 = note(`<
  A@2 B C D ~@14 E F ~@2 G@2 ~@2 H I ~@6 J@3 ~@4 K L M ~@5 N@3 ~@14 O@3 P@3 ~ Q@2 R ~@6 S@3 ~@2 T@2 U@2 V W X Y Z AA@2
  AB
>`.pickRestart({
  A: "[~@6 c5@18 ~@4 [g5,bb5]@3 ~, a5@23 ~@9, ~ g5@11 ~@4, ~ f5@5 ~@2]/2", B: "[g5,bb5]@7 ~ [g5,bb5]@4 [gb5,a5]@3 ~",
  C: "[f5,bb5]@5 ~@9 g5@2, ~@6 f6@9 ~, ~@4 c6@3 ~, ~@5 d6@3, ~@3 a5", D: "g5@2 a5@13 ~, f5@15 ~",
  E: "~@8 g5@2 ~@2 g5@2 f5 ~, ~@4 c5@11 ~, ~@3 f5@3 ~@2, ~@5 a5@2 ~", F: "g5 a5@7, [c5,f5]",
  G: "[~@6 c5@19 ~@7, ~ f4@11 ~@4, ~ g4@5 ~@2]/2", H: "~@4 d5 c5 d5 c5, ~@2 a5@13 ~, ~@4 g5@11 ~, ~@6 f5@9 ~",
  I: "~ f5@14 ~",
  J: "[~@12 a5@2 ~@2 g5@2 a5@19 ~@11, ~ f4@7 ~@16, ~ c5@3 ~@8, ~@6 f5@7 ~ f5@23 ~@11, ~@8 g5@2 c6@5 ~ c6@20 ~@12]/3",
  K: "~@5 f5 g5 f5", L: "g5@4 bb5@2 g5@4 f5 ~ f5@2 ~@2", M: "f5@7 ~",
  N: "[~@12 g5 ~@3 g5@2 ~@2 g5@2 ~@4 d5@2 c5@2 d5@2 c5@12 ~@4, ~@3 d6@4 f5@3 ~ f5@9 ~@4, ~@8 c6@7 ~ c6@24 ~@8, ~@10 a5@5 ~@3 a5@22 ~@8, ~@3 g5@2 ~]/3",
  O: "[~@4 g5 ~ a5 ~ g5 a5@7 ~@8, ~ f4@6 ~@17, ~@2 c5@5 ~@17, ~@6 f5@6 ~@2 f5@19 ~@15, ~@10 c6@5 ~ c6@16 ~@16]/3",
  P: "[~@10 c5@2 d5@2 ~@8 c5@15 ~@11, ~@7 f5@11 ~@6, ~@5 d5@4 ~@3]/3",
  Q: "[~@18 g5@2 f5@3 ~ [f5,g5]@4 a5@2 g5@2, ~@5 d6@7 ~@4, ~@3 c6@3 c6@2, ~@14 a5@9 ~@9]/2", R: "f5@13 ~@3",
  S: "[~@6 a5 ~ g5 a5@8 ~@7, ~ f4@7 ~@16, ~ c5@3 ~@8, ~@6 f5@7 ~ f5@18 ~@16, ~@8 g5@2 c6@5 ~ c6@17 ~@15]/3",
  T: "[~@6 f5@4 ~@4 f5@5 ~ g5@2 f5@2 g5@4 f5 ~@3, ~@2 c5@6 ~@2 c5@5 ~@17, ~@2 d5@3 ~ d5@4 ~@6]/2",
  U: "[f5@4 g5@2 f5@2 g5@4 bb5@2 g5@4 f5@2 d5@2 c5 ~ c5@4 eb5@2 c5 ~]/2", V: "c5@3 ~ bb4@8 ~@4",
  W: "~@4 c5@2 d5@2 f5@2 c5@2 d5@2 f5 ~", X: "g5@4 bb5@2 g5@4 f5 ~ g5@2 ~@2", Y: "f5@3 ~ c5@2 d5@2 f5@2 c5@2 d5@2 f5@2",
  Z: "c5@2 d5@2 f5@3 ~ g5@6 f5 ~",
  AA: "[g5@4 f5@3 ~ d5@2 f5 ~ g5 ~ f5@5 ~@5 g5@2 f5@2 [g5,c6]@2 f5 ~, ~@10 c6@3 ~@3, ~@11 a5@2 ~@3]/2", // C5
  AB: "g5 a5@5 ~@2, [f5,c6]@3 ~", // F5
})).s("gm_epiano2").gain(0.11).pan(0.1)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@11 A B C D E F G H@5 I J K L@2 M N O P Q@2 R@2 S T@2 U V W@3 X Y Z AA AB AC AD@4 AE I J K AF AG M N O P Q@2 AH@4 AE
  I J K AI@2 M N O P AJ AK@3 S AL@2 U V AM@3 X Y Z AA AB AC AN@2
>`.pickRestart({
  A: "~@4 a5@4 g5@3 f5@4 ~", B: "d5@7 f5", C: "e5 d5 c5 bb4", D: "c5@13 ~ e5@2", E: "d5@4 c5@3 bb4@4 ~ a4@4", F: "bb4",
  G: "bb4@4 a4@4 g4@3 f4@4 ~", H: "[c5@17 ~@2 c5]/5", I: "f5 g5 a5 d6", J: "c6", K: "bb5",
  L: "[~@5 a6 g6 f6, a5@11 ~@5]/2", M: "d6@13 ~ f6@2", N: "e6 d6 c6 bb5", O: "c6@13 ~ e6@2", P: "d6 c6 bb5 a5",
  Q: "[bb5@5 a5 g5 f5]/2", R: "[c6@19 ~ c6@2 d6@2 c6@2 bb5@2 a5@2 g5@2]/2", S: "f5 a5@3",
  T: "[bb5@4 a5@4 g5@3 f5@8 ~ d6@12]/2", U: "eb6 d6 c6 bb5", V: "a5 c6@2 a5",
  W: "[g5@4 a5@4 bb5@4 d6@8 c6@15 ~ [c6,c7]@4 [bb5,bb6]@4 [c6,c7]@4]/3", X: "[d6,d7]@2 [c6,c7] [d6,d7]",
  Y: "[e6,e7]@2 [d6,d7] [e6,e7]", Z: "[f6,f7] ~@3 [f6,f7] ~@3 [f6,f7]@2 [c6,c7]@6", AA: "[d6,d7]@2 [c6,c7] [bb5,bb6]",
  AB: "[a5,a6] [c6,c7] [bb5,bb6] [a5,a6]", AC: "[g5,g6]@2 [f5,f6] [e5,e6]", AD: "[[f5,f6]@53 ~@11]/4", AE: "~@3 c5",
  AF: "a5@15 ~", AG: "a5 a6 g6 f6", AH: "[c6@59 ~@5]/4", AI: "[a5@5 a6 g6 f6]/2", AJ: "bb5@15 ~",
  AK: "[bb5@4 a5@4 g5@3 f5@4 c6@19 ~@2 c6@2 d6@2 c6@2 bb5@2 a5@2 g5@2]/3", AL: "[bb5 a5 g5 f5@2 d6@3]/2",
  AM: "[g5 a5 bb5 d6@2 c6@4 [c6,c7] [bb5,bb6] [c6,c7]]/3", AN: "[[f5,f6]@13 ~@3]/2",
})).s("gm_string_ensemble_1").gain(0.14).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  [x ~@2 x!2 ~@3]!35
  x
  [x ~@2 x!2 ~@3]!47
  x
  [x ~@2 x!2 ~@3]!10
  [x!2]
  [x ~@2 x!2 ~@3]!4
  [x!2]
>`).gain(0.26)

// drums · rim
const rim = s("rim").struct("<[~@3 x]!20 [~ x ~ x]!15 [~ x ~@6] ~@64>").gain(0.26)

// drums · snare
const snare = s("sd").struct("<~@35 [~@3 x ~@4] [~ x ~ x]!16 [~@3 x]!16 [~ x ~ x]!15 [~ x ~@2] [~ x ~ x]!15 ~>")
  .gain(0.21)

// drums · low tom
const low_tom = s("lt").struct("<~@3 [~@5 x ~@2] ~@79 [~@6 x!2] ~@16>").gain(0.23)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A@2 B C B C D C@2 E D ~ C@2 D E D E B ~@3 F ~ G ~ D ~ C ~@3 C ~@2 H ~@16 C ~ C ~@8 E ~@2 F ~@2 E C ~ G C ~ I D C ~ C D
  ~ C@2 ~@16
>`.pickRestart({
  A: "~ x!2 ~@2 x ~ x", B: "~ x ~@3 x ~ x", C: "~ x ~@6", D: "~ x ~@3 x ~@2", E: "~@5 x ~@2", F: "~ x ~@5 x",
  G: "~@7 x", H: "~@3 x ~@2 x!2", I: "~@5 x ~ x",
})).gain(0.13)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 [~@3 x] ~@31 [~@5 x!3] ~@47 [~@5 x ~@2] ~@16>").gain(0.23)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~ A@2 ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~@20 A ~@2 A ~ A ~ A ~@2 A ~@2 A ~ A ~@2 A ~@2 A ~@2 A ~@2
  A ~@19 B
>`.pickRestart({
  A: "~@7 x", B: "~ x",
})).gain(0.21)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@15 A ~@15 A ~@7 A ~@5 A ~@33 A ~@7 A ~ A ~ A ~ A@2>".pickRestart({
  A: "x",
})).gain(0.21)

// drums · ride
const ride = s("rd").struct("<~@36 A B@7 A B@5 C B ~@32 A B@7 C B C B C B C ~>".pickRestart({
  A: "~@2 x!6", B: "x!8", C: "~ x!7",
})).gain(0.26)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 [~@3 x]!16 [~ x ~ x]!16 [x!4]!63 x>").gain(0.18)

// drums · tambourine · soft notes
// … 9 more lines

More by Lynn Anderson