Strudelify

Ellington Medley

Ellington

KeyC majorTempo107 bpm
0:00/0:00
// Ellington Medley — Ellington
// 107 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 109 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(107/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 · "ACOU BASS"
const bass = note(`<
  A@2 B ~ C ~ D ~ E F G ~ C ~ D ~ E F G ~ H I J K L M N O C ~ D ~ E F G ~ P Q R S T U V ~ P Q R S T U V W X Y X Z AA AB
  AC ~ AD Q AE S T AF AG AH AI AJ AK AL AM AN AO AP AI AJ AK AL AM AN AQ AR AS AT AU AV AW AX AY AZ BA AJ AK BB@8 BC@3
  BD@3
>`.pickRestart({
  A: "~@5 g2@2 ~ g1@8 ~@5 g2@2 ~ g1@8", B: "~@5 g2@2 ~ g1@8 ~@5 g2@2 ~ g1@5 c2@2 ~", C: "~@5 c2@10 ~ d2@8 d#2@5 e2@2 ~",
  D: "~@5 c2@10 ~ b1@8 a#1@5 a1@2 ~", E: "d2 e2 f#2 d2", F: "g2@8 d2@8 g2@5 d2@2 ~ g1@8",
  G: "c2@5 e2@10 ~ f2@8 f#2@5 g2@2 ~", H: "f2 c3 a2 f2", I: "a#2 g#2 g2 f2", J: "e2 g2 d2 c#2", K: "c2 g2 e2 c2",
  L: "d2 f#2 a2 c3", M: "d3@5 d2@2 ~ e2@8 f2@8 f#2@8", N: "g2@5 ~@11 g2@8 d2@5 g2@2 ~",
  O: "~@5 g1@2 ~ g#1@8 a1@5 a#1@2 ~ b1@5 c2@2 ~", P: "g2@5 ~@11 d2@5 ~@11", Q: "g1@8 ~@5 d2@2 ~ g2@8 g1@8",
  R: "c2@5 ~@11 c2@8 ~@8", S: "f2@8 ~@5 c2@2 ~ f2@8 f#2@8", T: "g2 g#2 a2 e2", U: "d#2@8 ~@5 d#2@2 ~ d2@5 ~@8 d2@2 ~",
  V: "c#2@8 c2@8 b1@5 a#1@2 ~@6 a1@2 ~", W: "~@5 e2@10 ~ f2@5 ~@3 a#1@2 ~@6", X: "d#2!2 d2!2", Y: "c2!2 a#1!2",
  Z: "c2!2 a#1 g#1", AA: "g1@5 g2@2 ~ f#2@8 e2@8 d2@8", AB: "b1!2 a#1!2", AC: "a1@8 ~@5 a2@2 ~ a1@8 a1@5 d2@2 ~",
  AD: "g2 ~ d2 ~", AE: "c2 ~ c2 ~", AF: "d#2@8 ~@5 d#2@2 ~ d2@8 ~@5 d2@2 ~", AG: "c#2@8 c2@8 b1@5 a#1@2 ~ a1@5 g1@2 ~",
  AH: "~@5 d#2@10 ~ e2@2 ~@6 d#2@2 ~@6", AI: "d2@5 ~@8 d2@2 ~ g2@5 ~@8 g2@2 ~", AJ: "d2@8 ~@5 d2@2 ~ g2@8 f2@8",
  AK: "e2@8 ~@5 e2@2 ~ a1@8 ~@5 a1@2 ~", AL: "e2@8 ~@5 e2@2 ~ a2@10 ~@3 a2@2 ~", AM: "d2@8 ~@5 d2@2 ~ a2@8 d2@8",
  AN: "c#2@8 ~@5 c#2@2 ~ g#2@8 c#2@5 ~@3", AO: "c2@5 ~@8 c2@2 ~ g2@5 ~@8 g2@2 ~", AP: "c2@8 ~@5 d#2@2 ~ e2@5 d#2@10 ~",
  AQ: "c2@8 ~@5 c2@2 ~ g2@8 b1@8", AR: "a1@8 a2@8 g#2@8 g#1@5 ~@3", AS: "g1 d2 c2 c3", AT: "g2 d2 c2 e2",
  AU: "f2!2 g2 g#2", AV: "a2 g2 f2 a#1", AW: "a1 e2 d2 f#2", AX: "a2 e2 d2 f#2", AY: "g2 d2 g1 g2",
  AZ: "e2@8 e2@8 a2@8 a1@5 ~@3", BA: "d2@8 ~@5 d2@2 ~ g2@8 ~@5 g2@2 ~",
  BB: "[e2@8 ~@5 e2@2 ~ a2@8 ~@5 a2@2 d2@8 ~@6 d2@2 a2@8 d2@8 c#2@8 ~@6 c#2@2 g#2@8 c#2@8 c2@8 ~@6 c2@2 c3@8 a#2@8 a2@5 ~ a1@2 b1@8 c2@8 c#2@8 d2@8 ~@6 d2@2 a2@8 d2@8 c#2@8 ~@6 c#2@2 g#2@8 c#2@8 c2@8 ~@6 g2@2 c3@8 a#2@8 a2]/8",
  BC: "[~@5 a1@2 b1@8 c2@8 c#2@8 d2@8 ~@6 d2@2 a2@8 d2@8 c#2@8 ~@6 c#2@2 g#2@8 c#3@5 ~ c3@2 ~]/3",
  BD: "[~@5 c3@2 e2@8 f2@8 f#2@8 g2@5 ~ a2@2 b2@5 ~ c3@5 ~@5 c2@40 ~]/3",
})).s("gm_acoustic_bass").gain(0.49)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A@3 ~ B ~ C ~ D@2 E ~ F ~ C ~ D@2 G H@3 I@2 J@2 K ~ F ~ L ~ D@2 E ~ M N O P Q R@2 ~ M N O P Q S@2 T U V@2 W@2 X Y ~ M
  N O P Q Z@2 AA AB AC@2 AD AE AF@2 AG AH AC@2 AD AE AI@2 AJ AK@3 AL AM@3 AN AH AC@2 AD AO AP@3 AQ AP@3 AQ AR ~ AS@2
