Strudelify

Thinking of You

Loggins & Messina

KeyD majorTempo120 bpm
0:00/0:00
// Thinking of You — Loggins & Messina
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 71 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · "tk1"
const piano = note(`<
  A B A B C D E F G H@2 B C D E F G H@2 I@2 J K L@2 M N O P A B A B Q R B S T J K L@2 M N O U C D E F G H@2 V G H@2 V G
  W@4 X A B A Y Z@3
>`.pickRestart({
  A: "[d2,d4,f#4] a3 [d4,f#4] [a3,c#4,f#4] ~@3 a1, ~ d2@2 d2@3 [a3,c#4,f#4]@2", // D F#m
  B: "[d2,d4,f#4] a3 [d4,f#4] [a3,c#4,f#4] ~@3 a1, ~ d2@2 d2@2 d2@2 ~, ~@3 [a3,c#4,f#4]", // D F#m
  C: "[d2,d4,f#4] [a3,a4] [d4,f#4] [a3,c#4,f#4] ~ f#4 [f#4,b4] [a1,f#4], ~ d2@2 d2@3 ~@2, ~@3 a4@2 ~ [a3,c#4]@2", // D A D F#m B5 D A
  D: "[d2,d4,f#4] [a3,a4] [d4,f#4,b4] [a3,c#4,f#4] ~ f#4 ~ a1, ~ d2@2 [d2,a4]@2 d2@2 ~, ~@3 [a3,c#4,d4,f#4]", // D A Bm F#m D5 Dmaj7
  E: "[d2,d4,f#4] [a3,a4] [d4,f#4] [a3,c#4,f#4] ~ a4 b4 [a1,a4], ~ d2@2 d2@3 ~@2, ~@3 a4@2 ~ [a3,c#4,f#4]@2", // D A D F#m A F#m
  F: "[d2,d4,f#4,d5] [a3,d5] [d4,f#4,c#5] [a3,c#4,f#4,a4] a4 f#2 [g2,f#4] [g#2,f#4], ~ d2@2 d2@2 b4@2 ~, ~@3 [a3,c#4]", // D D5 Dmaj7 F#m Gmaj7 G#7 A
  G: "[a2,c#4,e4,f#4,a4] [a3,e4] [c#4,e4,f#4,a4] [a3,a4] ~ e2 a2 b2, ~ a2@2 a2@2 b4@3, ~@2 [d4,e4,a4]!2", // F#m7 A5 F#m7 A Dsus2
  H: "[[a2,c#4,e4,a4] [a3,b4] [c#4,e4,a4] [f#4,a4] ~ [e2,b4] [a2,e4,f#4] b2 [d2,d4,f#4] [a3,d4] f#4 [a3,c#4,f#4] ~@3 a1, ~ a2@2 [d4,e4]@3 [c#4,a4]@2 ~@2 d4@2 ~@2 [a3,c#4,f#4]@2, ~@3 a2@2 ~@4 d2@2 d2@3 ~@2, ~@4 a4@2 ~ e4@2 ~@7]/2", // A Asus2 A F#m E5 F#m7 D D5 …
  I: "[[d2,c4,d4,f#4] a3 ~ d2 f#2 ~ d5 f#2 [g2,b3,d4,g4] [g3,g4] [b3,d4] ~@2 d5!2 [d2,b4], ~ d2@2 ~@2 f#2@2 b4@2 ~ g4@2 ~@2 [g3,b3,d4,f#4]@2, ~@2 [c4,d4,f#4]@2 [a#3,c#4,e4,f#4]@4 ~ g2@2 [f#2,g3,b3,d4,f#4]@3 ~@2]/2", // D7 G Bm G Gmaj7 D7 F#7 Gmaj7
  J: "[e2,b3,d4,e4,g4,d5] [g3,e5] [b3,d4,e4,g4,f#5] d5 b4@2 ~ [f2,d5], ~ e2@2 [f2,b3,d4,f4,g#4]@3 [b3,d4,f4,g#4]@2", // Em7 C Em7 Dm Fdim Bdim
  K: "[d2,d5] c#5!2 b4 [a4,b4] [f#2,a4] [a2,f#4] [b2,f#4], [d4,f#4,a4]!2 [d4,f#4] [d4,a4], ~ d2@2 d2@2 ~@3", // D Asus2 F#m D B5 D D5
  L: "[d3@2 [e3,b4]@2 f#3@2 [e3,e4]@2 [d3,d4,f#4,a4]@2 ~ b3 [a2,d4,d5]@2 [f#2,e4]@2 [g2,d4]@2 b3@2 d4@2 ~@4 d5@2 d5@2 [d2,b4]@2, [d4,f#4,a4]@2 [d4,f#4,a4]@2 ~ b2 ~ b4@2 [g2,g4]@2 [f#2,g3,b3,d4,f#4]@3 [g3,b3,d4,f#4]@2]/2", // E5 E D D5 F#7 G5 G D …
  M: "[e2,b3,d4,e4,g4,d5] [g3,e5] [b3,d4,e4,g4,f#5] [f2,b3,d4,f4,g#4,d5]@3 ~ [f2,e5], ~ e2@2 ~@3 [b3,d4,f4,g#4]@2", // Em7 C Em7 Fdim Fmaj7 Bdim
  N: "~ c#5 b4!2 ~ a4 ~ a4, [e2,g#4,b4,d5,e5] [f#2,f#4,a4,d5] [g2,e4,g4,a#4,c#5] [g#2,d4,e4,g#4,b4]", // E7 D Gdim E7
  O: "[a4,c#5]@2 ~@2 b4@2 a4@2 ~@6 c#5 b4, [a2,c#4,e4] [b2,d4,e4,g4,b4], ~ a4@2 ~@5", // A Em7
  P: "[c3,d#4,g4,a4,c5] [c#3,e4,g4,a4,c#5]", // Am7b5 A7
  Q: "[a2,c#4,e4,a4] a3 [c#4,e4,a4] a3 ~ e2 a2 b2, ~ a2@2 a2@2 ~@3, ~@2 [d4,e4,a4]!2", // A Dsus2
  R: "[a2,c#4,e4,a4] a3 [c#4,e4,a4] a2@2 e2 a2 b2, ~ a2@2 [d4,e4,a4]@3 [c#4,e4,a4]@2", // A Dsus2 A
  S: "[d2,c4,d4,f#4] a3 ~ d2 f#2 ~ d5 [f#2,b4], ~ d2@2 ~@2 f#2@2 ~, ~ [c4,d4,f#4] [a#3,c#4,e4,f#4]@2", // D7 B5 D7 F#7
  T: "[g2,b3,d4,g4] [g3,g4] [b3,d4] ~@2 d5!2 [d2,b4], ~ g2@2 [f#2,g3,b3,d4,f#4]@3 ~@2, ~ g4 ~ [g3,b3,d4,f#4]", // G Bm G Gmaj7
  U: "[c3,d#4,g4,a4,c5] [e4,g4,a4,c#5]", // Am7b5 A7
  V: "[d2,d4,f#4] a3 [d4,f#4] [a3,c#4,f#4] ~ f#2 [g2,f#4] [g#2,f#4], ~ d2@2 d2@2 ~ [a3,c#4]@2", // D F#m Gmaj7 G#7 A
  W: "[[a2,c#4,e4,a4] [a3,b4] [c#4,e4,a4] [f#4,a4] ~ [e2,b4] [a2,f#4] b2 [d2,d4,f#4] [a3,d4] f#4 [a3,c#4,f#4] ~@3 a1 [d2,d4,f#4] a3 [d4,f#4] [a3,c#4,f#4] ~ f#2 g2 g#2 [a2,c#4,e4,a4] a3 [c#4,e4,a4] a3 ~ e2 a2 b2, ~ a2@2 [d4,e4]@3 [c#4,e4,a4]@2 ~@2 d4@2 ~@2 [a3,c#4,f#4]@2 ~@6 [a3,c#4,f#4]@2 ~@4 [d4,e4,a4]@2 [d4,e4,a4]@2, ~@3 a2@2 ~@4 d2@2 d2@3 ~@3 d2@2 d2@2 ~@4 a2@2 a2@2 ~@3, ~@4 a4@2 ~ [e5,g5]@2 [f#5,a5]@14 [e5,g5]@2 [d5,f#5]@7]/4", // A Asus2 A F#m E5 D D5 F#m …
  X: "[a2,c#4,e4,a4] a3 [c#4,e4,a4] a2@2 a1 c#2 e2, ~ a2@2 [d4,e4,a4]@3 [c#4,e4,a4]@2", // A Dsus2 A
  Y: "[d2,d4,f#4] a3 [d4,f#4] [a3,c#4,f#4] [f#3,d4] [g3,e4] [a3,f#4] [a1,b3,g4], ~ d2@2 d2@2 d2@2 ~", // D F#m D C D Em
  Z: "[[d2,a3,d4,f#4,a4]@3 ~]/3", // D
})).s("gm_piano").gain(0.64)

