Strudelify

Soul With A Capital S

Tower of Power

KeyD majorTempo119 bpm
0:00/0:00
// Soul With A Capital S — Tower of Power
// 119 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 148 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(119/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 · percussive organ · "ORGAN 2"
const percussive_organ = note(`<
  ~@3 A@2 B C D E F G H I J K L M N O P Q R S T U@2 ~ V W X Y Z AA AB@3 AC AD AE@4 K L AE@2 O AF Q AG S T U@2 ~ V AH X
  AI Z AA AB@3 AC AD AE@4 K L AE@2 O AF Q AG S T U@2 ~ V W X Y Z AA AB@3 AC AD V AH X AI Z AA ~ AJ@3 AK ~@3 AL AM AN K L
  AE@2 O AF Q AG K L AE@2 O AF Q AG AO AP AQ AR AO AP AQ AR AO AP AQ AR K L AE@2 O AF Q AS ~
>`.pickRestart({
  A: "[~@14 [a#5,b5] d6@14 ~@3]/2", B: "[a5,c6,f6] ~ [g5,b5,e6] ~ [f5,a5,d6] ~ [g5,g#5,d6] ~ [g5,d6]@4 f5@2 d5@2",
  C: "~ [a4,c5] ~@2 [a4,c5]!2 d4!2 ~ [a4,c5] ~@2 a4!2 g4 ~", D: "~ d4!2 ~@3 d5!2 [g4,c5,f5] ~ [g4,c5,f5] ~@3 g4 d4",
  E: "~ a4 ~ d4 [a4,c5] ~ d4!2 a4 ~@3 a4!2 g4 ~", F: "d4 ~@2 d4 ~@3 d4 [f#4,a4,c5] ~ [g4,b4]@2 a4 d4 ~@2",
  G: "d4 ~ d4 [a4,d5] ~@3 d5 ~ a5 ~ d5 ~ d5 g4 d5", H: "f#5 ~@5 d5!2 [f#5,c6,f6] ~ [d5,a5,d6] ~@3 g4 d4",
  I: "~ a4 ~ d4 [a4,c5] ~ d4!2 a4 ~@3 [c5,f5] ~@2 d5", J: "d4 ~@2 d4 [a4,c5] ~@2 d4 [a4,c5] ~ d4 ~ e5 d5 f5 d5",
  K: "~@4 [a4,c5] ~ d4!2 ~@4 a4!2 [g4,d5] d5, ~@6 c5 ~", // Am G5
  L: "~ [a4,c5] d4 ~@2 [a4,c5] d5!2 ~@2 [c5,g5,d6] ~@2 [a5,d6] d5 ~", // Am Csus2 D5
  M: "~ a4 ~ d4 [a4,c5] ~@2 d4 a4 ~ f#5 d5 [a4,c5] ~@3", N: "d4 ~ [g4,d5] ~@2 d5 ~ d4 [g4,d5] ~ [g4,d5] ~ f4 ~ d4@2",
  O: "~@4 [a4,c5] ~ d4!2 ~@4 a4@2 ~ d4, ~@12 d5 ~@3", // Am
  P: "~ [a4,c5] d4 ~ [a4,c5] ~ d5!2 ~@2 e5 d4 c5@2 d5@2, ~@12 f5 ~@3", // Am
  Q: "~ [a4,c5] ~ d4 [a4,c5] ~@2 c5 ~@2 d4 ~ [c5,f5] ~ d5 ~", // Am F5
  R: "d4 [a4,d5]!2 ~ g#4 a4 ~@2 [g#4,d5] a4 [g#4,a4] ~ d4 ~ d4!2, ~@2 d5 ~@2 d5 ~@2", S: "[e4,f#4,a4,c#5]",
  T: "[f#4,g4,b4,d5]", U: "[[f#4,a4,c#5] [g4,b4,d5,a5], e4]/2",
  V: "[d5,a5,c6] ~@2 [d5,a5,c6] ~ d5 ~ d5 a5 ~@3 a5 ~ f5 ~", // D7
  W: "~@2 [a4,d5] ~@3 [g5,d6] ~ [g5,g#5,d6] a5 [g5,d6]@2 f5 d5 ~ d5", X: "~@11 d5 ~@4",
  Y: "[g#5,a5] c6@3 [g5,g#5,d6] ~ [g5,d6]@2 f5 d5 c5 a4 c5@2 g4 d4, ~@12 a4 ~@3", // Amaj7 G G5
  Z: "~ [a4,d5] ~@2 [a4,d5] ~ d4 [a4,d5] ~@2 [a4,d5] d4 [a4,d5]@2 g4 d4", AA: "~@8 f#4 ~ [g4,c5,d5,g5]@2 g5 f5 d5 a4",
  AB: "[~@14 [g5,g#5] c6@23 ~@2 [e5,a5,c6] ~ [d5,g5,b5] ~ [f5,a5] ~ [b4,e5,g5] [d5,f5,a5], ~@15 a5 ~@28 c5@2 ~@2]/3", // G#maj7 Am G F Em Dm
  AC: "~ [c5,d5,f5,a5] ~@2 f5 d5 g5 d5 a4 a5 e5 d5@5", AD: "~@9 d5 [d5,g5,b5] ~ [c5,f5,a5]@3 ~",
  AE: "d4 [a4,d5] ~ d4 [a4,d5] ~@2 d5 ~ [a4,d5] ~ d5 [d5,a5]!2 d5!2", // D5
  AF: "~ [a4,c5] d4 ~ [a4,c5] ~ d5!2 [g#5,d6] f5 g5@2 f5 d5 c5 ~, ~@4 g5 ~@3", // Am G#dim
  AG: "d4 [a4,d5] d6@2 ~ f5 g5@2 [f5,d6] g5 [d5,f5] ~ g5 f5 d5@2, ~@2 g5 ~@2 d6@3 ~@2 d6@2 ~@4", // D5 Dm
  AH: "d4@2 a4 d4 [g5,g#5,c6] a5 [g5,c6]@2 f5 d5 c5 a4 [g4,d5]@2 f4 d4", // G#maj7 C5 G5
  AI: "[a5,c6]@2 [d5,g5,b5]@2 g#5 f5 [g5,d6]@2 f5 d5 c5 a4 c5@2 g4 d4, [e5,g5] ~@11 a4 ~@3", // Am G G5 Em
  AJ: "[g5,g#5,d6] ~ [g5,d6]@2 [g5,d6] f5 [a5,d6]@2 d5 ~ c5 ~ [a4,c5] ~ c5@2", // G G5 D5 Am
  AK: "[g5,g#5,d6] ~ [g5,d6]@2 [g5,d6] f5 [a5,d6]@2 d5 ~ [d5,a5,d6]@4 ~@2", // G G5 D5
  AL: "~@14 [f3,g3,a3,b3] [d4,e4,f4,g4,a4,b4]", AM: "[a5,c6,d6,f6]@11 ~ [g5,b5,c6,e6]@3 ~, [c5,d5,e5,f5] ~@15",
  AN: "[f5,a5,b5,d6]@3 ~ [g5,g#5,d6] ~ [g5,d6]@2 [a5,d6] ~ [a5,d6]@2 a5 f5 b4@2", // Bm7b5 G G5 D5
  AO: "~@2 d5 ~ [c5,d5,f5,a5]@2 ~@2 [c5,d5,f5,a5]@2 ~ d5 [d5,g5] ~ a5 [d5,g5,b5], ~@6 b5 ~", // Dm7 G5 G
  AP: "~ [c5,f5,a5] ~@2 [a4,d5]@2 ~ d5 [d5,g5,d6] ~ d5!4 ~@2", // F D5 G5
  AQ: "~@4 [c5,d5,f5,a5]@2 ~@2 [c5,d5,f5,a5]@2 ~ d5 [d5,g5] ~ a5 [d5,g5,b5], ~@6 b5 ~", // Dm7 G5 G
  AR: "~ [c5,f5,a5] ~@2 [a4,d5] ~ d5!2 [d5,g5,d6] ~ d5!4 ~@2", AS: "d4 [a4,d5] d6@2 ~ f5 g5@2 ~@8, ~@2 g5 ~@2 d6@3 ~@8",
})).s("gm_percussive_organ").gain(0.17).pan(0.8)