>`.pickRestart({
  A: "[[g3,c4,e4]@26 ~@4 f4@29 ~@2 [a#3,d#4,g4]@13 ~@4 f4@13 ~@2 [g3,c4,e4]@2 ~, ~@29 [g#3,c#4]@29 ~@19 [g#3,c#4]@13 ~@6]/3", // C D# C C#5
  B: "~@6 g3@10 [f3,a3,c4,d4,f4]@8 [f#3,a#3,c#4,d#4,f#4]@5 [g3,b3,d4,e4,g4]@2 ~, ~@5 [a3,c4,e4]@10 ~@17", // Dm7 D#m7 Em7 Am
  C: "~@5 [a3,c4,d4,e4,a4]@11 [g#3,b3,d#4,f#4,g#4]@8 [g3,a#3,d4,g4]@5 [e3,g3,a3,c#4,e4]@2 ~", // Am G#m7 Gm A7
  D: "[[d3,f#3,a3,c4,e4]@18 ~@3 [d3,f#3,a3,c4,e4]@2 ~@6 [g3,d4,f4,a4,c5]@16 ~@3 [g3,f4,a4,c5,e5]@16]/2", // D7 Dm7 Fmaj7
  E: "~@5 [a#3,d4,e4,g4,a#4]@10 ~ [a3,c4,d4,f4,a4]@5 ~@3 [g#3,c4,d#4,f#4,g#4]@5 [g3,a3,c4,e4,g4]@2 ~", // Em7b5 Dm7 G#7 Am7
  F: "~@5 [g3,a3,c4,e4]@10 ~ [f3,a3,c4,d4,f4]@8 [f#3,a#3,c#4,d#4,f#4]@5 [g3,b3,d4,e4,g4]@2 ~", // Am7 Dm7 D#m7 Em7
  G: "~@5 [a#3,d4,e4,g4,a#4]@10 ~ [a3,c4,d4,f4,a4]@5 ~@3 [g#3,c4,d#4,f#4,g#4]@5 ~ [g3,c4]@2, ~@29 [a3,e4,g4]@2 ~", // Em7b5 Dm7 G#7 C5 A7
  H: "[~@5 c5@2 ~ d5@5 c5@2 ~ e5@5 c5@2 ~ [d#4,g4,a#4,c#5,d#5]@5 [d4,f4,a4,c5,d5]@16 [c4,d4,f4,a4,c5]@10 ~ [a3,c4,d4,f4,a4]@5 ~ c4@7 [d4,f4,g4,a#4,d5]@2 ~ [d#4,g4,g#4,c5,d#5]@5 [d#4,g4,g#4,c5,d#5]@5 ~@3 [d4,f4,g4,a#4,d5]@2 ~ [c4,d4,d#4,f4,g#4,c5]@5 ~@3, ~@61 [d#4,f4,g#4,c5]@8 ~@27]/3", // D#7 Dm7 Gm7 G#maj7 Gm7 Fm7
  I: "[~@5 [d4,e4,g4,b4,d5]@10 ~ [c4,d4,f4,a4,c5]@5 ~@3 [g3,b3,d#4,f4,g4]@5 [e3,g3,a#3,d4,e4]@34 ~]/2", // Em7 Dm7 Gaug Em7b5
  J: "[~@5 [d4,f#4,a4,b4,d5]@11 [c4,e4,g4,a4,c5]@5 ~@3 [a3,c4,e4,g4,a4]@5 [c4,e4,f#4,a4,c5]@32 ~@3]/2", // Bm7 Am7 F#m7b5
  K: "~@5 [b3,d4,f4,g4,b4]@2 ~ [b3,d4,f4,g4,b4]@5 [g3,b3,d4,f4,g4]@2 ~ [b3,d4,f4,g4,b4]@5 g4@2 ~ [a3,c4,e4,f#4,a4]@5 [g3,b3,d4,f4,g4]@2 ~", // G7 F#m7b5 G7
  L: "~@5 [a3,c4,d4,e4,a4]@10 ~ [g#3,b3,d#4,f#4,g#4]@8 [g3,a#3,d4,g4]@5 [e3,g3,a3,c#4,e4]@2 ~", M: "[g3,b3,d4,f#4]",
  N: "[a3,c4,d4,f4] [g3,b3,d4,f4]", O: "[g3,a3,c4,e4]", P: "[f3,c4,d#4,g4]@3 [f#3,a3,c4,f#4]",
  Q: "[b3,d4,e4,g4]@8 [g#3,b3,d4,g#4]@5 [a3,c4,e4,g4]@18 ~", // Em7 G#dim Am7
  R: "[[g3,a#3,c#4,f4]@16 [d3,c4,e4,g4]@13 [b3,c#4,e4,g4]@10 ~ [a#3,c4,d#4,g4]@8 [a3,b3,d4,f#4]@5 [g#3,a#3,c#4,f4]@8 [a3,c4,e4,g4]@2 ~]/2", // Gm7b5 C C#m7b5 Cm7 Bm7 A#m7 Am7
  S: "[[g3,a#3,c#4,f4]@16 [d3,c4,e4,g4]@13 [b3,c#4,e4,g4]@10 ~ [a#3,c4,d#4,g4]@8 [a3,b3,d4,f#4]@5 [g#3,a#3,c#4,f4]@2 ~ [a3,c4,e4,g4]@5 [g3,b3,d4,g4]@2 ~]/2", // Gm7b5 C C#m7b5 Cm7 Bm7 A#m7 Am7 G
  T: "~@5 [b3,d4,e4,g4]@10 ~ [g#3,c4,d#4,g4]@5 ~@3 [b3,d4,f4,g4]@5 ~@3", U: "[d4,f4,g4,a#4]@29 ~@3",
  V: "[[a#3,c4,d#4,g4]@5 [c4,d#4,g4,a#4]@2 ~ [a#3,c4,d#4,g4]@5 [a#3,c4,d#4,g4]@8 [a#3,c4,d#4,g4]@2 ~ [a#3,c4,d#4,g4]@5 [c4,d#4,g4,a#4]@32 ~@3]/2", // Cm7
  W: "[[a#3,c4,d#4,g4]@5 [c4,d#4,g4,a#4]@2 ~ [a#3,c4,d#4,g4]@5 [c4,d#4,g4,a#4]@10 ~ [c4,d#4,g4,c5]@5 [d4,f#4,b4,d5]@29 ~@3 d4@2 ~]/2", // Cm7 Cm Bm
  X: "e4@5 g4@2 ~ b4@5 [a#3,c#4]@16 g4@2 ~, [e3,g3,b3,d4]@13 f#4@10 ~@9", // A#m Em7
  Y: "a4@5 f4@2 ~ f#4@5 a4@8 a#4@2 ~ b4@5 [a3,c4,d4,f#4,d5]@2 ~, [f#3,a3,e4]@13 [g3,b3,d4]@16 ~@3, ~@13 a2@2 ~@17", // D7 F#m7 G
  Z: "[[g3,a#3,c#4,f4]@16 [d3,c4,e4,g4]@13 [b3,c#4,e4,g4]@10 ~ [a#3,c4,d#4,g4]@8 [a3,b3,d4,f#4]@5 [g#3,a#3,c#4,f4]@3 [a3,c4,e4,g4]@5 [g3,b3,d4,g4]@2 ~]/2", // Gm7b5 C C#m7b5 Cm7 Bm7 A#m7 Am7 G
  AA: "~@5 [a#3,c#4,d#4,f#4]@10 ~ [b3,d4,e4,g4]@5 ~@3 [a#3,c#4,d#4,g#4]@5 ~@3", // D#m7 Em7 A#m7
  AB: "[c4,d4,f4,a4]@5 [c4,d4,f4,g4]@3 [c4,d4,f4,a4]@5 [b3,d4,f4,g4]@2 ~@6 [c4,d4,f4,a4]@2 ~@9", // Dm7 Csus4 Dm7 G7 Dm7
  AC: "[~@5 [c4,d4,f4,a4]@10 ~ [b3,d4,f4,g4]@5 [d4,f4,g4,a4]@2 ~@6 [d4,e4,g4,b4]@8 [d4,e4,g4,a4]@2 ~ [d4,e4,g4,b4]@5 [c#4,e4,g4,a4]@2 ~@6 [c#4,e4,g4,b4]@2 ~@9]/2", // Dm7 G7 Dm Em7 Dsus4 Em7 A7 C#m7b5
  AD: "~@5 [d4,e4,g4,b4]@10 ~ [c#4,e4,g4,a4]@5 [c#4,e4,g4,b4]@2 ~@9", // Em7 A7 C#m7b5
  AE: "~@5 [d4,f#4,b4,d5]@10 ~ [c4,e4,a4,c5]@5 [d4,f#4,b4,d5]@2 ~@9", // Bm Am Bm
  AF: "[~@5 [a#3,d#4,g4,a#4]@10 ~ [g#3,c#4,f4,g#4]@5 [a#3,d#4,g4,a#4]@2 ~@6 [b3,c4,e4,g4]@34 ~]/2", // D# C# D# Cmaj7
  AG: "~@5 [b3,d4,e4,g4]@2 ~@6 [a#3,c#4,d#4,f#4]@2 ~ [b3,d4,e4,g4]@5 [a#3,c#4,d#4,g#4]@10 ~", // Em7 D#m7 Em7 A#m7
  AH: "[c4,d4,f4,a4]@5 [c4,d4,f4,g4]@2 ~ [c4,d4,f4,a4]@5 [b3,d4,f4,g4]@2 ~@6 [c4,d4,f4,a4]@2 ~@9", // Dm7 Csus4 Dm7 G7 Dm7
  AI: "[~@5 [a#3,d#4,g4,a#4]@10 ~ [g#3,c#4,f4,g#4]@5 [a#3,d#4,g4,a#4]@2 ~@6 [b3,c4,e4,g4]@26 ~ [g3,b3,d4,e4]@8]/2", // D# C# D# Cmaj7 Em7
  AJ: "[a3,c4,e4,g4] [g#3,c4,d#4,g4]", // Am7 G#maj7
  AK: "[[g3,a#3,d4,f4]@13 [g3,a#3,c4,e4]@16 [g3,a#3,d4,f4]@16 [g3,a#3,c#4,e4]@16 [f3,a3,c4,e4]@18 ~ [g3,a#3,d4,f4]@2 ~@6 [g#3,b3,d#4,f#4]@2 ~@6]/3", // Gm7 C7 Gm7 Gdim Fmaj7 Gm7 G#m7
  AL: "[a3,c4,e4,g4]@5 [g#3,b3,d#4,f#4]@2 ~ [g3,a#3,d4,f4]@5 [f3,a3,c4,e4]@5 ~@3 [g#3,a#3,c#4,f4]@8 ~@3", // Am7 G#m7 Gm7 Fmaj7 A#m7
  AM: "[[a3,c4,e4,g4]@13 [f#3,a3,c4,e4]@16 [a3,c4,e4,g4]@16 [f#3,a3,c4,e4]@16 [g3,c4,f4,a4]@34 ~]/3", // Am7 F#m7b5 Am7 F#m7b5 F
  AN: "[b3,d4,e4,g4]@13 [c#4,e4,g4,a#4]@13 ~@6", // Em7 C#dim
  AO: "~@5 [d4,f#4,b4,d5]@10 ~ [c4,e4,c5]@5 [d4,f#4,b4,d5]@2 ~@9, ~@15 a4@5 ~@12", // Bm C Bm
  AP: "[~@5 [a#3,d#4,g4,a#4]@10 [g#3,c#4,f4,g#4]@5 ~ [a#3,d#4,g4,a#4]@2 ~@6 [b3,c4,e4,g4]@26 [d4,f4,g4,c5]@5 ~ [c#4,e4,f#4,a#4]@32 ~@3]/3", // D# C# D# Cmaj7 Dm7 F#7
  AQ: "~@5 [d4,f#4,b4,d5]@10 ~ c4@5 [d4,f#4,b4,d5]@2 ~@9, ~@15 [e4,a4,c5]@5 ~@12", // Bm Am
  AR: "~@5 [a#3,d#4,g4,a#4]@10 [g#3,c#4,f4,g#4]@5 ~@3 [a#3,d#4,g4,a#4]@5 ~ [b3,d4,e4,g4]@2 ~", // D# C# D# Em7
  AS: "[~@23 [b3,c4,e4,g4]@40 ~]/2", // Cmaj7
})).s("gm_piano").gain(0.3)

// other · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note("<~@73 A@3 ~@5 B@3 C@4 D@3 ~@18>".pickRestart({
  A: "[~@29 d4@8 c4@2 ~ b3@5 b3@24 ~@27]/3", B: "[~@29 d4@8 c4@2 ~ b3@2 ~@3 b3@8 c4@2 ~ d4@5 c4@29 ~@6]/3",
  C: "[c5@5 a#4@2 ~ a4@5 g4@8 a4@2 ~ a#4@2 ~@3 c5@8 a#4@2 ~ a4@5 g4@8 a4@2 ~ a#4@5 c5@45 ~@11 d5@10 ~]/4",
  D: "[d5@5 c5@2 ~ b4@5 a4@8 b4@2 ~ c5@5 d5@8 c5@2 ~ b4@5 a4@8 b4@2 ~ c5@5 d5@34 ~]/3",
})).s("gm_acoustic_guitar_nylon").gain(0.35).pan(0.3)

// chords · synth brass 1 · "BRASS 1"
const synth_brass_1 = note(`<
  ~@36 A@2 B@2 C D E ~ A@2 B@2 C D F G H I@2 J@2 K L ~ A@2 B@2 C D M ~@17 N@2 O P Q@2 R S T U@2 V W X@3 W Y@3 W Z ~ AA@2
