Strudelify

Try a Little Tenderness

Otis Redding

KeyG majorTempo102 bpm
0:00/0:00
// Try a Little Tenderness — Otis Redding
// 102 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 96 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(102/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(`<
  ~@3 A@6 B@5 C D E@3 F@6 G H I J@2 K L M N O I P Q R S T U V W X Y Z AA AB Q AC AD Z AE AF AG AH G AI AJ@2 AK AL AM AN
  AO AP AQ AR AS K AT AU AV AW AX AH AY AZ BA BB@2 BC BD AH AY G BE BF@2 BG BH@2 AY BI@2
>`.pickRestart({
  A: "[~@19 d2@16 ~@2 g2@37 e2@39 ~ a1@34 ~@6 d2@38]/6", B: "[~@2 g2@38 f2@41 e2@32 ~@2 e2@3 ~@3 e2@33 ~@6]/5",
  C: "~ a1@30 ~", D: "~@4 a1@2 ~@3 a1@23", E: "[~ e2@8 ~ a1@6 ~ d2@30 ~@4 d2@2 ~@3 d2@40]/3",
  F: "[b1@39 ~ a#1@40 a1@38 ~ d2@35 ~@4 g2@34]/6", G: "e2", H: "a1@27 ~@5", I: "d2", J: "[g2@31 f2@33]/2",
  K: "e2@25 ~@3 e2@2 ~@2", L: "e2@27 ~@5", M: "a1@12 ~@2 a1 ~", N: "a1@20 e2@6 a1@5 ~", O: "d2@12 ~@2 d2 ~",
  P: "g2@31 ~", Q: "c2", R: "g2@25 ~@3 g2@2 ~@2", S: "g2@15 ~", T: "c2@13 ~ c2 ~", U: "c2@31 ~", V: "b1@12 ~@2 b1 ~",
  W: "~ b1@15 f#2@8 b1@7 ~", X: "e2@12 ~@2 e2 ~", Y: "e2@31 ~", Z: "a1@25 ~@3 a1@2 ~@2", AA: "a1@16 a2@8 a1@7 ~",
  AB: "c2@25 ~@3 c2@2 ~@2", AC: "b1@25 ~@3 b1@2 ~@2", AD: "b1@31 ~", AE: "a1@19 ~ e2@6 a1@5 ~",
  AF: "d2@25 ~@3 d2@2 ~@2", AG: "d2@25 ~@7", AH: "g2", AI: "a2@15 ~", AJ: "[d3@31 g2@27 ~@2 g2@4]/2", AK: "f2@31 ~",
  AL: "e2@26 ~ e2@2 ~@3, f2 ~@31", AM: "e2@23 ~ b2@4 e2@3 ~", AN: "a2@17 ~@11 a2@2 ~@2", AO: "a2@22 ~@2 a2@7 ~",
  AP: "d3@25 ~@3 d3@2 ~@2", AQ: "d3", AR: "b2@25 ~@3 b2@2 ~@2", AS: "b2@22 ~@2 b2@7 ~", AT: "e2@13 ~@3",
  AU: "a1@15 ~ b1@15 ~", AV: "c2@8 c#2@7 ~", AW: "d2@15 ~ d#2@16", AX: "e2@7 ~ f2@3 ~ f#2@3 ~", AY: "f2", AZ: "e2@15 ~",
  BA: "e2@3 ~", BB: "[a1@15 ~ b1@14 ~ c2@17 c#2@15 ~]/2", BC: "d2@15 ~ d#2@15 ~",
  BD: "e2@15 ~ f2@8 f#2@7 ~, ~@8 d#2 ~@7", BE: "~@4 e2@6 ~@2 e2@5 ~@3 e2@10 ~@2",
  BF: "[a1@15 ~ b1@15 c2@15 ~@2 c#2@15 ~]/2", BG: "d2@3 ~@29", BH: "[~@15 f2@4 ~@5 f#2@4 ~@3 g2@33]/2",
  BI: "[~@52 d2@3 ~ e2@3 ~ g2@3 ~, e2@7 ~]/2",
})).s("gm_acoustic_bass").gain(0.48)

// chords · piano · "Keyboard 1"
const piano = note(`<
  ~@4 A@6 B@4 C@5 D E F@5 G@4 H@4 I@2 J K L@2 M@2 N@2 O@2 P@2 Q@4 R@2 S T@2 U V@4 W@4 X@3 Y Z@2 AA AB AC AD AE AF AG AH
  AI AJ AK AD AL AM AN AO AP AQ AR AS AE AT AU AV