// chords · percussive organ · "ORGAN 2" · soft notes
const percussive_organ_soft = note(`<
  ~@3 A ~@2 B ~ B C D ~ E C F G H@2 I G H ~@6 J ~ K ~@8 L@4 F G L@2 I ~ H M ~@5 J ~ K ~@8 L@4 F G L@2 I ~ H M ~@5 J ~ K
  ~@8 J ~ K ~@11 N ~@2 F G L@2 I ~ H M F G L@2 I ~ H M O P O ~ O P O ~ O P O ~ F G L@2 I ~ H M ~
>`.pickRestart({
  A: "~@14 a5 ~", B: "~@10 d4 ~@5", C: "~@2 d4 ~@3 d4 ~@9", D: "~@6 d5 ~@3 d5 ~ a4 ~@3", E: "~@10 d4 ~@3 d5 ~",
  F: "~@10 d4 ~@4 g4", G: "~@15 d4", H: "~@6 d4 ~@9", I: "~@10 d4 ~@3 d4 ~", J: "~@6 f5 ~@2 d5 ~ d5 ~@4",
  K: "~@2 d5 ~@13", L: "~@6 d5 ~ d4 ~ d5 ~@5", M: "~@2 a5 ~@13", N: "~@14 c4 ~", O: "~@10 d5 ~@5", P: "~@6 d5 ~@9",
})).s("gm_percussive_organ").gain(0.08).pan(0.8)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A@2 ~@4 B C B C@13 D E D F G H I H I H I H B C B C@12 J D E D K G H I H I H I H B C B C@12 J D E D K G H C H C H I H B
  C B C H C L C H I H B C B M A@2 ~@3 N B C B J B C B C B C B C B C O P B C B Q B C B C B C B R B C B C B C B S ~
