Strudelify

Whippin Post

Zappa

KeyA majorTempo97 bpm
0:00/0:00
// Whippin Post — Zappa
// 97 bpm, 12/8, key A major. 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 (11/8 at bar 1, 12/8 at bar 10, 11/8 at bar 25, 12/8 at bar 29, ...) are rendered on a constant 12/8 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 76 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(97/6)

// 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 B C D E F G H I@2 J@7 K@2 L M N O P@2 Q@2 R@2 S@7 T U V W X Y Z@2 AA AB AC AD@8 AE AF AG AH AI AJ AK AL AM@6 AN@2
  AO@5
>`.pickRestart({
  A: "~@12 a1@2 a2 g2 a2@2 a1@2 a2 g2 a2@2", B: "a1@2 a2 g2 a2@2 d2@2 c2@2 a1@2 a2 g2 a2@2 a1@2 a2 g2 a2@2 a1@2",
  C: "a2 g2 a2@2 d2@2 c2@2 a1@2 a2 g2 a2@2 a1@2 a2 g2 a2@2 a1@2 a2 g2",
  D: "a2@2 d2@2 c2@2 a1@2 a2 g2 a2@2 a1@2 a2 g2 a2@2 a1@2 a2 g2 a2@2",
  E: "d2@2 c2@2 a1@2 a2 g2 a2@2 a1@2 a2 g2 a2@2 a1@2 a2 g2 a2@2 d2@2",
  F: "c2@2 a1@2 a2 g2 a2@2 a1@2 a2 g2 a2@2 a1@2 a2 g2 a2@2 d2@2 c2@2",
  G: "a1@3 a1 a1@2 a2!2 ~ a2@3 a1!2 ~ a1!2 ~ e2 c2@2 a1 a1@2",
  H: "~ a1 ~ a2 a2@2 a2 a2@3 a1 a1@2 a1 a1@2 e2@2 d2 c2 a1@2 a1 ~, ~@2 a1@7 ~@15",
  I: "[a1@2 a2 ~ a2 ~ a2@2 a1@2 a1 ~ a1@2 d2 ~ c2@2 a1@2 ~ a1 ~ a2 a2@2 a2 a2@3 a1 a1@2 a1 a1@2 e2@2 d2 c2 a1!2 ~ a1 a1@2 a2!2, ~@22 a1@7 ~@19]/2",
  J: "~ a2 a2@2 a1!2 ~ a1 a1@2 a2@2 e2 d2 c2@2 a1!2 ~ a1 a1@2 a2!2",
  K: "[~ a2 a2@2 a1!2 ~ a1 a1@2 a2@2 c2 ~ c#2@2 [d1,d2]@4 [d1,d2]@2 [d1,d2]@4 [d1,d2]@2 [d1,d2]@4 [d1,d2]@2 [d1,d2]@2 [d1,d2]@2 [d#1,d#2]@2 [e1,e2]@2 [e1,e2]@2 [e1,e2]@2 [f#1,f#2]@2]/2", // D D# E F#
  L: "[f#1,f#2]!2 [g1,g2]!3 [g#1,g#2]!3 [a1,a2]@2 [a1,a2]!2", // F# G G# A
  M: "[c1,c2] [c#1,c#2] [d1,d2]@2 [d1,d2] [e1,e2]!3 [a1,a2]@2 [a1,a2]!2", // C C# D E A
  N: "[c1,c2] [c#1,c#2] [d1,d2]@2 [d1,d2] [e1,e2] [g1,g2] [g#1,g#2] [a1,a2]@2 [a1,a2]!2", // C C# D E G G# A
  O: "[c1,c2] [c#1,c#2] [d1,d2]@2 [d1,d2] [e1,e2]@2 [e1,e2] [c1,c2] ~@3", P: "[~@16 [a1,a2]@24 a1@3 a1 a1@2 a2!2]/2",
  Q: "[~ a2@3 a1!2 ~ a1!2 ~ e2 c2@2 a1 a1@2 ~ a1 ~ a2 a2@2 a2 a2@3 a1 a1@2 a1 a1@2 e2@2 d2 c2 a1@2 a1 ~ a1@2 a2 ~ a2 ~ a2@2, ~@18 a1@7 ~@23]/2",
  R: "[a1@2 a1 ~ a1@2 d2 ~ c2@2 a1@2 ~ a1 ~ a2 a2@2 a2 a2@3 a1 a1@2 a1 a1@2 e2@2 d2 c2 a1!2 ~ a1 a1@2 a2!2 ~ a2 a2@2 a1!2 ~ a1, ~@14 a1@7 ~@27]/2",
  S: "a1@2 a2@2 e2 d2 c2@2 a1!2 ~ a1 a1@2 a2!2 ~ a2 a2@2 a1!2 ~ a1",
  T: "a1@2 a2@2 c2 ~ c#2@2 [d1,d2]@4 [d1,d2]@2 [d1,d2]@4 [d1,d2]@2 [d1,d2]@4", // D
  U: "[d1,d2]!3 [d#1,d#2] [e1,e2]!3 [f#1,f#2]!3 [g1,g2]!2", // D D# E F# G
  V: "[g1,g2] [g#1,g#2]!3 [a1,a2]@2 [a1,a2]!2 [c1,c2] [c#1,c#2] [d1,d2]@2", // G G# A C C# D
  W: "[d1,d2] [e1,e2]!3 [a1,a2]@2 [a1,a2]!2 [c1,c2] [c#1,c#2] [d1,d2]@2", // D E A C C# D
  X: "[d1,d2] [e1,e2] [g1,g2] [g#1,g#2] [a1,a2]@2 [a1,a2]!2 [c1,c2] [c#1,c#2] [d1,d2]@2", // D E G G# A C C# D
  Y: "[d1,d2] [e1,e2]@2 [e1,e2] [c1,c2] ~@7", Z: "[~@8 [a1,a2]@24 a1@3 a1 a1@2 a2!2 ~ a2@3 a1!2 ~ a1]/2",
  AA: "a1 ~ e2 c2@2 a1 a1@2 ~ a1 ~ a2 a2@2 a2 a2@3 a1 a1@2 a1 a1@2, ~@10 a1@7 ~@7",
  AB: "e2@2 d2 c2 a1@2 a1 ~ a1@2 a2 ~ a2 ~ a2@2 a1@2 a1 ~ a1@2 d2 ~",
  AC: "c2@2 a1@2 ~ a1 ~ a2 a2@2 a2 a2@3 a1 a1@2 a1 a1@2 e2@2 d2 c2, ~@6 a1@7 ~@11",
  AD: "a1!2 ~ a1 a1@2 a2!2 ~ a2 a2@2 a1!2 ~ a1 a1@2 a2@2 e2 d2 c2@2",
  AE: "a1 ~ a1@2 ~@2 a1 a1@4 ~ b1 ~ b1@3 ~ b1 ~ b1@3 ~ c2 ~ c2@2 ~@2 c2 ~ c2@4 d2 ~ d2@2 ~@2 d2 ~ d2@3 ~",
  AF: "e2 ~ e2@2 ~@2 e2 ~ e2@4 f#2 ~ f#2@3 ~ f#2 ~ f#2@3 ~ g2 ~ g2@3 ~ g2 ~ g2@3 ~ a2@2 a2@2 ~@2 a2 ~ a2@3 ~",
  AG: "b2 ~ b2@3 ~ b2 ~ b2@4 c3 ~ c3@2 ~@2 c3 ~ c3@3 ~ d3 ~ d3@2 ~@3 d3 d3@3 ~ e3 ~@2 e3@2 ~ e3 ~ e3@2 ~@2",
  AH: "f#3 ~ f#3@4 f#3 ~ f#3@3 ~ g3 ~ g3@3 ~ g3 ~ g3@3 ~ g#3 ~ g#3@3 ~ g#3 ~ g#3@3 ~ a3 ~@2 a3@3 a3 ~ a3@3 ~",
  AI: "[a1,a2]@3 ~@2 a1@3 ~@16 [b1,b2]@3 ~ [b1,b2]@3 ~@17, ~@4 a2@3 ~@41", // A B
  AJ: "[c2,c3]@3 ~ [c2,c3]@3 ~@18 b2@3 [b1,b2]@3 ~@17, ~@8 b1 ~@7", // C B
  AK: "[a1,a2]@3 ~ [a1,a2]@3 ~@17 [b1,b2]@3 ~ [b1,b2]@3 ~@17", // A B
  AL: "[c2,c3]@3 ~ [c2,c3]@3 ~@17 [d2,d3]@3 ~ [d2,d3]@3 ~@17", // C D
  AM: "[[a1,a2]@3 ~@42 d2@10 d2@4 ~@2 d2@9 ~@6 d1@11 d1@4 ~ d2@4 ~ d2@5 [d#1,d#2]@5 ~ e2@11 [e1,e2]@5 [f#1,f#2]@10 ~ [f#1,f#2]@5 [g1,g2]@10 ~ [g1,g2]@5 [g#1,g#2]@9 ~ [g#1,g#2]@5 ~ a2@11 a2@4 ~@2 [a1,a2]@5 [c1,c2]@5 [c#1,c#2]@5 d2@10 ~ d2@5 [e1,e2]@5 [g1,g2]@5 [g#1,g#2]@5 ~ [a1,a2]@10 ~ [a1,a2]@4 ~ [a1,a2]@5 [c1,c2]@5 [c#1,c#2]@5 ~ d1@10 ~ d2@4 ~ e2@4, ~@44 d1@16 ~ d1@14 ~@17 d1@10 ~@5 e1@11 ~@54 a1@16 ~@16 d1@16 ~@58 d1@5 e1@5, ~@70 d2@21 ~@176 d2@11 ~@10]/6", // A D# E F# G G# A C …
  AN: "[[g1,g2]@6 [g#1,g#2]@5 [a1,a2]@10 ~ [a1,a2]@5 ~ [a1,a2]@4 ~ c2@5 [c#1,c#2]@5 [d1,d2]@11 [d1,d2]@5 [e1,e2]@4 ~ [e1,e2]@5 ~ e2@5 ~ c2@3 ~@17, ~@32 c1@6 ~@31 e1@6 c1@3 ~@18]/2", // G G# A C# D E
  AO: "[~@43 a3@54 ~@23, ~@43 [a1,a2]@151 ~@46, ~@77 e3@116 ~@47]/5", // A
})).s("gm_electric_bass_finger").gain(0.66)

// other · overdriven guitar · "guitar 1"
const overdriven_guitar = note(`<
  ~@2 A B C D E F G H ~@7 I@6 J@2 K L M N ~@7 O@6 P@2 Q R S T@2 U@2 V@2 W X Y Z AA AB AC AD AE AF AG@8 AH@4 ~