>`.pickRestart({
  A: "[~@5 [g3,b3,d4,g4]@31 ~@6 [g3,b3,e4]@30 ~@10 [e4,a4]@30 ~@9 d3@25 ~@15 [g3,g4]@31, ~@5 g2@37 e2@39 ~ a2@38 ~ [f#4,a4]@30 ~@3 e3@6 [g2,d4]@32, ~@42 e3@21 ~@18 [a3,c4]@30 ~@9 d4@26 d3@13 b3@33, ~@147 d4@12 g3@2 ~@31, ~@155 e4@7 ~@30]/6", // G Em A5 G F#m G5 Am
  B: "[~@9 f4@30 ~@10 [g#3,b3]@70 ~@7 b4@2, ~@7 f3@32 ~@10 e3@63 ~@10 d5@6, ~@8 f2@40 ~ e2@78 ~, ~@8 [a3,c4]@32 ~@79 e5@9, ~@31 c5]/4", // G#m Am
  C: "[a4 [e4,a4]@66 ~@14 [d4,c5]@68 ~@11, a2@79 ~@2 d3@79, [a3,c4]@66 ~@14 [f#4,a4]@69 ~@11]/5", // A5 D7 Am F#m
  D: "[b2,b3,d4,f#4,b4]", E: "~@7 [a#2,d4,f4,g#4]@25, ~@3 a#3@13",
  F: "[~@15 [e4,a4]@31 ~@10 c5@32 ~@6 [g3,b3,d4,g4]@29 ~@5 e2@31 [a3,c4], ~@14 [a3,c4]@31 ~@82 [g3,b3]@25 ~@8, ~@15 a2@40 [d3,d4,f#4,a4]@33 ~@6 g2@33 e3@17 ~@16, ~@128 e4@25 ~@7]/5", // A5 G Am G D
  G: "[[e4,a4]@24 ~@7 d3@20 ~@7 [e3,e4]@4 ~ g4 [g3,g4]@26 ~@6 f4@24 ~@8, a2@30 d4@21 ~ [d3,d4]@10 g3@2 ~@30 f3@26 ~@8, ~@31 [f#4,a4]@24 ~@7 b3@27 ~@6 [a3,c4]@26 ~@7, ~@63 g2@31 ~ f2@32 ~, ~@63 d4@25 ~@40]/4", // A5 E G D F#m Am
  H: "[e3@51 ~@9 c5@2 ~@2 [c4,e4,a4]@53 ~@11, [e2,g#3,b3]@31 b4 a2@32, ~@56 e5@7 ~@65, ~@58 d5@5 a3@53 ~@12]/4", // Am E
  I: "[[d4,f#4,a4,c5]@55 ~@9, d3@63 ~]/2", J: "[g2,g3,b3], [d4,g4]@29 ~@3", K: "[g3,c4,e4]@7 ~, c3@31 ~",
  L: "[[b3,d4]@30 ~@2 [g3,b3,d4,f4]@25 ~@7, g2, g3@27 ~@37]/2", // Bm G7
  M: "[g4@52 [g3,c4,g4]@6 ~ [c3,a4]@5, [e4,c5]@15 ~, c3@7 ~, c4@49 ~@9 a3@6]/2", // C5 F C
  N: "[b3 [b3,d#4,f#4]@54 [b3,b4]@8 ~, b4@27 ~@5, ~ b2@63]/2", O: "[[e4,g4,b4,e5]@27 ~@5, e3]/2",
  P: "[~@12 [f#4,c#5,f#5] ~@3 [c#5,e5]@16 ~@11 e5 f#5@2 ~@2 [c#5,e5]@4 [f#4,f#5] ~@11, a2@63 ~, [c#4,g4]@27 ~@5, a3@51 ~@13, e4@16 e4@26 c#5 f#4@3 ~@2 e4@7 ~@9]/2", // F#5 C#m F# C#dim
  Q: "[g4@52 g5@7 [a4,a5]@4 ~ a5 b5@27 ~@36, c3@63 ~ b2@63 ~, [c4,e4,c5]@57 ~@7 [b3,d#4,f#4,b4]@56 ~@8, ~@52 g4@6 ~@5 g5@28 ~@37]/4", // A C B
  R: "[[a2,a3,c#4,e4,g4]@29 ~ [e4,d5,e5]@2]/2", S: "~ d5@31, [a3,c4,e4,g4,e5]",
  T: "[[d4,f#4,a4]@14 ~@2 [d4,f#4,a#4]@14 ~@2 g4@17 ~@3 [g3,b3,d4,g4] ~@7 [b3,g4]@2 ~@2, ~@30 g3@19 ~@15, ~@31 g2@22 ~@7 g2@4, ~@31 [b3,d4]@19 ~@10 d4 ~@3]/2", // D Daug G Em Bm
  U: "~@8 [e4,g4,b4] ~@3 [e3,g3,b3] ~@7 [e4,g4,b4]@8 [e4,g4,b4]@3 ~, e2, [e3,g3,b3,d4]@11 ~@9 [g3,b3,d4,d5]@11 ~", // Em Em7 G
  V: "[~@7 a4@3 ~@2 [a4,c5,g5] ~@3 a4@10 a4 ~ [g4,g5]@2 ~@2 [e4,c5,e5]@12 [a4,c5,g5] ~@3 [a4,c5,e5]@8 [a4,c5,e5,g5]@4 d3@3 g3 g4@7 ~@9 g3@4 g3@6 ~@2 [g4,b4,d5,g5]@2 ~ f3 f4@8 [a4,c5,f5] ~@11 [f3,f4,a4,c5,f5]@8 [f4,a4,c5]@3 ~, a2@32 ~@32 g2@31 [f2,a3,c4]@32 ~, [a3,c4,e4]@11 ~ g4@2 ~@2 [e4,c5,e5]@11 [a4,c5]@2 ~@2 d3@28 ~ a4@2 ~@2 d4@8 g5@12 ~@44, ~@28 e5 ~@3 a4@9 ~@3 g4@2 ~@2 e4@14 ~ b3@21 [b3,d4,g4,b4,d5,g5]@10 ~@10 f4@12 ~@12, ~@64 g3@7 [g4,b4,d5]@13 ~@6 g3@4 ~@2 f3@20 ~@12]/4", // Am7 G C Am7 Am Am7 G F …
  W: "[[e3,g#3,b3]@8 [e4,g#4,b4] ~@3 [f#3,g#3,b3,e4] ~@7 [f#4,b4]@2 ~@6 e3@3 ~ [e3,g#3,b3]@8 [g#4,b4] ~@3 [g#3,b3]@2 ~@14 [e4,c5]@2 b4 ~ [a3,c4,e4]@8 [a3,e4,g4]@2 ~@2 [a3,e4,g4] ~@6 [a3,c4,e4] [a3,c4,e4]@8 [a3,c4,e4]@4 [a3,c4,e4]@8 [a3,c4,e4,g4]@4 ~@16 [c4,e4,g4]@3 ~, e2@8 a2@6 a2!2, ~@20 [g#3,b3]@11 ~@13 e3 ~@7 [e3,g#3,b3,g#4,b4]@11 ~@9 c4@4 c4@3 ~@5 g4 ~@7 g4@12 ~@4 [a3,c4,e4,g4]@8 a3@11 ~, ~@20 e3@7 ~ g#4@10 ~@2 f#4@2 ~@14 e5@7 ~@65, ~@20 g#4 ~@6 [e4,b4]@8 ~@17 e4@5 d5@5 ~ a4@22 ~@31 [c4,e4,g4]@8 ~@4]/4", // E B5 E G#m C Am A7 Am …
  X: "[[d4,f#4,a4]@8 [d4,f#4] ~@3 [d4,f#4,a4,c5] ~@7 [d4,f#4,a4]@8 [d4,f#4,a4,c5]@3 ~ [d4,c5]@8 [d4,f#4,a4]@4 ~@16 [d4,f#4]@2 ~ b2 ~@8 [g3,b3,d4,g4]@2 ~@2 [g3,b3,d4,g4] ~@7 [g3,b3,d4,g4]@7 ~ [b2,g3,d4,g4]@4, d3@48 d3@7 d3@7 ~@2 b2@21 ~@11, ~@8 a4@2 ~@21 [f#4,a4]@9 c5@12 ~@7 g3@2 ~@2 [g3,b3,d4,g4]@9 ~@19 b3@5, ~@44 [d4,f#4,a4]@8 [d4,f#4,a4,c5]@8 [a4,c5] ~@35]/3", // D D7 D D7 D G F#m G …
  Y: "[g3,b3,d4,g4]@8 [g3,b3,d4,g4]@2 ~@2 [g3,b3,d4,g4] ~@7 [g3,b3,d4,g4]@7 ~ [g3,b3,d4,g4]@3 ~, b2@16 b2@11 b2@4 ~", // G
  Z: "[[e3,e4,g#4,b4]@8 [e4,g#4]@2 ~@2 [e4,g#4,b4] ~@3 e3 ~@7 e3 ~@3 [e4,g#4,b4]@3 ~@5 e3 ~@3 [g#4,b4] ~@3 [e4,g#4,b4] ~@7 [e4,g#4,b4]@6 ~@6, e2@22 ~@6 e2@31 ~@5, ~@8 b4 ~@11 [e4,g#4,b4]@8 ~@3 [e4,g#4,b4]@9 f#4@2 ~@22]/2", // E G#m E
  AA: "[a3,c4,e4]@7 ~ [g3,b3,d4]@7 ~", AB: "[c4,e4,g4]@14 ~@2 [c#4,e4,g4]@15 ~",
  AC: "[d4,f#4,a4]@15 ~ [d#4,f#4,a4]@14 ~@2", AD: "[e4,g4,b4]@14 ~@2 [f4,a4,c5]@7 ~ [f#4,a4,c5]@7 ~",
  AE: "[g4,b4,d5]@15 ~", AF: "[f4,a4,c5]@31 ~", AG: "[e4,g#4,b4]@15 ~", AH: "[e4,g#4,b4]@29 ~@3",
  AI: "[a3,c4,e4]@15 ~ [g3,b3,d4]@15 ~", AJ: "[e4,g4]@8 [c#4,e4,g4]@7 ~, c4@15 ~",
  AK: "[d4,f#4,a4]@15 ~ [d#4,f#4,a4]@15 ~", AL: "[g4,b4,d5]", AM: "[f4,a4,c5]@13 ~@3",
  AN: "~@4 [e4,g#4,b4]@5 ~@3 [e4,g#4,b4]@3 ~@5 [e4,g#4,b4]@3 ~@5 [e4,g#4,b4]@4", // E
  AO: "~@4 [e4,g#4,b4]@4 ~@4 [e4,g#4]@7 ~@4 g#4@7 ~@2, ~@6 b4@9 ~, ~@19 g#4@4 ~@9, ~@10 e4@5 ~", // E
  AP: "[a3,c4,e4]@14 ~@2 [g3,b3,d4]@15 ~", AQ: "[c4,e4,g4]@7 ~ [c#4,e4,g4]@6 ~@2", AR: "[d4,f#4,a4] ~@7",
  AS: "~@16 [f4,a4,c5]@3 ~@5 [f#4,a4,c5]@6 ~@2", AT: "[f4,a4,c5]@7 ~", AU: "[e4,g#4,b4]",
  AV: "~@4 [f#4,g#4,b4]@3 ~@5 [f#4,g#4,b4]@3 ~@5 [f#4,g#4,b4]@4 ~@8", // G#m7
})).s("gm_piano").gain(0.36)

// chords · drawbar organ · "Keyboard 2"
const drawbar_organ = note(`<
  ~@12 A@2 ~@8 B@3 ~@5 C@2 ~@3 D@2 E@3 F@2 G@2 H@2 F@2 I@2 J@5 K@2 L M N@5 O@8 P Q@2 R S T U@2 V@2 W X Y Z AA@2 AB@2 AC
  AD Y AE AF@2