>`.pickRestart({
  A: "[~@3 d2 ~@5 f1@2 ~@4 g#1@2 ~@4 b1 ~@5 a1 ~@4]/2", B: "d2 ~ d2!2 ~ d2 a2!2 c3 ~ c3 ~ d2!2 c2@2",
  C: "d2 ~ d2!2 ~ f1!3 f#1 ~ f#1 ~ c2!4", D: "f#1 ~ f#1!2 ~ c#2!3 f#2 ~ f#2 ~ f#1!2 f#1@2",
  E: "g1 ~ g1!2 ~ d2!3 g2 ~ g2 ~ g1!2 g1@2", F: "a1 ~ a1!2 ~ e2!3 a2 ~ a2 ~ a2!2 e2@2", G: "a1 ~ a1 ~ a1 ~ a1!2 ~@8",
  H: "d2 ~ d2!2 ~ d2 a2!2 c3 ~ c3 ~ d2!2 c2!2", I: "d2 ~ d2!2 ~ f1!3 f#1 ~ f#1 ~ c2!2 c#2!2",
  J: "d2 ~ d2!2 ~ f1!3 f#1 ~ f#1 ~ c2!2 d2!2", K: "a1 ~ a1!2 ~ e2!3 a2 ~ a2 ~ e2!2 a1@2",
  L: "d2 ~ a1 d2 ~ d2 a2!2 c3 ~ c3 ~ d2!2 c2!2", M: "d2 ~ d2!2 ~ f1!3 f#1 ~ f#1 ~ c2!2 d2@2",
  N: "~@12 [c#3,d3] [b2,c3] [a2,a#2] [f#2,g2,g#2]", O: "d2 ~ d2!2 ~ d2!3 e2 ~@3 f2 ~ f#2 ~",
  P: "d2 ~ d2!2 ~ d2!3 c2 ~@3 c2 ~ c#2 ~", Q: "d2 ~ d2!2 ~ d2!2 ~ e2@2 ~ f2 ~ f2 f#2@2",
  R: "d2 ~ d2 ~ e2 ~ e2 f2 ~@2 f2 ~ g2!2 ~ a2", S: "d2 ~ d2!2 ~ f1!3 f#1 ~ f#1 ~ c2!3 ~",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A@2 B@3 C B@11 C B@3 C D E D F G H B@17 C B@3 C D E D F G B@18 C B@3 C D E D F G B@22 A@2 B@3 C B@11 C B@3 C B@11 C
  B@3 C B@4 ~
>`.pickRestart({
  A: "[~@3 [g#3,b3,d4,f4]@2 ~@4 [b3,d4,f4,g#4]@2 ~@4 [d4,f4,g#4,b4]@2 ~@4 [f4,g#4,b4,d5]@2 ~@4 [f4,a4,b4,d5]@2 ~@3]/2", // G#dim Bdim Ddim Fdim Bm7b5
  B: "[f#4,b4,e5] ~@2 [e4,a4,d5] ~@2 [e4,a4,d5] ~@3 [c4,e4,a4,d5]!4 ~@2", // Esus2 Dsus2 Am
  C: "[f#4,b4,e5] ~@2 [e4,a4,d5] ~@2 [e4,a4,d5] ~@2 [e4,a4,d5] [c4,e4,a4,d5]!4 ~@2", // Esus2 Dsus2 Am
  D: "[e4,a4,c#5] ~@2 [e4,a4,c#5] ~@2 [e4,a4,c#5] ~@3 [c#4,e4,a4,c#5]!4 ~@2", // A
  E: "[f#4,b4,d5] ~@2 [f#4,b4,d5] ~@2 [f#4,b4,d5] ~@3 [d4,f#4,b4,d5]!4 ~@2", // Bm
  F: "[d4,g4,b4] ~@2 [d4,g4,b4] ~@2 [d4,g4,b4] ~@3 [b3,d4,g4,b4]!4 ~ [d4,g4,b4]", // G
  G: "[d4,g4,b4,d5] ~ [d4,g4,b4,d5] ~ [d4,g4,b4,d5] ~ [d4,g4,b4,d5]!2 ~@8", // G
  H: "[e4,a4,d5] ~@2 [e4,a4,d5] ~@2 [e4,a4,d5] ~@3 [c4,e4,a4,d5]!4 ~@2", // Dsus2 Am
})).s("gm_electric_guitar_clean").gain(0.27).pan(0.3)

