Strudelify

Son of a Preacher Man

Dusty Springfield

KeyF majorTempo98 bpm
0:00/0:00
// Son of a Preacher Man — Dusty Springfield
// 98 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 84 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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 · electric bass finger
const bass = note(`<
  ~@3 A B@2 C@2 D E F G@4 F H F I J K F L F G@3 M D E F N O K P Q R S T U V W X Y X Z AA AB AC AD AC AE AF AG K D@3 AH X
  Z AF Z AA AI X AJ AF AK AA AL AM Y AF AN AA AO AP Z X Z AA AQ AR
>`.pickRestart({
  A: "~@22 gb1 ~", B: "[c1@40 ~@2 g1@2 a1 ~@3]/2", C: "[c1@20 ~ c1 ~@2]/2", D: "c1@23 ~", E: "f1@10 ~ c1 ~@2 c1!2 ~@8",
  F: "c1", G: "g1@23 ~", H: "f1@10 ~ g1 ~@2 c1 c1@2 ~@7", I: "f1@9 ~@2 c1 ~ c1 ~ c1 ~@8", J: "c1@12 g1@11 ~",
  K: "f1@17 ~ f1@2 g1 ~@3", L: "f1@9 ~@5 c1!2 ~@8", M: "g1@13 ~ g1 ~@2 g1 ~@2 g1 ~@2 c1", N: "f1@9 ~@2 c1 ~@2 c1!2 ~@8",
  O: "c1 g1", P: "bb1@13 ~ d1@3 ~ f1@3 g1 ~@2", Q: "bb1@17 ~ f1@2 g1 ~@3", R: "f1@17 ~ f1@2 ~ f1 ~@2",
  S: "f1@18 d1@3 f1 ~@2", T: "g1@10 ~ g1 ~@2 g1 g1@6 d1@2 e1", U: "g1@9 ~@2 g1 ~@2 g1 g1@6 ab1@2 g1",
  V: "c1@2 e1@2 g1@2 a1 g1", W: "c1@5 ~ c1@5 ~ c1 d1@2 ~@2 eb1 ~@2 e1 ~@2 c1", X: "f1@23 ~",
  Y: "bb1@10 ~ f1 ~@2 f1!2 ~@8", Z: "bb1@10 ~ f1 ~@2 f1!2 ~@2 c1@2 d1 ~@3", AA: "f1 c1", AB: "bb1@6 d1@6 f1@5 ~ g1 ~@5",
  AC: "f1 ~@7", AD: "~@11 eb1 ~@2 d1 ~@2 c1 ~@2 c1@2 ~@2", AE: "~@14 d1 ~@2 eb1 ~@2 e1 ~@3", AF: "f1",
  AG: "bb1@10 ~ f1 ~@2 f1!2 ~@2 c1@2 [d1,e1] ~@3", AH: "c1@12 ~@2 d1 ~@2 eb1 ~@2 e1 ~@2 c1",
  AI: "bb1@6 d1@5 ~ f1 ~ d1 ~@2 eb1 ~@2 e1 ~@3", AJ: "bb1@11 f1@5 ~@2 c1@2 d1 ~@3",
  AK: "bb1@10 ~ f1 ~@2 f1!2 ~@2 f1@2 g1 ~@3", AL: "bb1@6 d1@5 ~ f1@6 g1@2 ~ f1 ~@2", AM: "f1@17 ~ c1@4 ~@2",
  AN: "bb1@11 f1 ~@2 f1!2 ~@2 c1@2 d1 ~@3", AO: "bb1@6 d1@5 ~ f1 ~ d1 ~@2 eb1 ~@2 e1 ~@2 d1", AP: "f1@8 ~ f1@3",
  AQ: "bb1@6 d1@5 ~ f1 ~ d1 ~@2 eb1 ~@2 e1@2 ~ c1", AR: "f1 ~@11",
})).s("gm_electric_bass_finger").gain(0.7).pan(0.6)

