Strudelify

Grapefruit - Juicy Fruit

Jimmy Buffett

KeyD majorTempo124 bpm
0:00/0:00
// Grapefruit - Juicy Fruit — Jimmy Buffett
// 124 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 96 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/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 · acoustic guitar nylon · "Guitar"
const acoustic_guitar_nylon = note("<~@33 A@5 B@4 C@5 ~@18 D E@4 F@2 G@7 ~@17>".pickRestart({
  A: "[[g4,b4]@23 ~ c#5@36 f#4@33 ~@3 b4@24, ~@23 a4@72 g4@24 ~]/5", // G
  B: "[~@24 f#4@46 ~ [g4,b4]@24 ~, ~@12 a4@53 ~@31]/4", // G
  C: "[~@24 c#5@19 ~@5 f#4@20 ~@4 b4@41 ~@7, ~@11 a4@60 g#4@40 ~@9]/5",
  D: "[g4,b4]@2 [g4,b4]@3 [g4,b4]@3 [g4,b4]@3 [g4,b4], ~@4 [d4,e4] ~@5 [d4,e4] ~@5 [d4,e4] ~@5 [d4,e4] ~", // G Dsus2
  E: "[a4@4 [c#4,e4] ~@5 [c#4,e4] ~@5 [c#4,e4] ~@5 [c#4,e4,f#4] ~@5 [c#4,e4,f#4] ~@5 [c#4,e4,f#4] ~ f#4@4 [f#4,a4]@6 [f#4,a4]@6 [f#4,a4]@6 [f#4,a4]@6 [f#4,a4]@6 [c#4,e4,f#4,a4] ~ b4@4 [g4,b4]@6 [g4,b4]@6 [g4,b4]@6 ~ a4, c#5@36 ~@35 g4@5 ~@20, ~@4 a4@6 a4@6 a4@6 a4@6 a4@6 a4@6 [c#4,e4] ~@5 [c#4,e4] ~@5 [c#4,e4] ~@5 [c#4,e4] ~@5 [c#4,e4] ~@11 [d4,e4] ~@5 [d4,e4] ~@5 [d4,e4] ~@5 [d4,e4,g4,b4]@2]/4", // C#m F#7 F#m F#m7 G C#m Dsus2 Em7
  F: "[~@4 [c#4,e4] ~@5 [c#4,e4] ~@5 [c#4,e4] ~@5 [c#4,e4] f#4@5 [f#4,a4]@6 [f#4,a4]@6 [f#4,a4]@6 [f#4,a4]@2, c#5 ~, ~@4 a4@6 a4@6 a4@6 a4@6 [c#4,e4] ~@5 [c#4,e4] ~@5 [c#4,e4] ~@5 [c#4,e4] ~]/2", // C#m F#m C#m
  G: "[~@4 [f#4,a4]@6 [f#4,a4]@5 [f#4,a4]@6 [c#4,e4,f#4,a4] ~@2 b4@23 c#5@36 ~ f#4@35 b4@42 ~@7, ~@4 [c#4,e4] ~@5 [c#4,e4] ~@4 [c#4,e4] ~@7 g4@24 a4@72 g#4@36 ~@13]/7", // F#m F#m7 C#m
})).s("gm_acoustic_guitar_nylon").gain(0.4)