// chords · electric guitar clean · "CLEAN GTR" · soft notes
const electric_guitar_clean_2 = note("<~@2 A@21 B A C ~ A@24 B A C ~ A@24 B A C ~ A@22 ~@2 A@40 ~>".pickRestart({
  A: "~@2 [e4,a4] ~@2 [e4,a4] ~@2 [e4,a4] ~@7", B: "~@2 [f#4,b4] ~@2 [f#4,b4] ~@2 [f#4,b4] ~@7",
  C: "~@2 [d4,g4] ~@2 [d4,g4] ~@2 [d4,g4] ~@7", // G5
})).s("gm_electric_guitar_clean").gain(0.16).pan(0.3)

// chords · brass section · "BRASS 1"
const brass_section = note(`<
  A@2 ~@4 B C ~ D ~@3 E ~@3 F G ~@7 H E ~@4 E ~ I J K J ~@3 E ~@3 F G ~@7 H E ~@4 E ~ I J K J E ~@2 E ~@3 F G ~@7 H E
  ~@4 E ~ I J K J E ~@4 E ~ E@4 A@2 ~@4 B ~@7 E@4 ~@8 L M N O ~ E@11 ~
>`.pickRestart({
  A: "[~@3 [b3,d4,f4,f5] ~@5 [g#4,g#5]@2 ~@4 [b4,b5]@2 ~@4 [d5,d6]@2 ~@4 [b4,f5,f6]@2 ~@3, ~@9 [d4,f4] ~@5 [f4,g#4] ~@5 [g#4,b4] ~@5 d5 ~@4]/2", // Bdim G# B D Bdim Dm Fm G#m
  B: "[d4,d5,d6]@3 ~@13", C: "~@10 [a3,a4,c5,f5] ~ [a3,g4,b4,e5] [a3,f4,a4,d5] ~@2",
  D: "~@8 [a4,c5,f5]!2 [g4,b4,e5]!2 [f4,a4,d5]!2 ~@2", E: "~@10 [a3,a4,c5,f5] ~ [g3,g4,b4,e5] [f3,f4,a4,d5] ~@2",
  F: "~@10 [f#3,f#4] ~ [a3,a4] [b3,b4] ~@2", G: "[a3,d4,f#4,a4,c5]@3 ~",
  H: "[b4,d5,f#5,a5] ~ [b4,d5,f#5,a5] ~ [b4,d5,f#5,a5] ~ [b4,d5,f#5,a5]!2 ~@8", // Bm7
  I: "[d4,d5,d6]@3 ~@10 [f#3,d#4,f#4,a4] [g3,e4,g4,a#4] [g#3,f4,g#4,b4]", // D D#dim Edim Fdim
  J: "[a3,f#4,a4,c5] [g#3,f4,g#4,b4] [a3,f#4,a4,c5] [g#3,f4,g#4,b4] [a3,f#4,a4,c5] [b3,g#4,b4,d5] ~ [a3,f#4,a4,c5] ~@8", // F#dim Fdim F#dim Fdim F#dim G#dim F#dim
  K: "~@2 [a3,a4,c5,f5] ~ [a3,g4,b4,e5] [a3,f4,a4,d5] ~@7 [f#3,d#4,f#4,a4] [g3,e4,g4,a#4] [g#3,f4,g#4,b4]", // F Em Dm D#dim Edim Fdim
  L: "~@3 [f3,f4] [f#3,f#4] [a3,a4] b4 [d4,d5]@3 b3@4 ~@2, ~@6 b3@4 b4 ~@5", M: "~@4 [e4,e5]@2 ~@7 [f4,f5] ~@2",
  N: "~@3 [f3,f4] [f#3,f#4] [a3,a4] [b3,b4] [d4,d5]@3 [b3,b4] ~@5, ~ [e3,e4] ~@6", O: "~@4 [e4,e5]@2 ~@4 [b3,b4] ~@5",
})).s("gm_brass_section").gain(0.72)

