Strudelify
Rhinestone Cowboy cover art

1975 · See You There

Rhinestone Cowboy

Glen Campbell

KeyC majorTempo116 bpm
0:00/0:00
// Rhinestone Cowboy — Glen Campbell
// 116 bpm, 4/4, key C major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 92 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): #Pdl.Stee.
setcpm(116/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 · "#A.Piano"
const piano = note(`<
  A B A C D E D E D E F G H I H J D E K L M N O P Q R D S T U V W D S T U V X Y@2 Z@2 D E D E D E F G H I H AA D E K L M
  N O P Q R D S T U V W D S T U V X Y@2 Z@2 D S T U V W D S T U V AB
>`.pickRestart({
  A: "[g3,c4,e4]@4 [c4,e4]@2 [g3,c4] ~ [g3,e4]@2 [a3,c4,f4]@6, [c2,c3], ~@4 g3 ~ e4@2 c4 ~@7", // C C5 C F C
  B: "[b3,g4]@4 g4@2 [b3,c4] ~ [b3,c4,g4] ~ [a3,c4,f4]@4 g2@2, [c2,c3]@7 ~, c4@3 g4 ~@4, ~@4 b3 ~@11", // Em Cmaj7 F C
  C: "[b3,g4]@4 g4@2 [b3,c4] ~ [b3,c4,g4] ~ [a3,c4,f4]@5 ~, [c2,c3], c4@3 g4 ~@4, ~@4 b3 ~@11", // Em Cmaj7 F C
  D: "[c3,g3,c4,e4]@4 g3 ~ [g3,c4] ~ [c2,c3]@2 g2@2 [c2,c3,a3,c4,f4]@4, c2 ~, ~ c3 [g3,c4,e4] ~, ~@3 e4 ~@4", // C C5 C F C
  E: "[c3,g3,e4]@4 g3 ~ [g3,c4,e4]@2 [c2,c3]@2 g2@2 [c2,c3,a3,c4,f4]@4, c2 ~, c4@3 ~ [g3,c4,e4]@2 ~@2, ~ c3 ~@2", // C F C
  F: "[g2,g3,b3,d4]@4 g3 ~ [g3,b3] ~ [g1,g2]@2 d2@2 [g1,g2,g3,c4,e4]@4, g1 ~, ~ g2 ~@2, ~@3 d4 [g3,b3,d4]@2 ~@2", // G C G
  G: "[g2,g3,d4]@4 g3 ~ [g3,b3,d4]@2 [g1,g2]@2 d2@2 [g1,g2,g3,c4,e4]@4, g1 ~, b3@3 ~ [g3,b3,d4]@2 ~@2, ~ g2 ~@2", // G5 G C G
  H: "[f2,a3,c4,f4]@4 c4 ~ [c4,f4] ~ [f1,f2]@2 c2@2 [f1,f2,a#3,c4,f4]@4, f1 ~, ~ f2 ~@2, ~@3 a3 [a3,c4,f4]@2 ~@2", // F F5 F Fsus4 F
  I: "[f2,a3,c4]@4 c4 ~ [a3,c4,f4]@2 [f1,f2]@2 c2@2 [f1,f2,a#3,d4,f4]@4, f1 ~, f4@3 ~ [a3,c4,f4]@2 ~@2, ~ f2 ~@2", // F A# F
  J: "g#3@2 ~@2 c4 ~ [c4,f4,a4]@2 [c4,f4,a4] ~ [e2,b3,e4,g4]@2 [d2,a3,d4,f4]@4, f1@4 [f1,f2] ~@3, f4@3 ~@5, [f2,c4] f2 ~@2, ~ a3@2 ~@5", // F Em Dm F F5
  K: "[g2,b3,d4,g4]@4 b3 ~ [b3,d4] ~ [g1,g2]@2 d2@2 [g1,g2,c4,e4,g4]@4, g1 ~, ~ g2 ~@2, ~@3 g4 [b3,d4,g4]@2 ~@2", // G Bm G C G
  L: "[g2,b3,g4]@4 b3 ~ [b3,d4,g4]@2 [g1,g2]@2 d2@2 [g1,g2,c4,e4,g4]@4, g1 ~, d4@3 ~ [b3,d4,g4]@2 ~@2, ~ g2 ~@2", // G C G
  M: "[f2,a3,c4,f4]@4 c4 ~ [c4,f4] ~ [f1,f2]@2 c2@2 [f1,f2,g3,a#3,f4]@4, f1 ~, ~ f2 ~@2, ~@3 a3 [a3,c4,f4]@2 ~@2", // F F5 F Gm7 F
  N: "[c3,g3,c4]@4 g3 ~ [g3,c4,e4]@2 [c2,c3]@2 g2@2 [c2,c3,g3,c4,e4]@4, c2 ~, e4@3 ~@5, ~ c3 [g3,c4,e4] ~", // C5 C
  O: "[f1,f2]@5 ~ [f1,f2]@2 [f1,f2]@7 ~, [a3,c4,f4]@15 ~", // F
  P: "[f#1,f#2]@5 ~ [f#1,f#2]@2 [f#1,f#2]@7 ~, [a3,c4,f#4]@15 ~", // F# F#dim
  Q: "[g2,c4,f4,a4]@4 f4 ~ [c4,a4]@2 [g1,g2]@2 d2@2 [g1,g2,c4,f4,a4]@4, g1 ~, ~ g2 ~@2, ~@6 f4 ~ [c4,f4,a4]@4 ~@4", // F G F
  R: "[g1,g2,c4,f4,a4] ~@3 [f1,f2,c4,f4,a4]@2 [g1,g2,b3,d4,g4]@2", // F G
  S: "[c3,g3,e4]@4 g3 ~ [g3,c4,e4]@2 [c2,c3]@2 g2@2 [c2,c3,g3,c4,e4]@4, c2 ~, c4@3 ~ [g3,c4,e4]@2 ~@2, ~ c3 ~@2", // C
  T: "[g3,b3,e4]@2 ~@4 [g3,b3] ~ [c2,c3]@2 g2@2 [c2,c3,g3,b3,e4]@4, c2 ~, c3!2 [g3,b3,e4] ~, ~ [g3,b3,e4]@2 e4 ~@4", // Em G C Cmaj7 Em
  U: "[c3,g3,e4]@2 e4 [g3,a3,e4] [c2,c3] g2 [c2,c3,g3,a3,e4]@2, c2 ~, a3@3 ~@5, ~ c3 ~@2, ~@4 g3 ~@3 [g3,a3,e4]@4 ~@4", // C A7 C Am7 A7
  V: "[a3,c4,f4]@2 ~@4 [a3,c4] ~ [g1,g2]@2 d2@2 [g1,g2,a3,c4,f4]@4, g1 ~, g2!2 ~@2, ~ [a3,c4,f4]@2 f4 [a3,c4,f4]@2 ~@2", // F Am G F
  W: "[g2,b3,g4]@2 g4 [b3,d4,g4] [f1,f2,c4,f4,a4]@2 [g1,g2,b3,d4,g4]@2, g1 ~, d4@3 ~@5, ~ g2 ~@2, ~@4 b3 ~@11", // G F G
  X: "[g2,a3,f4]@2 f4 [a3,c4,f4] [g1,g2,a3,c4,f4]@2 [g1,g2,a3,c4,f4]@2, g1 ~, c4@3 ~@5, ~ g2 ~@2, ~@4 a3 ~@11", // Dm F
  Y: "[[f2,f3,c4,f4,a4]@6 [e2,e3,c4,e4,g4]@6 [d2,d3,a3,c4,f4]@6 [c2,c3,g3,c4,e4]@6 [b1,b2,b3,d4,g4]@3 ~ [a1,a2,a3,c4]@4, ~@14 f4 ~]/2", // F C Dm7 C G Am
  Z: "[[g1,g2,b3,d4,g4]@6 [f1,f2,a3,c4,f4,g4]@6 [e1,e2,b3,d4,g4]@6 [d1,d2,a3,c4,f4,g4]@6 [f1,f2,a3,c4,f4]@3 ~ [g1,g2,b3,d4]@4, ~@14 g4 ~]/2", // G F Em7 Dm7 F G
  AA: "[f2,c4]@4 c4 ~ [c4,f4,a4]@2 [c4,f4,a4] ~ [e2,b3,e4,g4]@2 [d2,a3,d4,f4]@4, f1@4 [f1,f2] ~@3, [a3,f4]@3 ~@5, ~ f2 ~@2", // F5 F Em Dm F Dm
  AB: "[g2,b3,g4]@2 g4 [b3,d4,g4] ~@4, g1 ~, d4@3 ~@5, ~ g2 ~@2, ~@4 b3 ~@11", // G
})).s("gm_piano").gain(0.28)

// bass · electric bass finger · "#Fing.Bas"
const bass = note(`<
  ~ A B C D E@2 D F G H I J@2 K L E M N@2 O P O Q R S T U@2 V W X Y U@2 V I Z AA AB AC AD D E@2 D F G H I J@2 K L E M N
  AE O P O Q R S Y U@2 V W X Y U@2 V I Z AA AB AC AD Y U@2 V W X Y U@2 V W X
>`.pickRestart({
  A: "~@7 g1", B: "c2@15 ~", C: "c2@13 ~ g1@2", D: "c2@4 ~@2 c2 ~ c2@6 ~@2", E: "c2@2 ~ c2 c2@3 ~",
  F: "c2@4 ~@2 c2 ~ c2@3 ~ g1@2 a1@2", G: "c2@4 ~@2 c2 ~ c2@2 g1@2 g1@3 ~", H: "g1@4 ~@2 g1 ~ g1@3 ~ g2@3 ~",
  I: "g1@4 ~@2 g1@2 g1@3 ~ d2@3 ~", J: "f1@4 ~@2 f1 ~ f1@3 ~ c2@3 ~", K: "f2@4 ~@2 f2@3 ~ f1 ~ c2@3 ~",
  L: "f2@4 ~@2 f2 ~ f2 ~ e2 ~ d2@3 ~", M: "c2@4 ~@2 c2@2 c2@3 ~ b1 ~ a1@2", N: "g1@2 ~ g1 g1@3 ~",
  O: "f1@2 ~ f1 f1@3 ~", P: "c2@2 ~ c2 c2@2 ~ g1", Q: "f#1@2 ~ f#1 f#1@3 ~", R: "g1@4 ~@2 g1@2 g1@3 ~ g1@3 ~",
  S: "g1@2 ~@6 f1@3 ~ g1@3 ~", T: "c2@4 ~@2 c2@2 c2@3 ~ f2@3 ~", U: "c2@4 ~@2 c2@2 c2@3 ~ g1 ~ a1@2",
  V: "c2@4 ~@2 c2@2 c2@3 ~ c2 ~ a1@2", W: "g1@4 ~@2 g1@2 g1@3 ~ g2 ~ d2@2", X: "g1@4 ~@2 g1@2 f1@3 ~ g1@3 ~",
  Y: "c2@4 ~@2 c2@2 c2@3 ~ f1@3 ~", Z: "g2@4 ~@2 g2@2 g2@3 ~ d3@3 ~", AA: "f3@5 ~ e3@5 ~ d3@4",
  AB: "~@2 c3@5 ~ b2@3 ~ a2@3 ~", AC: "g2@5 ~ f2@5 ~ e2@4", AD: "~@2 d2@5 ~ f1@3 ~ g1@3 ~",
  AE: "g1@4 ~@2 g1@2 g1 ~ b1 ~ e1@3 ~",
})).s("gm_electric_bass_finger").gain(0.32)

// other · string ensemble 1 · "#Vlo.Strn"
const string_ensemble_1 = note(`<
  ~ A B@3 ~@17 C D E F G@6 H@6 I@4 ~@7 J@4 K L M ~@3 N C D E F G@6 H@6 O@4 G@12
>`.pickRestart({
  A: "~@12 [g4,a4,g5,a5] [b4,b5] [c5,d5,c6,d6] [e5,f5,e6,f6]", B: "[[g5,g6]@11 ~@5]/3", C: "[a4,a5]", D: "[c5,c6]",
  E: "[d5,d6]@10 [c5,c6]@2 [e5,e6]@3 ~", // D C E
  F: "[d5,d6]@2 ~@8 [b3,c4,b4,c5] [d4,d5] [e4,f4,e5,f5] [g4,g5] [a4,b4,a5,b5] [c5,d5,c6,d6]", // D Cmaj7 D Fmaj7 G Asus2 Csus2
  G: "[[e5,e6]@12 [f5,f6]@3 [e5,e6]@10 ~ [d5,d6]@2 [c5,c6]@3 [b4,b5]@16 [a4,a5]@8 ~ [b4,b5]@4 [c5,c6]@3 [d5,d6]@10 ~ [c5,c6]@2 [e5,e6] ~ [d5,d6]@7 ~ [g4,g5]@2 [c5,f5,c6] ~@3 [d5,f5,d6]@2 ~@2]/6", // E F E D C B A B …
  H: "[[e5,e6]@12 [f5,f6]@3 [e5,e6]@10 ~ [d5,d6]@2 [c5,c6]@3 [b4,b5]@16 [a4,a5]@8 ~ [b4,b5]@4 [c5,c6]@3 [d5,d6]@10 ~ [e5,e6]@2 [f5,f6]@2 [a5,a6]@13 [b5,b6]@4 ~]/6", // E F E D C B A B …
  I: "[[c6,c7]@31 [d6,d7]@21 ~@4 [a4,f5] ~@3 [b4,g5] ~@3]/4", // C D Dm Em
  J: "[~@16 f4@11 [g4,b4]@4 ~ a4@7 [b4,d5]@4 ~ [g4,a#4,e5]@3 ~ f5@11 [b4,g5]@4 ~, ~@15 a4@12 ~@4 c5@8 ~@8 c5@16 ~, ~@16 c4@16 f4@12 ~@3 a4@12 ~@5]/4", // G Bm Edim Em
  K: "[c5,f5,a5]@5 ~ [d5,f5]@2, ~@5 [b4,e5,g5] ~@2, ~@11 a4@4 ~", L: "[g4,c5]@4 ~@2 [a3,c4,f4] ~, e5@3 ~@5",
  M: "[g3,c4,e4] ~", N: "~@3 [c4,c5] [e4,e5]@2 [g4,g5]@2",
  O: "[[c6,c7]@31 [d6,d7]@21 ~@4 [a4,f5] ~ [b3,c4,b4,c5] [d4,d5] [e4,f4,e5,f5] [g4,g5] [a4,b4,a5,b5] [c5,d5,c6,d6]]/4", // C D Dm Cmaj7 D Fmaj7 G Asus2 …
})).s("gm_string_ensemble_1").gain(0.3)

// chords · acoustic guitar steel · "St.Str.Gt"
const acoustic_guitar_steel = note(`<
  ~@2 A B C@6 D@2 E@3 F C@2 D@2 E G H I J K C L M@2 N O C P M Q N@2 R S T U C@6 D@2 E@3 F C@2 D@2 E G H I J K C L M@2 N
  O C P M Q N@2 R S T U C L M@2 N O C L M@2 N O
>`.pickRestart({
  A: "[c3,e3,g3,c4,e4]@9 ~ [c3,f3,a3,c4]@5 ~, ~@10 f4@3 ~@3", // C F
  B: "[c3,g3,b3,c4,g4]@4 [g3,c4,g4] ~ [g3,b3,c4,g4]@2 [c3,g3,b3,c4,g4]@2 [c3,f3,a3,c4]@5 ~, ~@10 f4@3 ~@3", // Cmaj7 C5 Cmaj7 F
  C: "[c3,e3,g3,c4,e4]@4 [g3,c4,e4] ~ [e3,g3,c4,e4]@2 [e3,g3,c4]@2 [e3,g3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2, ~@2 [c3,e4] [c3,f4]", // C F C F5
  D: "[d3,g3,b3,d4,g4]@4 [b3,d4,g4] ~ [g3,b3,d4,g4]@2 [g3,b3,d4]@2 [g3,b3,d4]@2 [g3,c4,e4]@2 [g3,c4,e4]@2, ~@2 [d3,g4]!2", // G C G5
  E: "[c3,f3,a3,c4,f4]@4 [a3,c4,f4] ~ [f3,a3,c4,f4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a#3,d4]@2 [f3,a#3,d4]@2, ~@2 [c3,f4]!2", // F A# F5
  F: "[c3,f3,a3,c4,f4]@4 [a3,c4,f4] ~ [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2, ~@2 c3 [c3,f4]", // F F5
  G: "[c3,e3,g3,c4,e4]@4 [g3,c4,e4] ~ [e3,g3,c4,e4]@2 [e3,g3,c4]@2 [e3,g3,c4]@2 [e3,g3,c4]@2 [e3,g3,c4]@2, ~@2 [c3,e4]!2", // C
  H: "[c3,f3,a3,c4,f4]@3 ~", I: "[a2,d3,a3,c4,f#4]@3 ~",
  J: "[d3,g3,c4,f4,a4]@4 [c4,f4,a4] ~ [g3,c4,f4,a4]@2 [g3,c4]@2 [g3,c4]@2 [g3,c4,f4]@2 [g3,c4,f4]@2, ~@2 [d3,f4,a4] [d3,a4]", // Dm7 F C5 Csus4 Dm D5
  K: "[d3,g3,c4,f4,a4] ~@3 [f3,a3,c4,f4,a4]@2 [g3,b3,d4]!2, ~@3 [d3,g4]", // Dm7 F G G5
  L: "[c3,e3,g3,c4,e4]@4 [g3,c4,e4] ~ [e3,g3,c4,e4]@2 [e3,g3,c4]@2 [e3,g3,c4] ~ [e3,g3,c4]@2 [e3,g3,c4]@2, ~@2 [c3,e4]!2", // C
  M: "[e3,g3,b3]@2 [e3,g3,b3]@2 [e3,g3,b3,e4]@2 [e3,g3,b3,e4]@2 [e3,g3,b3]@2 [e3,g3,b3] ~ [e3,g3,b3]@2 [e3,g3,b3]@2, [c3,e4] ~ [c3,e4]!2", // Em C
  N: "[g3,c4,f4]@2 [g3,c4,f4]@2 [g3,c4,f4,a4]@2 [g3,c4,f4,a4]@2 [g3,c4,f4]@2 [g3,c4,f4] ~ [g3,c4,f4]@2 [g3,c4,f4]@2, [d3,a4] ~ [d3,a4]!2", // Csus4 F Csus4 D5
  O: "[g3,b3,d4]@2 [g3,b3,d4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [f3,a3,c4,f4,a4]@3 ~ [d3,g3,b3,d4,g4]@3 ~, [d3,g4] ~@3", // G F G G5
  P: "[c3,e3,g3,c4,e4]@3 g4 [g3,c4,e4] ~ [e3,g3,c4,e4]@2 [e3,g3,c4]@2 [e3,g3,c4] ~ [e3,g3,c4]@2 [e3,g3,c4]@2, ~@2 [c3,e4]!2", // C
  Q: "[e3,g3,c4]@2 [e3,g3,c4]@2 [e3,g3,c4,e4]@2 [e3,g3,c4,e4]@2 [e3,g3,c4]@2 [e3,g3,c4] ~ [e3,g3,c4]@2 [e3,g3,c4]@2, [c3,e4] ~ [c3,e4]!2", // C
  R: "[c3,f3,a3,c4,f4]@4 [a3,c4,f4] ~ [c3,g3,c4,e4]@4 [c4,e4,g4] ~ [c3,f3,a3,c4,f4]@4, ~@6 g4@3 ~@7", // F C F
  S: "[a3,c4,f4] ~ [c3,g3,c4,e4,g4]@3 b4 [c4,e4,g4] ~ [d3,g3,b3,d4,g4]@2 ~@2 [c3,f3,a3,c4,f4]@3 ~", // F C G F
  T: "[d3,g3,b3,d4]@4 [b3,d4,g4] ~ [c3,f3,a3,c4]@4 [a3,c4,g4] ~ [d3,g3,b3,d4,g4]@4, g4@3 ~@3 g4@3 ~@7", // G F Am7 G
  U: "[b3,d4,g4] ~ [c3,f3,a3,c4]@4 [a3,c4,g4] ~ [c3,f3,a3,c4,f4]@2 ~@2 [d3,g3,b3,d4,g4]@3 ~, ~@2 g4@3 ~@11", // G F Am7 F G
})).s("gm_acoustic_guitar_steel").gain(0.22).pan(0.3)

// chords · electric guitar jazz · "#Pdl.Stee"
const electric_guitar_jazz = note(`<
  ~@26 A B ~ C ~ D A B ~@2 E@2 ~@26 A B ~ C ~ D A B ~@2 E@2 ~@4 A B ~ C ~ D A B ~ C ~ D
>`.pickRestart({
  A: "~@2 e5@3 ~@7 g4@4", B: "~@2 e5@3 ~@11", C: "~@6 c5@5 ~@5", D: "~@12 f5@3 ~", E: "~@10 a5@3 ~@3",
})).s("gm_electric_guitar_jazz").gain(0.17).pan(0.7)

// chords · flute · "Flutes"
const flute = note("<~ A@3 ~@88>".pickRestart({
  A: "[~@15 [g4,e5]@4 ~ [g4,e5] ~ [g4,e5] ~ [g4,e5]@2 [a4,f5]@5 [b4,g5]@4 ~ [b4,g5] ~ [b4,g5] ~ [b4,g5]@2 [a4,f5]@6]/3", // C Dm Em Dm
})).s("gm_flute").gain(0.25).pan(0.7)

// other · distortion guitar · "Dist.Gtr."
const distortion_guitar = note("<~@7 A B C D ~@27 E@2 F G ~@3 H B C D ~@27 E@2 F G ~@12>".pickRestart({
  A: "~@6 f4@2 [e4,f4] e4 d4@2 [c4,d4] c4 a3@2", B: "g3@11 ~ g3@2 a3@2", C: "c4@6 d4 c4", D: "d4",
  E: "[f3@5 ~ e3@5 ~ d3@6 c3@6 b2@3 ~ a2@4]/2", F: "g2@5 ~ f2@6 e2@4", G: "~@2 d2@5 ~@9",
  H: "~@6 g4@2 [e4,f4] e4 d4@2 [c4,d4] c4 a3@2", // Fmaj7 Csus2
})).s("gm_distortion_guitar").gain(0.25).pan(0.7)

// drums · kick
const kick = s("bd").struct("<A B@3 A@21 C A@5 D A@6 C ~@3 A@21 C A@5 D A@6 C ~@3 A@5 D A@5 D>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~@2 x", C: "x", D: "x ~@2 x ~@4",
})).gain(0.48)