// chords · electric guitar jazz · "Guitar"
const electric_guitar_jazz = note(`<
  ~@9 A@2 B@2 C@2 D@4 E@4 F@2 G@2 H@4 I@2 ~@3 J K L@3 M N@2 O P@2 ~@2 Q@4 R@2 S@2 F@2 S@2 T@2 U@2 ~@2 V@2 W X Y Z@3 AA@4
  ~@2 AB@2 AC@6 AD@6 ~
>`.pickRestart({
  A: "[[d4,f#4]@13 ~@3]/2", B: "[[d4,f#4]@3 ~]/2", C: "[[c#4,e4]@17 ~@7]/2", D: "[[d4,f#4]@35 ~@12 [d4,f#4]@36 ~@13]/4",
  E: "[[d4,f#4]@11 ~@5 e4@12 ~@4, ~@47 c#4@35 ~@14]/4", F: "[[d4,f#4]@37 ~@11]/2", G: "[f#4@13 ~@3, d4@37 ~@11]/2",
  H: "[f#4@39 e4 ~@7 [c#4,e4]@37 ~@12, d4@37 ~@59]/4", I: "[f#4@31 ~@17, d4@29 ~@19]/2",
  J: "~@3 d5@7 ~ c#5@2 a4@5 f#4@6", K: "~ d4@11 ~@12",
  L: "[~@2 a4@13 ~ f#4@4 ~ f#4@14 a4@4 b4@4 ~@2 d5@12 b4@6 a4@8 ~]/3", M: "g4@11 f#4@12 ~",
  N: "[e4@21 ~@2 c#5@18 a4@6 ~]/2", O: "f#4@19 ~@5", P: "[e4@29 g#4@6 ~ b4@6 ~@6]/2",
  Q: "[[d4,f#4]@37 ~@10 [d4,f#4]@35 ~@14]/4", R: "[[c#4,e4]@35 ~@13]/2", S: "[[d4,f#4]@35 ~@13]/2",
  T: "[[c#4,e4]@3 ~]/2", U: "[f#4@39 e4 ~@8, d4@31 ~@17]/2", V: "[~@21 d5@8 c#5@6 a4@6 ~ f#4@6]/2", W: "e4@17 g4@7",
  X: "f#4@3 e4", Y: "a4", Z: "[~@3 a4@8 ~ f#4@6 a4@5 d5@6 c#5@7 a4@6 f#4@5 d4@13 ~@12]/3",
  AA: "[~@3 c#5@6 d5@3 c#5@4 a4@5 f#4@6 e4@2 d4@10 e4@2 f#4@6 e4@10 g#4@2 ~ b4@17 c#5@3 ~ e4@14 ~]/4",
  AB: "[[d4,f#4]@19 ~@5]/2", AC: "[[d4,f#4]@36 ~@11 [c#4,e4]@37 ~@12 f#4@38 ~@10, ~@95 d4@36 ~@13]/6",
  AD: "[[c#4,e4]@37 ~@11 f#4@28 ~@2 f#4@49 ~@17, ~@47 d4@28 ~@3 d4@46 ~@20]/6", // C#m
})).s("gm_electric_guitar_jazz").gain(0.4).pan(0.6)