// bass · baritone sax · "BARITONSAX"
const bass_2 = note(`<
  A B ~@5 C D C D ~@2 C D ~@2 C E C D ~@5 F ~@5 C D ~ C D C D ~@2 C D ~@2 C E C D ~@5 F ~@5 C D ~ C D C D ~@2 C D ~@2 C
  E C D ~@5 F ~@5 C D ~ C D C D ~@4 C G@4 D A B ~@11 C G@3 D ~@8 H I J K ~ C G@9 L ~
>`.pickRestart({
  A: "c2 c#2 d2@2 ~@2 d#2 e2 f2 ~@3 f#2 g2 g#2 ~", B: "~@2 a2 a#2 b2 ~@3 g2 g#2 a2 ~@5", C: "~@14 c2 c#2", D: "d2 ~@15",
  E: "d2 ~@2 d2 ~@2 d2 ~@3 c2 c#2 d2 ~@3", F: "a2 ~ a2 ~ a2 ~ a2!2 ~@8", G: "d2 ~@13 c2 c#2",
  H: "d2 ~@2 f2 f#2 a2 b2 d3@3 b2 ~@5", I: "d2 ~@9 d2 ~@5", J: "~@2 e2 f2 f#2 a2 b2 d3@3 b2 ~@5",
  K: "d2 ~@9 b2 ~ d3 d2 ~@2", L: "d2 ~@13 c2 ~",
})).s("gm_baritone_sax").gain(0.56)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note("<~@22 A B@3 ~@24 A B@3 ~@24 A B@3 ~@66>".pickRestart({
  A: "a4 ~ [a4,a5] ~ [a4,a5] ~ [a4,a5] ~, a5 ~@15", B: "[a4,a5] ~ [a4,a5] ~ [a4,a5] ~ [a4,a5] ~",
})).s("gm_lead_2_sawtooth").gain(0.19).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  A B C ~@2 D E@4 F E@11 G@4 H E@6 I E@2 J K L E@10 M G@3 N H E@6 I E@3 O L E@10 M G@3 N H E@6 I E@3 P E@6 Q E@4 R B C
  ~@2 S E@7 T L E@2 U E@3 V E J L W L E@2 X E@2 Y Z E@3 X E@3 X ~
