Strudelify

Easy to Love

Cole Porter

KeyC majorTempo170 bpm
0:00/0:00
// Easy to Love — Porter Cole
// 170 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(170/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 · rock organ · "Easytolove"
const rock_organ = note(`<
  A B C D E F G@2 H I@3 J K L M N O@4 P Q@2 R S@3 T U V W X@2 Y Z AA AB@2 AC@2 AD AE AF@2 AG AH AI AJ AK AL AM@2 AN@2 AO
  AP AQ AR AS AT@4 AU@2 AV AW AX AY AZ BA BB BC@2 BD@2 BE@2 BF BG BH BI BJ BK BL BM@2 BN BO@6 BP@3 BQ BR@3 ~
>`.pickRestart({
  A: "~@3 f#6 g6 c7 ~ f7 e7 f7 [c7,e7] g6 [f#6,c7] f6 c6 [f6,c7], [e4,d5]@5 ~@2 [c#5,f5]@7 ~@2", // C F#dim F5 E7 C#
  B: "d#6 e6 ~ [f6,a6] [e6,g6] c6 ~ g5 [f5,c6]@2 ~ c5 [f5,c6]@3 e5, ~@8 f#5 ~@7", // F Em F5
  C: "~@3 [f#5,g5,b5,d6,f#6] ~@3 [a5,b5,d6,f#6,a6] ~@3 [g5,b5,d6,f#6]@5, ~@11 f#5 ~@4", // Gmaj7 Bm7 Gmaj7
  D: "[f#5,a#5,c#6,f6]@8 [c#5,d#5,f#5,a#5,c#6] ~@3 [c#5,d#5,a#5]@2 ~@2, ~@12 [a#4,f#5] ~@3", // F#maj7 D#m7 D#7 D#m
  E: "[a4,c5,e5,f5,a5], g#4 ~@15", F: "[e4,g4,a#4,d5]@10 ~ [c#4,g4,a#4,c#5,e5]@4 c#4, c#4 ~@15",
  G: "[[a4,c5,d5,f5]@8 [c#4,g4,a#4,c#5,e5]@3 [d4,c5,d5,f5] ~@3 f#5 g5@11 [f4,b4,d#5,a5]@5, ~@15 [f4,a4,c5,e5,b5]@12 g#5 ~@4]/2", // Dm7 C#dim Dm7 F7 Fmaj7
  H: "[e4,a4,d5,g5]@11 [d#4,g#4,c#5,f#5]@2 [e4,a4,d5,g5]@2 c5", // Em7 D#m7 Em7
  I: "[[d5,d#5,g5,b5,d6]@7 [c#5,d#5,g5,a#5,c#6]@2 [c5,d#5,g5,a5,c6]@3 ~ [b4,d5]@2 [a4,e5,a5]@9 [c#5,d#5,g#5]@2 ~@2 [a4,b4,d5,e5,a5]@3 d#6 [g5,d6,e6]@11 [g4,c#5,f5,a#5,d#6,g6] ~@4, c#5 ~@11 [d#5,g5,b5]@3 ~@9 [g#4,a4] ~@6 [a5,b5,g6]@11 ~@6]/3", // G D#7 Am7b5 Bm A5 C#sus2 Asus4 Em7 …
  J: "c#6 d6@15, [a4,a5,g6]", K: "g#4 a4@10 [f4,b4,d#5,g#5,b5]@5, [c5,e5,f5,a5]@11 ~@5",
  L: "a#5 [e4,b5]@6 [e5,e6]@2 ~ e6@2 [e5,e6]@3 [e5,e6], [g5,e6]@7 ~@3 e5 ~@5", // E5 E C
  M: "~@4 [f#5,b5]@2 ~ [c#5,f5,c#6] ~@3 c#5 [c#5,f#5] ~@2 [f4,e5,f5], ~@3 d6@3 ~@5 a#5@3 ~@2", // B5 C# F#5 Fmaj7
  N: "~@3 [g5,d#6] e6@4 [a4,c5,e5]@2 ~@2 [g4,a4,c5,e5,g5]@3 ~, ~@3 [a5,c6,g6]@5 [f4,g5] ~@7", // Cm Am Am7 Fsus2
  O: "[[g#4,c5,d5,f5,g#5]@3 ~ [g#4,c5,d5,f5,g#5]@4 ~ c#5@2 [b4,c#5,e5,a5] ~@3 [e4,g4,b4,d5,e5,g5,b5]@9 [d5,e5,g5,b5,d6]@2 ~@4 [e5,g5] ~@2 f5@6 [g#4,c#5,f5,g#5] ~@2 [f#4,a#4,c#5,f5]@2 ~ [c#4,f#4,a#4,c#5]@2 [f4,a4,c5]@9 [c5,e5,f5,a5]@8, ~@8 [b4,e5,a5]@2 ~@14 c#5 ~@2 [c#5,c#6]@5 [a#4,c#5,f#5]@7 a#4@2 ~@15 g#4 ~@7, ~@27 b5@4 [b4,g5,b5]@2 ~@31, ~@29 c6@3 a#5@4 ~@28]/4", // Dm7b5 A Em7 Em C# F#maj7 F# F …
  P: "c#4 [e4,g4]@10 [c#4,g4,a#4,c#5,e5]@4 c4, [d4,a#4,d5]@5 ~@3", // Em C#dim Gm
  Q: "[[d4,a4,c5,d5,f5]@8 [c#4,g4,a#4,c#5,e5]@3 [d4,a4,c5,d5] ~@3 f#5 [f4,g5]@11 [f4,b4,d#5,a5]@5, c#4 ~@14 [a4,c5,e5,b5]@11 ~@6]/2", // Dm7 C#dim D7 Fsus2 F7 Am
  R: "[e4,a4,b4,d5,e5,g5]@11 ~@2 [g4,a4,d5,e5,g5]@3, ~@11 [f#4,g#4,c#5,d#5,f#5]@5", // Em7 Gsus2 F#sus2
  S: "[[d5,d#5,g5,b5,d6]@7 [c#5,d#5,g5,a#5,c#6]@2 [c5,d#5,g5,a5,c6]@3 [b4,d5,d#5,g5,b5]@3 [a4,b4,e5,a5]@9 [g#4,d5,e5,g#5]@2 ~@2 [a4,d5,e5,a5]@3 d#6 e6@10 ~ [c#5,e5,g5,a#5,c#6,e6]@5, [c5,c#5] ~@27 b4 ~@2 [a5,b5,d6,a6]@11 ~@6]/3", // G D#7 Am7b5 G Asus2 E7 Asus4 C#dim …
  T: "[d5,f5,g5,a5,c6,e6,g6]@10 ~ [f5,a5]@2 [e5,f5,a5,e6]@3, ~@11 [d5,c6,d6]@5", // Dm7 F Fmaj7 D7
  U: "[g5,g#5,c6,d#6,f6]@10 ~ g5@2 ~@2 d#5, f#5 ~@10 [c5,d#5,g#5,c6]@5, ~@13 [d5,a#5,d6]@3, ~@7 [f5,g5]", // Fm7 G# Gm Fsus2
  V: "[g5,a5,b5,e6]@11 [b4,e5,g5,b5] [d5,f5,a5,c6]@2 ~ [d5,e5,g5,b5,d6]", // Em Dm7 Em7
  W: "~@3 [c#5,e5,g5,a#5,c#6]@4 a#4 [d#5,f#5]@2 ~@2 [c5,d#5]@2 ~@2, ~@8 c6 ~@3 [f#5,b5] ~@3", // C#dim D#m Cm B5
  X: "[[c5,e5,f5,a5]@8 [e5,f5,a5,c6,e6]@10 ~ [e5,g#5] a5 ~@3 [f5,g#5,b5,e6]@3 ~ [b4,d5,f5,g#5,b5]@3 [c5,e5,g5,c6], ~@8 d#5 ~@10 [f5,c6,e6]@2 ~@7 a#4 ~@3]/2", // Fmaj7 E Bdim C Fmaj7
  Y: "~@3 g5 ~@2 b5 d6 ~ b5 ~ c6 ~ g6 ~ b6", Z: "~ d7 ~ g7 ~ d7@2 c#7 ~@3 [c#5,f5,f7]@4 a#4",
  AA: "[f4,c5,d#7] e7 ~@2 a6@2 ~ a6 a6@2 ~ a6 a6@2 ~@2, g7 ~@7", // F7
  AB: "[[d5,e5,a6]@2 ~@2 a6@3 [c#5,f5,a6]@2 ~ a6@2 f7@2 ~ [c5,e7]@5 d7 ~ c7 a6 ~ f6 ~ e6 ~ d6@2 [c5,c6], ~@7 a#4 ~@24]/2", // Dsus2 C#aug C
  AC: "[~@4 f6@2 ~ [f4,c5,e5]@2 f#6 g6@2 b5@2 ~ d#6 e6 ~@2 [a4,b5] d6 e6 d6 ~ c6 g5@2 ~ g5@4, ~@3 d6@3 ~ [g#6,a6] ~@4 e5 ~@2 a4@2 ~@15]/2", // Fmaj7 Asus2 Amaj7
  AD: "[d#4,a4,d5] ~@3 f#6 ~ c7 e7 d#4 f7 e7 f7 ~ e7 f7 e7", // D
  AE: "[g4,d5,f7] ~ e7 f7 e7 f7 ~ e7 [d5,f7] ~ e7 f7 e7 f7 ~ e7", // G7 Dm
  AF: "[[g4,d5,f7] ~ e7 c7 a6 ~@7 [a7,c8]@2 ~ [f4,a4,e5,f#7] g7 ~@2 a4 ~@2 c7 e7 ~ [e7,f7] e7 c7 ~@4, ~@5 c7@6 ~ [g#7,d8] ~@2 c8@2 ~@15, ~@4 [g4,c#5,f5]@3 ~@9]/2", // G7 Am Fmaj7 G#dim Gm7b5
  AG: "~@5 f#6 f6 [f4,b4,e5,c7] ~ c6 ~ g5 ~ f5@2 d#5, ~@5 c7@2 e6@2 ~@7", AH: "e5@3 g5 b5@2 ~ d6@2 c6@2 b4 g5@3 ~",
  AI: "f#5@2 ~ [d5,g5] [g4,d5,a5]@3 [f#4,a#4,c#5,a#5]@2 ~ [c#5,f5]@2 [f#4,a#4,c#5,d#5]@3 [f4,c5,d5], ~@10 a#4 ~@5", // G5 Gsus2 F# C# D#m7 Dm7
  AJ: "~@3 g6 g5 ~ g5!4 ~ g5!2 ~ g5!2", AK: "[c5,e5] ~ g5!4 ~ g5 [f4,b4,e5] ~ g5!3 ~ g5!2",
  AL: "[e4,d5] ~ f#5 g5 c6 ~ e6 f6 ~ e6 f6 e6 f6 ~ e6 c6", // E7
  AM: "[f#4@3 a#4 [f#5,c6] f5@2 d#5 [f5,c6]@2 ~ [a#4,d#5] [f5,c6]@2 ~ f#5 g5 ~ e5@2 ~ c5@2 a4@7 ~ g#4, c#5@5 ~@10 [a4,c5,c6]@2 ~@15]/2", // F#dim F5 D#5 F5 Am
  AN: "[a4@2 ~ b4 c5@2 ~ [g4,d5]@3 [g4,a#4,c#5,e5]@2 [a#4,c#5,a5]@3 [f4,a4,c5,g5]@3 ~ e5 f5 a5 ~ c6 e6 ~ g6 f6 e6@2 ~@2]/2", // G5 Gdim A#m F
  AO: "[f4,c5,e5]@3 f#6 g6 c7 e7 g7 a#7 g#7 d#7 b6 a#6 g#6 g6 f#6", AP: "g6 ~ g6 a6 g6 ~ g5 a5 b5 ~ b5 c6 b5 a5 g5 ~",
  AQ: "e5 ~ b5 d6 b5 c6 e6 ~ g6 b6 [c#7,d7]!2 c7 g6 ~ c6", AR: "f6 ~ c6 ~ f6 e6 c6 a5 g#5 g5 ~@6",
  AS: "~@3 [g4,d5,d#5] e5 ~ f#5 g5 ~ [g4,c#5,f5,a5] a#5 ~ c6 c#6 d#6 e6", // D#maj7 C#aug
  AT: "[e5 [f4,c5] ~ e6 ~ c6@2 [c5,e5,a5] ~ [a4,g5]@3 [a4,c5,e5,f5]@7 [g#4,a#4,d#5,d#6,a#6] ~ [g#4,a#4,d#5,g6] [g#4,a#4,d#5,d#6] [c5,d#5]@2 ~ [d5,g5,a#5]@2 [g#4,a#4,c5,g#5]@3 [g4,b4,d5,e5,g5]@8 [b4,d5,e5,c6] [d5,e6]@3 [b4,d5,e5,g6] [g4,b4,d5,e5]@3 [g4,b4,d5,e5,e7]@2 [g6,g7] [d5,f#5] ~ f#5 ~@3 d7 ~@6 [g4,a#4,c#5,f5,a6,b6,a7], ~ g6@2 ~@16 c5@4 [a#4,c6] ~@2 a#4 ~@12 g4@4 ~@9 a7@3 [g4,a#4,c#5,f5,c7,c8]@9, ~@19 g5@2 ~@7 g5 ~@15 c7@5 ~ d7@6 ~@8, ~@53 [b4,d5,f#5,a#6,a#7]@4 ~@7]/4", // F5 Am A7 Fmaj7 G#sus2 D# G#sus2 Cm …
  AU: "[[f4,a4,c5,e5,g6,g7]@2 ~@2 d#7 e7 ~@2 [f7,g7]@3 e7 [f7,g7]@2 ~ [f4,b4,e5]@2 f7 [f#7,g7] ~ [a#6,a#7] a#6 a#7 [f4,b4,d#5]@2 ~ d#7 c7 [d#7,g7] e7 c7 [f7,g7], ~@4 [f4,a4,c5,e5,g7]@2 ~@9 [e7,g7] ~@7 [a#6,a#7] ~@8]/2", // Fmaj7 Fsus2 E Gmaj7 A# Fm7b5 D# Fsus2 …
  AV: "~ [d#7,g7] e7 [c7,g7] ~ g6 ~ [e4,d5,f#6,c7] c7 f6@2 [f#6,c7] g6 d#6 ~ [d5,e5]", // D# C5 D7 F#dim Dsus2
  AW: "c6@2 ~ a5 g5@2 ~ [g4,c#5,f5,a5]@2 [c#5,f5,g5,a#5]@2 ~ [g4,f5,a5] ~@2 [f4,c5,f5,a5], ~@9 g4 ~@2 [c#5,c6]@2 ~@2", // C#aug Gm7b5 Dm F C#maj7
  AX: "~@3 [c6,e6,f6,a6]@5 [f5,a5,c6]@2 ~@2 [g5,a5,e6]@2 ~@2, ~@3 a5@2 ~@3 [c#5,d6] ~@3 e5 ~@3", // Fmaj7 F A7 Dmaj7
  AY: "d#5 [b5,d6]@2 ~ [g5,a5,e6,g6]@2 ~@2 g#5 [c6,d6,f6] ~@3 e6@2 [d6,f6,a6,c7,d7], [g5,f6]@2 ~@7 [a5,a6]@3 [c#6,g6,a#6,c#7]@3 ~", // Bm A7 Dm7 G7 A Gdim
  AZ: "~@3 [d5,f5,a5,c6,d6] ~ d5 ~@2 [d5,f5,a5]@2 ~@2 [c6,e6]@4, ~@2 [f5,a5,c6,d6] ~@3 [f5,a5] ~, ~@12 e5 ~@3", // Dm7 Dm C Dm7 F
  BA: "[f5,a5,c6,d6,f6]@7 [d5,f5,a5,c6,d6] ~@2 [d5,f5,g#5,b5] ~ [g#4,b4,d5,f5,g#5]@3 [g4,e5,g5], ~@10 b4@2 f#4 ~@3", // Dm7 Ddim G#dim C
  BB: "~@7 [c4,e4,g4,a4,c5] e4 c4 ~ [c4,e4,g4,a4,c5] [c4,e4,g4,a4,c5]@2 ~ [g4,a4,c5,d#5,g5], ~@4 [g4,a4,c5] ~@3", // Am7 Am7b5 Am7
  BC: "[~@3 [c4,d#4,g4] ~@3 [b3,d#4,g4,c5] ~ [c4,d#4,g4,a4,c5] ~ [c4,d#4,c5] [c4,d#4,g4]@2 ~ d#5 e5@7 [c4,e4,g4,a4,c5] ~ a4@2 [c4,e4,g4,a4,c5] [c4,e4,g4,a4,c5]@3 [d4,e4,g4,b4,d5], ~@15 [g4,b4,d5,g5]@8 ~ c5@2 ~@6]/2", // Cm Am7b5 Cm Am7 Em7 G
  BD: "[~@3 [e4,g4,b4,d5,e5] [g4,d5,f5] b4 ~ [g4,g5]@3 [c#5,f5,g#5] ~@2 [a#4,f5,f#5]@2 [f4,a4,c5,e5,g5,b5]@8 [a4,c5,e5,g5] [c5,e5]@2 ~ [a4,c5,f5] a5 c6 ~ e6, ~@4 f4@2 ~ [a4,b4] ~@2 [f#4,a#4]@2 [g#4,c#5,a#5]@4 ~@16]/2", // Em7 G7 G C# F#maj7 Fmaj7 Am7 C …
  BE: "[[f4,a4,c5,e5,g6]@2 c5 [f4,e5,f6] [a4,e5,g6]@2 a4 [f4,c5,e5,f6,g6] ~ d#6 e6 ~ [a4,b4,g5]@2 ~ [e4,b4]@4 [c6,c#6] ~ c6 e6 g6 b6 c7 b6 g6!2 a6 b6 c7, ~@9 [f4,e5,g6]@2 ~ e5 ~@2 d6@3 ~@14]/2", // Fmaj7 A7 C Em E5 C#maj7 C
  BF: "b6 c7 b6 a6 g6 a6 b6 [c#5,c7] [c#7,d#7] f7 [c#7,d#7] a#6 f#6 [c#6,d#6] [a#5,c6] [f#5,g#5]", // C#maj7 C#sus2 A#sus2 F#sus2
  BG: "[d#5,f5] e5 ~@6 [f4,c5,e5] g6 f#6 f6 a5 c#6 [d#6,e6] ~", // D#sus2 Fmaj7 Emaj7
  BH: "[c#6,d6] ~ a5 c6 ~@4 c6 [c6,d6] ~ [a5,a#5] b5 a#5 ~ g#5", // Dmaj7 Csus2 A#maj7
  BI: "[b4,g5] c6 e6 f6 ~ f6 e6 c6 ~ f5 e5 d5 c5 b4 a4 ~", // Em
  BJ: "f#4 g#4 ~ a#4 ~ c5 c#5 d#5 f5 f#5 g#5 a#5 [f#4,c6] c#6 d#6 ~", // F#dim
  BK: "[f4,c5,e5,f6,a6]@7 [a4,c5,e5,d6,f6] ~@4 [c5,e5,a5,d6]@2 ~@2", // Fmaj7 Dm7 Am
  BL: "~ [d5,e5]@10 [g4,a#4,c#5,e5,g5,a#5,c#6,e6]@5, [g5,a#5,d6]@11 ~@5", // Dsus2 Gdim Gm
  BM: "[[f4,a4,c5,d5,a5,c6,d6,f6]@8 [a4,c#5,e5,g5,a#5,c#6,e6]@2 ~ [a4,c5,a5,c6,d6,f6] e5 ~@2 [d#6,f#6] e6@10 ~ [f4,g#4,b4,d#5,b5,d#6,a6]@5, ~@15 [f4,a4,c5,e5,c6,g6,b6]@11 ~@6]/2", // Dm7 A7 Dm7 D#m Fm7b5 Fmaj7
  BN: "c#6 ~@10 [e4,g4,b4,d5]@2 [e4,g4,b4,d5,g5,g6]@3, [g5,g6]@13 ~@3, [e4,g4,b4,d5]@11 [f#5,f#6]@5, ~ d6@15", // Em7 G Em7 F#
  BO: "[[d#4,g4,a4,d5,d6,d7]@7 [g4,a4,c#6,c#7]@2 [d#4,d5,c6,c7]@2 ~ [d#4,d5,b5,b6]@3 [e4,g4,a4,b4,d5,a5,a6]@9 ~ [e4,g4,d5] ~ [e4,a4,b4,d5,a5,a6] ~@3 [g#6,g#7] [a6,a7]@11 [g4,a#4,c#5,f#5]@2 [c#5,f#5] a#4 [f#6,f#7] [f#6,f#7] ~@10 [f4,a4,c5,e5] [f4,c5,e5,e6,e7]@3 [g4,g#4,c5]@12 [d4,g4,g#4,c5] ~ [d6,d7]@2 [e4,g4,b4,d5,e6,e7]@9 [g5,b5,b6]@2 ~@2 [d#5,g5,c7]@2 ~ c#5, ~@7 [d#4,d5] ~@7 b5 ~@8 [b4,g#5,g#6]@2 ~@17 e7@5 [f4,a4,c5,e5]@11 ~@4 [d#4,f6,f7]@17 ~@16, ~@25 a4@2 ~@4 [g4,a4,b4,d5,f#5]@11 ~ [d#6,e6,d#7] ~ [f6,f7]@4 [g6,g7]@14 e7 ~@12 g#4@3 ~@13 [a4,c6] ~@3, ~@47 [g4,a#4,c#5,f#5]@2 ~@10 [d6,d7]@5 ~@11 [c6,c7]@5 ~@16]/6", // D#maj7 A7 Cm G Em7 Esus4 G# A …
  BP: "[[c#6,c#7] [d6,d7]@2 [d5,c#6,c#7]@2 ~ [d5,f#5,c6,c7]@2 [c#5,f5,b5,b6]@3 ~ [c#5,f5,a#5,a#6]@3 [f4,c5,e5]@8 [e5,d#6,d#7] e6@16 [g#4,b4,e5,e6,g#6,b6,e7]@3 ~@2 [f4,g#4,e5,b5,e6,g#6,b6]@2 [e4,g4,b4,d5,c6,e6,a6,c7], ~@3 f#5 ~@19 [f4,a4,c5]@17 ~@8]/3", // C# D Dmaj7 D7 C#7 A#m Fmaj7 Emaj7 …
  BQ: "~@3 [c4,c7] ~ d4 e7 [g4,g7] [d4,d7]@2 ~ [f4,f7] [a4,a7] ~ c8 ~", // C G D F A
  BR: "[[e5,e8] ~@2 [f#5,f#8] g8@2 [a#5,a8,a#8] [c6,b8,c9] ~@5 [c3,e4,b4]@32 ~@3, ~@4 g5 ~@7 [g3,f#4,d5]@32 ~@4]/3", // E F# A#maj7 Cmaj7 Gmaj7
})).s("gm_rock_organ").gain(0.4)