// chords · epiano2 · "Piano"
const epiano2 = note(`<
  ~ A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@6 I@2 J@6 K@2 L@2 M N O P Q R S T@2 U V W X Y Z AA AB@2 AC@2 AD@2 AE@2 AF@6 AG@3 AH S
  AI AJ AK AL AM AN AO AP AQ AR AS Z ~ AT@2 AU@4 AV@4 AW@4 ~
>`.pickRestart({
  A: "[[c#4,f4]@5 ~ [d4,f#4]@40 a2@2, [d2,d3,a3]@47 ~]/2", B: "[[a3,c#4,f4]@5 ~ [a3,d4,f#4]@40 e3@2, [d2,d3]@47 ~]/2",
  C: "[[a3,c4,d#4]@5 ~ [a3,c#4,e4]@40 a2@2, a2@23 ~]/2", D: "[f4@3 [d4,f#4]@20 a2, a3@47 ~, [d2,d3]@15 ~, c#4 ~@11]/2",
  E: "[[c#4,f4]@5 ~@37 d4@4 a2@2, [d2,d3,a3]@23 ~, ~@3 f#4@20 ~, ~ d4@6 ~, ~@20 e4@3 ~]/2", // C# D5
  F: "[[c#4,f4]@5 ~@37 d4@4 e3@2, [d2,d3,a3]@47 ~, ~@6 f#4@41 ~, ~ d4@6 ~, ~@40 e4@7 ~]/2", // C# D5
  G: "[[c4,d#4]@5 ~ [c#4,e4]@40 a2@2, [a2,a3]@23 ~]/2", // Cm C#m A
  H: "[[c#4,f4]@5 ~ d4@16 d4@6 d4@6 d4@6 ~@6 a2@2 f4@5 ~ d4@22 ~@3 d4 ~@2 d4 ~@5 d4@2 ~@4 a2@2 ~@6 d4@16 ~@24 e3@2, [d2,d3]@42 a3@46 ~@2 a3@34 d4@9 f#4@11, a3@40 d4@4 ~@4 [d2,d3]@43 ~@6 d2@47, ~@6 f#4@39 ~@9 f#4@28 e4@8 ~@6 f4@5 ~ f#4@28 d3@8 d4@2 a3@4, ~@34 e4@11 ~@3 c#4@3 ~@45 c#4 d3@21 d4@2 d3@6 a3@10 e4@7 ~]/6", // C# D
  I: "[~ g2@2 ~@3 c#4@10 ~@26 a3@4 a2@2, a3@18 a3@9 ~ a3@6 a3@6 b3@7 ~, d#4@5 ~ e4@41 ~, c4@3 ~@13 c#4@6 c#4@8 c#4@17 ~, ~ a2@23 a2@22 ~@2]/2",
  J: "[f4@5 ~@29 d4@6 ~@6 a2@2 ~@34 d4@6 ~@6 a2@2 [c#4,f4]@5 ~ d4@16 ~@24 e3@2, d2@20 d4 a3@6 d4@9 d3@8 d4 a3@17 d4@3 d3@4 d4@3, d3@18 d4@4 a3@2 d3@23 ~ d3@22 a3@6 d4@2 a3@4 e4@13 ~ d3@22 d4@2 d3@6 a3@18, a3@6 d4@10 e4@12 d4@2 a3@4 e4@13 ~ [c#4,f4]@5 ~ f#4@41 ~@7 f#4@42, c#4@3 ~@3 f#4@41 ~@2 d2@46 ~ d2@40 e4@8]/6", // C#
  K: "[[c4,d#4]@5 ~ c#4@10 ~@12 a3@6 ~@6 a3@6 a2@2, a2@15 ~, a3@9 a3@3 e3@11 ~, ~@6 e4@41 ~, ~@16 c#4@6 c#4@12 a3@2 c#4@11 ~]/2", // Cm
  L: "[f4@5 ~@35 d4@2 ~@4 b2@2, d2@20 e4 d4@3, d3@9 d4@2 a3 d3@3 e4@2 d3@7, a3@3 d4@5 e4@6 d4@4 a2@6, c#4@3 ~@3 f#4@22 [a3,f#4]@20]/2", // D
  M: "e2@4 [b3,d4,e4,g4] ~@5 [b3,d4,e4,g4] ~@5 [b3,d4,e4,g4] ~ a2@4 [b3,d4,e4,g4] ~, ~@3 f#2@3 g2@3 ~@2 b2", // Em7
  N: "a2@4 [c#4,e4,a4] ~ c#3@4 [c#4,e4,a4] ~ e3@4 [c#4,e4,a4] ~ f#3@4 [c#4,e4,a4] ~", // A
  O: "e2 ~@3 [a3,b3,d4,e4] ~ d3 ~@3 [a3,d4,f#4] ~@2 d3 ~@2 [a3,b3,f#4] ~@5 [a3,b3,d4,f#4] ~", // Asus4 D B7 Bm7
  P: "[d2,d3]@2 ~@2 [a3,b3,d4,f#4] ~ d3@2 ~@2 [a3,b3,d4,f#4] ~ d3@2 ~@2 [a3,b3,d4,f#4] ~ d3@3 ~ [a3,b3,d4,f#4] ~", // D Bm7
  Q: "[e2,e3]@4 [b3,d4,e4,g4] ~ f#2@4 [b3,d4,e4,g4] ~ g2@4 [b3,d4,e4,g4] ~ a2@2 ~ [b3,d4,e4] g4 ~", // E Em7 E7
  R: "a2@3 ~ [a3,c#4,e4,a4] ~ a2@3 ~ [a3,c#4,e4,a4] ~ a2@3 ~ [a3,c#4,e4,a4] ~ a2 ~@3 [a3,c#4,e4,a4] ~", // A
  S: "[d2,d3]@3 ~ [a3,b3,d4,f#4] ~ d3@2 ~@2 [a3,b3,d4,f#4] ~ d3@3 ~ [a3,b3,d4,f#4] ~ d3@2 ~@2 [a3,b3,d4,f#4] ~", // D Bm7
  T: "[[d2,d3]@3 ~ [a3,b3,d4,f#4] ~ [d2,d3]@2 ~@2 [a3,b3,d4,f#4] ~ [d2,d3]@2 ~@2 [a3,b3,d4,f#4] ~ d3@3 ~ [a3,b3,d4,f#4] e2@4 ~ [b3,d4,e4,g4] ~ f#2@4 [b3,d4,e4,g4] ~@5 [b3,d4,e4,g4] ~ b2@4 [b3,d4,e4,g4] ~, ~@6 g2 ~]/2", // D Bm7 D Bm7 D Bm7 Em7
  U: "a2@4 [c#4,e4,a4] ~ a2@3 ~ [c#4,e4,a4] ~ a2@3 ~ [c#4,e4,a4] ~ a2 ~@3 [c#4,e4,a4] ~", // A
  V: "[d2,d3]@3 ~ [a3,b3,d4,f#4] ~ [d2,d3]@2 ~@2 [a3,b3,d4,f#4] ~ [d2,d3]@2 ~@2 [a3,b3,d4,f#4] ~ d3@2 ~@2 [a3,b3,d4,f#4] ~", // D Bm7 D Bm7 D Bm7
  W: "[d2,d3]@2 ~@2 [a3,b3,d4,f#4] ~ [d2,d3]@2 ~@2 [a3,b3,d4,f#4] ~ [d2,d3]@2 ~@2 [a3,b3,d4,f#4] ~ [d2,d3]@2 ~@2 [a3,b3,d4,f#4] ~", // D Bm7 D Bm7 D Bm7 D Bm7
  X: "[e2,e3]@3 ~ [g#3,b3,e4] ~ [e2,e3]@2 ~@2 [g#3,b3,e4] ~ [e2,e3]@3 ~ [g#3,b3,e4] ~ [e2,e3]@3 ~ [g#3,b3,e4] ~", // E
  Y: "[e2,e3]@4 [g#3,b3,e4] ~ [e2,e3]@4 [g#3,b3,c4,e4] ~ [e2,e3]@4 [g#3,b3,e4] ~ [e2,e3]@4 b2@2", // E
  Z: "[a2,a3,c#4,e4] ~@11", AA: "~@11 a2", AB: "[[c#4,f4]@5 ~ [d4,f#4]@40 a2@2, a3@47 ~, [d2,d3]@11 ~]/2",
  AC: "[[c#4,f4]@5 ~ f#4@40 e3@2, a3@47 ~, d3@43 ~@5, d2@41 ~@7, ~@3 d4@19 ~@2]/2", // C#
  AD: "[[c4,d#4]@3 [c#4,e4]@19 ~ a2, a3@11 ~, a2@19 ~@5]/2", // Cm C#m
  AE: "[[c#4,f4]@3 d4@16 ~@2 d4@2 a2, [d2,d3,a3]@43 ~@5, ~@2 f#4@13 ~, ~@40 e4@5 ~@3]/2", // C# D5
  AF: "[f4@6 d4@31 ~@5 d4@4 a2@2 f4@6 d4@31 ~@5 d4@4 ~@2 [c4,d#4]@6 e4@39 ~ a2@2, [d2,a3]@44 ~@4 [d2,d3]@41 ~@7 a2@41 ~@7, d3@21 ~@2 a3@22 ~@2 a3@24 ~, c#4@4 ~@2 f#4@36 ~@12 f#4@37 ~@53, ~@40 e4@5 ~@3 c#4@4 ~@36 e4@5 ~@9 c#4@33 ~@9]/6", // Cm D5 D
  AG: "[f4@6 [d4,f#4]@28 ~@3 [b5,c#6,d6] [g5,a5] [d5,e5,f#5] [b4,c#5] [f#4,g4,a4] [c#4,d4,e4] [g3,a3,b3] f#3 b2@2 e2@5 [b3,d4,e4,g4] ~ f#2@4 [b3,d4,e4,g4] ~@5 [b3,d4,e4,g4] ~ b2@4 [b3,d4,e4,g4] ~, [d2,d3]@35 ~@25 g2@6 ~@6, a3@11 ~@13, c#4 ~@17]/3", // D Bm Gsus2 D Bsus2 F#m C#m G …
  AH: "a2@4 [a3,c#4,e4,a4] ~ e3@3 ~ [a3,c#4,e4,a4] ~@5 [a3,c#4,e4,a4] ~ e3 ~@3 [a3,c#4,e4,a4] ~", // A
  AI: "[d2,d3]@3 ~ [a3,b3,d4,f#4] ~ [d2,d3]@2 ~@2 [a3,b3,d4,f#4] ~ [d2,d3]@3 ~ [a3,b3,d4,f#4] ~ d3@4 [a3,b3,d4,f#4] ~", // D Bm7 D Bm7 D Bm7
  AJ: "e2@4 [b3,d4,e4,g4] f#2@5 [b3,d4,e4,g4] ~@5 [b3,d4,e4,g4] ~ b2@4 [b3,d4,e4,g4] ~, ~@2 g2 ~", // Em7
  AK: "a2@3 [a3,c#4] [e4,a4] ~ a2@3 ~ [a3,c#4,e4,a4] ~ a2@3 ~ [a3,c#4,e4,a4] ~ a2 ~@3 [a3,c#4,e4,a4] ~", // A A5 A
  AL: "[d2,d3]@3 [a3,b3] [d4,f#4] ~ [d2,d3]@2 ~@2 [a3,b3,d4,f#4] ~ d3@2 ~@2 [a3,b3,d4,f#4] ~ d3@2 ~@2 [a3,b3,d4,f#4] ~", // D Asus2 D Bm7
  AM: "[d2,d3]@4 [a3,b3,d4,f#4] ~ [d2,d3]@3 ~ [a3,b3,d4,f#4] ~ [d2,d3]@3 ~ [a3,b3,d4,f#4] ~ [d2,d3]@3 ~ [a3,b3,d4] ~, ~@21 f#4@2 ~", // D Bm7 D Bm7 D Bm7 D Bm7
  AN: "[e2,e3]@3 ~ [b3,d4,e4,g4] ~ [e2,e3]@3 ~ [b3,d4,e4,g4] ~ [e2,e3]@2 ~@2 [b3,d4,e4,g4] ~ e3@4 [b3,d4,e4,g4] ~", // E Em7 E Em7 E Em7
  AO: "a2@3 ~ [a3,c#4,e4] ~ a2@3 ~ [a3,c#4,e4] ~ a2@3 ~ [a3,c#4,e4] ~ a2 ~@3 [a3,c#4,e4] ~", // A
  AP: "[d2,d3]@3 ~ [a3,b3,d4,f#4] ~ [d2,d3]@2 ~@2 [a3,b3,d4,f#4] ~ d3@3 ~ [a3,b3,d4,f#4] ~ d3@2 ~@2 [a3,b3,d4,f#4] ~", // D Bm7 D Bm7
  AQ: "[d2,d3]@3 ~ [a3,b3,d4,f#4] ~ [d2,d3]@3 ~ [a3,b3,d4,f#4] ~ [d2,d3]@3 ~ [a3,b3,d4,f#4] ~ d3@3 ~ [a3,b3,d4,f#4] ~", // D Bm7 D Bm7 D Bm7
  AR: "[e2,e3]@3 ~ [g#3,b3,e4] ~ [e2,e3]@2 ~@2 [g#3,e4] ~ e3@2 ~@2 [g#3,b3,e4] ~ e3@3 ~ [g#3,b3,e4] ~, ~@5 b3 ~@6", // E C#m E
  AS: "[e2,e3]@4 [g#3,b3,e4] ~ [e2,e3]@3 ~ [g#3,b3,e4] ~ [e2,e3]@3 ~ [g#3,b3,e4] ~ [e2,e3]@4 b2@2", // E
  AT: "[[c#4,f4]@5 ~@39 a3 ~ a2@2, [d2,d3,a3]@15 ~, ~@2 f#4@13 ~, ~@3 d4@18 d4@2 ~, ~@20 e4@3 ~]/2", // C# D5
  AU: "[~@3 d4@16 ~@2 d4@2 e3 [c4,d#4]@3 [c#4,e4]@20 a2, a3@23 ~, [c#4,f4]@5 ~ f#4@36 ~@54, ~ [d2,d3]@42 ~@5 a2@45 ~@3, ~@40 e4@5 ~@51]/4", // Cm C#m C# D
  AV: "[[c#4,f4]@5 ~ d4@31 ~@5 d4@4 e3@2 [c4,d#4]@5 ~ [c#4,e4]@40 ~@2, a3@91 ~@5, [d2,d3]@23 ~ a2@23 ~, ~@3 f#4@20 ~@25, ~@40 e4@7 ~@49]/4", // C# Cm C#m D
  AW: "[~ d3@3 d5@2 b4@2 a4@2 f#4@2 f4@4 e4 ~ d4@4 b3@2 d4@2 ~@2 a2 ~ [a3,c#4,f4]@4 ~@17 f#5@45, ~ d2@28 ~ d3 ~@5 [d2,d3,a3,b3,d4,f#4]@48 ~@12, ~@4 a4 ~@44 a4@47, ~@25 [b4,d5]@23]/4", // Aaug Bm7 Bm
})).s("gm_epiano2").gain(0.45)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@9 A@2 B@2 C@2 D@2 E F E G H I J K L M L G H N L O P Q R@2 S Q R@2 S T R@2 U@2 V ~ E W X W Y N X G E M Z G AA N AB AC
  AD AE R@2 S AF R@2 S AF R@2 U@2 AG ~ Z M E G AA N AH G AA AI L AJ@4
