Strudelify

That's Life

Frank Sinatra

KeyG majorTempo112 bpm
0:00/0:00
// That's Life — Frank Sinatra
// 112 bpm, 12/8, key G 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 (12/8 at bar 1, 6/8 at bar 51, 12/8 at bar 52) 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 57 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(112/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.

// chords · rock organ · "tk1"
const rock_organ = note("<A B C D E F@2 G@2 H I@2 J@5 K@2 L M@6 N O ~@8 M@6 N P Q@4 R@3 ~ S T U@3>".pickRestart({
  A: "~@6 [b5,d6]@2 g5@2 [c6,e6] ~ [b5,d6]@2 g5@2 [c6,e6] ~ [b5,d6]@2 g5@2 [c6,e6] ~, ~@6 a#5 ~@5 a#5 ~@5 a#5 ~@5", // Bm C Bm C Bm C
  B: "[a#5,b5,d6] ~ [b5,d6] g5 d5@2 [a#4,c#5]@4 [a4,c5]@13 ~", // A# Bm A#m Am
  C: "~@2 [c#6,d6,g6] ~ [d6,g6] ~ [c#6,d6,g6] ~ [d6,g6] ~ [c#6,g6] ~ g6@2 [c#6,d6,g6] ~ [d6,g6] ~ [c#6,d6,g6] ~ [d6,g6]@2 [c#6,g6] ~, ~@10 d6@2 d6 ~@9 d6@2", // G G5 G G5 C#dim G G5 G …
  D: "[d6,f6]@2 g5@2 [d6,f6] ~ [c6,e6]@2 g5@2 [b5,d6]@3 ~ [b5,d6] ~ [c6,e6] ~ [a#5,b5,d6] g5 e5 d#5 d5 c5, ~@10 a#5 ~@13", // Dm C Bm C A#
  E: "[b4,d5], a#4 ~@23", // Bm
  F: "[~@11 f#5 ~ f#5 b5@5 ~ [a#5,b5] ~ [b5,d6]@2 a5 g5 ~@12 [a#5,b5,d6] ~ [b5,d6]@2 a5 g5 e5@2 g5@2, b4@23 ~, [a4,d#5]@23 ~@25, f#4@21 ~@3 [g4,d5]@22 ~@2, ~@12 a5@2 ~@6 d6@2 a#5 ~@3 e5@17 ~@5]/2", // Bmaj7 Bm A# Bm Adim G5
  G: "[[e5,a5] g5 e5@2 g5@7 ~@3 [c#6,e6] ~ [c#6,e6] ~ [c#6,e6] [b5,d6] [a5,c#6]@4 [d5,d6]@12 [d#5,b5]@12, g4@16 ~@2 a4@5 ~, [a4,c#5]@11 ~ b4@4 ~@2 [f#4,b4]@4 ~@2, ~@12 e5@12 ~@12 [a5,a#5] ~@11]/2", // A5 C#m Bm A D G#m A B5 …
  H: "~ a5 g5 a5 g5 a5 g5 a5 g5 a5 g5 a5, b4, [g4,e5]@11 ~", // C
  I: "[~@12 c#6@2 e6@2 ~@2 c#5@6 d6@3 ~ d6@2 ~@2 [g#5,a5,d6] ~ [a5,d6] ~ [a5,d6] ~ d6@2 a5 ~ [g#5,a5] ~ a5 ~ [c5,a5,d6]@2, [g4,a4,e5]@21 ~@3 [f#4,d5]@22 ~@2, c#5@17 ~@7 g#5 ~@5 [a4,c5]@16 ~@2, ~@12 c6 ~@3 a5@14 ~@8 a5 ~ d6@5 ~@3]/2", // D D5 Amaj7 D7 A7 D Am
  J: "[~@6 [b5,d6] g5 [c6,e6] g5 [b5,d6]@2 g5@6 ~@2 e5@2 g5 ~@7 [a5,a#5] ~@7 d6@3 ~ b5@2 a5@2 ~@4 g5@11 ~ [a#5,b5,d6] ~ b5@2 a5 g5 e5@2 g5@2 a5 g5 e5@2 ~@14 c#5@3 ~@3 [d5,b5]@10 ~@2 [f#4,a4,b4]@8 ~@4, [g4,d5]@22 ~@2 [f#4,a4]@18 a#5 ~@3 g5@4 ~@22 a4@21 ~@3 b4@7 ~@5 [d#5,b5]@12, b4@17 ~ b4@27 ~@3 [g4,b4]@22 ~@2 g4@32 ~@16, ~@10 a#5 ~@13 d#5@24 e5@18 ~@4 c#5@8 e5@18 a#5 ~@23, ~@30 b5@11 ~ d6@4 ~@18 d6 ~@11 g5@20 d6@12 ~@12]/5", // Bm C Bm A#maj7 A# G B7 G5 …
  K: "[~@2 e6@2 g6 ~ [e6,g6]@2 d6@2 ~@2 [b5,d6]@2 g5@2 e5@2 ~@6 [a4,c#5]@12 ~ a4@7 ~@4, b4@2 ~ c5, g4@22 ~@2 g4@21 ~@3, e5@5 ~ [e5,g5]@10, ~@2 d6 ~@3 d#6 ~@5 a#5 ~@35]/2", // Em Bm A Em
  L: "~@12 [b5,d6] g5 [c6,e6] g5 [a#5,b5,d6] g5 e5 d#5 d5 c#5 c5 a#4, [g4,b4,d5]@3 ~", // Bm C A# G
  M: "[d5@12 d#5@5 f4@7 g4@15 b4@2 ~@24 b4@7, g4@30 ~@4 e5@105 ~@5, b4@20 ~@4 b4@24 c5@48 c#5@43 ~@5, ~@41 g5@31, ~@41 a4@24 g4@5 ~@2]/6",
  N: "[f#4,c5,d5,f#5]@2 ~@10 [f#4,a4,c5,d5,f#5,a5]@3 ~@9, a4 ~@23", // D7
  O: "[f#4,a4,c5,d5,f#5,a5]@3 ~@7 [f#4,a4,d5,f#5,a5]@13 ~, ~@6 c5@17 ~", // D7 D
  P: "[g4,a#4,c#5,d#5,g5,a#5]@3 ~@7 [g4,a#4,d#5,g5,a#5]@13 ~, ~@6 c#5@17 ~", // D#7 D#
  Q: "[d#5@24 ~@6 [f#6,c7] g6 ~ [d#6,g6] e6 ~ [f#6,c7] g6 ~ [d#6,g6] e6 ~ [g6,a#6]@6 [g#4,f5]@22 ~@2 [d5,f5,d6]@24, c5@72 g#4@19 ~@5, c6@31 ~ c6@2 ~ c6@2 ~ c6@2 ~ c6@32 ~@23, g#4@21 ~@3 [g4,e5]@22 ~@2 g#6@47 ~, ~@2 f6 ~]/4", // F#dim D# F#dim D# Gm C# Dm C
  R: "[[d#5,d#6]@6 [g4,e5]@5 ~ [c6,f6]@5 [g#4,d5,f5,d6,g#6]@10 ~@9, c6@22 ~@2 [g#4,f5]@7 ~@41, g#4@3 ~ c5@7 ~@13, ~ e6 ~@4]/3", // D# C F5 Ddim C#
  S: "~@12 [g#3,d#4,c5,d#5,f5,g#5]@6 [c5,d#5,f5] ~@5, ~@9 g#5 ~@2", // Fm7 F7
  T: "[g#4,c#5,d#5,f#5,g#5]@6 [c#5,d#5,f#5,g#5] ~@3 g#4 ~ [e4,b4,d5,e5,g#5]@6 [b4,g#5]@2 ~@2 e4 ~, b3@10 ~@8 [d5,e5] ~@5", // G#sus4 C#sus4 E7 E Dsus2
  U: "[[d#4,a#4,c#5,d#5,g#5]@2 ~@4 [a3,e4,c#5,d#5,g#5]@27 ~@3 [c5,d#5,f5,g#5]@30 [c6,d#6,f6,g#6]@5 ~, ~ [g#3,d#4]]/3", // D#sus4 Amaj7 Fm7 G#5
})).s("gm_rock_organ").gain(0.33)