// chords · rock organ
const rock_organ = note(`<
  ~@4 A@2 B@2 C@2 D@5 E@2 F@2 G H I@2 J@5 K@2 L@2 M N O@4 P@4 Q@2 R S T U V W X Y@3 Z AA@3 AB AC@2 AD AE AF AG AH AI AD
  AJ AF AK AL AM AN@2 AO AP AQ AR AS AT AU AV AW
>`.pickRestart({
  A: "[c5@42 [g3,bb4]@2 [a3,b4] ~@3, g4@15 ~, c3@5 ~]/2", B: "[c3@20 ~ c3 ~@2, [g4,c5]@47 ~, bb4 ~@47]/2",
  C: "[[c3,g4]@23 ~ [f3,f5]@9 g5 ~ [c3,eb5] ~@2 [c3,g4] [c3,g4,c5] ~@8, c5@17 ~@7]/2", // C5 F Cm C5
  D: "[[c3,c5]@24 g2@23 ~ g2@23 ~ [g2,g5]@24 g2@23 ~, g4@119 ~, ~@24 d5@95 ~, ~ b4@2 ~@2]/5", // C G
  E: "[[c3,g4]@24 [f3,a4,f5]@9 g5 ~ [g2,eb5] ~@2 [c3,g4] [g4,c5] ~@8, c5@17 ~@7, bb4 ~@38 c3@2 ~@7]/2", // C5 F Cm C5
  F: "[[c3,g4]@24 [f3,a4,eb5,f5]@9 g5 ~ [c3,eb5] ~ c3 c5 [c3,g4,c5] ~@2 bb4@2 b4 ~@3, c5@17 ~@7]/2", // C5 F7 Cm C5
  G: "[c3,c5] [g2,b4,g5], g4@11 ~", H: "f2@17 ~ f3@2 g3 ~@3, eb5",
  I: "[c3@24 f3@9 g5 ~ eb5 ~@2 [c3,c5]!2 ~@8, c5@17 ~@7, g4@11 ~@13]/2", // C
  J: "[[c3,c5]@24 g2@23 ~ g2@23 ~ g2@23 ~ g2@13 ~ [g2,g4,d5] ~@2 [g2,g4,eb5] ~@2 [g2,g4,e5] ~@3, g4@109 ~@11, bb4 ~@23 g5@49 ~@47]/5", // C G5 Cm C
  K: "[[c3,g4]@23 ~ [f3,f5]@9 g5 ~ [c3,eb5] ~@2 [c3,c5]!2 ~@2 bb4@2 b4 ~@3, c5@11 ~@5, bb4 ~@47]/2", // C5 F Cm C
  L: "[[c3,g4]@24 [f3,eb5,f5]@9 g5@2 [c3,eb5] ~@2 [c3,c5]!2 ~@2 bb4@2 b4 ~@3, c5@17 ~@7]/2", // C5 F7 Cm C
  M: "[c3,c5] [g2,g5], g4@23 ~", N: "[f2,a4,eb5,f5]@18 [g2,a2] [bb2,c3,d3] g3 ~@3, ~@9 f3 ~@2",
  O: "[bb2@13 ~ d3@3 ~ f3@3 g3 ~@2 bb2@17 ~ f3@2 g3 ~@3 f2@17 ~ f2@2 ~ f2 ~@2 f2@18 d3@3 f2 ~@2, f5, bb4 ~, d5@15 ~@17, c5 ~@47 [c5,eb5]@47 ~]/4", // Cm
  P: "[g2@10 ~ g2 ~@2 g2 g2@6 d3@2 e3 g2@9 ~@2 g3 ~@2 g3 g2@6 ab2@2 g2 c3@6 e3@6 g3@6 a3@3 g3@3 c3@5 ~ c3@5 ~ c3 ~ d5 ~@2 [eb3,d5] ~@2 [e3,eb5] ~@2 c3, g5@85 ~@11, b4 ~, ~@24 a2 ~@60 d3@2 ~@9]/4", // Ebmaj7 Emaj7
  Q: "[~ eb5@23 [bb2,d5]@10 ~ [f2,c5,eb5,f5] ~@2 [f2,eb5] [f2,c5,eb5,f5] ~@8, f2@23 ~@25, ~ f5@33 ~@14, ~ c5 ~@22 ab4@4 ~@20]/2", // Bb F7
  R: "[f2,a4,c5,eb5,f5]@23 ~", // F7
  S: "[bb2,bb4,d5,f5]@10 ~ [f2,c5,eb5,f5] ~@2 [f2,eb5] [f2,c5,eb5,f5] ~@2 [c3,c5]@2 [d3,d5] ~@3, c5 ~@23", // Bb F7 C D
  T: "[f3,eb5,f5] c3, c5, a4@5 ~ g4@5 ~", U: "bb2@6 d3@6 f2@5 ~ g2 ~@5, [f4,bb4]@7 ~",
  V: "[f2,c5,eb5]@4 [e4,f4,g4,a4] [f3,g3,a3,bb3,c4] [g2,a2,bb2,c3,d3,e3] f2 ~@16, f5 ~@11", // F7 Fmaj7 F C7
  W: "~@11 eb3 ~@2 d3 ~@2 c3 ~@2 c3@2 ~@2", X: "f2 ~@7",
  Y: "[~@3 [eb6,e6] ~@10 d3 ~@2 eb3 ~@2 e3 ~@3 [f3,eb5]@24 [bb2,ab4,d5]@10 ~ [f2,c5,eb5,f5] ~@2 [f2,a4,eb5] [f2,a4,c5,eb5,f5] ~@2 [c3,c5]@2 [d3,e3,d5] ~@3, ~@3 f6@15 ~@5 a4@22 ~@27, ~@8 a2 ~@3 [c5,f5]@17 ~@7]/3", // Emaj7 F7 Bb7 F7 C Dsus2 F5
  Z: "f2@17 ~ f2@2 g2 ~@3, [a4,c5,eb5,f5]@23 ~", AA: "[c3@23 ~ c3@23 ~ c3@23 ~, [g4,c5]@71 ~, bb4 ~@71]/3",
  AB: "[g4,c5]@14 [d3,d5] ~@2 [eb3,eb5] ~@2 [e3,e5] ~@2 [c3,a4], c3 ~", // C5 D Eb E F
  AC: "[[f2,eb5,f5]@23 ~ [bb2,ab4,f5]@10 ~ [f2,a4,c5,db5,eb5,f5] ~@2 [f2,a4,eb5] [f2,a4,c5,eb5,f5] ~@2 [c3,c5]@2 [d3,d5] ~@3, c5@17 ~@7, a4@21 ~@3 d5@8 ~@16]/2", // F7 Bb7 F7 C D
  AD: "[f2,c5,eb5,f5]", AE: "[bb2,ab4,d5,f5]@10 ~ [f2,c5,eb5,f5] ~@2 eb5 [f2,c5,eb5,f5] ~@2 [c3,c5]@2 [d3,d5] ~@3",
  AF: "[f2,c5,f5] [c3,c5], eb5 ~@11 g4@10 ~@2", // F5 C
  AG: "bb2@6 d3@5 ~ f2 ~ [c3,d3,d5] ~@2 [eb3,eb5] ~@2 [e3,e5] ~@3, [f4,bb4]@13 ~@11", // Csus2 Eb E Bb5
  AH: "[f3,c5,eb5,f5]@23 ~, a4 ~@23", // F7
  AI: "[bb2,bb4,f5]@11 [c5,eb5,f5] ~@3 [c5,f5] ~@2 [c3,c5]@2 [d3,d5] ~@3, d5@9 ~@2 f2@4 ~@9", // Bb5 F7 F5 C D
  AJ: "[bb2,ab4,d5,f5]@10 ~ [f2,c5,eb5,f5] ~@2 f2 [f2,c5,f5] ~@2 [f2,c5]@2 [g2,d5] ~@3", // Bb7 F7 F5 G5
  AK: "bb2@6 d3@5 ~@3 d5 ~@2 eb5 g3@2 e5 f2 ~@2, f4@2 ~, bb4@7 ~@5, ~@2 f3 ~",
  AL: "f2@17 ~ c3@4 ~@2, [c5,eb5,f5], a4@13 ~@11", // F7
  AM: "[bb2,ab4,d5,f5]@10 ~ [f2,c5,eb5,f5] ~@2 [f2,eb5] [f2,c5,eb5,f5] ~@2 c5@2 d5 ~@3", // Bb7 F7
  AN: "[[f2,c5,eb5]@24 [bb2,ab4,d5]@11 [f2,c5,eb5,f5] ~@2 f2 [f2,c5,f5] ~@2 [c3,c5]@2 [d3,d5] ~@3, f5@17 ~@7, db5 ~@47]/2", // F7 Bb7 F7 F5 C D
  AO: "[f3,c5,f5] [c3,c5], eb5 ~@11", AP: "bb2@6 d3@5 ~ f2 ~ [d3,d5] ~@2 [eb3,eb5] ~@2 [e3,e5] ~@3, [f4,ab4]@7 ~@5",
  AQ: "f2@8 ~ f2@3, [c5,eb5,f5]@23 ~", // F7
  AR: "[bb2,ab4,d5,f5]@10 ~ [f2,c5,f5] ~@2 f2 [f2,c5,f5] ~@2 [c3,c5]@2 [d3,d5] ~@3", AS: "[f2,c5,eb5,f5]@23 ~",
  AT: "[bb2,ab4,d5]@10 ~ [f2,c5,eb5,f5] ~@2 f2 [f2,c5,f5] ~@2 [c3,c5]@2 [d3,d5] ~@3", AU: "[f3,f5] [c3,g4], c5",
  AV: "bb2@6 d3@5 ~ f2 ~ [d3,d5] ~@2 [eb3,eb5] ~@2 e3@2 ~ c3, f4@13 ~@7 e5 ~@3", // D Eb
  AW: "[f2,c5,f5]@3 d5 [bb3,c4,d4,e4,f4,g4] [c3,d3,e3,f3,g3,a3] bb2 ~@17, eb5 ~@23", // F5 C7 Dm7
})).s("gm_rock_organ").gain(0.28).pan(0.7)