>`.pickRestart({
  A: "~@3 x ~@5 x ~@5 x", B: "~@5 x ~@5 x ~@4", C: "x", D: "~@3 x ~ x!2 ~@2 x ~ x ~@4",
  E: "x ~@2 x ~@2 x ~@3 x ~@2 x ~@2", F: "x ~@2 x ~@2 x ~@2 x ~ x ~ x ~@2", G: "x ~@2 x ~@2 x ~@3 x ~@5",
  H: "x ~ x ~ x ~ x!2 ~@8", I: "x ~@2 x ~@2 x ~@3 x ~ x ~ x ~", J: "x ~@2 x ~@2 x ~@3 x ~@2 x ~ x",
  K: "x ~@4 x ~ x ~@8", L: "x ~@2 x ~@2 x ~@4 x ~ x ~@2", M: "x ~@2 x ~@2 x ~@3 x ~@2 x!2 ~",
  N: "x ~@2 x ~@2 x ~ x ~@2 x ~@4", O: "x ~@2 x ~@6 x ~ x ~@3", P: "x ~@2 x ~ x!2 ~@2 x ~@6",
  Q: "x ~@2 x ~@2 x ~ x ~ x ~ x ~ x ~", R: "x ~@2 x ~@5 x ~@5 x", S: "~@2 x!2", T: "x ~@2 x ~@5 x ~ x ~@4",
  U: "x ~@2 x ~ x!2 ~@2 x ~@2 x ~ x ~", V: "x ~@2 x ~@2 x ~ x ~ x ~@5", W: "x ~@2 x ~@2 x ~ x ~@2 x ~ x ~ x",
  X: "x ~@2 x ~@2 x ~ x ~ x ~ x ~@3", Y: "x ~@2 x ~@2 x ~@2 x ~ x!2 ~@2 x", Z: "~ x!3 ~@2 x ~ x ~ x ~ x ~@3",
})).gain(0.56)

// drums · snare
const snare = s("sd").struct(`<
  A B ~@3 C D@4 E D@11 E@4 F D@6 G D@3 H I J@3 D@2 J@5 D E@4 F J@6 G J@3 K I J@10 D E@4 F J@6 G J@3 C L J@5 M J N J D O
  B ~@3 P J@7 Q I J@2 R J@3 S J@3 T J@3 U J@2 V U J N J S J N J W ~