>`.pickRestart({
  A: "~@8 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4",
  B: "a4@2 d4 ~ c4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2",
  C: "d4@2 c4 ~ a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2 d4 ~",
  D: "c4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2 d4@2 c4 ~",
  E: "a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4 ~ d4 ~ c4 ~ a3@2",
  F: "a4 g4 a4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2 d4@2 c4@2 a3@2 a4 g4",
  G: "a4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4 ~ d4@2 c4@2 a3@2 a4 g4 a4@2",
  H: "a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2 d4@2 c4@2 ~@8",
  I: "[~@20 a3@3 ~ c4@3 c#4@4 ~@9 c5@4 ~@4 c5@4 a4@4 ~@7 c5@4 ~@4 c5@4 a4@4 ~@8 d5@4 ~@5 d5@4 b4@4 ~@8 d5@4 ~@7 b4@3 ~@2 [a4,e5]@23 ~ [d4,a4]@12 [e4,b4]@11 ~ [a4,e5]@23 ~ [d4,a4]@12 [e4,b4]@11 ~ [a4,e5]@21 ~@3 [d4,a4]@12 [e4,b4]@12 [c4,g4]@3 ~@13, ~@32 d4@22 ~@2 d4@21 ~@2 e4@23 ~@2 e4@22 ~@162, ~@36 a4@12 ~@12 a4@9 ~@14 b4@12 ~@13 b4@12 d5@6 ~@98 f5@2 ~@62, ~@44 f#5@13 ~@10 f#5@12 ~@12 g#5@13 ~@12 g#5@10 ~@162]/6", // A5 D5 E5 A5 D5 E5 A5 D5 …
  J: "[~@16 [e3,a3,e4,a4]@24 a3@2 a4 g4 a4@2 a3@2, ~@32 e5 ~@63]/2", // A5
  K: "a4 g4 a4@2 a3@2 a4 g4 a4 ~ d4 ~ c4 ~ a3@2 a4 g4 a4@2 a3@2 a4 g4",
  L: "a4@2 a3@2 a4 g4 a4@2 d4@2 c4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2",
  M: "a3@2 a4 g4 a4 ~ d4@2 c4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2 a3@2", N: "a4 g4 a4@2 d4@2 c4@2 ~@16",
  O: "[~@4 a3@4 c4@3 c#4@4 ~@9 c5@4 ~@4 c5@4 a4@4 ~@7 c5@4 ~@4 c5@4 a4@4 ~@8 d5@4 ~@5 d5@4 b4@4 ~@8 d5@4 ~@7 b4@3 ~@2 [a4,e5]@23 ~ [d4,a4]@12 [e4,b4]@11 ~ [a4,e5]@23 ~ [d4,a4]@12 [e4,b4]@11 ~ [a4,e5]@21 ~@3 [d4,a4]@12 [e4,b4]@12 [c4,g4]@3 ~@29, ~@16 d4@22 ~@2 d4@21 ~@2 e4@23 ~@2 e4@22 ~@178, ~@20 a4@12 ~@12 a4@9 ~@14 b4@12 ~@13 b4@12 d5@6 ~@98 f5@2 ~@78, ~@28 f#5@13 ~@10 f#5@12 ~@12 g#5@13 ~@12 g#5@10 ~@178]/6", // A5 D5 E5 A5 D5 E5 A5 D5 …
  P: "[~@8 [e3,a3,e4,a4]@24 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4, ~@16 e5 ~@79]/2", // A5
  Q: "a4 ~ d4 ~ c4 ~ a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2",
  R: "d4@2 c4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4 ~ d4@2",
  S: "c4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2 a3@2 a4 g4 a4@2 d4@2 c4@2",
  T: "[~@12 b4@14 ~@6 a5@4 ~@8 d5@3 c5@5 ~@6 c5 b4@13 ~@7 a5@4 d5@5 ~@3 d5@3 ~@2, c5@11 ~@17 c5@7 ~ d5@7 ~@33 c5@5 ~@15, ~@4 a5@25 ~@10 b5@8 ~@5 a5@9 ~@27 b5@8]/2",
  U: "[e5@6 c6@4 e5@2 f#5@5 d6@4 f#5@2 g5@4 e6@5 g5@4 a5@4 f#6@3 a5@4 g5@7 e6@3 g5@2 a5@4 f#6 ~@3 a5@4 b5@4 g6@5 b5@3 ~@4 a6@5 ~@4, ~@28 c6@3 ~]/2",
  V: "[c5@8 e5@2 c5@2 e5@2 c5@2 e5@4 c5@3 ~ [c5,d5]@2 c5@2 a4@4 a4@3 ~ c5@3 ~ d5@3 ~ c5@2 ~ d#5@4 ~ d5@4 c5@19 d5@2 ~ a4@2 ~ c5@2 ~ c5@4 a4@3 c5@4 ~, d5 ~@46 d5 ~@29 c5@2 ~ d5@2 ~ a4@2 ~@11, ~@84 d5 ~@11]/2", // Csus2
  W: "e5@8 e5@2 ~@2 a5@8 a5@3 ~ a5@4 c6@3 d6@4 ~ d6@2 c6@2 a5@3 ~ a5@3 ~, ~@10 g5@4 ~@22 c6 ~@11",
  X: "a5@14 ~ g5@2 a5@3 e5@2 g5@2 a5@2 e5@2 g5@2 a5@2 g5@4 e5@3 d5@3 ~ c5@4 ~, ~@14 e5@3 ~@31",
  Y: "a3@2 a3@3 ~ a3 ~ a3@4 b3 ~ b3@3 ~ b3 ~ b3@3 c4 ~ c4@3 ~@2 c4 ~ c4@3 ~ d4@2 d4@4 d4 ~ d4@3 ~, a4@13 ~@11",
  Z: "e4 ~ e4@3 ~ e4 ~ e4@3 ~ f#4 f#4@4 ~ f#4 f#4@3 ~@2 g4 ~ g4@3 ~ g4 ~ g4@4 a4@2 a4@3 ~ a4 a4@3 ~@2",
  AA: "b4 ~ b4@3 b4 ~ b4@4 ~ c5 ~ c5@3 ~ c5 ~ c5@3 ~ d5 ~ d5@4 d5 ~ d5@3 ~ e5 ~ e5@3 ~ e5 ~ e5@3 ~",
  AB: "f#5 ~ f#5@3 ~ f#5@2 ~ f#5@2 ~@2 g5@2 g5@2 ~ g5 ~ g5@3 ~ g#5 ~ g#5@4 g#5 ~ g#5@2 ~@2 a5@11 ~",
  AC: "[a3,e4]@3 ~ [a3,e4]@3 ~@17 [b3,f#4]@4 [b3,f#4]@3 ~@17", // A5 B5
  AD: "[c4,g4]@4 [c4,g4]@4 ~@16 [b3,f#4]@3 ~ [b3,f#4]@4 ~@16", // C5 B5
  AE: "[a3,e4]@4 [a3,e4]@3 ~@17 [b3,f#4]@3 ~ [b3,f#4]@4 ~@16", // A5 B5
  AF: "[c4,g4]@3 ~ [c4,g4]@4 ~@16 [d4,a4]@3 ~ [d4,a4]@3 ~@17", // C5 D5
  AG: "[[a3,e4]@3 ~@51 c5@6 ~@42 a4@4 ~@12 d5@5 ~@11 d5@5 ~@27 e5@4 ~@23 [c4,g4]@5 ~ c#4@5 [d4,a4]@16 [e4,b4]@15 [a4,e5]@21 ~ [c4,g4]@5 [c#4,g#4]@5 ~ a4@15 [e4,b4]@15 ~ [a4,e5]@20 ~ [c4,g4]@5 [c#4,g#4]@5 ~ [d4,a4]@16 [e4,b4]@15 ~ [c4,e4,g4]@5 ~@16, ~@44 d4@30 ~@2 d4@30 ~@2 e4@16 f#4@16 g4@31 ~@27 g#4@5 ~@64 d4@15 ~@81 b3@2 ~@19, ~@49 a4@21 a4@11 a4@21 ~@27 a4@10 ~@16 g#4@15 ~ [a4,e5]@33 ~@180, ~@60 f#5@31 ~ f#5@15 ~@43 d5@20 ~@214, ~@65 c5@21 c5@11 c5@9 ~@7 b4@11 ~@21 b4@15 b4@10 ~@34 b4 ~@179]/8", // A5 C5 D5 E5 A5 C5 C#5 E5 …
  AH: "[~@77 e5@96 ~@19, ~@43 [a2,a3]@103 ~@46, ~@53 e4@96 ~@43, ~@21 b4@32 ~@11]/4", // A
})).s("gm_overdriven_guitar").gain(0.4).pan(0)

// other · overdriven guitar · "guitar 2"
const overdriven_guitar_2 = note("<~@4 A B C@3 D ~@13 E F@4 G ~@13 H@3 I J ~@8 K L M N O P Q@2 ~@13>".pickRestart({
  A: "~@6 c#5 b4 c#5@2 ~@2 c#5 b4 c#5@2 ~@2 c#5 b4 c#5@2 f#5 ~",
  B: "e5@2 ~@2 c#5 b4 c#5@2 ~@2 c#5 b4 c#5@2 ~@2 c#5 b4 c#5@2 f#5@2 e5 ~",
  C: "[e4@18 f#4@2 e4@20 f#4@2 e4@20 f#4 ~ d4 ~@7]/3", D: "~@6 f#4 e4 ~@4",
  E: "~@32 [e5,e6]@4 [d5,d6]@3 ~ [c5,c6]@3 ~ [e5,e6]@4", // E D C E
  F: "[~ d6@3 [c5,c6]@2 ~@6 [a4,a5]@11 ~@9 e4@36 f#4@4 e4@40 f#4@4 e4@40 f#4@2 ~@2 d4@2 ~@30, d5@3 ~@4 c5@2 d6@2 c6@2 ~@179, ~@4 [d5,c6] c5 ~@90]/4", // C A D7
  G: "~@2 f#4 e4 ~@8",
  H: "[~@16 [e5,e6]@4 [d5,d6]@3 ~ [c5,c6]@3 ~@2 e5@3 ~ d6@3 [c5,c6]@2 ~@4 c5 ~ [a4,a5]@11 ~@9 e4@36 f#4@4 e4@40, ~@28 e6@4 d5@3 ~@5 [c5,c6]@2 ~@102, ~@41 [d5,d6]@2 c6@2 ~@99]/3", // E D C A C D
  I: "f#4@2 e4@20 f#4 ~", J: "d4 ~@19 f#4@2 e4@2",
  K: "e3@2 e3@3 ~ e3 ~ e3@4 f#3 ~ f#3@3 ~ f#3 ~ f#3@3 g3 ~ g3@3 ~@2 g3 ~ g3@3 ~ a3@2 a3@4 a3 ~ a3@3 ~",
  L: "b3 ~ b3@3 ~ b3 ~ b3@3 ~ c#4 c#4@4 ~ c#4 c#4@3 ~@2 d4 ~ d4@3 ~ d4 ~ d4@4 e4@2 e4@3 ~ e4 e4@3 ~@2",
  M: "f#4 ~ f#4@3 f#4 ~ f#4@4 ~ g4 ~ g4@3 ~ g4 ~ g4@3 ~ a4 ~ a4@4 a4 ~ a4@3 ~ b4 ~ b4@3 ~ b4 ~ b4@3 ~",
  N: "c#5 ~ c#5@3 ~ c#5@2 ~ c#5@2 ~@2 d5@2 d5@2 ~ d5 ~ d5@3 ~ d#5 ~ d#5@4 d#5 ~ d#5@2 ~@2 e5@11 ~",
  O: "~@12 [g5,g6]@11 ~@13 [g5,g6]@12", P: "~ [g5,g6] ~ [g5,g6]",
  Q: "[~@12 [g5,g6]@12 ~@12 [g5,g6]@13 ~@11 [g5,g6]@12 ~@12 [g5,d6,g6]@12, ~@3 d6@5 ~ d6@5 ~ d6@4 ~@5]/2", // G G5
})).s("gm_overdriven_guitar").gain(0.5)

// chords · rock organ · "organ 1"
const rock_organ = note("<~@4 A B C@8 D@7 E@2 F@8 G@6 H@5 I@3 J K L@8 M N O P Q R S T U ~@12>".pickRestart({
  A: "~@2 a2@9 d3", B: "c3@2 a2@18 a6 g6 f#6 e6, ~@10 d3 c3",
  C: "[d6@18 a6 g6 f#6 e6 d6@18 a6 g6 f#6 e6 d6@18 a6 g6 f#6 e6 d6@18 a6 g6 f#6 e6 [c5,e5]@6 [d5,f#5]@6 [e5,g5]@6 [f#5,a5]@2 [e5,g5]@2 [d5,f#5]@2 [c5,e5]@6 [d5,f#5]@6 [e5,g5]@6 [f#5,a5]@2 [e5,g5]@2 [d5,f#5]@2 [c5,e5]@6 [d5,f#5]@6 [e5,g5]@6 [f#5,a5]@2 [e5,g5]@2 [d5,f#5]@2 [c5,e5]@6 [d5,f#5]@6 [e5,g5]@6 [f#5,a5]@2 [e5,g5]@2 [d5,f#5]@2 [c5,e5]@6 [d5,f#5]@2]/8", // C D Em F#m Em D C D …
  D: "[~@8 [e5,g5]@12 [f#5,a5]@4 [e5,g5]@4 [d5,f#5]@4 [c5,e5]@12 [d5,f#5]@12 [e5,g5]@12 [f#5,a5]@4 [e5,g5]@4 [d5,f#5]@4 [c5,e5]@12 [d5,f#5]@12 [e5,g5]@12 [f#5,a5]@4 [e5,g5]@4 [d5,f#5]@4 [c5,e5]@12 [d5,f#5]@12 [e5,g5]@12 [f#5,a5]@4 [e5,g5]@4 [d5,f#5]@4 [d2,d3]@7 ~ [d2,d3]@4 [a4,c5,d5,f#5]@12 [d2,d3]@7 ~ [d2,d3]@4 [a4,c5,d5,f#5]@11 [e2,e3]@8 ~@5 [b4,g#5]@8 [b4,g#5]@3 ~ [e2,e3]@7 [e2,e3]@4 ~ [b4,d5,e5,g#5]@11 ~ [c5,e5] c5@18 g5@5 [d5,f#5]@12 [e5,g#5]@10 ~ [c5,e5]@17, ~@232 [e2,e3]@7 ~@97, ~@236 [d5,e5]@11 ~@26 e5@24 ~@39]/7", // Em F#m Em D C D Em F#m …
  E: "[~@3 [e5,g5]@4 ~ [d5,f#5]@12 [e5,g#5]@11 ~ c5@19 g5@4 ~ [d5,f#5]@12 [e5,g#5]@11 [c5,e5,g5]@3 ~@14, ~@32 e5@23 ~@41]/2", // Em D E D E C
  F: "[~@16 [a3,e4,a4,e5]@20 a6 g6 f#6 e6 d6@18 a6 g6 f#6 e6 d6@18 a6 g6 f#6 e6 d6@18 a6 g6 f#6 e6 d6@18 a6 g6 f#6 e6 [c5,e5]@6 [d5,f#5]@6 [e5,g5]@6 [f#5,a5]@2 [e5,g5]@2 [d5,f#5]@2 [c5,e5]@6 [d5,f#5]@6 [e5,g5]@6 [f#5,a5]@2 [e5,g5]@2 [d5,f#5]@2 [c5,e5]@6 [d5,f#5]@6 [e5,g5]@4]/8", // A5 C D Em F#m Em D C …
  G: "[~@4 [f#5,a5]@4 [e5,g5]@4 [d5,f#5]@4 [c5,e5]@12 [d5,f#5]@12 [e5,g5]@12 [f#5,a5]@4 [e5,g5]@4 [d5,f#5]@4 [c5,e5]@12 [d5,f#5]@12 [e5,g5]@12 [f#5,a5]@4 [e5,g5]@4 [d5,f#5]@4 [c5,e5]@12 [d5,f#5]@12 [e5,g5]@12 [f#5,a5]@4 [e5,g5]@4 [d5,f#5]@4 [c5,e5]@12 [d5,f#5]@12 [e5,g5]@12 [f#5,a5]@4 [e5,g5]@4 [d5,f#5]@4 [c5,e5]@12 [d5,f#5]@12 [e5,g5]@12 [f#5,a5]@4 [e5,g5]@4 [d5,f#5]@4 [d2,d3]@7 ~ [d2,d3]@4 [a4,c5,d5,f#5]@12 [d2,d3]@7 ~]/6", // F#m Em D C D Em F#m Em …
  H: "[[d2,d3]@4 [a4,c5,d5,f#5]@11 [e2,e3]@8 ~@5 [b4,g#5]@8 [b4,g#5]@3 ~ [e2,e3]@7 [e2,e3]@4 ~ [b4,d5,e5,g#5]@11 ~ [c5,e5] c5@18 g5@5 [d5,f#5]@12 [e5,g#5]@10 ~ [c5,e5]@19 ~ [e5,g5]@4 ~ [d5,f#5]@12 [e5,g#5]@11 ~ c5@19 g5@4 ~ [d5,f#5]@12 [e5,g#5]@11 [c5,e5,g5]@3 ~@30, ~@24 [e2,e3]@7 ~@209, ~@28 [d5,e5]@11 ~@26 e5@24 ~@71 e5@23 ~@57]/5", // D D7 E E7 C D E C …
  I: "[~@8 [a3,e4,a4,e5]@20 a6 g6 f#6 e6 d6@18 a6 g6 f#6 e6 d6@18]/3", J: "a6 g6 f#6 e6 d6@18 a6 g6",
  K: "f#6 e6 d6@18 a6 g6 f#6 e6", L: "[c5,e5]@3 [d5,f#5]@3 [e5,g5]@3 [f#5,a5] [e5,g5] [d5,f#5]",
  M: "e4@2 e4@3 ~ e4 ~ e4@3 ~ f#4@2 f#4@3 ~ f#4@5 ~ g4 ~ g4@3 ~ g4 ~ g4@3 ~ a4 ~ a4@3 ~ a4 ~ a4@3 ~, a2 b2 c3 d3",
  N: "b4 ~ b4@3 ~ b4 ~ b4@3 ~ c#5 ~ c#5@3 ~ c#5 ~ c#5@3 ~ d5 ~ d5@3 ~ d5 ~ d5@3 ~ e5 ~ e5@3 ~ e5 ~ e5@3 ~, e3 f#3 g3 a3",
  O: "f#5 ~ f#5@3 ~ f#5 ~ f#5@3 ~ g5 ~ g5@3 ~@2 g5 g5@3 ~ a5 ~ a5@3 ~ a5 ~ a5@3 ~ b5 ~ b5@3 ~ b5 ~ b5@3 ~, b3@12 c4@11 ~ d4@12 e4@12",
  P: "c#6 ~ c#6@2 ~@2 c#6 ~ c#6@3 ~ d6 ~ d6@3 ~ d6 ~ d6@3 ~ d#6 ~ d#6@2 ~@2 d#6 ~ d#6@4 ~@8 [g4,b4] [d4,e4,f4] [a3,b3,c4] [d3,e3,f3,g3], f#4@12 g4@11 ~ g#4@12 [a4,e6]@11 ~", // G Dm Am Em7 A5
  Q: "[g4,a4,c#5,e5]@4 [g4,a4,c#5,e5]@3 ~@17 [a4,d5,f#5]@3 ~ [a4,d5,f#5]@3 ~@17, [g2,a2,b2,c3] ~@23 b4 ~@23", // A7 D Cmaj7
  R: "[c5,e5,g5]@3 ~ [c5,e5,g5]@4 ~@16 [b4,d5,f#5]@3 ~ [b4,d5,f#5]@4 ~@16", // C Bm
  S: "[a4,c#5,e5]@4 [g4,a4,c#5,e5]@3 ~@18 [b4,d5,f#5]@3 [b4,d5,f#5]@4 ~@16", // A A7 Bm
  T: "[c5,e5,g5]@3 ~ [c5,e5,g5]@4 ~@16 [b4,d5,f#5]@3 ~ [b4,d5,f#5]@3 ~@17", U: "[g4,a4,c#5,e5] ~@15",
})).s("gm_rock_organ").gain(0.5)

// chords · rock organ · "organ 2"
const rock_organ_2 = note("<~@6 A@6 B@6 ~@6 C@7 D@6 ~@6 E@2 F G H I@2 J K J K J ~@3 L M ~@16>".pickRestart({
  A: "[[c5,e5]@2 [c5,e5]@2 ~@2 [c5,e5]@2 [c5,e5]@2 ~@2 [d5,f#5]@2 [d5,f#5]@2 ~@2 [d5,f#5]@2 [d5,f#5]@2 ~@2 [e5,g5]@2 [e5,g5]@2 ~@2 [e5,g5]@2 [e5,g5,a5]@2 ~@2 [f#5,a5]@2 ~@2 e5@2 [c5,e5]@2 [c5,e5]@4 ~@2 [c5,e5]@4 ~@2 [d5,f#5]@2 [d5,f#5]@2 ~@2 [d5,f#5]@2 [d5,f#5]@2 ~@2 [e5,g5]@2 [e5,g5]@2 ~@2 [e5,g5]@2 [e5,g5]@2 ~@2 [f#5,a5,b5]@2 ~@2 [d5,f#5]@2 ~@2 [c5,e5]@2 [c5,e5]@2 ~@2 [c5,e5]@2 [c5,e5]@2 ~@2 [d5,f#5]@2 [d5,f#5]@2 ~@2 [d5,f#5]@2 [d5,f#5]@2 ~@2 [e5,g5]@2 [e5,g5]@2 ~@2 [e5,g5]@2 [e5,g5]@2 ~@2 [f#5,a5,b5]@2 ~@2 [c4,d5,f#5]@2 ~@2 [c5,e5]@4 ~@2 [c5,e5]@4 ~@2 [d5,f#5]@2 [d5,f#5]@2 ~@2 [d5,f#5]@2 [d5,f#5]@2 ~@2 [e5,g5]@2 [e5,g5]@2 ~@2 [e5,g5]@2 [e5,g5]@2 ~@2 [f#5,a5,b5]@2 ~@2 [d5,f#5]@2 ~@2 a2@40 e3@2 d3@2 c3@4 a2@40 ~ d3@2 ~@2 d3@2 a2@17, a3@18 d4@2 c4@2 a3@18 d4@2 c4@2 a3@18 d4@2 ~@2 a3@18 d4@2 c4@2 ~@44 e3 ~ c3 ~@9, ~@19 g5@2 ~@123]/6", // C D Em A7 F#m C D Em …
  B: "[~@20 e3@3 ~ d3@3 c3@4 ~ a2@40 e3@2 d3@2 ~ d3@2 ~ a2@40 e3@2 d3@2 c3@4 a2@40 ~ d3@2 ~@2 d3@2 a2@37 e3@3 ~ d3@3 c3@4 ~ a2@40 e3@2 d3@2 ~ d3@2 ~@17, ~@38 c3 ~@45 e3 ~ c3 ~@47 c3 ~@9]/6",
  C: "[~@32 [c5,e5]@2 [c5,e5]@2 ~@2 [c5,e5]@2 [c5,e5]@2 ~@2 [d5,f#5]@2 [d5,f#5]@2 ~@2 [d5,f#5]@2 [d5,f#5]@2 ~@2 [e5,g5]@2 [e5,g5]@2 ~@2 [e5,g5]@2 [e5,g5,a5]@2 ~@2 [f#5,a5]@2 ~@2 e5@2 [c5,e5]@2 [c5,e5]@4 ~@2 [c5,e5]@4 ~@2 [d5,f#5]@2 [d5,f#5]@2 ~@2 [d5,f#5]@2 [d5,f#5]@2 ~@2 [e5,g5]@2 [e5,g5]@2 ~@2 [e5,g5]@2 [e5,g5]@2 ~@2 [f#5,a5,b5]@2 ~@2 [d5,f#5]@2 ~@2 [c5,e5]@2 [c5,e5]@2 ~@2 [c5,e5]@2 [c5,e5]@2 ~@2 [d5,f#5]@2 [d5,f#5]@2 ~@2 [d5,f#5]@2 [d5,f#5]@2 ~@2 [e5,g5]@2 [e5,g5]@2 ~@2 [e5,g5]@2 [e5,g5]@2 ~@2 [f#5,a5,b5]@2 ~@2 [c4,d5,f#5]@2 ~@2 [c5,e5]@4 ~@2 [c5,e5]@4 ~@2 [d5,f#5]@2 [d5,f#5]@2 ~@2 [d5,f#5]@2 [d5,f#5]@2 ~@2 [e5,g5]@2 [e5,g5]@2 ~@2 [e5,g5]@2 [e5,g5]@2 ~@2 [f#5,a5,b5]@2 ~@2 [d5,f#5]@2 ~@2 a2@40 e3@2 d3@2 c3@4 a2@40 ~ d3@2 ~@2 d3@2 a2@33, ~@16 a3@18 d4@2 c4@2 a3@18 d4@2 c4@2 a3@18 d4@2 ~@2 a3@18 d4@2 c4@2 ~@44 e3 ~ c3 ~@17, ~@35 g5@2 ~@131]/7", // C D Em A7 F#m C D Em …
  D: "[~@4 e3@3 ~ d3@3 c3@4 ~ a2@40 e3@2 d3@2 ~ d3@2 ~ a2@40 e3@2 d3@2 c3@4 a2@40 ~ d3@2 ~@2 d3@2 a2@37 e3@3 ~ d3@3 c3@4 ~ a2@40 e3@2 d3@2 ~ d3@2 ~@33, ~@30 c3 ~@45 e3 ~ c3 ~@47 c3 ~@17]/6",
  E: "[~@8 [c5,e5]!2 ~ [c5,e5]!2 ~ [d5,f#5]!2 ~ [d5,f#5]!2 ~ [e5,g5]!2 ~ [e5,g5] [e5,g5,a5] ~ [f#5,a5] ~ e5 [c5,e5] [c5,e5]@2 ~ [c5,e5]@2 ~ [d5,f#5]!2 ~ [d5,f#5]!2 ~ [e5,g5]!2 ~ [e5,g5]!2 ~, ~@4 a3@9 d4 c4 a3@9, ~@27 g5@2 ~@19]/2", // C D Em A7 F#m C D Em
  F: "[f#5,a5,b5] ~ [d5,f#5] ~ [c5,e5]!2 ~ [c5,e5]!2 ~ [d5,f#5]!2 ~ [d5,f#5]!2 ~ [e5,g5]!2 ~ [e5,g5]!2 ~ [f#5,a5,b5] ~, d4 c4 a3@9 d4", // B7 D C D Em B7
  G: "[c4,d5,f#5] ~ [c5,e5]@2 ~ [c5,e5]@2 ~ [d5,f#5]!2 ~ [d5,f#5]!2 ~ [e5,g5]!2 ~ [e5,g5]!2 ~ [f#5,a5,b5] ~ [d5,f#5] ~, ~ a3@9 d4 c4", // D7 C D Em B7 D
  H: "a2@20 e3 d3 c3@2", I: "[a2@40 ~ d3@2 ~@2 d3@2 a2@37 e3@3 ~ d3@3 c3@4 ~, ~@20 e3 ~ c3 ~@25]/2",
  J: "a2@40 e3@2 d3@2 ~ d3@2 ~, ~@22 c3 ~", K: "~@36 e3@3 ~ d3@3 c3@4 ~",
  L: "~@44 [f6,g6] [b5,c6,c#6,d6,e6] [f5,g5,g#5,a5,a#5] [b4,c5,d5,e5], ~@43 a6@2 ~@3", // Fsus2 Cmaj7
  M: "[e4,f4,g4,a4] [g3,a3,b3,c4,d4] [e3,f3] ~@45", // Fmaj7 G Fmaj7
})).s("gm_rock_organ").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B C D E F G H I@7 J K L M N O P Q R S T U V@7 W X Y Z Y AA AB AC AD AE AF AG@12 AH@4 AI AJ AK AL AM AN AO AP ~@5
>`.pickRestart({
  A: "~@4 x ~@2 x ~@2 x ~", B: "~ x!3", C: "~@2 x ~@2 x ~@2 x ~@3", D: "~ x ~@2 x ~@2 x ~@4",
  E: "x ~@2 x ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~ x!2 ~ x ~", F: "x ~ x ~@3 x ~@2 x!2 ~ x ~ x ~@2 x!2 ~ x ~@2 x",
  G: "~ x ~@2 x ~ x ~ x ~@2 x!2 ~@5 x ~ x ~ x ~", H: "~@2 x ~@2 x!2 ~ x ~ x ~@2 x!2 ~ x ~@3 x ~@3",
  I: "~ x!2 ~ x ~@3 x ~ x ~", J: "~@4 x ~@3 x ~@7 x ~@16 x ~@2 x ~@3 x ~@7", K: "x!5 ~ x!5 ~", L: "x!5 ~ x!3 ~ x ~",
  M: "x ~@3 x ~@3 x ~@7 x ~@6 x ~@4 x ~@3 x ~@7 x ~@7", N: "x!3 ~ x ~ x!3 ~ x ~", O: "x!3 ~ x ~@3 x ~@3", P: "~@2 x",
  Q: "~@16 x ~@2 x ~ x ~@2", R: "x ~ x ~ x ~@2 x ~ x ~ x!2 ~ x ~ x ~ x ~@3 x ~",
  S: "~ x!2 ~ x ~ x ~@2 x!2 ~ x ~@2 x ~ x ~@2 x ~ x ~", T: "x ~@2 x!2 ~@5 x ~ x ~ x ~@3 x ~@2 x!2 ~",
  U: "x ~ x ~@2 x!2 ~ x ~@3 x ~@5 x ~ x ~@3", V: "x ~@3 x ~ x ~@2 x!2 ~",
  W: "x ~@16 x ~@2 x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x ~@3", X: "x ~ x!5 ~ x!4", Y: "x ~ x!3 ~ x ~ x!3 ~",
  Z: "x ~@6 x ~@4 x ~@3 x ~@7 x ~@7 x ~@3 x ~@3 x ~@7", AA: "x!2 ~", AB: "~ x ~",
  AC: "~@8 x ~@2 x ~ x ~@2 x ~ x ~ x ~@2 x", AD: "~ x ~ x!2 ~ x ~ x ~ x ~@3 x ~@2 x!2 ~ x ~ x ~",
  AE: "~ x!2 ~ x ~@2 x ~ x ~@2 x ~ x ~ x ~@2 x!2 ~@3", AF: "~@2 x ~ x ~ x ~@3 x ~@2 x!2 ~ x ~ x ~@2 x!2 ~",
  AG: "x ~ x ~@2 x!2 ~ x ~@3", AH: "x!2 ~@4 x!2 ~@4", AI: "x ~@14 x", AJ: "~@7 x ~@15 x ~@5 x ~@8 x ~@9",
  AK: "~@6 x ~@5 x ~@5 x ~@4 x ~@9 x ~@5 x ~@4 x ~@3", AL: "~@2 x ~@4 x ~@9 x ~@4 x ~@5 x ~@4 x ~@4 x ~@9",
  AM: "~ x ~@5 x ~@4 x ~@4 x ~@4 x ~@10 x ~@4 x ~@5 x ~@3", AN: "~@7 x ~@10 x ~@4 x ~@4 x ~@10 x ~@8",
  AO: "~@12 x ~@9 x ~@10 x ~@4 x ~@4 x ~@4", AP: "~@2 x ~@6 x ~@6",
})).gain(0.66)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@59 [~@4 x!2 ~ x ~ x ~@6 x ~@4 x ~@2]!2 ~@15>").gain(0.39)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@4 A B ~@2 C ~ D@8 ~@4 E F ~@3 G ~ H@8 ~@4 I J ~@3 K L@12 ~@2 M@2 ~@7 N ~@5
>`.pickRestart({
  A: "~ x ~@6", B: "~@23 x", C: "~@17 x ~@6", D: "~@13 x!2 ~@9", E: "~@6 x!2 ~@4", F: "~@7 x ~@4", G: "~@3 x ~@4",
  H: "~@5 x!2 ~@17", I: "~@2 x!2 ~@8", J: "~ x ~@2", K: "~ x ~@22", L: "~@21 x!2 ~", M: "~@20 x!2 ~@22 x!2 ~@2",
  N: "~@11 x ~@12",
})).gain(0.66)

// … 57 more lines

More by Zappa