// chords · rock organ · "Easytolove" · soft notes
const rock_organ_soft = note(`<
  A ~@2 B ~ C D ~@2 E@2 F G H I J K L M@2 N O P ~ Q R@2 ~ S ~ T U V W X Y Z AA@2 AB@2 AC AD AE@2 AF AG AH AI ~@2 AJ@2 AK
  AL AM AN AO AP ~ AQ@2 AR AS ~ AT AU AV AW AX AY AZ@2 BA BB BC BD BE@2 BF ~ BG BH BI BJ BK BL ~@2 BM ~ BN BO BP BQ BR@3
  BS BT ~@3
>`.pickRestart({
  A: "~ g4@4 ~@2 g4@6 ~@3, b4 ~@3", B: "f5@8 ~@3 g#4 ~@3 g4", C: "c4 d4@10 ~@4 c4", D: "d4@8 ~@3 g4 ~@4",
  E: "[~@15 [b4,d5]@9 ~@4 g4 ~@2 f#5]/2", F: "~@15 a#4", G: "~ f4@15, [c5,e5]", H: "g4 ~@15",
  I: "[a4,d5]@7 ~@5 [a4,d5] ~@3", J: "~@3 [g4,f#5] [g4,d5]@2 ~ f#4 ~@5 f#4 ~@2", K: "~@8 f#4 g4@2 ~ f4 ~@3",
  L: "~@9 a4@2 a4 ~@4", M: "[~@7 c5 ~@3 [e5,g5]@3 ~ e5@2 ~@9 f4@2 ~@4, ~@7 c5@2 ~@7]/2", N: "[c4,e4]@8 g4 a4@7",
  O: "c4 ~@15", P: "~@7 c4 ~@3 f5 ~@4", Q: "~@15 a#5", R: "[~@15 d5@9 b4@2 ~ g4 ~@4]/2", S: "~@15 f5",
  T: "e5@11 c5 ~ c5@2 ~", U: "~@8 a5 c5 ~@3 b4 ~@2", V: "a4@8 d5 ~@7", W: "~@7 d5 ~ e5@2 a4 ~@3 a5, ~@2 d#5 ~",
  X: "~@12 e6 ~@3", Y: "~@11 g4@4 ~", Z: "e5 ~@15",
  AA: "[[g4,a#4]@2 ~@5 g4@2 ~@6 [f4,a4,e5]@4 c5 ~@3 [f4,a4,c5,e5] ~@7 [f4,e5]]/2", // Gm Fmaj7
  AB: "[b5@2 ~@8 [f4,b4,e5]@2 b4@3 [e4,d5]@4 ~@4 [a4,b5] ~@3 [a4,d5] ~@4, ~@12 f4 ~@19]/2", // E E7 Asus2 D5
  AC: "g4 ~@4 g6 ~@2 [g4,a4,d5] ~@7", AD: "~@8 [g4,g5] ~@7", AE: "[~@15 c5@2 ~@2 [c5,e5] ~ g6 ~@10]/2",
  AF: "~ [f4,c5,e5] ~@2 c6 ~@10 g4", AG: "[e4,b4,d5] ~@6 [e4,b4,d5] ~@3 [e4,d5] ~@4",
  AH: "d5@2 ~@8 f#4@2 ~@3 a4, g4 ~@15", AI: "~@8 [a4,c5,e5] ~@7", AJ: "[f5@3 ~@5 a#4 ~@6 f4@2 ~@15]/2",
  AK: "~@13 f5 ~@2, ~@6 g4 ~", AL: "~@7 [a4,c5,e5] ~@8", AM: "~@8 [f4,b4]@5 ~@3, ~@7 d#5@5 ~@4",
  AN: "[e4,b4,d5]@7 ~@8 f5", AO: "~@2 g5 ~@9 b6 ~@3", AP: "~@12 g4@3 ~",
  AQ: "[~@8 a4 [f4,c5,e5]@2 ~ f4@7 ~@3 g5 [g#4,g5] ~@2 g#4 ~ d5@2 ~@2, ~@25 c5@2 ~@5]/2", AR: "~@8 [b4,e5]@3 g4 ~@4",
  AS: "~@2 b4@2 d5 g4@2 ~@9, ~@2 g4 ~@13", AT: "~@10 [f7,g7] ~@5", AU: "~@14 e6 g4", AV: "~@15 e5",
  AW: "~@8 d5 ~@3 c6@2 ~@2", AX: "~ f5 ~@2 d6@2 ~@2 f#5 ~@7, ~@4 d#5 ~@11", AY: "~@7 c#5 [c6,d6] ~@2 d5 ~@3 d5",
  AZ: "[~@15 [b4,d5]@8 ~@9]/2", BA: "~@3 c5 a4 ~@2 a4 ~@3 g4 ~ a4@2 ~, ~@6 c5 ~", BB: "~@9 [e4,g4]@2 ~@5, ~@9 c4 ~@6",
  BC: "~@7 c5 ~@8", BD: "~@8 a4@2 ~ f4 ~@3 c5, ~@7 f4@3 ~@6",
  BE: "[~@3 a4 c5@2 ~@3 [a4,b4]@2 ~ f4 ~@5 d6 ~ b5 ~@11, ~@4 f4 ~@10 [a4,d5]@6 ~@11]/2", BF: "~@11 g#6 f6 ~@3",
  BG: "~@7 c5 ~@4 b4 ~@2 a5", BH: "[e4,d5] ~@4 e6 ~@3 g5 ~@6", BI: "~@12 c5 ~@3",
  BJ: "~@8 f4 [f4,a4,c5,a5]@2 ~ a4@2 ~@2, ~@8 e5@2 ~@2 f4 ~@3", BK: "~ [g4,a#4]@10 ~@5", BL: "~@9 f4@2 ~@5",
  BM: "~@9 [g4,a4]@3 [g4,a4]@3 ~", BN: "~@14 g4 ~", BO: "~@2 d#7 ~@9 a4@3 ~", BP: "~@13 d4@3, ~@12 [g4,c5]@3 ~",
  BQ: "~@4 [a4,d5] ~@3", BR: "[~ d5@2 g4@2 ~ g4 ~ g4@3 ~ g4@3 [a4,a5,a6]@9 e7@16 ~ f4@3 ~ b4@2 ~, [g4,f#5] ~@15]/3",
  BS: "~@5 d7 e4 ~@7 c5 ~", BT: "~@6 g#8 b5 ~@8",
})).s("gm_rock_organ").gain(0.24)