>`.pickRestart({
  A: "[d2 ~@5 d2@40 ~@2]/2", B: "[d2 ~@5 d2@41 ~]/2", C: "[a1 ~@2 a1@20 ~]/2", D: "[d2@2 ~@4 d2@41 ~]/2",
  E: "d2 ~@5 d2@6 a1@6 ~@4 a1@2", F: "d2@8 ~@2 a1 ~@5 a1@2 b1@3 ~ a1@2", G: "d2@6 ~@4 a1 ~@5 a1@2 b1@4 a1 ~",
  H: "a1@2 ~@4 a1@6 e2@7 ~@3 e2@2", I: "a1@7 ~@3 e2 ~@5 e2@2 a1@5 ~", J: "d2@3 ~@3 d2@6 a1@6 ~@4 a1@2",
  K: "d2@6 ~@4 a1 ~@5 a1@2 b1@4 a1@2", L: "d2 ~@2 d2@3 a1@3 ~@2 a1", M: "d2@7 ~@3 a1 ~@5 a1@2 b1@4 a1@2",
  N: "a1@7 ~@3 a1@2 e2@7 ~@3 e2@2", O: "d2@5 ~ a1@5 ~ b1@4 ~@2 c#2@4 ~@2, g#1 ~@23", P: "e2@5 ~ f#2@5 ~ g2@6 a2@4 b2@2",
  Q: "a1@6 c#2@5 ~ e2@6 f#2@4 e2@2", R: "d2@3 f#2@3 a2@3 b2@2 a2", S: "e2@3 f#2@3 g2@3 a2@2 b2",
  T: "a1@5 ~ c#2@6 e2@6 f#2@4 e2@2", U: "e2@3 g#2@3 b2@3 c#3@2 b2", V: "a1 ~@5, b1 ~@23",
  W: "d2@7 ~@3 a1 ~@5 a1@2 b1@3 ~ a1 ~", X: "d2@2 ~@4 d2@6 a1@7 ~@3 a1@2", Y: "a1@3 ~@3 a1@6 e2@7 ~@3 e2@2",
  Z: "d2 ~@5 d2@6 a1@7 ~@3 a1@2", AA: "a1 ~@5 a1@6 e2@7 ~@3 e2@2", AB: "d2@2 ~@4 d2@6 a1@7 ~@3 a1 ~",
  AC: "d2@7 ~@3 a1 ~@5 a1@2 b1@4 c#2 ~", AD: "e2@4 ~@2 f#2@5 ~ g2@6 a2@4 b2@2", AE: "a1@6 c#2@5 ~ e2@6 f#2@4 e2 ~",
  AF: "a1@3 c#2@3 e2@3 f#2@2 e2", AG: "a1 ~@5, b2 ~@23", AH: "d2@2 ~@4 d2@6 a1@5 ~@5 a1@2",
  AI: "a1@6 ~@4 a1@2 e2@7 ~@3 e2@2", AJ: "[d2@2 ~@4 a1@2 ~@4 d2@61 ~@23]/4",
})).s("gm_electric_bass_finger").gain(0.45)

// drums · kick
const kick = s("bd").struct(`<
  ~ A ~ A ~ A ~ A ~ B ~ B ~ B ~ B ~ B A B A B A@3 B A B A B A@3 C@14 A ~ B A B A B A@3 B A B A B A@3 C@14 A ~ B A B A B
  A@3 B A@3 ~@3