// bass · fretless bass · "tk2"
const bass = note(`<
  A B A C A B A B D E A F A B A C D G A H I J A K L M N O P A B A B D G A Q I J A K L M N O P A B A B D G A C D G A C D
  G A C D G A B A R S T@2
>`.pickRestart({
  A: "d2 ~@2 d2 ~@2 d2@9 ~", B: "d2 ~@2 d2 ~@2 d2@5 ~ a1@3 ~", C: "d2@6 d2@3 ~ f#2@3 ~ a2@2", D: "a1 ~@2 a1 ~@2 a1@9 ~",
  E: "a1@6 a1@3 ~ d2@2 a1 ~ e2@2", F: "d2 ~@2 d2 ~@2 d2@2 d2@3 ~ a1@3 ~", G: "a1 ~@2 a1 ~@2 a1@5 ~ a1@3 ~",
  H: "d2 ~@2 d2 ~@2 d2@2 f#2@3 ~ c#2@3 ~", I: "g2 ~@2 g2 ~@2 g2@9 ~", J: "e2 ~@2 e2 ~@2 f2@8 ~@2",
  K: "d2@9 ~ f#2@3 ~ a2@2", L: "g1 ~@2 g1 ~@2 g1@9 ~", M: "e1 ~@2 e1 ~@2 f1@8 ~@2",
  N: "e1 ~@2 e1 d2 ~ d2@2 g1@4 e1@3 ~", O: "a1 ~@2 a1 ~@2 a1@2 e2@6 ~@2", P: "c2@8 a1 ~ c#2@3 ~ e2@2",
  Q: "d2@8 f#2 ~ a#2@3 ~ c#3@2", R: "d2@3 ~ f#2 ~ d3@10", S: "d3", T: "[d2@3 ~ a2@2 d2@14 ~@12]/2",
})).s("gm_fretless_bass").gain(0.44)