// bass · acoustic bass
const bass = note(`<
  A B C D E F G H I J K L G M N O P Q R S T U G V I W X Y Z AA AB AC G V AD AE T AF AG AH AI AJ AK L AL AM AN AO AP AQ R
  S AR AS AT AU AV AW AX AY AF AZ BA BB G BC BD BE BF AF AG BG BH BI BJ BK BL BM BN BO AF BP BQ BR BS BT BU BV BW BX BY
  BZ CA CB CC Y G CD CE CF@4
>`.pickRestart({
  A: "c2@8 a2@7 d#2", B: "d2@8 g2@5 f2 ~ g2", C: "e2@7 a#1 a1@4 e2@4", D: "d#2@7 a#1 g#1@4 d#2@4", E: "d2 a2 d3 d#2",
  F: "e2 a#1 a1 c#2", G: "d2 e2 f2 f#2", H: "g2@4 a2@4 a#2@4 b2@3 a#2", I: "c3@3 g2 c2@4 g2@4 f#2@4", J: "f2 a1 d2 c#2",
  K: "c2 c3 f2 b2", L: "e2 b2 a#2 d#2", M: "g2@3 d2 b1@4 e2@4 d2@4", N: "c2@4 g1@4 f1@4 b1@3 a#1",
  O: "e2@4 b2@4 d#2@4 a#2@3 f#2", P: "d2 a2 d3 g#2", Q: "g2 d2 g2 d#2", R: "e2 f#2 g2 a2", S: "a#2 f2 d#2 a#2",
  T: "d2 e2 a1 e2", U: "g2 e2 a2 c#2", V: "g2 a2 a#2 b2", W: "f2@3 c2 a1@4 d2@4 c#2@4", X: "c2 a2 e3 d#3",
  Y: "d3 a#2 a2 d#2", Z: "d2 e2 f2 b2", AA: "a#2 c3 f2 c3", AB: "a2@4 b2@4 e2@3 ~ b2@4", AC: "a2 e2 a1 d#2",
  AD: "c3@3 g2 c2@4 a2@4 g#2@4, a#2 ~@15", AE: "g2 d#2 e2 a1", AF: "d2 e2 f2 g2", AG: "a2 b2 c3 c#3",
  AH: "d3 a2 g2 c#2", AI: "c2@3 g2 f3@4 e3@4 c3@4", AJ: "g2 f#2 f2 c2", AK: "g2 c3 f2 b2", AL: "g2 a2 d2 g#1",
  AM: "g1 a1 a#1 b1", AN: "c2 a2 f2 c3", AO: "e2@3 b2 g3@4 f#3@4 d#2@4", AP: "d2@3 ~ f3@4 e3@4 d3@4",
  AQ: "a2 g#2 g2 d#2", AR: "a2 e2 d2 g#1", AS: "a1 b1 c2 c#2", AT: "d2@3 a1 e2@4 f2@4 f#2@4",
  AU: "g2@3 d2 a2@4 a#2@4 b2@4", AV: "c3@3 a#2 a3@3 a#2 g3@4 f#3@4", AW: "f3 c3 g2 f2", AX: "e2 c2 a2 g#2",
  AY: "g2 f2 e2 c#2", AZ: "g#2 a#2 c3 f2", BA: "e2 b2 e3 d#3", BB: "d3@4 a#2@4 a2@4 d#2@3 f#2",
  BC: "g2 ~@2 d2 b1@4 e2@4 d2@4", BD: "c2 g1 c2 f1", BE: "e1@4 a#1@4 a1@4 d#2@3 c#2", BF: "d2@2 ~@2 d2@4 d2 ~@3 d2@4",
  BG: "d3 g#2 g2 c#3", BH: "c3 g2 c3 g2", BI: "f2 c3 f2 c3", BJ: "e2 b2 e3 f3", BK: "g3 e3 d#3 g#2", BL: "a2 e2 d2 e2",
  BM: "f2 f#2 g2 b2", BN: "c3@4 g2@3 f#2 f2@4 c2@4", BO: "e2 b1 a#1 f2", BP: "a2 d2 g2 b2", BQ: "e3 b2 e2 e3",
  BR: "d#3 a#2 d#2 d#3", BS: "d3 e3 f3 d3", BT: "c#3 a#2 a2 g2", BU: "f2 e2 d2 c2", BV: "b1 d2 g2 f2",
  BW: "e2 c2 g2 c3", BX: "f2 g2 a2 d3", BY: "c3 g2 d2 d#2", BZ: "d2 a#1 a1 d#2", CA: "d2@4 e2@4 f2@4 a2@3 ~",
  CB: "a#2 f2 d2 a#2", CC: "b2 e2 e3 d#3", CD: "g2@4 d2@4 g1@4 c#2@3 c2",
  CE: "~@3 c2 d2 e2 ~ g2 d2@3 ~ a2@2 ~ c3, ~@11 f2@2 ~@3", CF: "[e3@4 g2@3 c3 ~@4 c2@40 ~@12]/4",
})).s("gm_acoustic_bass").gain(0.48)

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