// chords · rock organ · soft notes
const rock_organ_soft = note(`<
  ~@9 A ~@4 B ~ A ~ C ~ D E F ~ G@4 ~ H ~@2 I J ~@4 K@2 L@2 ~ M ~ A ~@2 N ~@2 O P Q ~@3 R ~@2 A ~ S ~@3 T ~@5 A ~@2 U V
  ~ A ~ W ~ X Y
>`.pickRestart({
  A: "~@14 c5 ~@9", B: "f5@23 ~", C: "~@14 g4 ~@9", D: "[a4,f5]", E: "bb4 ~@23", F: "f5@3 ~@5",
  G: "[~@48 f5@37 ~@10 c3, b4@85 ~@11]/4", H: "eb5@3 ~@5", I: "~ b4",
  J: "~@18 [e2,f2] e3 [f3,a3] [ab3,bb3,c4] [e4,f4] [g4,a4]", K: "[~@3 f5@20 ~]/2",
  L: "[c5@24 bb4@13 ~@11, e5@37 ~@11]/2", M: "c5 ~@13 f5 ~@9", N: "~@3 bb4 ~@20",
  O: "~@15 b1 [d2,e2] ~ gb3 [e3,f3,ab3] ~@2 f4 g4, ~@8 [f2,g2] [c3,d3] [a3,bb3] e4, ~@17 bb2@2 g3@2 c4@2 ~", // Dsus2 E Fsus2 Csus2 Bbmaj7
  P: "g4 ~@23", Q: "~@11 a4 ~@2 c5 ~@9", R: "bb4@23 ~", S: "~@14 [f2,c5,f5] ~@9", T: "~@14 [c5,eb5] ~@9",
  U: "~@2 eb5@9 ~ g4@10 ~@2", V: "bb4@14 ~@9 d3", W: "f5@5 ~@7", X: "bb4@13 ~@11", Y: "~@2 e5 ~ a4 ~@19",
})).s("gm_rock_organ").gain(0.15).pan(0.7)

