Strudelify

T.L.C. A.S.A.P.

Alabama

KeyC majorTempo149 bpm
0:00/0:00
// T.L.C. A.S.A.P. — Alabama
// 149 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 7 "tom mid 2  45     7" electric bass finger (copy of ch 6 "tom mid 2  45     6" acoustic bass)
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(149/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 · "tom mid 2  45"
const piano = note(`<
  ~@4 A B C D E F G H I F J K L M N M O P Q R S T U V W@2 X Y Z@2 AA AB@2 AC AD AE@2 AF@2 AG AH A B C D E F G H I F ~@3
  M N M O P Q R S T U V W@2 X Y Z@2 AA AB@2 AC AD AE@2 AF@2 AG AH A B AI@2 AJ@2 AK@2 AL AM AN ~@7 AO AP AQ@2 AR ~ A B AA
  AB@2 AC AD AE@2 AS AT AU@2 AV AW@2 AX AI@2 AJ@2 AY@2 AZ AM AN
>`.pickRestart({
  A: "~@4 [c4,e4,g4]@2 [c5,e5,g5] ~@7 [c4,e4,g4] ~, c4 ~@3, ~ g3@2 ~@5", // C
  B: "~@2 [c4,g4] ~@5 [f4,a4,c5] ~@3 [f4,a4,c5]@2 ~@2, ~ e4@2 ~@5", C: "~@4 [c4,e4,g4] ~ [c5,e5,g5] ~@9",
  D: "~@2 [c4,e4,g4] ~@3 c4 ~ [f4,a4] c5 ~@2 [f4,a4,c5] ~@3", E: "~@2 [c4,e4,g4] ~@5 [c4,e4,g4] ~@7",
  F: "~@2 [c4,e4,g4] ~@5 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3", G: "~@2 [c4,d#4,e4] [e4,g4] ~@4 [c4,e4,g4] ~@5 [c4,e4,g4] ~",
  H: "~@2 [c4,e4,g4] ~@3 e4 ~ [f4,a4,c5] ~@3 [f4,a4,c5]@3 ~", // C F
  I: "~@2 [c4,d#4] [c4,g4] ~@4 [c4,e4,g4] ~@5 [c4,e4,g4] ~, ~@3 e4@2 ~@11", // Cm C5 C
  J: "[f4,a4,c5]@6 [f4,a4,c5]@4 [f4,a4,c5]@4 [f4,a4,c5] ~", K: "[f4,a#4,d5]@3 ~ [f4,a#4,d5]@3 ~ [f4,a4,c5]@5 ~@3",
  L: "~@2 g3@3 ~ [c5,e5,g5] ~@7 [c4,e4,g4] ~, [c4,d#4,e4,g4]@5 ~@11", // C
  M: "[f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [c4,e4,g4]@4 ~@4", N: "[c4,d#4] g4 ~@4 [c5,e5,g5] ~@7 [c4,e4] ~",
  O: "~@2 [c4,e4,g4] ~@5 [c5,e5,g5] ~@5 [c4,e4] ~", P: "[f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [c4,e4,g4]@5 ~@3",
  Q: "d#4 e4@2 g3@2 ~ [c5,e5,g5] ~@3 [c4,e4,g4] ~@3 [c4,e4] ~, c4 ~@7, ~ g4 ~@14", // C
  R: "[f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [c4,e4,g4]@2 ~@6", S: "[f3,a3,c4]@5 ~ [f3,a3,c4]@4 [f3,a3,c4]@4 [f3,a3,c4] ~",
  T: "[f3,a#3,d4]@3 ~ [f3,a#3,d4]@3 ~ [f3,a3,c4]@8", // A# F
  U: "[c4,d#4,e4,g4] ~ [e4,g4] g3@2 ~ [c4,e4,g4]@3 ~ [c4,e4,g4] ~@3 [c4,e4,g4] ~", // C Em C
  V: "[f4,a4,c5]@2 ~@2 [f4,a4,c5]@3 ~ [c4,e4,g4]@7 ~", // F C
  W: "[d4!2 ~@2 [g3,b3,d4]@2 ~@12 [g4,d5]@4 [g4,c5,d5]@2 [g4,b4,d5]@7 ~, g3@3 d3@21 ~@8, ~@3 [g3,b3,d4]@9 ~@4, ~@9 b4@3 ~@4]/2", // G G5 Gsus4 G
  X: "[f4,a4,c5]@12 [f4,a4,c5]@3 ~", Y: "[f4,a4,c5]", Z: "[[f4,a4,c5,d#5]@7 ~]/2",
  AA: "~@4 [c4,e4,g4]@4 [c4,e4,g4]@4 [c4,e4,g4]@3 ~", // C
  AB: "[~ c4@3 [a3,c4]@4 [c4,e4,g4]@11 ~ [c4,e4,g4] ~@5 g3@3 c4 e4@2, f3 ~@3, a3@4 ~@18 [c4,e4,g4]@8 g4 ~]/2", // Am C
  AC: "~@4 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@4 [c4,e4,g4]@3 ~", AD: "[c4,e4,g4]@4 [c4,e4,g4]@3 ~ [g3,b3,d4]@4 [g3,b3,d4]@3 ~",
  AE: "[[f3,a3,c4]@11 ~ [c4,e4,g4] ~ [c4,e4]@4 ~@2 [c4,e4,g4]@2 g3 ~ [c4,f4,a4]@2 ~@2 [c4,f4,a4]@3 ~, ~@14 g4 ~@17]/2", // F C F
  AF: "[[c4,e4,g4]@7 ~ [f3,c4]@3 ~ [f3,a3,c4]@6 [f4,a4,c5]@4 [f4,a4,c5] ~ [f4,a#4,d5]@3 ~ [f4,a#4,d5]@3 ~]/2", // C F5 F A#
  AG: "f4@12 [f4,a#4,d5]@3 ~, [a4,c5]@15 ~", AH: "[f4,a4,c5]@8 [f4,a4,c5]@4 [f4,a4,c5] ~@3",
  AI: "[[g4,b4,d5]@2 [g4,b4]@2 [g4,b4,d5]@2 [b4,d5]@2 [g4,b4,d5]@6 [g4,b4,d5]@4 [g4,b4,d5]@4 [g4,b4,d5] ~ [g4,b4,d5]@8, ~@6 g4 ~@25]/2", // G Bm G
  AJ: "[b4@2 b4@3 ~ b4@2 ~@17 [g4,b4]@7, ~ d5@3, ~@8 [g4,b4]@17 ~@7, ~@7 [g3,b3,d4]@9, ~@5 [f5,g5,b5]@3]/2", // G G7
  AK: "[[f3,a3] a3 [f3,c4] ~ a3 ~ [f3,a3,c4]@2 [f3,a3,c4]@6 ~@6 [f5,a5]@6 [f3,a3]@5 ~, ~@7 [f3,a3,c4]@6 ~@3]/2", // F F5 F
  AL: "[g3,b3,d4] ~ b3@2 b3@2 b3@2 [g3,b3,d4]@3 ~ d3 ~@3, ~ [g3,d4] ~@2", // G G5
  AM: "~ d3@2 [g3,b3,d4]@2 [g3,b3,d4] [g3,b3,d4]@2", AN: "[e3,g3]@3 ~@13",
  AO: "[f4,g#4,a4]@3 ~ [f4,a4,c5]@3 ~@3 [f4,a4,c5]@4 f4 ~", AP: "[a#4,d5] ~@3 [f4,a#4,d5]@3 ~ [f4,a4,c5]@8, f4 ~@7",
  AQ: "[~@4 [f3,a3,c4]@3 ~@5 [f3,a#3,d#4]@8 [f3,a3,c4]@11 ~]/2", AR: "[c4,e4,g4] ~@7",
  AS: "[c4,e4,g4]@11 ~ [c4,e4,g4]@4", AT: "[c4,e4,g4]@4 [c4,e4,g4]@3 ~@2 c4@3 [a3,c4]@4, ~ f3, ~@2 a3 ~",
  AU: "[[c4,e4,g4]@11 ~ [c4,e4,g4] ~@5 g3@3 c4 e4@2 ~@4 [c4,e4,g4]@2 ~@2, ~@14 [c4,e4,g4]@8 g4 ~@9]/2", // C
  AV: "[c4,e4,g4]@4 [c4,e4,g4]@3 ~ [c4,e4,g4]@4 [c4,e4,g4]@3 ~", // C
  AW: "[[g3,b3,d4]@4 [g3,b3,d4]@3 ~ [f3,a3,c4]@11 ~ [c4,e4,g4] ~ [c4,e4]@4 ~@2 [c4,e4,g4]@2 g3 ~, ~@22 g4 ~@9]/2", // G F C
  AX: "[c4,f4,a4]@2 ~@2 [c4,f4,a4]@3 ~ [c4,e4,g4]@8", // F C
  AY: "[[f3,a3] a3 [f3,c4] ~ a3@2 [f3,a3,c4]@2 [f3,a3,c4]@6 ~@6 [f5,a5]@6 [f3,a3]@5 ~, ~@7 [f3,a3,c4]@6 ~@3]/2", // F F5 F
  AZ: "[g3,b3,d4] ~ b3 ~ b3@2 b3@2 [g3,b3,d4]@3 ~ d3 ~@3, ~ [g3,d4] ~@2", // G G5
})).s("gm_piano").gain(0.32).pan(0.4)

// other · piano · "tom mid 2  45     2"
const piano_2 = note(`<
  ~@4 A ~ B ~@7 C D E ~@5 A ~ F ~ A ~ G ~ H ~@3 I J@2 K@2 L M N O ~@2 A ~ B ~@15 A ~ F ~ A ~ G ~ H ~@3 I J@2 K@2 L M N P
  ~@2 A ~ Q ~@3 R ~ S Q E ~@7 T ~@5 A ~ I J@2 K@2 L M U V W U X Y Z ~ Q ~@3 R ~ S Q A
>`.pickRestart({
  A: "c3@3 ~@13", B: "~@2 c3 ~@13", C: "f2@11 ~@5", D: "~@8 f2 ~@7", E: "c3 ~@7", F: "f2@3 ~@13", G: "g2@5 ~@11",
  H: "f2@13 ~@3", I: "c3@5 ~@11", J: "[f2 ~@3 c3@5 ~@7]/2", K: "[c3@5 ~@3 c3 ~@3 c3@7 ~@5 g2@3 ~@5]/2",
  L: "f2@8 c3 ~@7", M: "~ c3 ~@6", N: "~ f2", O: "c3@2 ~@4 c3 ~@9", P: "c3 ~@5 c3 ~@9", Q: "g2@3 ~@13", R: "~ f2@3 ~@4",
  S: "~@10 g2@5 ~", T: "f2@2 ~@6 c3 ~@7", U: "~@8 c3@5 ~@3", V: "~@4 f2 ~@3", W: "c3@5 ~@3", X: "c3 ~@3 c3@7 ~@5",
  Y: "g2@3 ~@5 f2@8", Z: "c3 ~@9 c3@2 ~@4",
})).s("gm_piano").gain(0.36).pan(0.6)

// other · piano · "tom mid 2  45     2" · soft notes
const piano_soft = note("<~@36 A ~@5 B ~@34 A ~@5 B ~@20 C ~@9 A ~@6 D@2 ~@13>".pickRestart({
  A: "~@7 c3@3 ~@6", B: "~@4 f2@3 ~@9", C: "~ c3 ~@6", D: "[~@15 c3@3 ~@14]/2",
})).s("gm_piano").gain(0.18).pan(0.6)

// chords · reed organ · "tom mid 2  45     3"
const reed_organ = note(`<
  ~@4 A B A C A D A B A D E F A D A B A G A H I J A B K@2 L@2 M@2 A N O P Q R P S@2 T@2 A B A C A D A B A D U@2 A D A B
  A G A H I V A B K@2 L@2 M@2 A N O P W R P S@2 X@2 A B Y@4 Z@2 AA@2 AB ~@7 AC AD AE@2 AF ~ A B A N O P W R P AG AH AI
  A@2 AJ A AK Y@4 Z@2 AA@2 AB
>`.pickRestart({
  A: "~@4 [c4,e4,g4] ~ [c4,e4,g4] ~@5 [c4,e4,g4] ~@3", // C
  B: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~ [c4,f4,a4] ~@3 [c4,f4,a4]@3 ~", // C F
  C: "~@2 [c4,e4,g4] ~@3 [e4,g4] ~ [c4,f4,a4] ~@3 [c4,f4,a4]@3 ~", // C Em F
  D: "~@2 [c4,e4,g4] ~@3 [c4,e4] ~ [c4,f4,a4] ~@3 [c4,f4,a4]@3 ~", E: "[a3,c4]@3 ~, f3@7 ~",
  F: "[f3,a#3]@2 ~@2 [f3,d4] ~@3 [f3,a3,c4]@6 ~@2, d4 ~@3 a#3@2 ~@10", // A#5 Dm F
  G: "~@2 [c4,e4,g4] ~@3 [c4,e4] ~ [c4,f4,a4] ~@3 [c4,f4,a4]@2 ~@2", // C F
  H: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~ [c4,f4,a4] ~@3 [c4,f4,a4] ~@3", I: "~ [a3,c4]@12 ~@3, ~ f3@14 ~",
  J: "[f3,a#3,d4] ~ a#3 ~ [f3,a#3,d4] ~@3 [f3,a3,c4]@5 ~@3", K: "[~@7 g4@7 ~@2, [g3,b3]@7 ~, d4 ~]/2",
  L: "[[f3,a3,c4]@23 ~ [a3,c4]@2 ~@2 [a3,c4]@4, ~@24 f3 ~@3 f3@2 ~@2]/2", M: "[[f3,a3,c4,d#4]@15 ~]/2",
  N: "[f3,a3,c4] ~@3 [f3,a3,c4] ~@3 [c4,e4,g4]@8", O: "~@4 [e4,g4] ~ [c4,e4,g4] ~@5 [c4,e4,g4] ~ [c4,e4,g4] ~",
  P: "~@4 [c4,e4,g4] ~@7 [c4,e4,g4] ~ [c4,e4,g4] ~", Q: "~@4 [c4,e4,g4] ~@3 [g3,b3,d4] ~@3 [g3,b3,d4]@2 ~@2",
  R: "[f3,a3,c4]@6 ~@6 [c4,e4,g4] ~ [c4,e4,g4] ~", // F C
  S: "[~@4 [c4,e4,g4]@2 ~@2 [f3,a3,c4]@15 ~ [f3,a#3,d4]@2 ~@2 [f3,a#3,d4]@3 ~]/2", // C F A#
  T: "[[f3,a3,c4]@19 ~ [f3,a3,c4] ~ [f3,a3,c4] ~@5 [f3,a3,c4]@2 ~@2]/2", U: "[[a3,c4,f4]@15 ~]/2",
  V: "[f3,a#3,d4] ~ a#3 ~ [f3,d4] ~@3 [f3,a3,c4]@5 ~@3, ~@2 a#3 ~@5", // A# Dm F
  W: "~@4 [c4,e4,g4] ~@3 [g3,b3,d4] ~@3 [g3,d4] ~@3, ~@6 b3 ~", // C G G5
  X: "[[f3,a3,c4]@19 ~ [f3,a3,c4] ~ [a3,c4] ~@5 [f3,a3,c4]@2 ~@2, ~@11 f3 ~@4]/2", // F Am F
  Y: "[[g3,b3,d4]@53 ~@3 [g3,b3] ~@3 [g3,b3,d4]@2 ~@2, ~@28 d4 ~@3]/4", Z: "[[f3,a3,c4]@29 ~@3]/2",
  AA: "[[g3,b3,d4]@29 ~@3]/2", AB: "[c3,e3,g3] ~@7", AC: "~@2 [f3,a3,c4] ~@5 [f3,a3,c4] ~@3 [f3,a3,c4] ~@3",
  AD: "[f3,a#3,d4] ~ [f3,a#3,d4] ~ [f3,a3,c4]@3 ~", // A# F
  AE: "[~@4 [f3,a3]@3 ~@5 [f3,a#3,d#4]@6 ~@2 [f3,a3,c4]@9 ~@3, ~@4 c4 ~@27]/2", AF: "[c4,e4,g4]@3 ~@13",
  AG: "~@4 [c4,e4,g4]@2 ~@6 [c4,e4,g4] ~ [c4,e4,g4] ~", AH: "~@4 [c4,e4,g4] ~@3 [f3,a3,c4] ~@3 [f3,a3,c4] ~@3",
  AI: "[c4,e4,g4]@8 ~@4 [e4,g4] ~ [c4,e4,g4] ~", AJ: "[g3,b3,d4] ~@3 [g3,d4] ~@3 [f3,a3,c4]@6 ~@2, ~@2 b3 ~@5",
  AK: "~@4 [c4,e4,g4] ~ [c4,e4,g4] ~@5 [c4,e4,g4]@2 ~@2", // C
})).s("gm_reed_organ").gain(0.25).pan(0.6)

// other · electric guitar jazz · "tom mid 2  45     4"
const electric_guitar_jazz = note(`<
  ~@4 A@2 B@3 ~ C@3 ~ D E F@3 ~ G@2 ~@2 H I J K L M N O@2 P ~@2 Q@2 ~@3 R S T U A@2 V@2 ~@9 W ~@6 X Y ~@3 Z ~ AA AB@2
  ~@13 AC AD@2 AE AF AG AD AE AH ~@5 AI AJ ~@2 AK@2 ~@2 A@2 ~@15 AC AD@2 AE AF AG AD AE AH
>`.pickRestart({
  A: "[g4@4 ~@2 c5 ~@3 c5@2 ~@2 g4@4 ~@2 g4@2 a4 ~ a#4 ~ a4 ~ g4@2 ~@2]/2",
  B: "[g4@3 ~@3 c5 ~@3 c5@2 ~@2 g4@4 ~@2 g4@2 a4 ~ a#4@2 a4@2 g4@17 ~@3]/3",
  C: "[g4@4 ~@2 c5 ~@3 c5@2 ~@2 g4@4 ~@2 g4 ~ a4 ~ a#4 ~ a4@2 g4@8 ~@12]/3", D: "c4@4 f4@2 a4 ~@3 a4@2 ~@2 a4@2",
  E: "f4@2 a4@2 c4@3 ~", F: "[g4@4 ~@2 c5 ~@3 c5@2 ~@2 g4@4 ~@2 g4@2 a4@2 a#4@2 a4@2 g4@9 ~@11]/3",
  G: "[g4@4 ~@2 c5 ~@3 c5@2 ~@2 g4@4 ~@2 g4@2 a4 ~ a#4@2 a4@2 g4@4]/2", H: "c4@4 f4 ~ a4 ~@3 a4@2 ~@2 a4@2",
  I: "f4@4 a4@4 c4@7 ~", J: "[f4,g4] ~@5 c5 ~@4 c5 ~@2 g4@2", K: "~@6 g4 ~ g4@5 ~@3",
  L: "[g4,b4,d5]@9 ~@3 [g4,c5,e5]@3 ~, f4 ~@15", M: "[g4,b4,d5]@2 ~@2 [c5,e5] ~ [g4,b4,d5]@7 ~@3",
  N: "[f4,a4,c5]@9 ~@3 [f4,a#4,d5]@2 ~@2", // F A#
  O: "[[a4,c5]@2 ~@2 [a#4,d5] ~ [a4,c5]@8 ~@2 [f3,a3,c4,d#4]@16, ~@6 f4@17 ~@9]/2", // Am A# Am F7
  P: "~@2 a3 ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4,d#4] ~ [f3,a3,c4,d#4] ~ [f3,a3,c4,d#4]@3 ~", // F F7
  Q: "[e3@2 g3@2 c4@2 g3@2 a#3 ~@3 g3@2 c4@4 e3@2 g3@2 a#3@4 c4@4 ~@2]/2", R: "~@8 [f3,a3,c4]@7 ~",
  S: "c4@2 a3 ~ f3@2 ~@2 [f3,a#3,d4]@2 ~@2 [f3,a#3,d4]@2 ~@2", T: "[f3,a3,c4]@8 ~@2 c4@2 a3 ~ f3 ~",
  U: "c4@2 a3 ~ f3 ~ f4@8 ~@2, ~@6 a4 ~@9", V: "[g4@3 ~@3 c5 ~@3 c5@2 ~@2 g4@4 ~@2 g4@2 a4 ~ a#4@2 a4@2 g4@4]/2",
  W: "~@2 g3 a3 a#3 a3 g3@2", X: "f3@6 c4 ~@3 c4 ~@3 c4 ~", Y: "~@2 f3 ~ f3@3 ~", Z: "~@2 d4@2 b3@2 g3@7 ~@3",
  AA: "~ a3 f3 ~, c4@3 ~@5", AB: "[d#4@7 ~]/2", AC: "~@2 g4 d4 f4@2 g4@2, g3@7 ~@9", AD: "g3@2 g4 d4 f4@2 g4@2",
  AE: "g3@4 g4@2 d4@2 f4@4 g4@3 ~", AF: "f3@5 ~ c4@2 d#4@4 f4@4", AG: "f3@2 f4 ~ d#4@2 f4@2", AH: "[c4,e4,g4] ~@7",
  AI: "~@6 c5 ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~", // C5
  AJ: "[c4,g4,c5]@2 ~@2 g3@2 a3@2 a#3@2 a3@2 g3@3 ~", AK: "[~@4 [a3,f4]@3 ~@5 [g3,d#4]@8 [a3,f4]@8 ~@4]/2",
})).s("gm_electric_guitar_jazz").gain(0.32).pan(0.4)

// other · electric guitar jazz · "tom mid 2  45     4" · soft notes
const electric_guitar_jazz_2 = note("<~@29 A ~ B ~ C ~@2 D ~@7 E ~@46 F G H ~@8 I ~@27 F G H ~@3>".pickRestart({
  A: "~@4 g4 ~@11", B: "f4@2 ~@2 f4 ~@11", C: "~@2 [f3,c4,d#4] ~ d#4 ~ d#4 ~@9", D: "~@10 e3@3 ~@3", E: "~@4 a3 ~@11",
  F: "g#3 ~@15", G: "~@2 f4 ~@5", H: "~@3 c4 ~@4", I: "~@2 [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4] ~@9",
})).s("gm_electric_guitar_jazz").gain(0.16).pan(0.4)

// bass · acoustic bass · "tom mid 2  45     6"
const bass = note(`<
  ~@4 A B C A D@5 E F G D H D@5 I F J D K L M N O P@2 Q R S T U V W X Y N Z A B C A D@5 E F G D H D@5 I F J D K L M N O
  P@2 Q R S T U V W X Y N Z A B AA AB AA AC N AD AA AE AF AG@2 AH AF ~ AI AJ N AK AL AM AN ~ A B Q R S T U V W AO AP Q
  AQ AR AP A AS AA AB AA AC N AD AA AE AF
>`.pickRestart({
  A: "c2@3 ~ g1@2 ~@2", B: "c2 ~ f1 ~", C: "c2@3 ~ g1@3 ~", D: "c2 ~ g1 ~", E: "c2 ~ g1 c2", F: "f1@3 ~ c2@3 ~",
  G: "f1 ~ f1 ~", H: "c2@2 ~@2 c2 a#1 a1 f1", I: "c2@3 ~ g1@2 c2 ~", J: "f1@3 ~ f1@2 ~@2", K: "c2@3 ~ c2 a1 f1 f#1",
  L: "g1@3 ~ d2@4", M: "g1 ~ g1 ~", N: "f1 c2", O: "f1@2 c2 ~", P: "f2/2", Q: "c2 g1", R: "f2@3 ~ c2@4",
  S: "g1@4 c2!2 ~ a1", T: "g1 a1 c2 a1", U: "g1 c2 g1@2", V: "f2@3 ~ c2@3 ~", W: "g1@2 ~@2 c2 c2@2 a1", X: "g1 a1 f2@2",
  Y: "f1 c2 a#1@2", Z: "f1@3 ~ f1@2 a1 a#1", AA: "g1 d2", AB: "g1@4 d2@2 g2 ~", AC: "g1@3 ~ g1 ~ g1 ~",
  AD: "f1@4 c2@3 ~", AE: "g1@2 d2 b1", AF: "c2 ~@7", AG: "[~@7 d3@3 d3 ~ c3 ~ a2 c3]/2", AH: "~@2 g2 a2 a#2 a2 g2@2",
  AI: "~ c3!7", AJ: "c3 ~@7", AK: "a#1@4 f1@3 ~", AL: "f1@3 ~ f1@3 ~", AM: "f1@3 ~ f1!2 a1 a#1", AN: "c2 ~@3",
  AO: "g1 a1 c2@2", AP: "g1@4 f2@3 ~", AQ: "c2!2 ~ a1 g1@2 a1@2", AR: "c2 a1 g1 c2", AS: "c2 c2@2 a1 g1@2 a1@2",
})).s("gm_acoustic_bass").gain(0.69).pan(0.4)

// other · acoustic guitar nylon · "tom mid 2  45     8"
const acoustic_guitar_nylon = note(`<
  ~ A B@3 ~@2 C D E@2 F G H@2 I@2 C D E@2 F G H@2 I@2 ~ J K L M ~ N O P@2 Q R@2 ~ S T@2 U V W@2 C D X@2 F G H@2 I@2 C D
  X@2 F G H@2 I@2 ~ J K L M ~ N O P@2 Q R@2 ~ S T@2 U V W@2 ~@7 Y Z ~ AA AB AC ~ AD AE AF@2 A O AG ~ N O P@2 Q AH ~@2 AI
  AJ@2 AK AB AL ~@11
>`.pickRestart({
  A: "~@2 a3 c4", B: "[e4@2 d4@2 c4@2 ~@2 a3@2 c4@2 e4@2 d4 c4@3 ~@6, ~@3 g3@2 ~@7]/3", C: "~@12 c3 ~ c3@2",
  D: "e3@4 g3 ~ g3 ~ g3@3 ~ g3 ~ g3@2", E: "[a3@4 g3@2 e3@4 d3 ~ c3@17 ~@3]/2", F: "~@3 c3",
  G: "e3@4 g3 ~ g3@3 ~ g3 ~ g3 ~ g3@2", H: "[a3@2 c4 e4@2 d4 c4@9 ~]/2",
  I: "[~@4 g3 ~ g3 ~ a3@4 g3@2 e3@4 d3@2 c3@9 ~@3]/2", J: "b3@2 d4@3 ~ d4@5 ~ d4@4", K: "e4@2 d4@4 b3@6 g3 ~ g3@2",
  L: "a3@4 c4@3 ~ c4@3 ~ c4@4", M: "d4@3 c4@3 a3@10", N: "~@7 c4, ~@10 g3@5 ~, ~@3 a3", O: "e4 d4 c4 g3",
  P: "[a3@2 c4 e4@2 d4 c4@4 ~@6]/2", Q: "~@4 a3@2 c4 ~ e4@3 ~ d4@4, ~ g3@2 ~@5",
  R: "[c4@3 ~ c4@4 b3@4 c4@2 a3@7 ~@11]/2", S: "~@8 a3@4 c4@3 ~, ~@7 g3@2 ~@7",
  T: "[c4@3 ~ c4@4 d4@4 c4 ~ c4@4 a3@11 ~@3]/2", U: "~@6 a3 c4, ~@5 g3@2 ~", V: "e4@4 d4@4 c4@4 g3@3 ~",
  W: "[a3@2 c4@2 d4@2 c4@5 ~@5]/2", X: "[a3@4 g3@2 e3@4 d3@2 c3@17 ~@3]/2", Y: "e4@3 ~ d4@4 c4@4 g3@4",
  Z: "~@2 c4 e4@2 d4 c4@2, a3@3 ~@5", AA: "~@7 c4, ~@5 g3@2 ~, ~@3 a3", AB: "e4@4 d4@4 c4@3 ~ c4@4",
  AC: "b3@4 c4@2 a3@9 ~", AD: "~@7 g3", AE: "a3@4 c4@3 ~ c4@3 ~ c4@3 ~", AF: "[d4@4 c4@2 a3@4 g3@2 f3@9 ~@11]/2",
  AG: "a3@2 c4 e4@2 d4 c4@2", AH: "c4@3 ~ c4@4 b3@4 c4@2 a3@2", AI: "~@2 g3@2 a3@2 c4 ~ e4@4 d4@4",
  AJ: "[c4@4 g3@4 a3@4 c4 ~ e4@4 d4@2 c4@10 ~@2]/2", AK: "~@5 g3 a3 c4", AL: "b3@2 c4 a3@4 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.8)

// drums · kick
const kick = s("bd").struct("<~@4 A@92 B ~ B ~ B ~ B ~ A@3 C B ~ A@25 B>".pickRestart({
  A: "x!2", B: "x", C: "x ~ x!2",
})).gain(0.8).pan(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B@13 C B@9 D B@4 ~ E B@16 F B F B F B F B C B F B F B@2 G B G D B@4 ~ E B@12 H B@3 I B@4 J K L K L K M ~ B@4 N ~
  B@20 I B@4 ~
>`.pickRestart({
  A: "~@2 x!2", B: "~ x ~ x", C: "~@4 x ~@3 x ~ x!3 ~ x ~", D: "~@4 x ~@7 x ~ x!2", E: "~ x!7", F: "~@2 x ~@3 x!2",
  G: "~@2 x!2 ~@2 x ~", H: "~@4 x ~ x!3 ~ x ~ x ~@3", I: "~ x!3", J: "~ x", K: "x ~@3 x!2 ~@2", L: "x!2", M: "x!8",
  N: "x",
})).gain(0.72).pan(0.4)

// drums · hihat
const hihat = s("hh").struct("<A B ~@2 C@28 ~@2 C@39 ~@2 C@21 D C@5 E ~@5 F E C@25 ~>".pickRestart({
  A: "x!2", B: "x!4", C: "x!8", D: "~ x!7", E: "x", F: "~ x",
})).gain(0.56).pan(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@87 A ~@3 B ~@6 C B ~@5 B ~@9 D ~@10 A ~@3 B ~>".pickRestart({
  A: "~@2 x!2", B: "~@3 x", C: "~ x!7", D: "~ x ~@2",
})).gain(0.8).pan(0.4)

// drums · mid tom
// … 35 more lines

More by Alabama