// bass · acoustic bass · "tk2"
const bass = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB M N O P Q R AC AD U V W X Y Z AA AE AF AG AH AI AJ AK AL@3
  AM AN@3
>`.pickRestart({
  A: "g2@7 ~ b2@2 g2@2 e2@7 ~ g2@2 e2@2", B: "a1@8 ~@2 a1@2 d2@7 ~ d2@2 f#2@2", C: "g2@4 b2 g2 e2@3 ~ g2 e2",
  D: "a1@8 ~@2 a1@2 d2@5 ~@3 d2@2 f#2@2", E: "g2@7 ~@3 d2@2 g2@9 ~ g2@2", F: "f#2@4 ~ f#2 b1@4 ~ b1",
  G: "e2@9 ~ b1@2 e1@6 ~@2 e2@2 b1@2", H: "a1@7 ~@3 e2@2 a1@7 ~ a1@2 c#2@2", I: "d2@6 ~@2 g2@2 d2@2 b1@7 ~@3 b1@2",
  J: "e2@5 b1 e1@4 ~ e1", K: "a1@8 ~@2 e2@2 a1@7 ~@3 a1@2", L: "d2@7 ~@3 a2@2 d2@8 ~@2 d2@2",
  M: "g2@9 ~ d2@2 g1@7 ~ g1@2 a1@2", N: "b1@8 ~@2 f#2@2 b1@9 ~ b1@2", O: "e2@10 b1@2 e1@7 ~ e2@2 b1@2",
  P: "a1@4 ~ e2 a1@3 ~ a1 c#2", Q: "d2@8 g2@2 d2@2 b1@7 ~@3 b1@2", R: "e2@9 ~ b1@2 e1@8 ~@2 e1@2",
  S: "a1@4 ~ a1 d2@4 ~ d2", T: "g1 d2 g2 d2", U: "g2@2 d2 b1@3 d2@3 f2@3", V: "g2@3 ~ g2@2 b1@6 d2@5 ~ g2@2 f2@2 d2@2",
  W: "c2@4 ~@2 c2@3 ~ c2@2 g2@4 ~@2 g2@6", X: "c2@6 g2@6 e2@2 ~@2 e2@2 c2@3 ~ c2@2",
  Y: "a1@4 e2@2 a1@3 ~ a1@2 c#2@2 ~@2 c#2@2 e2@2 ~@2 e2@2", Z: "a2@3 e2@3 a2@2 e2 c#2@2 a1",
  AA: "d2@3 ~@3 a2@6 d2@3 ~@3 a2@4 ~@2", AB: "d2@3 ~@3 a2@3 ~ d2@5 ~ d2 ~ d2@4 f#2@2", AC: "a1@4 ~ a1 d2@3 d2@3",
  AD: "g1@2 ~@2 a#2@2 a2@3 ~ g#2@2 g2@3 ~@9", AE: "d#2@3 ~@3 a#2@3 ~ d#2@5 ~ d#2 ~ d#2@4 g2@2",
  AF: "g#2@4 ~@2 d#2@3 ~@3 g#2@6 ~@2 d#2@2 c2@2", AG: "g2@4 ~ g2 c2@2 ~ e2@2 ~", AH: "f2@3 ~@2 c2 f2@3 ~@2 f2",
  AI: "a#1@6 ~@4 f2@2 a#1@5 ~ d2@6", AJ: "d#2@4 ~ d#2 c2@2 ~ c2 e2 g2", AK: "f2@3 ~@3 f2@2 ~@2 a#1@14",
  AL: "[~@6 a#1@12 d#2@11 ~ g#1@2 ~ g#1@2 ~]/3", AM: "b1@4 ~@2 b1@4 ~@2 e2@4 ~@2 e2@5 ~",
  AN: "[d#2@2 ~@4 a1@26 ~@4 g#1@29 ~ g#1@5 ~]/3",
})).s("gm_acoustic_bass").gain(0.38)

// chords · piano · "tk3"
const piano = note("<~@28 A B C@2 D E@2 F ~@16 G H I J K>".pickRestart({
  A: "e4@12 ~@2 [g4,a4] a#4 b4!2 d5 e5 ~ g5@2 ~, [g3,b3]@5 ~, d4@9 ~@3 d4@8 ~@4", // Gsus2 G
  B: "f#5@2 ~@2 [b3,b4]@4 d#5@3 a4 [a3,b3]@8 ~@4, ~@4 [f#3,d#4]@6 ~ [f#3,d#4]@9 ~@4, ~@12 b4@11 ~, ~@12 a#4 ~@11", // B Asus2 D#m
  C: "[[g3,b3,e4]@11 ~ [g3,b3,e4,g5] ~ [a#5,b5] ~ g5 ~ e5@2 ~@2 b3 ~ c#4@6 ~@2 a4 ~@3 [g3,a4]@5 [b4,d5] ~@2 [a4,e5]@3 ~, ~@14 [g3,e4]@8 ~@2 [g3,e4]@10 c#4@9 ~ c#4 ~@3, ~@14 b3@5 ~ g5@11 a3@4 ~ e4@12, ~@9 c#5 ~@2]/2", // Em Bmaj7 Gsus2 Bm A5 C
  D: "~@6 [g3,b3]@3 ~@3 [f#3,a3,b3]@8 ~@4, d5@3 ~@5, ~@6 d4@5 ~ d#4@11 ~", // G B7
  E: "[[g3,b3] ~ a#4 b4 d5!2 e5 ~ g5 a5 e5 g5 e5 d5 ~ a#5 b5 g5 e5 ~ a5@2 ~@2 [g3,a3,c#4,e4]@9 ~@9 [g4,c5]@4 ~@2, e4@22 g5@14 [g3,c4,e4]@9 ~@3, ~@42 a3 ~@5]/2", // G A7 C5 C
  F: "[g3,b3,d4] ~@11", G: "~@18 b4@2 c5@2 [c5,d#5] ~, ~@9 d#5@2 ~",
  H: "[b4,d#5]@2 [b4,d#5] ~ [b4,d#5] ~ [b4,d#5] ~ [b4,d#5] ~ [b4,d#5] ~ [b4,d5] ~ [b4,d5] ~ [b4,d5] ~ d5@2 b4 ~ b4@2, ~@18 b4 ~@3 d5 ~", // B Bm
  I: "[b4,d#5] ~@7 c#4 ~ g#4 ~ c#5 d#5 g#5 ~ c#6 ~ d#6 g#6 c#6 d#6 c#6 g#5, ~@7 g#3@5 ~@12, ~@9 d#4@2 ~@4 g#5@2 ~@3 g#6@2 ~@2", // B
  J: "~ d#6 g#5 c#6@9 ~ c4@2 d#4@2 f4 b4 [c5,d#5] f5 b4 ~ [c5,d#5], ~@3 g#3 ~@2", // Cm
  K: "f5 ~ d#5 f5 [b5,c6] d#6 f6 ~@2 c6 [d#6,f6] g#6 f6 g#6 f6 g#6 [f6,g#6] ~ g#6 ~@5, g#4 ~@11, ~ c5@2 ~@5 g#5@2 ~@14", // Cmaj7 D#sus2 Fm
})).s("gm_piano").gain(0.38)

// chords · electric guitar clean · "tk6"
const electric_guitar_clean = note("<A B C D E F G H I J@2 K L M N O P Q R S ~@37>".pickRestart({
  A: "g3@4 g3@2 [b3,d4,g4] ~@5 [e3,g3]@4 ~@2 [g3,b3,e4] ~@5, ~@4 e3 ~", // G Em
  B: "[e3,g3]@4 ~@2 [e3,g3,c4,e4]@2 ~@4 f#3@6 [f#3,a3,d4,f#4] ~@5, ~@3 a3 ~@2", // Em C D
  C: "g3@6 [g3,b3,d4,g4] ~@5 g3@6 [g3,b3,e4] ~@5, ~@3 e3@2 ~", // G Em
  D: "e3@6 [c4,e4] ~@5 a3@6 [f#3,a3,d4,f#4]@2 ~@4, g3@9 ~@3 f#3@4 ~@8", // C D
  E: "~@4 g3@2 [d4,g4] ~@5 [g3,b3]@6 [b3,d4,g4] ~ d3 ~@3, b3@7 ~@17", // G5 G
  F: "[f#3,a3,d#4]@6 [a3,f#4] ~@5 [a3,d#4]@4 ~@2 [f#3,a3,d#4,f#4] ~@5", // D#dim D Adim D#dim
  G: "g3@6 [e3,g3,b3,e4] ~@5 [e3,g3,b3]@3 ~@3 [g3,b3,e4]@2 ~@4", // Em
  H: "c#4@6 [e3,g3,c#4,e4] ~@5 [e3,g3]@6 [g3,c#4,e4] ~@5, g3 ~@5", // C#dim Em C#dim
  I: "b3@5 ~ [b3,d4,g4]@2 ~@4 a3@6 [a3,d#4,f#4] ~@5, ~@3 d#4 ~@2", // G D#dim
  J: "[[g3,b3]@4 ~@2 [g3,b3,e4] ~@5 e3@6 [e3,g3,b3,e4] ~@5 g3@4 e3@2 [g3,c#4,e4] ~@11 [g3,c#4,e4]@2 ~@4, e3@6 ~@6 g3@4 ~@6 a2@7 ~@19, ~@12 c#4 ~@11]/2", // G Em C#dim
  K: "a3@6 [a3,d4,f#4] ~@5 [a3,d4]@5 ~ [a3,d4,f#4]@2 ~@4, f#3@2 ~ f#3@2 ~, d4 ~@5", // D D5 D
  L: "[g3,b3]@4 ~@2 [g3,b3,d4,g4] ~@9 b3@2 [b3,d4,g4]@2 ~@4, ~@3 g3@2 ~", // G
  M: "f#3@5 ~ [f#3,a3,d#4,f#4]@2 ~@4 [f#3,a3]@6 [a3,d#4,f#4] ~@5", // D#dim F#m D#dim
  N: "e3@6 [e3,g3,b3,e4]@2 ~@4 [g3,b3]@3 ~@3 [e3,g3,b3,e4] ~@5, ~@2 e3 ~", // Em G Em
  O: "e3@6 [g3,c#4,e4] ~@5 [e3,g3]@2 ~@4 [e3,g3,c#4,e4]@2 ~@4, g3 ~@5", // C#dim Em C#dim
  P: "d4@3 ~@3 [b3,d4,g4]@2 ~@4 a3@6 [a3,d#4,f#4]@2 ~@4", // G D#dim
  Q: "g3@4 ~@2 [e3,g3,b3,e4] ~@5 e3@6 [e3,g3,b3,e4]@2 ~@4, ~@6 g3 ~@5", // Em
  R: "[e3,c#4]@4 ~@2 [g3,c#4,e4] ~@11 [g3,a3,d4]@2 ~@4, g3 ~@3, ~ e3 ~@4", // C#m C#dim Gsus2
  S: "f#3@2 ~ [b3,d4,g4] ~@2 g3@3 [g3,b3,d4,g4] ~@2, ~@6 b3 ~@5", // G
})).s("gm_electric_guitar_clean").gain(0.33).pan(0.8)

// other · tenor sax · "tk7"
const tenor_sax = note("<~@12 A B C D E ~@3 F G H I J K L M ~@4 N O ~ P F G H I J K L Q ~@13>".pickRestart({
  A: "g3@2 [a#3,b3] ~@3 g3 ~ [a#3,b3] ~@3 g3@2 [a#3,b3] ~@3 g3@2 [a#3,b3] ~@3", // Bmaj7
  B: "f#3 ~ [a#3,b3] ~@3 f#3 ~ [a#3,b3] ~@3 f#3@2 [a#3,b3] ~@3 f#3@2 [a#3,b3] ~@3", // Bmaj7
  C: "g3@2 b3@2 ~@2 g3@2 [a#3,b3] ~@3 g3@2 [a#3,b3] ~@3 g3@2 [a#3,b3] ~@3, ~@2 a#3 ~@21", // Bmaj7
  D: "g3@2 [c4,c#4] ~@3 g3@2 c#4@2 ~@2 g3@2 [c4,c#4] ~@3 g3@2 [c4,c#4] ~@3, ~@8 c4 ~@15", // C#maj7
  E: "b3@3 ~ [g3,a3] [e3,f3] [c3,d3] [g2,a2,b2] [e2,f2] ~@15, a#3 ~@23", F: "g2 ~ g2 ~ g2 ~ g2 ~",
  G: "g2@2 ~@4 g2@3 ~ g2@13 ~", H: "c2 ~ c2 ~ c2 ~ c2 ~", I: "c2@3 ~@3 c2@3 ~ c2@13 ~",
  J: "a2@2 ~@4 a2@2 ~@4 a2@2 ~@4 a2@3 ~@3", K: "a2@2 ~@4 a2@3 ~ a2@14", L: "d2 ~@3 d2 ~@3", M: "d2 ~ d2@6", N: "b3 a3",
  O: "g3", P: "~@4 a#2@2 a2@4 g#2@2 g2@3 ~@9", Q: "d#2 ~ d#2@6",
})).s("gm_tenor_sax").gain(0.44).pan(0.4)

// other · baritone sax · "tk8"
const baritone_sax = note("<~@12 A B C D E ~@3 F G H I J K L M ~@8 F G H I J K L N ~@13>".pickRestart({
  A: "g2 ~ g2 ~ g2 ~ g2 ~", B: "f#2@3 ~@3 f#2@3 ~@3 b1@3 ~@3 b1@4 ~@2", C: "e2 ~ e2 ~ e2 ~ e2 ~",
  D: "a2@3 ~@3 a2@3 ~@3 a2@3 ~@3 a2@2 ~@4", E: "g2 ~@3", F: "g2@3 ~@3 g2@3 ~@3 g2@2 ~@4 g2@2 ~@4",
  G: "g2@2 ~@4 g2@3 ~ g2@12 ~@2", H: "c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2", I: "c2@2 ~@4 c2@3 ~ c2@14",
  J: "a2 ~@2 a2 ~@2 a2 ~@2 a2 ~@2", K: "a2 ~@2 a2 ~ a2@7", L: "d2@2 ~@10 d2@3 ~@9", M: "d2@2 ~@4 d2@3 ~ d2@13 ~",
  N: "d#2@2 ~@4 d#2@3 ~ d#2@13 ~",
})).s("gm_baritone_sax").gain(0.44).pan(0.3)

// chords · brass section · "tk9"
const brass_section = note(`<
  ~@12 A B C D E F G H A I J K L M N O P ~@3 Q R ~ S A I J K L M N T U V W X Y Z@4 AA AB@3