// drums · rim
const rim = s("rim").struct("<~@4 [~@3 x]!18 ~@20 [~@3 x]!18 ~@32>").gain(0.48)

// drums · snare
const snare = s("sd").struct("<~@3 A B@18 C@3 D E@5 F E@6 ~@3 G B@18 C@3 D E@5 F E@6 ~@3 G E@5 F E@5 F>".pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@2", C: "~@3 x", D: "~@2 x!2", E: "~ x ~ x", F: "~ x!3", G: "~@8 x ~ x!3 ~@3",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@20 B C ~@13 B C ~@21 B C ~@13 B C D ~@12>".pickRestart({
  A: "~@3 x", B: "~@15 x", C: "x", D: "~ x ~ x!2 ~@3",
})).gain(0.48)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@24 A ~@14 A ~@22 A ~@14 A ~@14>".pickRestart({
  A: "~@7 x",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A@18 B ~@3 C A@4 D C A@5 B ~@3 A@18 B ~@3 C A@4 D C A@5 B ~@3 C A@4 D C A@4 D
>`.pickRestart({
  A: "x!4", B: "x", C: "~ x!3", D: "x!2 ~@2",
})).gain(0.56)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@41 [~@7 x] ~@37 [~@7 x] ~@12>").gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@25 A B ~@4 A B ~@30 A B ~@4 A B ~@9 B ~@4 A B ~@4 A>".pickRestart({
  A: "~@2 x!2", B: "x",
})).gain(0.48)

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

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@26
  [~ x ~ x ~ x ~ x]!11
  [~ x ~ x ~ x ~@2]
  ~@26
  [~ x ~ x ~ x ~ x]!11
  [~ x ~ x ~ x ~@2]
  ~@4
  [~ x ~ x ~ x ~ x]!12
>`).gain(0.16)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@4 [~@3 x]!22 ~@16 [~@3 x]!22 ~@28>").gain(1.04)

stack(
  piano, bass, string_ensemble_1, acoustic_guitar_steel, electric_guitar_jazz, flute, distortion_guitar, kick, rim,
  snare, low_tom, low_tom_soft, hihat, hihat_soft, mid_tom, crash, tambourine, tambourine_soft, jingle_bells
)

More by Glen Campbell