// chords · acoustic guitar steel · "tk5"
const acoustic_guitar_steel = note(`<
  ~@4 A B A B C D ~@5 E C F A G ~@8 H ~@4 C F A I ~@13 C F A E C F A E C F A ~ C F A B A ~@4
>`.pickRestart({
  A: "[a3,d4,f#4] ~@2 [a3,d4,f#4] ~@2 [a3,d4,f#4]@5 ~ [d4,a4]!2 ~@2", // D D5
  B: "[a3,d4,f#4] f#3 ~ [a3,d4,f#4] ~@2 [a3,d4,f#4,a4]@5 ~ [d4,f#4]@3 ~", // D
  C: "[e4,a4,c#5] ~@2 [e4,a4,c#5] ~@2 [e4,a4,d5]@5 ~ [a4,e5]!2 ~@2", // A Dsus2 A5
  D: "[e4,a4,c#5] ~@2 [e4,a4,c#5] ~@2 [e4,a4,c#5]@2 ~@2 [d4,a4,e5]@2 [c#4,a4,e5] ~ [c#4,a4,e5] ~", // A Dsus2 A
  E: "[a3,d4,f#4] ~@2 [a3,d4,f#4] ~@2 [a3,d4,f#4]@2 ~@2 [f#3,c#4,d4,a4]@3 ~ [f#3,c#4,d4,a4] ~", // D Dmaj7
  F: "[e4,a4,c#5] c#4 ~ [e4,a4,c#5] ~@2 [e4,a4,d5,e5]@5 ~ [a4,c#5]@3 ~", // A Dsus2 A
  G: "[c4,d4,f#4] f#3 ~ [c4,d4,f#4] ~@2 [c4,d4,f#4,c5]@2 [e4,f#4,a#4,e5]@3 ~ [f#4,a#4]@3 ~", // D7 F#7 F#
  H: "[g3,a3,c4,d#4] ~@2 [g3,a3,c4,d#4] ~@2 [g3,a3,c4,d#4]@2 ~@2 [c#4,a4,e5,g5]@3 ~ [c#4,a4,e5,g5] ~", // Am7b5 A7
  I: "[a3,c4,d4,f#4] ~@2 [a3,c4,d4,f#4] ~@2 [a3,c4,d4,f#4]@2 ~@2 [a#3,e4,f#4,c#5]@3 ~ [a#3,e4,f#4,c#5] ~", // D7 F#7
})).s("gm_acoustic_guitar_steel").gain(0.3)