>`.pickRestart({
  A: "[~@4 e6@26 d6@8 e6@7 d6@7 ~@12, ~@3 d6@2 ~@59]/2", B: "[~@28 d6@8 e6@5 ~@2 g6@6 a6@6 g6@4 ~@2 g6@28 ~@7]/3",
  C: "[~@15 e6@21 d6@6 e6@6 d6@5 ~@11, ~@7 d6 ~@24]/2", D: "[~@16 g5@15 ~, ~@31 b4@32 ~]/2",
  E: "[c5@29 ~@2 d5@63 ~@2]/3", F: "[g5@63 ~]/2", G: "[d#5@63 ~]/2", H: "[g5,b5]/2", I: "g5/2",
  J: "[~@16 b6@14 ~@2 b6@4 ~ a6 b6@3 ~@2 b6@5 b6@15 ~ c#6@59 ~@5 [c5,c6]@31 ~, d#5@63 c#5@62 ~@35, ~ f#5@63 e6@96, ~@32 a5@41 ~@7]/5", // C
  K: "[a5@14 ~@2 a#5@11 ~@5 d5@31 ~, [f#5,f#6]@27 ~@3 g4@32 ~@2, ~@31 b4@32 ~]/2", L: "[g4,b4]@15 ~",
  M: "~@8 [e6,a6] ~@11 [a5,e6,a6] ~@7 [e6,a6]@3 ~, [c5,e5]@31 ~", // A5 C
  N: "[[d5,f#5,a5]@30 ~@2 g5@7 d6 g6 ~@11 [d6,g6]@11 ~ f5@30 ~@22 [f#5,b5,e6]@18 c4 ~ [e5,b5,e6]@7 ~ e6@7 ~ e5@8, ~@30 [g4,b4]@33 [a4,c5]@30 ~@2 b4@64 ~, ~@39 g5@23 ~@34 g#4@64, ~@9 [f#5,b5]]/5", // D G5 Esus2 E5 G Am B5
  O: "[~@31 g5@32 [d5,f#5]@64 ~ [b3,d5,g5]@63 ~@12 [b5,e6]@3 ~@2 [b5,e6]@3 ~ [b5,e6]@3 ~@5 [b5,e6]@3 ~ [b5,e6]@3 ~ [b5,e6]@3 ~@5 [b5,e6]@3 ~ [b5,e6]@3 ~ [b5,e6]@3 ~ [b5,e6]@3 [b5,c6] [g5,a5] [c5,d5,e5,f5] [a4,b4] ~, [c5,e5]@64 ~@63 b4@63 ~ [g#4,b4,e5]@60 ~@5, ~@228 f6 ~@27]/8", // D G E5 Cmaj7 Gsus2 Dm7 Asus2 C …
  P: "[a5,c6,e6]@7 ~ [g5,b5,d6]@7 ~", // Am G
  Q: "[[c6,g6]@15 ~ [c#6,g6]@13 ~@3 d6@14 ~@2 [d#6,f#6]@14 ~@2, f6 ~@30 f#6@15 ~@18]/2", // C5 C#dim D#m
  R: "[e6,g6]@13 ~@3 [c6,f6]@3 ~@5 [c6,f#6]@4 ~@4", S: "[d6,g6]@31 ~", T: "[c6,f6]@18 ~@2 [c6,g6]@5 ~ [c6,f6]@4 ~@2",
  U: "[~@12 g#6@23 ~ g#6@6 ~@2 [f#6,g#6]@6 ~ [e6,g#6]@6 ~@7, e6@34 ~@2 e6@3 ~@25]/2", // F#sus2 E
  V: "[[a5,c6,e6]@15 ~ [g5,b5,d6]@15 ~ e6@15 ~ [c#6,e6]@15 ~, ~@31 c6@14 ~@19]/2", W: "[d6,f#6]@13 ~@3 [d#6,f#6]@15 ~",
  X: "[e6,g6]@5 ~@3 [f6,a6]@2 ~@2 [f#6,a6]@2 ~@2", Y: "[d6,g6]@15 ~", Z: "f6@19 ~ g6@6 f6@4 ~@2, c6@16 ~@4 f#6 ~@11",
  AA: "[~@24 g#6@14 ~@2 [e6,g#6]@7 ~ g#6@10 ~@6, e6@39 ~@8 e6@11 ~@6]/2", // E
  AB: "[[a5,c6]@14 ~@2 [g5,b5,d6]@13 ~@3 g6@13 ~@3 [c#6,e6]@14 ~@2, ~@31 [c6,e6]@14 ~@19]/2", // Am G C#m C
  AC: "[d6,f#6]@3 d#6 [a#5,c6,d6] [g5,g#5] [d5,d#5,f5] [a#4,c5] ~@24", AD: "~@16 [f6,a6]@3 ~@5 [f#6,a6]@4 ~@4",
  AE: "f6@19 ~ [f6,f#6] ~@5 f6@3 ~@3, c6@8 ~@2 g6@5 ~", // F#maj7
  AF: "[e6@24 g#6@12 [e6,g#6]@3 ~@5 [e6,g#6]@3 ~@5 [e6,g#6]@3 f#6 e6 [b5,c#6] a5 [e5,f#5] c#5 b4 ~@2]/2", // E Bsus2 Esus2
})).s("gm_drawbar_organ").gain(0.22)

// chords · drawbar organ · "Keyboard 2" · soft notes
const drawbar_organ_soft = note(`<
  ~@13 A ~@17 B ~@3 C@7 D@6 E@7 F ~ G H I@2 J@3 K@2 L@2 ~ M@3 ~ N ~@5 O ~@5 P ~@4 Q ~@2 R S@2