>`.pickRestart({
  A: "x", B: "x!2 ~@2", C: "x!2",
})).gain(0.5)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@8 A ~@8 A ~ A ~ A ~ A@3 ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A@3 ~ A ~ A ~ A ~@8 A ~@8 A ~ A ~ A ~ A ~ A ~ A B ~@3
>`.pickRestart({
  A: "~@11 x", B: "~ x!2 ~",
})).gain(0.1)

// drums · rim
const rim = s("rim").struct(`<
  ~@8 A B A B A B A B A B A B A B A B A B A B A B A B A ~@16 B A B A B A B A B A B A B A B A ~@16 B A B A B A B A B A B
  ~@4
>`.pickRestart({
  A: "~@3 x", B: "~ x",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@32 A B C@13 ~@17 A B C@6 D B C@5 ~@17>".pickRestart({
  A: "~@3 x", B: "~@6 x ~@11 x!2 ~@4", C: "~ x ~ x", D: "~@3 x ~@4 x!3 ~",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct("<~@9 A B A B A B A B C@7 D C@7 E ~@14 F ~ C@7 D C@7 E ~@14 F ~ C@11 ~@4>".pickRestart({
  A: "~@3 x", B: "~ x ~@2", C: "x!2 ~ x", D: "x!2 ~@2", E: "x ~@2 x", F: "x",
})).gain(0.35)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A B@8 C ~ C ~ C ~ C ~@2 D ~ D ~ D ~ D ~ D ~ D ~ D ~ D ~@15 D ~ D ~ D ~ D ~ D ~ D ~ D ~ D ~ D ~@15 D ~ D ~ D ~ D ~ D ~
  D ~ E ~@3
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~@2 x ~ x", B: "~@3 x ~@5 x ~ x", C: "~ x ~@2", D: "~@2 x", E: "~ x ~@4",
})).gain(0.1)