// chords · electric guitar jazz · "tk5"
const electric_guitar_jazz = note("<~@20 A B C ~ A B D E ~@9 A B C ~ A B D E ~@26>".pickRestart({
  A: "[d4,g4,b4] b3 ~@4 [d4,g4,b4]@4 [g4,d5] ~@2 [g4,d5] ~@2", // G G5
  B: "[b3,e4,g4] g3 ~@2 [b3,e4] ~ [c4,f4,a4]@4 [f4,c5] ~@2 [f4,c5]!2 ~", // Em E5 F F5
  C: "[a3,d4,f#4] f#3 ~@4 [a3,d4,f#4]@4 [d4,a4] ~@2 [d4,a4] ~@2", // D D5
  D: "[d4,e4,g#4] g#3 ~@4 [b3,d4,f#4]@2 [d4,g4,b4]@2 [g4,d5] ~@2 [e4,d5] ~@2", // E7 Bm G G5 E7
  E: "[e4,a4,c#5] c#4 ~@2 [e4,a4] ~ [e4,a4,c#5]@2 [b3,e4,g4]@2 [e4,b4] ~@2 [e4,b4]!2 ~", // A A5 A Em E5
})).s("gm_electric_guitar_jazz").gain(0.35)

// chords · electric guitar jazz · "tk5" · soft notes
const electric_guitar_jazz_2 = note("<~@20 A B C ~ A B D E ~@9 A B C ~ A B D E ~@26>".pickRestart({
  A: "~@3 [d4,g4,b4] ~@8 [g4,d5] ~@3", B: "~@3 [b3,e4,g4] ~@8 [f4,c5] ~@3", C: "~@3 [a3,d4,f#4] ~@8 [d4,a4] ~@3",
  D: "~@3 [d4,e4,g#4] ~@8 [e4,d5] ~@3", E: "~@3 [e4,a4,c#5] ~@8 [e4,b4] ~@3",
})).s("gm_electric_guitar_jazz").gain(0.2)

// chords · orchestral harp · "tk5" · D5 D D5 D D5 D D5 D …
const orchestral_harp = note(`<
  ~@23
  [d2 [d2,a2] [d3,f#3] [d3,a3] [d4,f#4] [d4,a4] f#5 [d5,a5] f#6 ~@7]
  ~@16
  [d2 [d2,a2] [d3,f#3] [d3,a3] [d4,f#4] [d4,a4] f#5 [d5,a5] f#6 ~@7]
  ~@4
  [[c2,a2] [c2,g2] [a2,c3,d#3] [a2,c3,g3] [a2,c4,d#4] [c4,g4] d#5 [c5,g5] [g3,d#6,c#7] ~@7]
  ~@25
>`).s("gm_orchestral_harp").gain(0.25)