>`.pickRestart({
  A: "[~@5 b3@2 ~ d4@5 f#4@10 ~ d4@5 f4@34 ~]/2", B: "[~@5 g3@2 ~ c4@5 e4@10 ~ g3@5 d#4@34 ~]/2",
  C: "~@21 [g3,a3,c4,e4]@2 ~@9", D: "[a#3,c#4,d#4,f4]@13 [f#3,a3,c4,e4]@16 ~@3",
  E: "~@5 [g4,b4,c#5,e5]@2 ~ [g4,a#4,c5,d#5]@2 ~@6 [f#4,a4,b4,d5]@5 [f4,g#4,a#4,c#5]@2 ~@6 [e4,g4,a4,c5]@2 ~", // C#m7b5 Cm7 Bm7 A#m7 Am7
  F: "~@5 [g4,b4,c#5,e5]@2 ~ [g4,a#4,c5,d#5]@2 ~@6 [f#4,a4,b4,d5]@5 [f4,g#4,a#4,c#5]@2 ~ [e4,g4,a4,c5]@5 [d4,g4,b4]@2 ~", // C#m7b5 Cm7 Bm7 A#m7 Am7 G
  G: "~@5 g4@8 ~@3 g4@2 ~@6 g4@2 ~@6", H: "a#4@21 ~@11", I: "[g4@5 a#4@2 ~ g4@2 ~@3 g4@8 g4@2 ~ g4@5 a#4@21 ~@14]/2",
  J: "[g4@5 a#4@2 ~ g4@5 a#4@8 ~@3 c5@5 d5@29 ~@6]/2", K: "~@29 g4@2 ~",
  L: "a4@5 f4@2 ~ f#4@5 a4@8 a#4@2 ~ b4@5 d5@2 ~",
  M: "~@5 [g4,b4,c#5,e5]@3 [g4,a#4,c5,d#5]@2 ~@6 [f#4,a4,b4,d5]@5 [f4,g#4,a#4,c#5]@3 [e4,g4,a4,c5]@5 [d4,g4,b4]@2 ~", // C#m7b5 Cm7 Bm7 A#m7 Am7 G
  N: "[[g3,a#3,d4,f4]@3 ~@10 [g3,a#3,c4,e4]@11 ~@5 [g3,a#3,d4,f4]@11 ~@5 [g3,a#3,c#4,e4]@11 ~@8]/2", // Gm7 C7 Gm7 Gdim
  O: "~@5 [c4,e4,f4,a4]@11 [d4,f4,g4,a#4]@3 ~@5 [d#4,f#4,g#4,b4]@3 ~@5", // Fmaj7 Gm7 G#m7
  P: "[e4,g4,a4,c5]@5 [d#4,f#4,g#4,b4]@3 [d4,f4,g4,a#4]@5 [c4,e4,f4,a4]@3 ~@5 [a#3,c#4,g#4]@11", // Am7 G#m7 Gm7 Fmaj7 A#m7
  Q: "[[a3,c4,e4,g4]@3 ~@10 [a3,c4,e4,f#4]@11 ~@5 [a3,c4,e4,g4]@11 ~@5 [a3,c4,e4,f#4]@13 ~@6]/2", // Am7 F#m7b5 Am7 F#m7b5
  R: "~@5 [a3,c4,d4,f4]@8 ~@3 [c4,d4,f4,a4]@3 ~@5 [d4,f4,a4,c5]@3 ~@5", // Dm7
  S: "[d4,e4,g4,b4]@5 [b3,d4,e4,g4]@3 [d4,e4,g4,a4]@5 [c#4,e4,f#4,a#4]@11 ~@8", T: "a4@5 g4@2 ~ a4@5 g4@2 ~@6 a4@2 ~@9",
  U: "[~@5 a4@10 ~ g4@5 a4@2 ~@6 b4@8 a4@2 ~ b4@5 a4@5 ~@3 b4@2 ~@9]/2", V: "~@5 b4@10 ~ a4@5 b4@2 ~@9",
  W: "~@5 d5@10 c5@5 ~ d5@2 ~@9", X: "[~@5 a#4@10 g#4@5 ~ a#4@2 ~@6 g4@23 ~ a4@2 c5@5 ~ a#4@26 ~@9]/3",
  Y: "[~@5 a#4@10 g#4@5 ~ a#4@2 ~@6 g4@24 a4@2 c5@5 ~ a#4@26 ~@9]/3", Z: "~@5 a#4@10 g#4@5 ~@3 a#4@5 ~ g4@2 ~",
  AA: "[~@23 g4@40 ~]/2",
})).s("gm_synth_brass_1").gain(0.3).pan(0.7)

// other · vibraphone
const vibraphone = note(`<
  A@2 B ~@32 C D E F G H I@2 J K L K M N O@2 ~@8 P F Q R S T U@2 ~@25 V W@2 X Y Z@3 Y AA@3 AB AC ~ AD@2