// drums · snare
const snare = s("sd").struct(`<
  ~ A ~@3 A ~ B C ~ A B C ~ A B D E ~ B ~@2 A B ~@2 A B@2 ~ A B F A@2 F A@2 ~ F B A@2 F@2 ~ A F C ~@2 F C ~@2 F G ~@2 B
  G A@2 B ~ A@2 H A ~ A B I A ~ F C A ~ F A ~@2 F A ~@2 F A@2 ~ B J F C B K B L M ~@3
>`.pickRestart({
  A: "~@3 x ~@12", B: "~@15 x", C: "~@3 x!2 ~@11", D: "~@3 x ~@4 x ~@3 x ~@3", E: "x ~@3 x ~@3 x ~@2 x ~@3 x",
  F: "~@3 x ~@11 x", G: "~@3 x", H: "~@7 x", I: "~@3 x!2 ~@10 x", J: "~@3 x ~@8 x ~@3", K: "~@12 x ~@2 x",
  L: "~@3 x!2 ~@3 x ~@2 x!2 ~@2 x", M: "x ~@3 x ~@2 x ~ x ~ x!2 ~@3",
})).gain(0.2)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@8 A ~@3 A ~@35 B ~@3 B ~@19 A ~@3 A ~@21 C D ~@3>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~@3 x", C: "~@7 x ~@8", D: "~@3 x ~@12",
})).gain(0.1)