>`.pickRestart({
  A: "~ d4 ~@2 d4 ~@2 d4 ~@2 d4 ~, ~@2 c#4 ~@5 c#4 ~@5 c#4 ~@5 c#4 ~@3",
  B: "~ d#4 ~@2 d#4 ~@2 d#4 ~@2 d#4 ~, ~@2 d4 ~@5 d4 ~@5 d4 ~@5 d4 ~@3",
  C: "~ e4 ~@2 e4 ~@2 e4 ~@2 e4 ~, ~@2 d#4 ~@5 d#4 ~@5 d#4 ~@5 d#4 ~@3",
  D: "~@2 e4@2 ~@4 e4@2 ~@4 [d#4,e4] ~@5 [d#4,e4] ~@3, ~@2 d#4 ~@5 d#4 ~@15", // Emaj7
  E: "[d4,f4] ~ [c4,f4] [c4,d4,e4] [g3,a3,b3] [d3,e3,f3] [a2,b2,c3] ~@17, g4 ~@11", // Dm F5 C G Dm Am
  F: "[d3,d#3,d4,d#4] ~@3 [g3,g4]@2 [a3,a4] [e3,e4] [g3,g4]@15 ~, [e3,e4] ~@5", G: "[c#4,g4] [c4,e4,g4], e4@5 ~@7",
  H: "[b3,g4]@2 ~@2 [a3,e4,g4]@2 [a3,e4,g4]@4 [a3,e4,g4] ~@13, e4 ~@23", I: "d#4 ~@2 d#4@2 e4@7",
  J: "~@2 e4@2 ~@4 e4@2 ~@4 e4@2 ~@4 [d#4,e4] ~@3, ~@2 d#4 ~@5 d#4 ~@5 d#4 ~@9", K: "e4 ~@2 e4@2 g4@7",
  L: "~ g4 ~@2 g4 ~@2 g4 ~@2 g4 ~, ~@2 f#4 ~@5 f#4 ~@5 f#4 ~@5 f#4 ~@3", M: "g4 ~@2 g4@2 b4@7", N: "a4 ~@5 a4 ~@5",
  O: "a4@2 ~@8 d5@9 ~ a#4@2 b4@2", P: "g4 ~@7", Q: "b3@11 ~ a3@12", R: "g3", S: "~@4 d5@2 g5@3 ~ g5@2 g5 ~@11",
  T: "a#4@2 ~@8 d#5@9 ~ b4@2 c5@2", U: "g#4 ~@11", V: "[g4,a#4,c5,e5]@2 ~@6 [g4,a#4,c5,e5] ~@2 [g4,a#4,e5], ~@22 c5 ~",
  W: "[g#4,c5,f5]@3 ~@9 [g#4,c5,f5]@2 ~@4 [g#4,c5,f5]@2 ~@4", X: "[a#4,d5,f5,g#5]@11 ~ [c5,f5]@4 ~@5 [c5,f5]@2 ~",
  Y: "[g#4,d#5]@3 ~@7 [g#4,d#5]@2 [g4,e5]@3 ~@9, ~@10 c5@5 ~@9", // G#5 C
  Z: "[[g#4,c5,f5]@3 ~@3 [g#4,c5]@3 ~ [a#4,d5,g#5]@18 ~@8 f5@20 ~@4 f5@21 ~@3 [d#4,d#5]@11 ~, ~@3 f5@11 ~@34]/4", // Fm G# A#7 D#
  AA: "[g#4,g#5] [e4,e5]", AB: "[[g#4,g#5]@2 ~@4 [g#4,g#5]@30 [d#4,d#5]@30 [g#4,g#5]@5 ~]/3",
})).s("gm_brass_section").gain(0.44).pan(0.6)

// chords · trumpet · "tk11"
const trumpet = note("<~@18 A B C D E F G H I J ~@7 K C D E F G H I L ~ M N O P Q@4 ~@4>".pickRestart({
  A: "c#4 c4, g3@10 ~@2 g3@9 ~@3", B: "[g3,b3]@3 ~ [a3,b3]@2 [a3,b3]@3 ~ [a3,b3] ~@13",
  C: "~@2 [a3,d4]@2 ~@4 [a3,d4]@2 ~@4 [c#4,d4] ~@5 [c#4,d4] ~@3, ~@2 c#4 ~@5 c#4 ~@5 a3@2 ~@4 a3@2 ~@2", // D5 Dmaj7
  D: "[a3,d#4]@2 ~@4 [a3,d#4]@4 ~ a3@12 ~, ~@5 e4@7", // Adim
  E: "~ [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~, ~@8 d#4 ~@5 d#4 ~@5 d#4 ~@3", // E5
  F: "b3 ~@2 [b3,e4]@2 [c4,g4]@7, e4 ~@23", G: "~ [c#4,g4] ~@2 [c#4,g4] ~@2 [c#4,g4] ~@2 c#4 ~, ~@20 g4 ~@3",
  H: "[c#4,g4] ~@2 [c#4,g4]@2 b4@7, ~@10 e4@11 ~@3", I: "[e4,a4] ~@5 [e4,a4] ~@5", J: "[e4,a4] ~@4 [f#4,b4,d5]@7",
  K: "~@3 [c4,e4,g5]@2 [c4,d#4] [b3,d4,g5] ~@5, ~@4 [f4,d5]@2 ~@4 g5 ~@13, ~@5 d4@2 ~@17", // C Cm G Dm
  L: "[f4,a#4] ~@4 [g4,c5,d#5]@7", M: "e5@2 ~@6 e5 ~@2 e5", N: "f5@3 ~@9 f5@2 ~@4 f5@2 ~@4", O: "g#5@6 f5@4 ~ f5",
  P: "d#5@7 ~@5 e5@6 ~@6", Q: "[f5@3 ~@3 f5@4 g#5@16 ~@10 [b3,d4]@22 ~@2 [a#3,c#4]@22 ~@14]/4",
})).s("gm_trumpet").gain(0.44)

// chords · trombone · "tk12"
const trombone = note("<~@18 A B C D E F G H I J ~@6 K ~ C D E F G H I L ~@6 M@3 N O@3>".pickRestart({
  A: "[a2,e3]@6 [c3,e3]@5 ~", B: "[g2,d3]@3 ~ [g2,d3]@2 [g2,d3]@3 ~ [g2,d3] ~@13",
  C: "~@2 [f3,b3]@2 ~@4 [f3,b3]@2 ~@4 b3@2 ~@4 [f3,b3] ~@3, ~@14 f3 ~@9", D: "[f3,b3] ~@5 [f3,b3]@4 [f3,b3]@13 ~",
  E: "~@2 c4@2 ~@4 [g3,c4] ~@5 [g3,c4] ~@5 g3@2 ~@2, ~@2 g3 ~@17 c4 ~@3", F: "[g3,c4] ~@5 [g3,c4]@4 [a3,e4]@13 ~",
  G: "~@2 [a3,e4] ~@5 a3@2 ~@4 a3@2 ~@4 a3@2 ~@2, ~@8 e4 ~@5 e4 ~@5 e4 ~@3", // A5
  H: "[a3,e4] ~@5 [a3,e4]@3 ~ [c#4,g4]@11 ~@3", I: "[c4,f#4] ~@5 [c4,f#4] ~@5", J: "[c4,f#4] ~@4 [c4,e4]@7",
  K: "~@4 [a3,c#4,e4,g4] ~@11 [a3,c4,e4,g4] ~@7", L: "[c#4,g4] ~@4 [c#4,f4]@7",
  M: "[~@12 [g#3,f4]@21 ~@3 [g#3,f4]@22 ~@2 [g#3,c4,d#4,f4]@10 ~@2]/3", // C# Fm7
  N: "[b3,d#4,f#4,g#4]@9 ~@3 [b3,d4,e4,g#4]@10 ~@2", // G#m7 E7
  O: "[[c#4,d#4,g#4] ~@2 [c#4,d#4,g#4]@14 ~ [c4,d#4,f4,g#4]@15 ~@3]/3", // C#sus2 Fm7
})).s("gm_trombone").gain(0.44).pan(0.6)

// chords · string ensemble 1 · "tk13"
const string_ensemble_1 = note("<~@18 A B ~@8 C@7 D@7 ~@2 E@4 F@3 ~@6>".pickRestart({
  A: "[c#5,g5]@12 [g4,a4,c5]@11 ~, [a4,e5]@8 ~@4 e5@9 ~@3", B: "[b4,d5,e5,g5]@2 ~ [b4,d5,e5,g5] ~@8",
  C: "[[d4,d5]@24 [d#4,d#5]@24 [g3,e5]@22 f5 f#5 ~ c#4@21 ~@2 [d4,d5]@12 [d#4,d#5]@12 g3@24 a3@12 g3@12, b3@70 ~@2 [a3,g5]@23 g3@8 ~@5 f#3@8 ~@4 [e4,e5]@48, g3@20 ~@4 f#3@22 ~@2 e4@48 b3@48 c#4@9 ~@3 c4@9 ~@3]/7", // D D# C D D# A7 E
  D: "[[b3,d4,d5,g5]@3 ~@9 [g2,g3] [a2,a3,b3] [b2,c4] [c3,d3,d4] [e3,e4] [f#3,f#4,g4] [g3,a3,a4] [b3,b4] [c4,c5] [d4,e4,d5] [f#4,e5,f#5] [g4,g5]@145]/7", // G Asus2 Cmaj7 Csus2 E Gmaj7 Gsus2 B …
  E: "[d#6@24 e6@6 c7 f6 e6 f6 c7 f6 e6 f6 c7 f6 e6 f6 c7 f6 e6 f6 c7 a#6 ~@24 a#5@24, c6@36 d6@11 ~, ~@48 [f6,g#6]@47 ~]/4", // Fm
  F: "[[g#5,d#6]@6 [g5,e6]@6 f6@5 [a#5,d6,g#6]@10 ~@9, c6@17 ~@19, ~@4 g#5@5 ~@3]/3", // G#5 C A#7
})).s("gm_string_ensemble_1").gain(0.27)

// drums · kick
const kick = s("bd").struct(`<
  A B A C B@2 C A@5 B@2 C A@5 B A@3 B A D E B@2 C A@4 F B A@3 B A D E A@2 B G H I ~@2 J K L M N