>`.pickRestart({
  A: "~@5 c4@2 ~ g4@5 c5@8 g4@2 ~ c4@2 ~@6", B: "~@5 c4@2 ~ g4@5 c5@2 ~ g4@5 c4@2 ~ g4@5 c5@2 ~",
  C: "~@5 c5@2 ~ a4@5 a#4@2 ~ b4@5 d5@3 c5@5 a#4@2 ~", D: "b4@29 ~@3",
  E: "~@5 c5@5 a4@2 ~ a#4@2 ~ b4@5 d5@5 c5@2 ~ a#4@2 ~", F: "b4@15 ~",
  G: "~@5 c5@5 ~ a4@2 a#4@2 ~ b4@5 d5@5 c5@2 ~ a#4@2 ~", H: "b4@5 g4@2 ~ d4@5 c4@18 ~",
  I: "[~@8 a#4@4 ~ b4@8 d4@3 e4@5 g4@32 ~@3]/2", J: "~@5 c5@2 ~ a4@5 a#4@2 ~ b4@5 d5@2 c5@5 ~ a#4@3", K: "b4",
  L: "~@5 c5@5 ~ a4@2 a#4@2 ~ b4@4 ~ d5@5 c5@2 ~ a#4@2 ~", M: "~@5 c5@5 a4@2 ~ a#4@2 ~ b4@5 d5@2 ~ c5@5 a#4@2 ~",
  N: "b4@5 g4@3 d4@5 c4@18 ~", O: "[~@5 a#4@2 ~ a#4@5 b4@8 d4@3 e4@5 g4@31 ~@4]/2",
  P: "~@5 c5@3 a4@5 a#4@2 ~ b4@4 ~ d5@3 c5@4 ~ a#4@2 ~", Q: "~@5 c5@3 a4@4 ~ a#4@3 b4@4 ~ d5@6 c5@2 a#4@2 ~",
  R: "b4@27 ~@5", S: "~@5 c5@3 a4@5 a#4@2 ~ b4@4 ~@4 c5 ~@4 a#4@2 ~, ~@21 d5@5 ~@6", T: "b4@5 g4@2 ~ d4@5 c4@19",
  U: "[~@5 a#4@2 ~ a#4@4 ~ b4@8 d4@3 e4@5 g4@27 ~@8]/2", V: "c6@5 b5@2 ~ c6@5 b5@2 ~@6 c6@2 ~@9",
  W: "[~@5 c6@8 ~@3 b5@5 c6@2 ~@6 d6@8 c#6@2 ~ d6@2 ~@3 c#6@2 ~@6 c#6@2 ~@9]/2", X: "~@5 d6@8 ~@3 c#6@5 c#6@2 ~@9",
  Y: "~@5 b5@8 ~@2 a5@5 ~ b5@2 ~@9", Z: "[~@5 g5@10 f5@2 ~@4 g5@2 ~@6 e5@18 ~@8 g5@2 ~@4 f#5@5 ~@30]/3",
  AA: "[~@5 g5@8 ~@2 f5@5 ~ g5@2 ~@6 e5@21 ~@5 g5@5 ~ f#5@21 ~@14]/3", AB: "~@5 b5@10 a5@5 ~ b5@2 ~@9",
  AC: "~@5 g5@10 f5@2 ~@7 g5@2 ~@3 c6@2 ~", AD: "[~@23 e5@34 ~@7]/2",
})).s("gm_vibraphone").gain(0.36).pan(0.3)

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

// drums · rim
const rim = s("rim").struct("<~@7 A ~@7 A ~@19 B C@6 ~ B C@6 D ~@8 B C@6 D ~@16 B ~@25>".pickRestart({
  A: "~@21 x ~@2 x ~@7", B: "~@21 x ~@2 x ~ x ~@2 x ~@2", C: "~ x ~ x", D: "~@5 x ~@26",
})).gain(0.35)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@51 [~@16 x!8 ~ x ~@6] ~@35 [~@21 x!6 ~@5] ~@21>").gain(0.15)

// drums · hihat
const hihat = s("hh").struct("<~@36 A B@5 C ~ D B@5 E ~ F ~@7 A B@5 E ~@42>".pickRestart({
  A: "~ x", B: "x!4", C: "x ~@7 x ~@7 x ~@4 x ~@7 x ~@2", D: "x!2", E: "x ~@7 x ~@7 x ~@4 x ~@2 x ~@4 x ~@2", F: "x",
})).gain(0.35)

// drums · low tom
const low_tom = s("lt").struct("<~@71 A ~@7 A ~@5 A ~@3 A ~@13 A ~@5>".pickRestart({
  A: "~@29 x ~@2",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@71 A ~@7 A ~@5 A ~@3 A ~@13 A ~@5>".pickRestart({
  A: "~@13 x ~@2",
})).gain(0.35)

// drums · crash
const crash = s("cr").struct("<~@52 A ~@19 A ~@2 B ~@4 A ~@7 A ~ A ~@4 C ~@3 C ~@3 C ~ D ~@3>".pickRestart({
  A: "x", B: "~@5 x ~@7 x ~@2 x ~@4 x ~@10", C: "~@31 x", D: "~@29 x ~@2",
})).gain(0.35)

// drums · high tom
const high_tom = s("ht").struct("<~@71 A ~@7 A ~@5 B ~@3 A ~@13 C ~@5>".pickRestart({
  A: "~@3 x", B: "~@21 x ~@2 x ~@7", C: "~@21 x ~ x ~@8",
})).gain(0.35)

// drums · ride
const ride = s("rd").struct(`<
  A B C ~ D ~ D ~ E@2 F ~ D ~ D ~ E@2 F ~ E@6 G ~ D ~ D ~ E@2 F ~@17 E@6 H I ~@7 J E@7 ~ E@10 J K E@2 L E@4 M N@9 O I P
  ~
// … 13 more lines

More by Ellington