// chords · brass section
const brass_section = note(`<
  ~@4 A ~@2 B ~@7 C D C E F G H ~@6 C I J K L M N O P Q R@4 S T@2 U V W X Y Z ~ AA AB AC AD AE@3 AF AG AH@2 AI AJ AK AL
  AM AN AO AP AQ AR AS AT AU AV AW AX AY AT AZ@2 BA
>`.pickRestart({
  A: "gb2 ~@23", B: "~@9 [c5,c6] ~@2, ~@18 c4 ~@5", C: "~@21 [c4,c5] ~@2",
  D: "f3@9 ~@2 [c4,c5] ~@2 [c4,c5] c4 ~@2 [g3,g4]@2 [a3,a4] ~@3, ~@18 a4 ~@5", // C G A
  E: "[f3,f4]@10 ~ [c4,c5] ~@2 [c4,c5]!2 ~@2 [g3,g4]@2 [a3,a4] ~@3", F: "[c4,c5] [b3,g4]",
  G: "[f3,eb4]@16 ~@2 g4@2 a4 ~@3", H: "[c4,c5] ~@23",
  I: "[f3,f4]@10 ~ [c4,c5] ~@2 [c4,c5] c5 ~@2 [g3,g4]@2 [a3,a4] ~@3", J: "[c4,c5]@18 ~@3 [g3,c4,c5] ~@2",
  K: "~@8 g3 ~@2 [c4,c5] ~ c4 c5 c4 ~@3 a4 a3 ~@3, [f3,f4]@5 ~@4 [g3,g4] ~@2", L: "[c4,c5]@11 [b3,g4]@12 ~",
  M: "f3@17 ~ f4@2 g4 ~@3, ~@18 g3 ~@5", N: "[bb3,f4,bb4]@20 d5 f5 ~@2, c5 ~@23",
  O: "[bb3,c5,a5] ~@17 bb5@2 f5 ~@3, ~@18 f4 ~@5", // F
  P: "[f3,f4,f5]@9 ~@2 [f4,f5] ~@2 [c4,c5] [c4,d5] ~@5 [f4,f5] ~@2, [g4,a4] ~@23", // F C Csus2 F Gsus2
  Q: "[f4,f5]@10 ~ [d4,d5]@3 [c4,c5] ~@2 [ab3,ab4]@2 g3 [f3,g4] f4 ~@2", // F D C Ab Fsus2
  R: "[g2@11 ~@13 [d4,d5]@24 [c4,c5]@24 [c4,c5]@13 ~ d4@2 eb5 eb4 ~@2 [e4,eb5,e5] ~@2 c4, g4@85 d5@2 ~@9, g3 ~, f4 ~@95]/4", // D C Emaj7
  S: "[f3,c5]@20 ~ [c4,f4,c5,f5] ~@2, [f4,f5]@3 ~", // F5 F
  T: "[[bb2,bb3,bb4]@10 ~ [f3,f4] ~@2 [f3,f4] f3 ~@2 [c4,c5]@2 [d4,d5] ~@3 [f3,f5]@18 c4 ~@2 [f4,f5] ~@2, a3 ~@22 f4@20 ~@5]/2", // Bb F C D F
  U: "[bb2,bb3,f4,bb4]@10 ~ [f3,f4,f5] ~@2 [f3,f4,f5] [f3,f5] ~@2 [c4,c5]@2 [d4,d5] ~@3", V: "[f3,f4,f5] [c4,c5]",
  W: "bb3@18 ~ d5 d4@2 ~@2, ab4@8 ~ [c4,c5] ~@2", X: "[f3,f4,c5,f5] ~@11",
  Y: "~@11 [ab4,ab5] ~@2 [g4,g5] ~@2 [f4,f5] ~@2 f5 [g4,g5]@3, ~@10 f4 ~", Z: "[f4,f5] ~@11",
  AA: "~@6 [f3,f4] ~ [ab3,ab4] ~@2 [bb3,bb4] ~@2 [c4,c5]@9 ~", // F Ab Bb C
  AB: "[bb3,bb4] ~ [ab3,ab4] ~@2 [bb3,bb4] ~ [c4,c5] ~@2 [f3,f4]@13 ~", // Bb Ab Bb C F
  AC: "~@6 eb5@2 [a3,c5] ~@2 [c4,eb5] ~ [a3,c5] ~@2 [bb3,c4,eb5] ~@2 [c4,f5]@4 ~, ~@6 c4 ~@17", AD: "[c4,e5] [e4,g5]",
  AE: "[g4@23 ~ c4@23 ~ c4@13 ~ [d4,d5,d6] ~ eb5 eb4@2 e5 [e4,e6]@2 c4 ~, c6@61 ~@4 eb6 ~@6, ~@24 c5@37 ~@11, ~@47 g5@5 ~@20]/3", // D E
  AF: "[f3,f4,f5,f6]@20 ~ [f4,f5,f6] ~@2", // F
  AG: "[bb3,bb4]@9 c4 ~ [f4,f5] ~@2 [f4,f5] f5 ~@2 [c4,c5]@2 [d4,d5] ~@3, c5 ~@23", // Bb F C D
  AH: "[f5@23 ~ [bb3,bb4]@10 ~ [f3,f4,f5] ~@2 [f3,f4,f5]!2 ~@2 [c4,c5]@2 d5 ~@3, f4@17 ~@7, f3@7 ~@9]/2", // Bb F C
  AI: "[f3,f4]@9 ~@3 [c4,g4]@11 ~, c5, f5@11 ~@13", AJ: "[bb3,f4]@13 ~ [d4,d5] ~@2 [eb4,eb5] ~@2 [e4,eb5,e5] ~@3",
  AK: "[f3,c5]@21 [f4,f5] ~@2, f5@5 ~, f4@3 ~", // F5 F
  AL: "[bb3,f4,bb4]@9 c4 ~ [f4,f5] ~@2 [f4,f5] f5 ~@2 [c4,c6]@2 [d4,d6] ~@3, ~@18 d6 ~@5", // Bb5 F C D
  AM: "[f3,f4,f5]@21 [c4,c5,f5] ~@2, c5@19 ~@5", // F F5
  AN: "[bb3,f4,bb4]@9 c4 ~ [f3,f4,f5] ~@2 [f3,f4,f5] [f3,f5] ~@2 c5@2 [d4,d5] ~@3, ~@18 c4 ~@5", // Bb5 F D
  AO: "[f3,f4]@9 ~@3 [c3,c4,g4]@11 ~, c5, f5 ~", AP: "bb3@17 ~ [c4,c5]@2 [d4,d5] ~@3",
  AQ: "[f3,f4,c5,f5]@20 ~ [c4,c5,f5] ~@2", AR: "[bb3,f4]@9 c4 ~ [f4,f5] ~@2 [f4,f5]!2 ~@2 [c4,c5]@2 [d4,d5] ~@3",
  AS: "[f3,f4,c5,f5]@20 ~ [f4,c5,f5] ~@2", // F5
  AT: "[bb3,f4,bb4]@9 c4 ~ [f3,f4,f5] ~@2 [f3,f4,f5] [f3,f5] ~@2 [c4,c5]@2 [d4,d5] ~@3", // Bb5 F C D
  AU: "[f3,f4,f5]@11 ~ [c4,g4]@11 ~, c5", AV: "[bb3,f4,bb4]@13 ~ [d4,d5] ~@2 [eb4,eb5] ~@2 [e4,e5] ~@2 c4",
  AW: "[f3,f4,c5,f5]@19 ~@2 [f4,f5] ~@2", // F5 F
  AX: "[bb3,f4,bb4]@9 c4 ~ [f3,f4,f5] ~@2 [f3,f4,f5] [f3,f5] ~@2 [c4,c5]@2 d5 ~@3", // Bb5 F C
  AY: "[f3,f4]@20 ~ [f4,f5] ~@2, c5@7 ~, f5@3 ~", // F
  AZ: "[[f3,f4,c5]@10 ~@2 c4@11 ~ [bb3,bb4]@13 ~ [d4,d5] ~@2 [eb4,eb5] ~@2 e4@2 ~ c4, f5@12 ~@11 f4@13 ~@8 e5 ~@3]/2", // F5 Bb D Eb
  BA: "[f3,f4,c5,f5] ~@7", // F5
})).s("gm_brass_section").gain(0.64)