// chords · string ensemble 1 · "tk6"
const string_ensemble_1 = note("<~@4 A B A B C@8 D@5 E@4 F@8 G H@4 I J K@4 L@7 M@8 N@5 A O@2 ~@4>".pickRestart({
  A: "[f#3,a3,d4]@3 [f#3,a3,d4]@5", B: "[f#3,a3,d4]@6 [f#3,a3,d4]@3 ~@3 [d4,f#4]@2 ~@2",
  C: "[[e4,a4]@3 [d4,e4,a4]@61, c#4 ~@15]/8", // A5 Dsus2
  D: "[[e4,a4]@6 [e4,a4]@10 [e4,a4]@6 a4@6 c#5@2 ~@2 [f#3,a3,d4]@6 [f#3,a3,d4]@10 [f#3,c4]@8 [a#3,f#4] ~@3 [f#4,a#4]@2 ~@2 [d4,g4,b4]@6 [d4,g4,b4,f#5]@10, c#4@2 ~@2 c#4@2 ~ a4@13, ~@3 d4@8 e4@17 e4@12, ~@11 d4@5 ~@8 d4@8 ~@8]/5", // A5 D F#dim D#m F# G Gmaj7
  E: "[~@3 [c4,f4]@2 ~@3 f#4@8 [f#4,a4]@5 [f#3,d4,a4]@2 d4 [d4,g4,b4]@3 [d4,g4,b4,f#5]@5, e4, d4@2 ~@2 d3 ~@3, [b3,g4]@8 ~@8 [a3,d4]@26 ~@4 f#3 ~@17, ~@3 a4@13 ~@7 a4@9]/4", // F5 F#m D G Gmaj7 Em D5
  F: "[~@3 [c4,f4]@2 ~@3 [b3,d4,g#4]@2 [a3,b3,d4,f#4]@2 [d4,g4,b4]@2 [b3,e4,g#4]@2 [e4,c#5]@4 [d4,e4]@44, [d4,e4]@4 e4@3 d4@3 ~@22, [b3,g4]@4 ~@16 [b3,g4] ~@43, ~@3 a4@13 a4@48]/8", // F5 G#dim Bm7 G E C#m Dsus2 Em
  G: "[e4,a4]@3 [d4,e4,a4]@5, c#4 ~", // A5 Dsus2
  H: "[[e4,a4]@3 a4@3 c#5 ~ [f#3,a3,d4]@3 d4@13 [d4,g4,b4]@3 [d4,g4,b4,f#5]@5, c#4@2 ~ a4@13, ~@3 e4@29, ~@3 d4@5 ~@3 [f#3,a3]@21]/4", // A5 D G Gmaj7 F#m
  I: "~@3 [c4,f4]@2 ~@3, [d4,e4], [b3,g4] ~, ~@3 a4@5", J: "[a3,d4,f#4]",
  K: "[[f#4,a4]@5 [f#3,d4,a4]@2 d4 [d4,g4,b4]@3 [d4,g4,b4,f#5]@5 ~@3 [c4,f4]@2 ~@3 [b3,d4,g#4]@2 [b3,d4,f#4]@2 [d4,g4,b4]@2 [b3,d4,e4,g#4]@2, d3@4 ~@3 f#3@25, ~@7 a4@12 a4@13, ~@8 [d4,e4]@4 e4@3 ~, ~@8 [b3,g4]@2 ~@3 a3@3]/4", // F#m D G Gmaj7 F5 G#dim Bm G …
  L: "[[e4,c#5]@8 [b3,g4]@2 ~@6 [c3,d#4,g4]@8 ~@2 [c#4,g4,a4,e5]@4 [c#4,g4,e5] ~@65 [e4,a4]@6 [d4,e4,a4]@10, a4@13 ~@2 a4@33 ~@8, ~@4 d4@47 ~@5, ~ e4@11 c#4 ~, ~ a3@6]/7", // C#m Em Cm A7 C#dim A5 Dsus2
  M: "[[e4,a4]@3 a4@3 c#5 ~ [f#3,a3,d4]@3 ~@13 [e4,a4]@3 [e4,a4]@5 [e4,a4]@3 a4@3 c#5 ~ [f#3,a3,d4]@3 ~@13 [e4,a4]@3 [d4,e4,a4]@5, c#4@4 ~@2 a4@18 ~@11 d4@5 ~@3 d4@16 ~@5, ~@3 e4@21 c#4@4 ~@4 c#4@4 ~@2 a4@18 ~@8, ~@3 d4@5 ~@3 [f#3,a3]@29 ~@3 [f#3,a3]@21, ~@11 d4@16 d4@8 e4@21 c#4@4 ~@4]/8", // A5 D A5 D A5 Dsus2 F#m
  N: "[[e4,a4]@3 a4@3 c#5 ~ [f#3,a3,d4]@3 ~@13 [e4,a4]@3 [e4,a4]@5 a4@3 ~@3 c#5 ~, c#4@4 ~@2 a4@18 ~@11 a4@4 ~, ~@6 e4@42 c#4@8 ~@8 [c#4,e4]@9 ~@7, ~@3 d4@5 ~@3 [f#3,a3]@29, ~@11 d4@16 d4@8 d4@5]/5", // A5 D A5 C#m F#m
  O: "[~@6 f#4 ~@9, [f#3,a3,d4]]/2", // D
})).s("gm_string_ensemble_1").gain(0.33)