// drums · mid tom
const mid_tom = s("mt").struct("<~@32 [~@6 x!3 ~@3] ~@31 [~@6 x!3 ~@3] ~@31>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A ~ B ~ B ~ B ~ B ~ C ~ C ~ C ~ D ~ C ~ C ~ C ~ E ~@15 B ~ C ~ C ~ C ~ D ~ C ~ C ~ C ~ E ~@15 B ~ C ~ C ~ C ~ C ~
  C ~@5
>`.pickRestart({
  A: "~@2 x", B: "~@3 x", C: "~@11 x", D: "~@9 x ~ x", E: "~@3 x ~@7 x",
})).gain(0.15)

// drums · crash
const crash = s("cr").struct("<~@33 x ~@31 x ~@7 x ~@22>").gain(0.45)

// drums · ride
const ride = s("rd").struct("<~@33 A@14 B ~@17 A@14 B ~@12 C ~@3>".pickRestart({
  A: "x!4", B: "x", C: "~ x!2 ~",
})).gain(0.5)

// drums · tambourine
const tambourine = s("tb").struct("<~@33 A B@13 ~@18 A B@7 A B@5 ~@17>".pickRestart({
  A: "~@3 x ~ x ~@3 x ~ x", B: "~@5 x ~@5 x",
})).gain(0.25)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@34 [~ x ~ x]!13 ~@19 [~ x ~ x]!7 ~ [~ x ~ x]!5 ~@17>").gain(0.15)

// drums · bongos
const bongos = s("bongo:4").struct(`<
  ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~@4
>`.pickRestart({
  A: "~ x",
})).gain(0.91)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B@14 ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B@14 ~@2 A ~ A ~ A ~ A ~
  A ~ A ~@4
>`.pickRestart({
  A: "~@2 x", B: "~ x ~@2",
})).gain(0.32)

// drums · congas · soft notes
const congas_soft = s("conga:13").struct(`<
  ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~@4
>`.pickRestart({
  A: "~@11 x",
// … 35 more lines

More by Jimmy Buffett