>`.pickRestart({
  A: "x ~@4 x!2 ~@4 x", B: "x ~@4 x!2 ~@5", C: "x ~@4 x!2 ~@3 x!2", D: "~ x", E: "x ~ x ~@2 x!2 ~ x!2 ~ x",
  F: "x ~ x!2 ~ x!2 ~@5", G: "x ~ x ~@2 x!2 ~@5", H: "x ~ x ~@2 x!2 ~ x ~@2 x", I: "x ~ x ~@2 x ~@6", J: "~@6 x ~@4 x",
  K: "x ~@5 x ~@4 x", L: "x", M: "~@7 x ~ x ~ x", N: "~ x ~@3 x ~@3 x ~@8 x ~@5",
})).gain(0.44)

// drums · rim
const rim = s("rim").struct("<~@4 [~ x ~ x]!16 ~@8 [~ x ~ x]!7 ~@22>").gain(0.44)

// drums · snare
const snare = s("sd").struct("<A B A C ~@16 A@6 D E ~@7 F A@6 D E A@3 G A H ~@2 I A H J K>".pickRestart({
  A: "~ x ~ x", B: "~@6 x ~@8 x!5 ~@4", C: "~@3 x ~@3 x!3 ~@2", D: "x!2", E: "~@3 x ~@4 x!2 ~@2",
  F: "~@2 x!2 ~ x!2 ~ x!4", G: "~@6 x ~@9 x!2 ~ x ~@4", H: "~ x ~@2", I: "~@3 x", J: "~@14 x!3 ~ x!2 ~@2 x!2",
  K: "x ~ x!2 ~@2 x!2 ~ x!2 ~@13",
})).gain(0.49)

// drums · low tom
const low_tom = s("lt").struct("<~ A ~@24 B ~@15 B ~@4 A ~@7 C D>".pickRestart({
  A: "~@22 x!2", B: "~@4 x!2 ~@10 x!2 ~@6", C: "~@17 x ~@2 x ~@3", D: "x ~@2 x ~@4 x ~ x ~@7 x ~@5",
})).gain(0.33)

// drums · mid tom
const mid_tom = s("mt").struct("<~ A ~@24 B ~@15 B ~@4 C ~@7 D E>".pickRestart({
// … 19 more lines

More by Frank Sinatra