// chords · acoustic guitar steel · "tk7"
const acoustic_guitar_steel_2 = note("<A B A C ~@6 A D A B A ~@14 A B A B ~@13 A B A B ~@21>".pickRestart({
  A: "[a3,d4,f#4] ~@2 [a3,d4,f#4] ~@2 [a3,d4,f#4]@5 ~ [d4,a4]!2 ~@2", // D D5
  B: "[a3,d4,f#4] f#3 ~ [a3,d4,f#4] ~@2 [a3,d4,f#4,a4]@5 ~ [d4,f#4]@3 ~", // D
  C: "[a3,d4,f#4] ~@2 [a3,d4,f#4] ~@2 [a3,d4,f#4]@2 ~@2 [f#3,c#4,d4,a4]@3 ~ [f#3,c#4,d4,a4] ~", // D Dmaj7
  D: "[a3,d4,f#4] f#3 ~ [a3,d4,f#4] ~@2 [a3,d4,f#4,a4]@2 [a3,d4,f#4,a4]@3 ~ [d4,f#4]@3 ~", // D
})).s("gm_acoustic_guitar_steel").gain(0.35)

// chords · orchestral harp · "tk7" · D5 D D5 D D5
const orchestral_harp_2 = note("<~@61 [d2 [d2,a2] [d3,f#3] [d3,a3] [d4,f#4] [d4,a4] f#6@3 ~@7, ~@6 f#5 ~@9] ~@9>")
  .s("gm_orchestral_harp").gain(0.3)

// chords · string ensemble 1 · "tk7"
const string_ensemble_1_2 = note("<~@67 A B C@2>".pickRestart({
  A: "[f#3,b3,c#4,e4]@3 ~ [a3,d4,g4,a4] ~ [a3,d4,f#4,a4]@10", B: "[a3,d4,f#4,a4]@9 ~@7",
  C: "[[c#4,f#4,a4,c#5] ~ [c#4,d4,g4,a4] [f#3,b3,e4,a4]@7 ~@6]/2", // F#m Dsus4 F#m7
})).s("gm_string_ensemble_1").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A B A C A B A B A C A D A B A C A B A D A B E F A B E D F A B A B A B A F A B E F A B E D F A B A B A B A C A B A C A
  B A C A B A B A G ~ H I
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~@8 x", B: "~@3 x ~@2 x ~@9", C: "x ~@2 x ~@2 x ~@7 x ~", D: "~@3 x ~@2 x ~ x ~@7",
  E: "x ~@2 x ~@2 x ~ x ~@6 x", F: "x ~@2 x ~@2 x ~ x ~@5 x ~", G: "x ~@2 x ~@12", H: "x ~@2 x ~@2 x ~@9", I: "~ x ~@2",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct(`<
  A@3 B A@5 B A@5 B A@7 B A@4 B A@7 B A@3 B A@4 B A@7 B A@3 B A@3 B A@5 B ~ B@2
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@5 A ~@5 A ~@7 B ~@4 A ~@7 A ~@3 B ~@4 B ~@7 A ~@3 A ~@3 B ~@8 C>".pickRestart({
  A: "~@7 x", B: "~@13 x!2 ~", C: "~ x ~@2",
})).gain(0.29)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@23 A ~@16 A ~@4 A ~@15 A ~@9>".pickRestart({
  A: "~@3 x",
})).gain(0.18)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A ~ A@3 ~ A ~ A@3 ~ A ~ A@3 ~ A ~ A ~ A@3 ~ A ~ A@2 ~ A ~ A ~ A@3 ~ A@3 ~ A ~ A@2 ~ A ~ A ~ A@3 ~ A@3 ~ A@3 ~ A ~ A@2
  ~ B ~
>`.pickRestart({
  A: "~ x ~@6", B: "~ x!2 ~@5",
})).gain(0.18)

// drums · open hat
const open_hat = s("oh").struct("<~@21 A ~@3 A ~ A ~@10 A ~@3 A ~ A ~@26>".pickRestart({
  A: "~@7 x",
})).gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@5 A ~@5 A ~@7 A ~@4 A ~@7 A ~@3 A ~@4 A ~@7 A ~@3 A ~@3 A ~@8 B>".pickRestart({
  A: "~@5 x ~@2", B: "~@3 x ~@12",
})).gain(0.32)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@3 A ~@5 A ~@5 A ~@7 A ~@4 A ~@7 A ~@3 A ~@4 A ~@7 A ~@3 A ~@3 A ~@8 B
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@3 x ~@12",
})).gain(0.32)

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

// drums · bongos
const bongos = s("bongo:4").struct("<~@69 [~@3 x ~@4] ~>").gain(0.75)
// … 42 more lines

More by Loggins & Messina