// drums · low tom
const low_tom = s("lt").struct("<~@48 A ~@3 A ~@41 A ~@3 A ~@4>".pickRestart({
  A: "~@13 x ~@2",
})).gain(0.1)

// drums · hihat
const hihat = s("hh").struct("<[x!4]!98 [x!3 ~] [x ~@3 x ~@2 x ~@8] ~@3>").gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~ A ~ A ~ A ~@5
>`.pickRestart({
  A: "~@11 x ~@4",
})).gain(0.2)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct(`<
  ~@8 A ~@3 A ~@15 B ~@3 B ~@7 B ~@3 B ~@11 C ~@3 C ~@11 A ~@3 A ~@15 D ~ E ~ D ~@6
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@3 x", C: "~@15 x", D: "~@11 x ~@3 x", E: "~@11 x!2 ~@3",
})).gain(0.1)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@3 A ~@3 A ~@4 B ~@10 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@6 B C ~@2 B@2 ~@2 B ~@16 A B ~ B ~ B
  ~ D ~@3
>`.pickRestart({
  A: "x", B: "~@15 x", C: "~@3 x ~@12", D: "~@7 x ~@5 x ~@2",
})).gain(0.2)

// drums · ride
const ride = s("rd").struct(`<
  A@2 B C D A@4 E A@3 F A@3 C G A@6 B A@2 D E A@2 D H A C D A H A@2 H@2 A@2 H@2 A@3 H A H A H A H A B A F A@3 H A@2 I J
  K A K C L A@2 D A@5 K A@3 K A@6 C G C D C M N ~@3
>`.pickRestart({
// … 7 more lines

More by Cole Porter