Strudelify

Dancin' Fool

Zappa Frank

KeyC♯ minorTempo133 bpm
0:00/0:00
// Dancin' Fool — Zappa Frank
// 133 bpm, 4/4, key C# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 18, 4/4 at bar 19, 6/4 at bar 27, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar2, Guitar2.
setcpm(133/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 · "Bass"
const bass = note(`<
  ~ A@6 B@6 ~@2 C@2 D E@7 F G E@4 H@2 I@6 ~@2 C J E@8 K L K L K L K L K L K L K M E N E@2 O@2 P@2 Q R Q S T U V W X Y
  Z@2 AA@3 AB E@8 AC AD AE AF AG AH AI AJ AK AL@2 AM AN AO AN AO AN AO AN AO AN AO AN AO AN AO AN AP
>`.pickRestart({
  A: "[~@6 a1@30 ~ a1@30 a1@29]/6", B: "[~ a1@47]/6", C: "g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~",
  D: "~@8 c#2@2 c#3!2 c#2@2 c#3!2", E: "c#2@2 c#3!2 c#2@2 c#3!2 c#2@2 c#3!2 c#2@2 c#3!2",
  F: "c#2@2 c#3!2 c#2@2 c#3!2 b1 ~@3 b2 ~@3", G: "b1 ~ b1 ~ b2 ~@3 b1 ~@3 b2 ~@3", H: "[a1@31 ~]/2", I: "[a1@95 ~]/6",
  J: "g#1 ~ g#1 ~ g#1 ~ g#1 ~ c#2 ~@7", K: "g#1@2 ~ g#1 f#1 ~ f1 ~ f#1 ~ f1 ~ f#1 ~ f1 ~",
  L: "f#1 ~ f1 ~ f#1 ~ g1 ~ g#1 ~@7", M: "~@12 c#2@2 c#3!2", N: "c#2@2 c#3!2 c#2 ~@11", O: "[a1 ~ a1@10 e1!2 a1 e1]/2",
  P: "[a1 ~ a1@14]/2", Q: "a1 ~ a1@2 ~@2 a1@2", R: "~ a1 ~ e1", S: "a1 a2 f#1 f#2 g1 g2 g#1 g#2", T: "a1 ~ a2@4 ~@2",
  U: "a1 ~ a1@4 ~@2", V: "a1 ~ a1@6", W: "a1 a2 g1 g2 f#1 f#2 f1 f2", X: "e1 ~ e1@3 e1 g#1 b1", Y: "a1 ~ a1@4 ~ a1",
  Z: "[d2 ~ d2@2 ~ d2!2 g2@9]/2", AA: "g#1!8", AB: "g#1!4 c#2 ~@3", AC: "c#2!2 f1!2 f#1!2 g1!2",
  AD: "g#1!2 a#1 b1 c#2 ~@3", AE: "~@2 c#2!2 f1!2 f#1!2", AF: "g1!2 g#1!2 a#1 b1 c#2 ~", AG: "~@4 c#2!2 f1!2",
  AH: "f#1!2 g1!2 g#1!2 a#1 b1", AI: "c#2 ~@5 c#2!2", AJ: "f1!2 f#1!2 g1!2 g#1!2", AK: "a#1 b1 c#2 c#3!3 b2 a#2",
  AL: "[g#2 a#2 e2 d#2 c#2 c#2@8 ~@3]/2", AM: "~@10 c#2@3 c#2 b1 ~", AN: "a#1 ~ b1 ~ a#1 ~ b1 ~ a#1 ~ b1 ~ a#1 ~ b1 ~",
  AO: "c2 ~ c#2 ~@7 c#2@3 c#2 b1 ~", AP: "c2 ~ c#2 ~@13",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · distortion guitar · "Guitar1"
const distortion_guitar = note("<~ A@8 ~@22 B@2 C@2 ~@90>".pickRestart({
  A: "[~@6 [a2,e3,a3]@30 ~ [a2,e3,a3]@30 [a2,e3,a3]@30 ~ [a2,e3,a3]@27 ~@3]/8", B: "[[a2,e3,a3]@31 ~]/2",
  C: "[[a2,e3,a3]@7 ~]/2", // A5
})).s("gm_distortion_guitar").gain(0.29).pan(0.9)

// other · electric guitar muted · "Guitar2"
const electric_guitar_muted = note(`<
  ~@17 A B C B@2 C D B ~@2 E F B G ~@12 H I J B K L J M ~@13 N O P Q R ~@20 Q S B T U V B W ~@11 X Y@15 Z
>`.pickRestart({
  A: "~@8 [c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!2 c#5", // C#
  B: "[c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!3 [c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!3", // C#
  C: "[c#4,c#5] ~@2 [c#4,c#5] ~ [c#4,c#5]!3 [c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!3", // C#
  D: "[c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!4 ~@2 [c#4,c#5] ~ [c#4,c#5]!2 c#4", // C#
  E: "~@2 [c#4,c#5] ~@2 [c#4,c#5]!4 ~@2 [c#4,c#5] ~ [c#4,c#5]!3", // C#
  F: "[c#4,c#5] ~@2 [c#4,c#5] ~ [c#4,c#5]!2 c#5 [c#4,c#5] ~@2 [c#4,c#5] ~ [c#4,c#5]!3", // C#
  G: "[c#4,c#5] ~@2 [c#4,c#5] ~ [c#4,c#5]!2 ~ [c#4,c#5]@2 ~@6", // C#
  H: "~@2 [c#4,c#5]@2 ~ [c#4,c#5]!2 c#4 [c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!2 ~", // C#
  I: "[c#4,c#5]@2 ~ [c#4,c#5] ~ c#5 [c#4,c#5]!2 [c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!3", // C#
  J: "[c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!3 [c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!2 c#4", // C#
  K: "[c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!3 [c#4,c#5]@2 ~ [c#4,c#5]@2 [c#4,c#5]!2 c#5", // C#
  L: "[c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!2 c#4 [c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!2 c#5", // C#
  M: "[c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!3 [c#4,c#5]@2 ~@6", N: "~@7 [c#4,c#5]",
  O: "~ [c#4,c#5]!3 [c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!3 [c#4,c#5]@2 ~ [c#4,c#5]", P: "~ [c#4,c#5]!4 ~@11",
  Q: "~@2 [c#4,c#5]@2 ~ [c#4,c#5]!3 [c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!2 ~", // C#
  R: "[c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!4 ~@7", // C#
  S: "[c#4,c#5]@2 ~ [c#4,c#5]@2 [c#4,c#5]!2 ~ [c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!3", // C#
  T: "[c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!2 c#5 [c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!2 c#5", // C#
  U: "[c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5] c#5 [c#4,c#5] [c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!3", // C#
  V: "[c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!3 [c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!2 c#5", // C#
  W: "[c#4,c#5]@2 ~ [c#4,c#5] ~ [c#4,c#5]!2 c#4 [c#4,c#5]@2 ~ [c#4,c#5]@2 [c#4,c#5]!3", // C#
  X: "~@11 [c#3,c#4]!2 ~@2 [c#3,c#4]", Y: "[c#3,c#4] ~@2 [c#3,c#4]!2 ~@2 [c#3,c#4]!2 ~@2 [c#3,c#4]!2 ~@2 [c#3,c#4]",
  Z: "[c#3,c#4] ~@15", // C#
})).s("gm_electric_guitar_muted").gain(0.4).pan(0.4)

// chords · piano
const piano = note(`<
  ~ A@8 B C D E F G H I J K L K L K M K N O P Q R Q S@2 T@2 B C D E F U H V P Q R Q R W R Q ~@13 X@3 Y Z AA AB AC AD AE
  AF AG AH AI AJ AK@2 AL AM AN AO ~ AP AQ@2 P Q R Q R W R Q ~@8 AR AS@2 ~@17
>`.pickRestart({
  A: "[~@6 [a2,a3,c#4,e4,a4]@29 ~@2 [a2,a3,c#4,e4,a4]@29 ~ [a2,a3,c#4,e4,a4]@30 ~ [a2,a3,c#4,e4,a4]@30]/8", // A
  B: "[d4,e4,g4] ~ [d4,e4,g4] ~ [d4,e4,g4] ~ [d4,e4,g4] ~ [c#4,e4,g4] ~ [c#4,e4] ~ [c#4,e4,g4] ~ [c#4,e4,g4] ~", // Em7 C#dim C#m C#dim
  C: "[d4,e4,g4] ~ [d4,e4,g4] ~ [d4,e4,g4] ~ [d4,e4,g4] ~ [c#4,e4,g4] ~ [c#4,e4,g4] ~ [c#4,e4,g4] ~ [c#4,e4,g4] ~", // Em7 C#dim
  D: "[a3,d4,e4,g4] ~ [a3,d4,e4,g4] ~ [a3,d4,e4,g4] ~ [a3,d4,e4,g4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~", // Asus4 D
  E: "[g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [f3,a#3,d4] ~ [f3,a#3,d4] ~ [f3,a#3,d4] ~ [f3,a#3,d4] ~", // C A#
  F: "[e3,g#3,b3,d4] ~ [e3,g#3,b3,d4] ~ [e3,g#3,b3,d4] ~ [e3,g#3,b3,d4] ~ [e3,a3,c#4] ~ [e3,a3,c#4] ~ [e3,a3,c#4] ~ [e3,a3,c#4] ~, e2 a2", // E7 A
  G: "[d3,f3,a3,c4] ~ [d3,f3,a3,c4] ~ [d3,f3,a3,c4] ~ [d3,f3,a3,c4] ~ [d3,g3,b3] ~ [d3,g3,b3] ~ [d3,g3,b3] ~ [d3,g3,b3] ~, d2@8 g2@7 ~", // Dm7 G
  H: "[d#3,f#3,b3] ~ [d#3,f#3,b3] ~ [d#3,f#3,b3] ~ [d#3,f#3,b3] ~ [f3,g#3,c#4] ~ [f3,g#3,c#4] ~ [f3,g#3,c#4] ~ [f3,g#3,c#4] ~", // B C#
  I: "[b3,d#4,f#4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~ [c#4,f4,g#4] ~ [c#4,f4,g#4] ~ [c#4,f4,g#4] ~ [c#4,f4,g#4] ~", // B C#
  J: "~@10 [f4,g#4,c#5]@3 ~ [f4,g#4,c#5] ~", // C#
  K: "[d#4,f#4,b4]@2 ~ [d#4,f#4,b4]@2 ~ [d#4,f#4,b4] ~ [c#4,f#4,a#4]@2 ~ [c#4,f#4,a#4]@2 ~ [c#4,f#4,a#4] ~", // B F#
  L: "[c#4,f4,g#4] ~@9 [f4,g#4,c#5]@2 ~@2 [f4,g#4,c#5] ~", M: "[c#4,f4,g#4]@2 ~@8 [f4,g#4,c#5]@2 ~@2 [f4,g#4,c#5] ~",
  N: "[c#4,f4,g#4] ~@7 [f#3,b3,d#4]@2 ~@2 [f#3,b3,e4]@2 ~@2", // C# B Esus2
  O: "[f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,e4]@2 ~@2 [f#3,b3,d#4]@2 ~@2 [f#3,b3,e4]@2 ~@2", // B Esus2 B Esus2
  P: "~@2 [f4,g#4,c#5]@3 ~ [f4,g#4,c#5] ~ [d#4,f#4,b4]@2 ~ [d#4,f#4,b4]@2 ~ [d#4,f#4,b4] ~", // C# B
  Q: "[c#4,f#4,a#4]@2 ~ [c#4,f#4,a#4]@2 ~ [c#4,f#4,a#4] ~ [c#4,f4,g#4] ~@7", // F# C#
  R: "~@2 [f4,g#4,c#5]@2 ~@2 [f4,g#4,c#5] ~ [d#4,f#4,b4]@2 ~ [d#4,f#4,b4]@2 ~ [d#4,f#4,b4] ~", // C# B
  S: "[[a2,a3,c#4,e4,a4]@31 ~]/2", T: "[a2,a3,c#4,e4,a4]/2",
  U: "[d3,f3,a3,c4] ~ [d3,f3,a3,c4] ~ [d3,f3,a3,c4] ~ [d3,f3,a3,c4] ~ [d3,g3,b3] ~ [d3,g3,b3] ~ [d3,g3,b3] ~ [d3,g3,b3] ~, d2@7 ~ g2@8", // Dm7 G
  V: "[b3,d#4,f#4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~ [c#4,f4,g#4] ~@7", // B C#
  W: "[c#4,f#4,a#4]@2 ~ [c#4,f#4,a#4]@2 ~ [c#4,f#4,a#4] ~ [c#4,f4,g#4]@2 ~@6", // F# C#
  X: "[~@15 c#5@3 [f4,g#4,c#5] ~ [d#4,f#4,b4]@2 ~ [d#4,f#4,b4]@2 ~ [d#4,f#4,b4] ~ [c#4,f#4,a#4]@2 ~ [c#4,f#4,a#4]@2 ~ [c#4,f#4,a#4] ~ [c#4,f4,g#4] ~@11, ~@14 [f4,g#4]@3 ~@31]/3", // C# B F# C# Fm
  Y: "~@2 [f4,g#4,c#5]@3 ~ [f4,g#4,c#5] ~ [d#4,f#4,b4]@2 ~ [d#4,f#4,b4]@2 ~ [f#4,g#4] ~", // C# B F#sus2
  Z: "[c#4,f#4,a#4]@2 ~ [c#4,f#4,a#4]@3 f#4 ~ [c#4,f4,g#4]@7 ~", // F# C#
  AA: "[c#5,e5,a5] ~ [d5,f#5,a5] ~ [c#5,e5,a5] ~ [c5,d#5,a5] ~ [b4,d5,a5] ~ [a4,c#5,f#5] ~ [g4,c#5,f#5] ~ f#4 ~", // A D A Adim Bm7 F#m F#
  AB: "[g4,c#5,e5] ~ [a4,d5,f#5] ~ [g4,c#5,e5] ~ [f#4,b4,d5] ~ [e4,a4,c#5]@6 ~@2", // C#dim D C#dim Bm A
  AC: "~ [f#5,a5,f#6] [g5,a5,g6] ~ [f#5,a5,f#6] [g5,a5,g6] ~ [e5,a5,e6]", // F#m Gsus2 F#m Gsus2 A5
  AD: "[f#5,a5,f#6] [c5,a5,c6] [c#5,a5,c#6] ~ [f#4,f#5] [f4,f5] [e4,e5] [d4,d5], ~@12 c5 ~@3", // F#m F F#m F# F E D
  AE: "[a2,d4,e4] ~@3 [a3,d4,e4] ~@2 [d4,e4], [a3,g4] ~@7 [a2,g4] ~@5 a3 ~", // Asus4 Dsus2 A7
  AF: "a2@2 [a3,c#4,g4] ~@3 a2@2 [a3,c#4,e4,g4]@2 ~@6, ~ e4 ~@6", // A7
  AG: "[a2,a3,e4,g4] ~@3 [a3,d4,e4,g4] ~@3 [a2,a3,d4,e4,g4] ~@5 [a3,d4,e4,g4] ~", // A7 Asus4
  AH: "a2 ~ [a3,e4,g4] ~@3 [a3,c#4,e4,g4] ~@5 [a3,c#4,e4,g4] ~@3", AI: "a2 ~@3 [a3,e4,g4] ~@3, ~@8 a2 ~@7",
  AJ: "[a3,d4,f#4] ~ [d4,f#4]@2 ~@2 [a3,d4,f#4]@2 a2@2 ~@2 [d4,f#4]@2 ~@2, a2 ~@7", // D
  AK: "[[c4,e4] ~@2 [c4,e4]@3 ~ [f3,a#3,d4]@6 ~@3]/2", AL: "~@4 d4 ~@3 [e3,b3,d4] ~@7, e2@7 ~ e2@2 ~@6",
  AM: "a2@2 [a3,c#4] ~@5 [e3,g#3,c4] ~ [a3,c#4] ~@5, ~@4 a2 ~@3", // A Eaug A
  AN: "[d3,a3,c4] ~@3 [d3,a3] ~@3 [d3,a3,c4] ~ c4 ~@5, d2@7 ~ d2@2 ~@6", // D7 D5 D7
  AO: "~@2 [g3,b3] ~@5 g2@6 ~@2, g2@4 ~@3 [g3,b3]@8 ~", AP: "g#3 ~ g#3 ~@5 g#3@4 ~@4",
  AQ: "[[d#4,f#4]@3 ~ [d#4,f#4]@3 ~ [d#4,f#4]@4 d#4 ~ [c#4,f4,g#4]@10 ~@8]/2", // D#m C#
  AR: "~@6 [c#4,c#5] ~ [c#4,c#5] ~ [c#4,c#5] ~ [b3,b4]@2 [a#3,a#4]@2", // C# B A#
  AS: "[[g#3,g#4]@2 a#4@2 [e3,e4]@2 [d#3,d#4]@2 [c#3,c#4] ~ [c#3,c#4,c#5]@15 ~@7, ~@2 a#3 ~@29]/2", // G# E D# C#
})).s("gm_piano").gain(0.25).pan(0.9)

// chords · piano · soft notes
const piano_soft = note("<~@75 A B C D E ~ F G H I J K L ~@37>".pickRestart({
  A: "d4 ~@15", B: "~@2 c#4 ~@13", C: "[a3,c#4,e4,g4] ~@3 c#4 ~@3", D: "~@2 a3 ~@9 a3 ~@3",
  E: "g3@2 ~@4 g3@5 ~ [c4,e4] ~@3", F: "[e3,g#3,b3,d4]@3 b3 [e3,g#3,b3] ~@3 g#3 ~ [e3,g#3,d4] ~@5, ~@5 b3 ~@2",
  G: "[e3,g#3,c4] ~ e3 ~@7 e3 ~@5", H: "f#3 ~@3 [f#3,c4] ~@3 f#3 ~ [d3,a3] f#3 ~@4", I: "[d3,f#3,a#3] ~ d3 ~@4 d3@8 ~",
  J: "[d#3,f#3,b3] ~ [d#3,f#3,b3] ~ [d#3,f#3,b3] ~ [d#3,f#3,b3] ~ [d#3,f#3,b3]@7 ~", // B
  K: "[f3,c#4] ~ [f3,c#4] ~ [f3,g#3,c#4] ~ [f3,g#3,c#4] ~ [f3,c#4]@4 [f3,g#3,c#4] ~ [f3,g#3,c#4] ~", // C#
  L: "b3@3 ~ b3@3 ~ b3@4 ~@4",
})).s("gm_piano").gain(0.15).pan(0.9)

// chords · pad poly · "Synth."
const pad_poly = note("<~@97 A B C@2 D E F@3 ~@19>".pickRestart({
  A: "~@3 c#5@3 c#5 [a#4,b4] b4@3 b4@2 a#4 b4 [g#4,a#4]", B: "a#4@3 a#4@2 g#4 a#4 [f#4,g#4] g#4 ~@7",
  C: "[~@7 [f4,c#5]@3 [f4,c#5] [c#4,d#4,a#4,b4] [d#4,b4]@3 [d#4,b4]@2 [c#4,a#4] [d#4,b4] [b3,c#4,g#4,a#4] [d#4,a#4]@3 [d#4,a#4]@2 [c#4,g#4] [d#4,a#4] [b3,c#4,f#4,g#4] [c#4,g#4] ~@3]/2", // C# D#7 G#m F# G#m C#7 D#5 C#5 …
  D: "~@11 [f4,c#5]@3 [f4,c#5] [c#4,d#4,a#4,b4]", // C# D#7
  E: "[d#4,b4]@3 [d#4,b4]@2 [c#4,a#4] [d#4,b4] [b3,c#4,g#4,a#4] [d#4,a#4]@3 [d#4,a#4]@2 [c#4,g#4] [d#4,a#4] [b3,c#4,f#4,g#4]", // G#m F# G#m C#7 D#5 C#5 D#5 Bsus2
  F: "[[c#4,g#4] ~@14 [f4,c#5]@3 [f4,c#5] [c#4,d#4,a#4,b4] [d#4,b4]@3 [d#4,b4]@2 [c#4,a#4] [d#4,b4] [b3,c#4,g#4,a#4] [d#4,a#4]@3 [d#4,a#4]@2 [c#4,g#4] [d#4,a#4] [b3,c#4,f#4,g#4] [c#4,g#4] ~@11]/3", // C#5 C# D#7 G#m F# G#m C#7 D#5 …
})).s("gm_pad_poly").gain(0.35).pan(0.2)

// other · epiano1 · "Effects"
const epiano1 = note("<~@17 A ~@13 B C D E F ~@62 G@2 H@2 ~ I ~ J@2 ~@18>".pickRestart({
  A: "d#4@15 ~", B: "~@8 [g4,a#4]!8", C: "[g4,a#4]!7 g4 [g4,a#4]!8", D: "a#4 ~@7 g4 [g4,a#4]!7", E: "[g4,a#4]!16",
  F: "a#4 ~@15", G: "[~@4 c#3@7 ~@5]/2", H: "[~@6 c#3@7 ~@3]/2", I: "c#3@7 ~", J: "[~@2 c#3@7 ~@7]/2",
})).s("gm_epiano1").gain(0.4).pan(0.3)

// other · piccolo · "Effects"
const piccolo = note("<~@80 [~ d5@15] ~@44>").s("gm_piccolo").gain(0.48).pan(0.3)

// other · xylophone · "Vibe"
const xylophone = note("<~@19 A B@2 ~ A B@2 ~@2 C D E ~@94>".pickRestart({
  A: "~@2 c#6@4 a#5@2 a#5@2 g#5!6", B: "[g#5!4 g#5@2 f5@2 a#5@2 g#5 f#5 d#5 c#5 g#4@4 ~@14]/2", C: "~@5 c#6@2 a#5",
  D: "a#5@2 g#5!10 g#5@2 f5@2", E: "a#5@2 g#5 f#5 d#5 c#5 g#4@4 ~@6",
})).s("gm_xylophone").gain(0.3).pan(0.4)

// other · vibraphone · "Vibe"
const vibraphone = note("<~@44 A B C ~ A B C ~@74>".pickRestart({
  A: "~@5 [c#5,c#6]@2 [a#4,a#5]", B: "[a#4,a#5] [b4,b5] [a#4,a#5] [g#4,g#5]@9 [f4,f5]@4",
  C: "[a#3,a#4]@2 [c#4,c#5] [d#4,d#5] [f#4,f#5] [g#4,g#5] [c#5,c#6]@6 ~@4", // A# C# D# F# G# C#
})).s("gm_vibraphone").gain(0.35).pan(0.4)

// other · marimba · "Perc."
const marimba = note("<~@19 A B@2 ~ A B@2 ~@2 C D E ~@68 F G H I J K L ~@19>".pickRestart({
  A: "~@2 c#6@4 a#5@2 a#5@2 g#5!6", B: "[g#5!4 g#5@2 f5@2 a#5@2 g#5 f#5 d#5 c#5 g#4@4 ~@14]/2", C: "~@5 c#6@2 a#5",
  D: "a#5@2 g#5!10 g#5@2 f5@2", E: "a#5@2 g#5 f#5 d#5 c#5 g#4@4 ~@6", F: "~@7 c#5!4 [a#4,b4] b4!2 ~ b4",
  G: "b4 ~ [a#4,b4] a#4 [g#4,a#4] a#4 ~ a#4!2 g#4 a#4 [f#4,g#4] g#4 ~@3", H: "~@11 c#5!4 b4",
  I: "[a#4,b4] b4 ~ b4!2 a#4 b4 a#4 [g#4,a#4] a#4 ~ a#4!2 g#4 a#4 [f#4,g#4]", J: "g#4 ~@14 c#5",
  K: "c#5!3 [a#4,b4] b4!2 ~ b4!2 a#4 b4 [g#4,a#4] a#4!2 ~ a#4", L: "a#4 g#4 a#4 [f#4,g#4] g#4 ~@11",
})).s("gm_marimba").gain(0.3).pan(0.9)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@117 [~ x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~ x] [~@2 x!8 ~@3 x ~@2] ~@6>").gain(0.15)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~ B C D ~@24 E ~@31 F ~ G ~@5 H ~@26 I ~ J ~ F ~@2 K ~@18>".pickRestart({
  A: "~@2 x!3 ~@11", B: "x!3 ~@13", C: "~@15 x", D: "x!2 ~@14", E: "~@9 x!4 ~@3", F: "~@9 x!2 ~@5", G: "~@13 x!2 ~",
  H: "~@10 x!3 ~ x ~", I: "~ x!2 ~@13", J: "~@5 x!2 ~@9", K: "~@2 x!2 ~@4",
})).gain(0.3)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@6 [~@7 x] ~ [~@13 x!2 ~] ~@25 [~@13 x!2 ~] ~@90>").gain(0.15)

// drums · hihat
const hihat = s("hh").struct(`<
// … 70 more lines

More by Zappa Frank