// chords · brass section · soft notes
const brass_section_soft = note(`<
  ~@7 A ~@8 B ~@3 C ~@8 D ~ E F@2 ~ G H ~@5 I J K L M N ~@10 O ~ P ~@3 Q ~ R ~ S ~ T ~ U ~ L ~@3 V ~ L W ~ X
>`.pickRestart({
  A: "~@20 c4 ~@3", B: "~@9 c3 ~@5 c5 ~@8", C: "f4@2 ~", D: "~@15 c4 ~@8", E: "~@12 c4 ~@2 c5 ~@8",
  F: "[~@23 [eb4,f4]@17 ~@2 f3 ~@5]/2", G: "bb5 ~@23", H: "~@15 [bb3,c5] ~@8", I: "~@21 db4 ~@2", J: "a2 ~@14 f4 ~@8",
  K: "~@19 c4 ~@4", L: "~@15 f4 ~@8", M: "~@6 g4@5 ~", N: "f4@19 ~@5, bb4@17 ~@7", O: "~@20 eb6 ~@3",
  P: "~@14 b4 f4 ~@8", Q: "bb4@13 ~@10 a4", R: "~@11 g4 ~@3 f4 ~@8", S: "e4 ~@14 f4 ~@8", T: "[f4,bb4]@17 ~@7",
  U: "bb4@3 ~@5, b4 ~@23", V: "~@11 ab3 ~@3 [ab3,f4] ~@8", W: "~ c5, ~@4 g4@3 ~", X: "c4 ~@23",
})).s("gm_brass_section").gain(0.32)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  A B A C A B A@6 B@3 A@4 ~ A@5 B@3 A@4 ~ D A@7 ~ A@4 ~ A@4 ~ A@6 ~ A@4 ~@2 A@4 ~ A@5 ~@2 A@4 ~@3
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@7 x ~@4", C: "~@4 x!2 ~@2", D: "~@11 x ~@3 x ~@8",
})).gain(0.32)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~ A ~@3 A ~ A ~@4 A@3 ~@5 A ~@4 A@3 ~@6 A ~@12 A ~@36>".pickRestart({
  A: "~@7 x ~@4",
})).gain(0.32)

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

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@3 B ~@12 B ~@26 B ~@36>".pickRestart({
  A: "~@7 x", B: "~@3 x",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@7 A ~@8 B ~ B ~ A ~@8 B ~ B ~ C ~@7 D ~ B ~ B ~ A ~@3 D ~@6 D ~ B ~ B ~ D ~ B ~ B ~@3 B ~ B ~ D ~ B ~ B ~ D E
>`.pickRestart({
  A: "~@7 x ~@4", B: "~@23 x", C: "~@2 x ~@2 x", D: "~@14 x ~@2 x ~@2 x ~@3", E: "x",
})).gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 [~@5 x] ~@80>").gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@11 B ~@3 C ~ B ~@6 B ~@3 C B D ~@2 B ~@2 B ~ B ~@3 C ~ B@3 ~@8 B ~ B ~ C ~ B ~ B ~ C A ~@2 B ~ C ~ B ~ B ~ C
  ~@2
>`.pickRestart({
  A: "~@23 x", B: "x", C: "x!2", D: "x ~@6 x",
// … 15 more lines

More by Dusty Springfield