Strudelify

(Sitin' on) The Dock of the Bay

Otis Redding

KeyD majorTempo90 bpm
0:00/0:00
// (Sitin' on) The Dock of the Bay — Otis Redding
// 90 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/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 · acoustic bass · "bass"
const bass = note(`<
  A@4 B@2 C@2 D@2 C@2 E@4 F@2 E@2 B@2 C@2 D@2 C@2 E@4 F@2 E@2 G H G I G J K L B@2 C@2 D@2 C@2 E@4 F@2 E@4 G H G I G J K
  L B@2 C@2 D@2 C@2 E@4 F@2 E@2 G H G I G J K L B@2 C@2 D@2 C@2 E@4 F@2 E@6 F@2 E@2 M@2 N@2 M@2 N@2 ~@2
>`.pickRestart({
  A: "d2@5 ~ d2@2 a2@3 ~ a2@3 ~", B: "[d2@5 ~ a1@2 d2@2 e2@2 f2@2 f#2@7 ~ c#2 f#2@3 f#2@3 ~ f#2@2]/2",
  C: "[g2@5 ~ d2@2 g2@2 f#2@2 f2@2 e2@7 ~ b1 e2@3 e2@3 ~ a1 b1]/2",
  D: "[d2@5 ~ a1@2 d2@2 e2@2 f2@2 f#2@7 ~ b1 e2@3 f#2@3 ~ f#2@2]/2",
  E: "[d2@5 ~ a1@2 d2@2 c#2@2 c2@2 b1@7 ~ b1 b1@2 ~ b1@3 ~ b1 c#2]/2",
  F: "[d2@5 ~ a1@2 d2@2 d2@2 d#2@2 e2@7 ~ b1 e2@2 ~ e2@3 ~ a1@2]/2", G: "d2@2 d2@3 ~ d2 f#2 a2@2 a2@3 ~ a2@2",
  H: "g2@2 g2@3 ~ g2 g2@2 ~ g2@2 g2 b2 e2@2", I: "g2@2 g2@3 ~ g2 g2@2 ~ g2@2 g2 a2 e2@2",
  J: "g2@2 g2@3 ~ g2 g2@2 ~ g2@3 ~ g2 a2", K: "c3@2 c3@3 ~ c3@4 c3@2 b2@2 a#2@2", L: "a2!8",
  M: "[d2@2 d2@3 ~ a1@2 d2@2 a1@2 b1@2 d2@4 d2@3 ~ d2 d2@2 ~ d2@3 ~ a1 b1]/2",
  N: "[d2@2 d2@3 ~ a1@2 d2@2 c#2@2 c2@2 b1@4 b1@3 ~ b1 b1@2 ~ b1@3 ~ b1 c#2]/2",
})).s("gm_acoustic_bass").gain(0.56)

// chords · piano · "Rhtyhm 1/Piano"
const piano = note(`<
  A@2 B@2 C D E F G H E I J K L K M N O P C D E F G H E I J K L K M N O P Q R S F Q T U V C D E F G H E I J K L K M N O
  P W X Y T Z AA AB AA AC AD C D E F G H E I J K L K M N O P Y T Z AA AB AA AC AD AE AF AG AH AI AJ AK AL AM AN AO AN AP
  AQ AR AS AM AN AO AN AP AQ AR AS AT AU AV AW AM AU AX AW ~@2
>`.pickRestart({
  A: "[~@14 a4 d5, d4@9 ~ d4@7 ~ d4@7 ~ d4@4 ~@2, ~@2 a4@9 ~ a4@7 ~ a4@6 ~@6, ~@4 d5@9 ~ e5@7 ~@11, ~@3 a5@8 a5@4 ~]/2",
  B: "[~@14 f#5@7 ~ a4 b4 d5@2 ~ d5@3 d5@2, d4@9 ~ d4@16 ~@6, ~@2 a4@9 ~ a4@8 ~@12, ~@2 e5@5 ~@9]/2",
  C: "~@2 a4@4 d5 ~@7 d5 ~, [d4,f#5] [d4,e5], ~@5 a4@3", D: "~@4 d5@2 e5@9 ~, f#4@15 ~, e5 ~@3, ~@2 a4@7 ~@7",
  E: "~@6 g4 ~@3 d4@4 g4 ~, a4 b4, ~ d4@3 ~@4", F: "~@6 a4@3 ~ b4@5 ~, b4@4 g4@11 ~, ~@2 d4@13 ~",
  G: "~@6 f#5@2 ~@2 a4@4 d5 ~, d4 ~, f#5 d5 ~@2, ~ a4@3 [f#4,f#5]@4", // F#
  H: "~@6 d5 ~, f#4@7 ~, f#5@4 d5@7 ~@5, ~ a4@3 ~ a4@2 ~, ~@6 f#5@9 ~", I: "~@6 g5 ~, ~@4 b4@11 ~, ~@3 d5@4 ~",
  J: "~@6 d5 ~, d4@7 ~, f#5@4 d5@7 ~@5, ~ a4@3 ~ a4@2 ~, ~@6 f#5@9 ~",
  K: "c#5 ~@5 f#5@2, ~@2 f#5@7 ~ f#4@6, ~ b4@3, ~@3 c#5@3 ~@2", L: "~@4 d5@2 e5@9 ~, d4@15 ~, e5 ~@3, ~@2 a4@7 ~@7",
  M: "~@6 f#5@2 ~@2 a4@4 d5 ~, d4 [e4,f#5], f#5 d5 ~@2, ~ a4@3 ~@4", // Esus2
  N: "~@4 d5@2 e5@9 ~, e4@15 ~, e5 ~@3, ~@2 a4@7 ~@7", O: "~@3 e5 f#5 e5 d5 a4, ~ e4@7, ~@3 a4@10 ~@3, ~@4 d5@7 ~@5",
  P: "~@6 f#5@2 ~@6 d5 ~, d4 [d4,e5], f#5 d5 ~@2, ~ a4@3 ~ a4@3", Q: "~@2 a4@4 d5 ~@7 a4 ~, [d4,f#5] b4, ~@5 e4@3",
  R: "a4 ~@5 d5@2, ~@2 d5@7 ~ d4@6, ~ g4@3, ~@3 a4@3 ~@2", S: "~@6 d5 ~@7 a4 ~, [d4,e5]@4 ~ e4@3, ~ a4@3 b4@4",
  T: "~@3 a4 b4 a4 g4 d4, ~@3 d4@10 ~@3, ~@4 g4@7 ~@5", U: "~@6 c5 ~, e5@4 c5@7 ~@5, ~ g4@3 ~ g4@2 ~, ~@6 e5@9 ~",
  V: "~@6 c#5 ~, ~@4 e4@11 ~, ~@3 a4@4 ~", W: "~@3 e5 f#5 e5 d5 a4, ~ d4@7, ~@3 a4@10 ~@3, ~@4 d5@7 ~@5",
  X: "~@3 d#5@2 f#5 d#5 ~, ~@2 f#4@13 ~, ~@4 b4@11 ~", Y: "~@6 f#5@2 ~@6 a4 ~, d4@4 ~ e4@3, f#5 d5 ~@2, ~ a4@3 b4@4",
  Z: "~@2 a4@4 d5 ~@3 e4@4 a4 ~, [d4,f#5] c#5", AA: "~@4 g4@2 a4@9 ~, a4 ~@3, ~@2 d4@7 ~@7",
  AB: "~@6 d5 ~@3 e4@4 a4 ~, [d4,e5] ~, ~ a4@3 c#5@4", AC: "~@3 d5 e5 d5 c5 g4, ~@3 g4@10 ~@3, ~@4 c5@7 ~@5",
  AD: "~@3 a4@5, c#5", AE: "d4!2", AF: "f#4@15 ~", AG: "~@6 g4 ~@3 d4@4 g4 ~, ~ d4@3 b4@4",
  AH: "~@6 a4@3 ~ b4@5 ~, ~@2 d4@13 ~, ~@4 g4@11 ~", AI: "~@2 a4@6 ~@2 a4@5 ~, d4 f#4", AJ: "~ a4@3 ~ a4@2 ~, f#4@7 ~",
  AK: "~@2 d4@6 ~@2 d4@5 ~, a4 b4", AL: "~@4 b4@11 ~", AM: "~ a4@3 ~ a4@2 ~, d4@7 ~", AN: "~@5 f#4@3, ~ b4@3",
  AO: "~@2 a4@7 ~@7, d4@15 ~", AP: "~@2 a4@6 ~@2 a4@5 ~, d4 e4", AQ: "~@2 a4@7 ~@7, e4@15 ~",
  AR: "~@3 a4@10 ~ a4@2, ~ e4@7", AS: "~ a4@3 ~ a4@3, d4!2", AT: "~@5 a4@3, d4", AU: "~@2 a4@13 ~, d4@15 ~",
  AV: "~@2 a4@5 ~@3 a4@5 ~, d4 ~", AW: "~@4 b4@7 ~ b4@2 f#4@2, ~@3 f#4@10 ~@3", AX: "~@2 a4@5 ~@3 a4@6, d4!2",
})).s("gm_piano").gain(0.44).pan(0.7)

// chords · acoustic guitar steel · "Rhythm 2/Guitar"
const acoustic_guitar_steel = note(`<
  ~@21 A B C D E F G A H I J K L A M N G O G P G Q R S A B C D E F G A H I J K L A M I T O G U V W G Q R S A B C D E F G
  A H I J K L A M O G U V W G Q R X Y Z AA AB AC AD AE Y ~ AF AG AH AI Y AJ Y ~ AF AG AH AI Y AJ AK@2 AL ~ AF AM AN AG
  ~@2
>`.pickRestart({
  A: "[f#3,a3,d4]@6 [e3,a3,d4]@9 ~", B: "[g3,b3,d4]@5 ~ [g3,b3,d4] ~ [g3,b3,d4]@7 ~", C: "b3@6 a3@9 ~, [g3,d4]@15 ~",
  D: "[a3,d4,f#4]@5 ~ [a3,d4,f#4] ~ [a3,d4,f#4]@6 f#3 ~, ~@2 f#3 ~", E: "e4@5 ~ f#4@9 ~, [f#3,d4,a4]",
  F: "[g3,b3,d4]@8 [g3,b3,d4]@7 ~", G: "[b3,d4,g4]@6 [a3,d4,g4]@9 ~", H: "[d4,f#4,b4]@6 [c#4,f#4,b4]@9 ~",
  I: "f#4@6 e4@9 ~, [d3,d4,a4]@15 ~", J: "d4@6 c#4@9 ~, [b3,f#4]@15 ~",
  K: "[a3,d4,f#4]@6 d3 ~ [a3,d4,f#4]@5 ~ [a3,d4,f#4] ~, d3 ~@3", L: "f#4@6 e4@9 ~, [e3,d4,a4]@15 ~",
  M: "[a3,d4,f#4]@8 [a3,d4,f#4]@6 f#3 ~, ~@2 f#3 ~", N: "[a3,d4,f#4]@5 ~ [a3,d4,f#4] ~ [a3,c#4,e4]@5 ~ [a3,c#4,e4] ~",
  O: "[a3,d4,f#4]@6 d3 ~ [a3,c#4,e4]@5 ~ [a3,c#4,e4] ~, d3 ~@3", P: "[a3,d4,f#4] [a3,c#4,e4]",
  Q: "[e4,g4,c5]@6 [d4,g4,c5]@9 ~", R: "c#4@6 b3@9 ~, [a3,e4]@15 ~",
  S: "[a3,d4,f#4]@6 d3 ~@3 [a3,d4,f#4]@3 ~ [a3,d4,f#4] ~, d3 ~@3", T: "[d#4,f#4,b4]@6 [c#4,f#4,b4]@9 ~",
  U: "[a3,d4,f#4]@8 [a3,c#4,e4]@7 ~", V: "a3@5 ~ b3@9 ~, [g3,d4]@15 ~",
  W: "[f#3,a3,d4]@5 ~ [f#3,a3,d4] ~ [a3,c#4,e4]@7 ~", X: "a3@6 d3 ~@3 a3@3 ~ a3 ~, d3 ~@3", Y: "[f#3,a3]@6 [e3,a3]@9 ~",
  Z: "[g3,b3]@5 ~ [g3,b3] ~ [g3,b3]@7 ~", AA: "b3@6 a3@9 ~, g3@15 ~", AB: "a3@5 ~ a3 ~ a3@6 f#3 ~, ~@2 f#3 ~",
  AC: "f#3", AD: "[g3,b3]@8 [g3,b3]@7 ~", AE: "b3@5 ~ a3@9 ~", AF: "d3@15 ~", AG: "b3@15 ~",
  AH: "a3@6 d3 ~ a3@5 ~ a3 ~, d3 ~@3", AI: "e3@15 ~", AJ: "a3@8 a3@6 f#3 ~, ~@2 f#3 ~", AK: "d3", AL: "a3@8 a3@7 ~",
  AM: "[g3,a3]@6 [e3,a3]@9 ~", AN: "[g3,a3]@6 d3 ~ a3@5 ~ a3 ~, d3 ~@3",
})).s("gm_acoustic_guitar_steel").gain(0.37).pan(0.3)

// other · tremolo strings · "Rhythm 3/String"
const tremolo_strings = note(`<
  ~@36 A B C B A D E F G H I J K L M N O P Q R S T@2 U Q V W D A B X D Y F G H I J K L M N O P Q R S T@2 U W D A B X D Y
  F G H I J K L M N O P Q R S T@2 U O P Q R S T@2 U Q O Z P Q@2 AA P ~@2
>`.pickRestart({
  A: "d4@8 a3@5 ~ a3@2", B: "g4@13 ~ g4 ~", C: "d4@5 ~ d4@2 a3@5 ~ a3@2", D: "g4@13 ~ g4@2", E: "c4@13 ~ c4@2",
  F: "a3@5 ~ a3@2 a3@6 a3@2", G: "d4 f#4", H: "f#4@13 ~ f#4@2", I: "g4 e4", J: "e4@13 ~ e4 ~", K: "d4@5 ~ d4@2 f#4@8",
  L: "f#4@13 ~ f#4 ~", M: "g4@5 ~ g4@2 e4@5 ~ e4@2", N: "e4@5 ~ e4@2 e4@6 e4@2", O: "d4@13 ~ d4@2", P: "b3@13 ~ b3 ~",
  Q: "d4@13 ~ d4 ~", R: "b3@13 ~ b3@2", S: "d4@8 e4@5 ~ e4@2", T: "e4@13 ~ e4@2", U: "d4@8 f#4@5 ~ f#4@2",
  V: "b3@5 ~ b3@2 b3@6 b3@2", W: "d4@5 ~ d4@2 a3@8", X: "d4 a3", Y: "c4@13 ~ c4 ~", Z: "d4 b3",
  AA: "d4@5 ~ d4@2 b3@5 ~ b3@2",
})).s("gm_tremolo_strings").gain(0.56)

// other · acoustic guitar steel · "Solo 1/Rhythm 4"
const acoustic_guitar_steel_2 = note(`<
  ~@70 A@2 B C D@2 E@2 F G H I J@4 K L M N O P ~ Q R S ~@2 T U ~ V U W S W T X Y Z U W S W T S Y Z AA AB AC AD AE AB AF
  AD ~@2
>`.pickRestart({
  A: "[b4@4 d5@6 [d5,f#5]@2 ~@2 [f#5,a#5]@10 [e5,a#5]@3 ~ [e5,a#5]@3 ~]/2", // D F# Edim
  B: "g5@2 ~ b5@2 ~@2 d5 b5 ~ a#5 ~ [c5,a5] ~ [b4,g#5]@2", C: "~@8 g#5@3 ~ g#5@3 ~, ~@7 b4@3 ~ b4@4 ~",
  D: "[~@8 f#5@2 f#5 ~@3 a#5@9 ~ [e5,a#5]@3 ~ [c#5,a#5]@2 ~@2]/2", // Edim F#
  E: "[g5@7 ~ b5 ~ a#5 ~ a5@2 [e5,g#5]@6 ~ b5 ~ [b5,e6] ~ [b5,e6]@2 ~ [b5,e6] ~ c#6@2]/2", // E E5
  F: "b4 d5 d5@2 d5@2 b4@2 [d5,f#5]@2 d5@2 d5@2 [e5,f#5]@2", // D Esus2
  G: "e5@5 ~@2 e6 ~@2 [b4,f#5]@2 d5@2 ~ d5, ~@6 b5@2 d#6@3 ~@5, ~@9 b5@4 ~@3", // B5
  H: "f#5@7 ~ d5@2 [d5,e5]@2 d5@2 [e5,f#5]@2", I: "f#5 [b4,f#5]",
  J: "[b4 a4 d5@2 d5@2 f#5@2 d5 ~ b4 a4 d5 f#5 g#5@9 ~ [e5,g#5] ~ [b4,e5] ~ [e5,g#5]@2 d5@8 ~@2 f#5@2 e5@2 d5@2 f#5@8 ~@2 [b4,f#5]@3 ~ [b4,f#5]@4]/4", // E E5 E B5
  K: "[a4,d5]@3 ~ [a4,d5]@2 d5@2 [a4,c#5]@3 ~ [a4,c#5]@4, ~@4 b4@3 ~", // D5 A
  L: "~@2 b4@2 b4@2 a4 ~ a4 ~@3 f#4@3 ~, ~@7 b4@4 ~@5", M: "a4@3 ~ a4@2 b4!2 a4@5 ~ b4!2", N: "a4 f#4 a4@11 b4@3",
  O: "a4@3 ~ a4@2 b4@2 a4@2 a4@3 ~ f#4@2", P: "b4@2 ~ a4@2 ~ f#4@2 b4@2 a4 f#4@2 ~ d4@2",
  Q: "a4@3 ~ a4@3 ~@2 a4@3 a4@3 ~", R: "f#5 e5", S: "e5@4 d5@2 e5@9 ~", T: "f#5@5 ~ f#5@2 f#5@8", U: "f#5@5 ~ f#5@9 ~",
  V: "~@3 d5@4 ~", W: "~@2 f#5@7 ~@3 f#5@4", X: "e5@4 ~@2 e5@9 ~", Y: "~@6 e5@2 f#5@2 e5@2 d5@3 ~",
  Z: "f#5@5 ~ f#5@2 e5@8", AA: "~@2 a5@7 ~@3 a5@4", AB: "g5@4 ~@2 e5@3 ~ g5@5 ~", AC: "g5 f#5",
  AD: "~@3 c#5 e5 c#5 ~@2", AE: "g5@5 ~ g5@9 ~", AF: "g5 e5",
})).s("gm_acoustic_guitar_steel").gain(0.56).pan(1)

// other · acoustic guitar steel · "Solo 1/Rhythm 5"
const acoustic_guitar_steel_3 = note(`<
  ~@70 A@2 B C D@2 E@2 F G H I J@4 K L M N O P Q@2 R S T U V W X Y Z AA AB AC AD AE@2 AF Z AA AB AC AD AE@2 AF AB Z AG
  AA AB@2 AH AA ~@2
>`.pickRestart({
  A: "[b4@4 d5@6 [d5,f#5]@2 ~@2 [f#5,a#5]@10 [e5,a#5]@3 ~ [e5,a#5]@3 ~]/2", // D F# Edim
  B: "g5@2 ~ b5@2 ~@2 d5 b5 ~ a#5 ~ [c5,a5] ~ [b4,g#5]@2", C: "~@8 g#5@3 ~ g#5@3 ~, ~@7 b4@3 ~ b4@4 ~",
  D: "[~@8 f#5@2 f#5 ~@3 f#5@9 ~ [e5,a#5]@3 ~ [c#5,a#5]@2 ~@2]/2", // Edim F#
  E: "[g5@7 ~ b5 ~ a#5 ~ a5@2 [e5,g#5]@5 ~@2 b5 c#6 [b5,e6] ~ [b5,e6]@2 c#6 [b5,e6] ~ c#6@2]/2", // E E5
  F: "b4 d5 d5@2 d5@2 b4@2 [d5,f#5]@2 d5@2 d5@2 [e5,f#5]@2", // D Esus2
  G: "e5@5 ~@2 e6 ~@2 [b4,f#5]@2 d5@2 ~ d5, ~@6 b5@2 d#6@3 ~@5, ~@9 b5@4 ~@3", // B5
  H: "f#5@7 ~ d5@2 [d5,e5]@2 d5@2 [e5,f#5]@2", I: "f#5 [b4,f#5]",
  J: "[b4 a4 d5@2 d5@2 f#5@2 d5 ~ b4 a4 d5 f#5 e5@9 ~ [e5,g#5] ~ [b4,e5] ~ [e5,g#5]@2 d5@8 ~@2 f#5@2 e5@2 d5@2 b4@5 ~@5 [b4,f#5]@3 ~ [b4,f#5]@4]/4", // E E5 E B5
  K: "[a4,d5]@3 ~ [a4,d5]@2 d5@2 [a4,c#5]@3 ~ [a4,c#5]@4, ~@4 b4@3 ~", // D5 A
  L: "d5@2 ~@6 a5 b5 ~ [d5,d6]@2 [e5,e6]@3, ~@8 d5@3 ~@5", M: "[d5,d6]@7 ~ c#5@3 ~ c#5@4",
  N: "d5@7 ~ [d5,e5,e6] [d5,d6]@2 [d5,d6]@2 b5@3", O: "[d5,d6]@7 ~ c#5@3 ~ c#5@3 ~",
  P: "d5@7 ~ [b5,b6] [a5,a6]@2 ~ d5 [d5,d6]@3, ~@8 d5@3 [e5,e6]@2 ~@3", // B A D E
  Q: "[c5@3 ~ [c5,c6]@2 c6@2 [c5,b5]@2 a5@2 [c5,a5]@2 ~@2 c#5@2 [a5,a6]@2 [a5,a6] ~ [a5,a6] ~ [a5,a6] ~ [a5,a6] ~ [a5,a6] ~ [a5,a6] ~, ~@14 c6@4 ~@2 c6@11 ~, ~@10 c#5@2 e5 ~ e5 ~]/2", // C Cmaj7 F A
  R: "f#4@7 ~@3 f#4@3 ~ f#4 ~", S: "f#4@13 ~ f#4@2", T: "g4 e4", U: "e4@13 ~ e4 ~", V: "d4@5 ~ d4@2 f#4@8",
  W: "f#4@13 ~ f#4 ~", X: "g4@5 ~ g4@2 e4@5 ~ e4@2", Y: "e4@5 ~ e4@2 e4@6 e4@2", Z: "d4@13 ~ d4@2", AA: "b3@13 ~ b3 ~",
  AB: "d4@13 ~ d4 ~", AC: "b3@13 ~ b3@2", AD: "d4@8 e4@5 ~ e4@2", AE: "e4@13 ~ e4@2", AF: "d4@8 f#4@5 ~ f#4@2",
  AG: "d4 b3", AH: "d4@5 ~ d4@2 b3@5 ~ b3@2",
})).s("gm_acoustic_guitar_steel").gain(0.64).pan(0)

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

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

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A ~@6 B ~ A ~@2 C ~ A D ~@7 B ~ A ~@2 C ~ A D ~ B C ~ B C D ~ B ~@6 B ~ A ~@2 C ~ A D ~ D@2 C ~@3 D C B ~@7 B ~ A
  ~@2 C ~ A D ~ C ~@3 D C B ~@7 B ~ A ~@2 C ~ A D ~ A ~@2 C ~ A D ~ B ~ D ~ C ~ C ~@3
>`.pickRestart({
  A: "x ~@7 x ~@2 x!3 ~@2", B: "x!3 ~ x ~ x ~ x ~ x ~ x ~@3", C: "x!8", D: "~@8 x!2 ~@2 x ~ x!2",
})).gain(0.56)

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!126 ~@2>").gain(0.62)

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

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

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

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

// drums · high tom
// … 27 more lines

More by Otis Redding