>`.pickRestart({
  A: "x ~@2 x ~@5 x ~@5 x", B: "~@5 x ~@5 x ~@4", C: "~@2 x ~@5 x ~@3 x!4", D: "~@4 x ~@4 x ~@2 x ~@3", E: "~ x ~ x",
  F: "x ~ x ~ x ~ x!2 ~@8", G: "~@4 x ~@5 x!5 ~", H: "~@3 x!2 ~ x ~ x ~@2 x!5", I: "~@4 x ~@7 x ~@2 x",
  J: "~@4 x ~@4 x ~@2 x ~@2 x", K: "~@4 x ~@2 x!3 ~@2 x!4", L: "~ x ~@2 x ~@4 x ~@2 x ~@2 x", M: "~@4 x ~@3 x!7 ~",
  N: "~@4 x ~@2 x ~ x ~@2 x ~@2 x", O: "~@3 x ~@5 x ~@5 x", P: "~@2 x ~ x!2 ~ x!2 ~ x!2 ~ x!3",
  Q: "~@4 x ~@2 x!2 ~ x ~ x!4", R: "~@2 x ~@5 x ~@2 x!5", S: "~@4 x ~@4 x ~ x!5", T: "~@4 x ~@4 x ~@2 x ~ x!2",
  U: "~@4 x ~@6 x!5", V: "~@2 x ~ x ~@2 x", W: "~@4 x ~@4 x ~ x!4 ~",
})).gain(0.56)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  A B ~@4 C D@2 E F D@2 E D@2 E@2 D@2 E@2 ~@5 G H I J H I J G H I K ~ L M N O P J N M Q M J ~@5 Q N R J S R J Q S R T ~
  L M N L U J M@2 Q M J ~@5 Q N R J S R V Q S R W ~ L Q N S R X M Y M J A B ~@3 Z Y AA U E AB AA U AC AD AA U L Y AA R
  AE Y AA R AE AF J X AG N J L AH AB AI X R AB AI X R ~
>`.pickRestart({
  A: "~ x!2 ~@4 x!2 ~@4 x!2 ~", B: "~@3 x!2 ~@4 x!2 ~@5", C: "~@14 x!2", D: "~ x!2 ~@3 x!2 ~@6 x!2",
  E: "~ x!2 ~@3 x!2 ~@8", F: "~@15 x", G: "~@7 x ~@6 x!2", H: "~@2 x ~@3 x!2 ~@6 x!2", I: "~ x ~@5 x ~@7 x",
  J: "~ x ~@4 x!2 ~@8", K: "~ x ~@14", L: "~@7 x ~@8", M: "~@6 x!2 ~@6 x ~", N: "~ x ~@4 x!2 ~@6 x ~", O: "~@7 x ~@7 x",
  P: "~ x ~@4 x!2 ~@6 x!2", Q: "~@7 x ~@6 x ~", R: "~ x ~@5 x ~@8", S: "~@2 x ~@3 x!2 ~@6 x ~",
  T: "~ x ~@4 x ~@4 x ~@4", U: "~ x ~@5 x ~@6 x ~", V: "~ x ~@4 x!2 ~ x ~@6", W: "~@11 x ~@4", X: "~@6 x!2 ~@8",
  Y: "~@7 x", Z: "~@6 x ~@2 x ~@6", AA: "~ x ~@4 x ~@7 x ~", AB: "~ x ~@12 x ~", AC: "~ x!2 ~@3 x ~@9",
  AD: "~@2 x ~@6 x ~@4 x ~", AE: "~ x!2 ~@4 x ~@8", AF: "~ x!2 ~@11 x ~", AG: "~ x ~@5 x ~ x ~@6",
  AH: "x ~@6 x ~ x ~@6", AI: "~ x ~@4 x ~@9",
})).gain(0.16)

// drums · low tom
const low_tom = s("lt").struct("<[~@3 x ~@4] ~@104 [~@3 x ~@4] ~@42>").gain(0.56)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A B ~ C@2 ~ D E@3 F@10 G@2 ~@5 D E@5 H I J E ~ F@8 K F G@2 ~@5 D E@5 L M E@2 C F@10 G@2 ~@5 D E@5 N M E@2 C O F@5 C D
  E@2 P Q B ~ R C ~@2 E@6 C S@2 T U M E@2 V M E@2 C ~@17
>`.pickRestart({
  A: "~@5 x ~@5 x ~@4", B: "~ x ~@5 x ~@5 x ~@2", C: "~ x ~@14", D: "~@5 x ~@3 x ~@3 x ~@2",
  E: "~ x ~@3 x ~@3 x ~@3 x ~@2", F: "~@13 x ~@2", G: "~@5 x ~@7 x ~@2", H: "~ x ~@3 x ~@4 x ~@5",
  I: "~@5 x ~@3 x ~ x ~ x ~@2", J: "~ x ~@3 x ~@3 x ~ x ~ x ~@2", K: "~ x ~@11 x ~@2", L: "~ x ~@3 x ~@6 x ~@3",
  M: "~@9 x ~@3 x ~@2", N: "~ x ~@10 x ~@3", O: "~@7 x ~@5 x ~@2", P: "~ x ~@3 x ~@3 x ~@6", Q: "~ x ~@3 x ~@5 x ~@4",
// … 57 more lines

More by Tower of Power