>`.pickRestart({
  A: "~@20 e6@7 ~@5", B: "~@21 e6@6 ~@5",
  C: "[~@32 d5@29 ~@3 e5@29 ~@34 f5@31 ~ e5@64 ~, ~@31 g4@119 ~@74, ~@95 b4@63 c5@64 ~@2]/7",
  D: "[~ a5@62 e5@64 ~ [c#5,e5]@64, [b4,f#5]@63 ~@64 a4@64 ~]/6", // C#m B5
  E: "[[c5,e5]@63 ~@32 a6 ~@10 a6 ~@21 [e5,g5]@86 ~@10, ~@63 b4@64 a4@86 ~@11]/7", F: "[d5,d6]@13 ~@3", G: "e4@15 ~",
  H: "~@16 a5 ~@11 a5@3 ~, a4@31 ~", I: "[~@31 d5@32 ~]/2", J: "[~@87 e6@8 ~, ~@31 e4@64 ~]/3", K: "a4/2",
  L: "[a5@31 ~]/2", M: "[~@48 [d6,f6] ~@41 d6 ~@3 g4 ~, ~@31 e4@60 ~@5]/3", N: "~@13 e6 ~@18",
  O: "~@28 [d5,d#5,f5,b5] [a#4,c5] [g4,g#4] ~", P: "~@19 c6@12 ~", Q: "~@3 f6 ~@28", R: "~@19 c6@10 ~@3",
  S: "[~@24 e6@11 ~@29]/2",
})).s("gm_drawbar_organ").gain(0.1)

// other · brass section · "Brass 1"
const brass_section = note("<~@55 A@3 B@2 C D@3 ~@4 E@4 F G H I@3 J K L M N O@2 P J Q R S T U V W J X>".pickRestart({
  A: "[~@31 [b3,d4]@62 ~@3]/3", B: "[[c4,e4]@47 ~@17]/2", C: "[d4,g4]@15 ~",
  D: "[c4@29 ~@3 d4@57 ~@7, f4@23 ~@8 b3@57 ~@8]/3", E: "[[g4,g5]@63 ~ g#5@61 ~@3, ~@63 g#4@62 ~@3]/4",
  F: "~@5 [a3,a4]@9 ~@6 [b3,b4]@10 ~@2", G: "~@4 [c4,c5]@10 ~@6 [c#4,c#5]@11 ~", H: "~@2 [d4,d5]@5 ~@3 [d#4,d#5]@5 ~",
  I: "[~@4 [e4,e5]@10 ~@2 [f4,f5]@3 ~@5 [f#4,f#5]@4 ~@3 [g4,g5]@27 ~@2 [g4,g5]@3 ~ f4@19 ~ [g4,g5]@6 [f4,f5]@5 ~, ~@63 f5@19 ~@2 f4 ~@11]/3", // E F F# G F
  J: "[e4,e5]", K: "~@4 [e4,e5]@3 ~@5 [e4,e5]@4 ~@4 [e4,e5]@4 ~@4 [e4,e5]@2 ~@2", L: "~@4 [a3,a4]@10 ~@6 [b3,b4]@11 ~",
  M: "~@4 [c4,c5]@11 ~@5 [c#4,c#5]@11 ~", N: "~@4 [d4,d5]@11 ~@5 [d#4,d#5]@11 ~",
  O: "[~@4 [e4,e5]@9 ~@3 [f4,f5]@3 ~@5 [f#4,f#5]@4 ~@4 g5@31 ~, ~@31 g4@31 ~@2]/2", // E F F#
  P: "[f4,f5]@20 [g4,g5]@6 ~ f5@4 ~, ~@13 f4@2 ~", Q: "~@4 [e4,e5]@4 ~@4 [e4,e5]@4 ~@4 [e4,e5]@4 ~@4 [e4,e5]@3 ~",
  R: "~@4 [a3,a4]@11 ~@5 [b3,b4]@11 ~", S: "~@4 [c4,c5]@10 ~@6 [c#4,c#5]@9 ~@3", T: "[d4,d5] ~@7",
  U: "~@16 [f4,f5]@3 ~@5 [f#4,f#5]@3 ~@5", V: "[g4,g5]@31 ~",
  W: "[f4,f5]@19 ~ f5 f4 ~@5 [f4,f5]@4 ~, ~@20 [g4,g5]@7 ~@5", // F G
  X: "~@4 [e4,e5]@3 ~@5 [e4,e5]@3 ~@5 [e4,e5]@3 ~ e4@3 ~ [g3,g4]@3 ~, ~@19 d3@4 e3@4 ~@5, ~@20 d4@7 ~@5", // E G
})).s("gm_brass_section").gain(0.43)

// other · trombone
const trombone = note("<A@3 B@2 ~@91>".pickRestart({
  A: "[~ [d4,d5]@15 [b3,b4]@7 ~ e4@7 [d4,d5]@16 [b3,b4]@8 [a3,a4]@8 ~ g3@15 ~ [g3,g4]@7 ~@2 g3@7, ~@23 e5@8 ~@32 g4@16 ~@9 g4@8]/3", // D B D B A G
  B: "[~ [e3,e4]@16 ~@2 d4@19 ~@26]/2", // E
})).s("gm_trombone").gain(0.45).pan(1)

// other · alto sax · "Sax 1"
const alto_sax = note("<A B C D@2 ~@91>".pickRestart({
  A: "~ d4@7 c4@8 b3@8 a3@8", B: "g3@8 a3@7 g3@8 d#3@8 ~", C: "e3@8 f#3@8 e3@9 d3@7", D: "[~ c#3@18 a3@17 ~@28]/2",
})).s("gm_alto_sax").gain(0.48)

// other · alto sax · "Sax 2"
const alto_sax_2 = note("<~ A B@3 ~@91>".pickRestart({
  A: "~@6 c4 ~", B: "[c4@8 b3@8 c4@9 b3@4 a3@4 g3@18 f#3@19 ~@26]/3",
})).s("gm_alto_sax").gain(0.35)

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

// drums · rim
const rim = s("rim").struct("<~@23 [~@15 x] [~@6 x ~@8 x ~@7 x ~@8] [x!4]!43 ~@28>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@23 [~@15 x] [~@7 x] [x ~@6 x]!2 x [x ~@6 x]!8 ~@60>").gain(0.2)

// drums · clap
const clap = s("cp").struct("<~@67 [~@10 x!3 ~ x ~] [x!4]!28>").gain(0.45)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A B ~ C D E F ~ C G H I ~ C J K I ~ L ~@44 M N O@7 P O@2 P Q R P O S O@4 R@2 T O@3 U
>`.pickRestart({
  A: "~@23 x ~@8", B: "~@29 x ~@2", C: "~ x ~@6", D: "~@13 x ~@18", E: "~@11 x ~@4", F: "~@7 x", G: "~@3 x ~@4",
  H: "~@5 x ~@2", I: "~@27 x ~@4", J: "~@5 x ~@10", K: "~@19 x ~@12", L: "~ x ~@14", M: "~@31 x",
  N: "~@7 x ~@8 x ~@7 x ~@7", O: "x!4", P: "x ~ x ~ x!3 ~", Q: "x ~@7 x ~@3 x ~@3 x ~@2 x ~@4 x ~@7",
  R: "x!3 ~ x ~ x ~", S: "x ~ x ~ x ~ x!2", T: "x ~ x!3 ~ x ~", U: "x!5 ~ x ~",
})).gain(0.3)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@24 A ~ B ~ B ~ B@6 ~@38 C D E F D E D G H E I J K L M D ~@3 E N O>".pickRestart({
  A: "~@23 x ~@8", B: "~@3 x", C: "~@3 x ~@3 x", D: "~@7 x", E: "~ x ~ x ~@4", F: "~@11 x ~@8 x ~@11", G: "~@5 x ~ x",
  H: "~ x ~ x ~@3 x", I: "~ x ~@3 x ~@2", J: "~@3 x ~ x ~@2", K: "~ x ~ x ~ x ~ x", L: "~@3 x ~@4",
  M: "~@4 x ~@7 x ~@6 x ~@8 x ~@3", N: "~@3 x ~ x ~ x", O: "~@5 x ~@2",
})).gain(0.1)

// drums · open hat
const open_hat = s("oh").struct("<~@68 A@2 ~ A B ~@2 C A D ~ A E ~@2 F ~ A ~ F ~@2 A E A@2 ~@2>".pickRestart({
  A: "~@7 x", B: "~ x ~@3 x ~ x", C: "~ x ~ x ~@4", D: "~@27 x ~@4", E: "~ x ~@6", F: "~@5 x ~ x",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@95 [~@4 x ~@7 x ~@6 x ~@12]>").gain(0.35)

stack(
  bass, piano, drawbar_organ, drawbar_organ_soft, brass_section, trombone, alto_sax, alto_sax_2, kick, rim, snare, clap,
  hihat, hihat_soft, open_hat, crash
)

More by Otis Redding