Strudelify
Hard to Say I'm Sorry cover art

Hard to Say I'm Sorry

Chicago

KeyC majorTempo140 bpm
0:00/0:00
// Hard to Say I'm Sorry — Chicago
// 140 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 131 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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 · fretless bass · "ACOU BASS"
const bass = note(`<
  A B C D E F G@2 ~@20 B H I A B J G@2 A B K D E F I L A B K D E F M@4 N@2 O P Q@2 B R S@2 O T U@2 B V W X Y Z AA AB AC
  AD AE AB AF Z AE AG AH@3 AI@2 AJ@8 AK@6 AL@7 AM@8 AN@6 AO@4 ~@3
>`.pickRestart({
  A: "c2", B: "a1", C: "b1@12 a1@11 ~", D: "g#1", E: "a1 g1", F: "f#1", G: "[g1@47 ~]/2", H: "d2@23 ~", I: "g1",
  J: "d2", K: "b1 a1", L: "a1 b1", M: "[g1@47 ~]/4", N: "[c1@34 ~@2 c1@9 d1@3]/2", O: "e1@7 d1", P: "e1",
  Q: "[f1@34 ~@2 f1@5 ~ g1@6]/2", R: "g1@4 e1 d1@2 c#1", S: "[c1@7 d1]/2", T: "e1@8 ~ e1@3", U: "[f1@17 ~ f1@3 g1@3]/2",
  V: "g1@11 ~", W: "a1@6 e1 d#1", X: "d1@17 ~ f1@3 f#1@3", Y: "g1@8 ~ g1@3", Z: "c2 b1", AA: "a1@16 ~@2 e1@3 d#1@3",
  AB: "d1@6 f1 f#1", AC: "g1@7 f1", AD: "g1@5 f1 g1 g#1", AE: "a1@16 ~@2 e1@2 ~ d#1@3", AF: "g1@16 ~@2 g1@5 ~",
  AG: "d1@19 ~@3 f#1@2, ~@19 f1@5", AH: "[~@2 g1@51 ~@2 c2@17]/3", AI: "[~ b1@6 a1@24 b1@12 a1@5]/2",
  AJ: "[~@7 g#1@24 a1@12 g1@12 f#1@24 g1@24 a1@12 b1@12 c2@24 a1@24 b1@12 a1@5]/8",
  AK: "[~@7 g#1@24 a1@12 g1@12 f#1@24 g1@24 f1@24 d#2@17]/6",
  AL: "[~@7 c2@24 d2@12 c2@12 b1@24 c2@12 a#1@12 a1@24 a#1@22 ~@2 a#1@9 c2@8]/7",
  AM: "[~ d2@6 d#2@24 c2@24 d2@12 c2@12 b1@24 c2@11 ~ a#1@12 a1@24 a#1@21 ~@3 a#1@9 c2@8]/8",
  AN: "[~ d2@4 ~@2 d#2@24 c2@24 d2@12 c2@12 b1@24 c2@12 a#1@12 a1@12 g#1@5]/6", AO: "[~@7 g1@89]/4",
})).s("gm_fretless_bass").gain(0.22)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B@2 C D E F G H@2 I@2 J@2 K@2 L@6 M@2 N@4 O P@2 Q R@2 S@3 T U V W@2 X Y Q Z AA AB AC@6 AD@4 AE@2 O AF AG@2 AH@2 AI@4
  O AJ@2 AK AL@2 AM@3 AN AO AP O AQ AR@5 AS@8 AT@5 AU@8 AV@8 AW@3 AX@2 AY@8
>`.pickRestart({
  A: "g3@5 ~@2 e4, e4@7 ~, c4@3 c4, ~@5 g3@3",
  B: "[~@5 e4@4 ~@6 c4@6 ~@24 d4@3, f4@9 d4@12 d4@23 ~@4, ~@39 g3@8 ~, ~@42 b3@5 ~]/2",
  C: "~@6 d4@3 c4@11 ~ d4 ~ [b3,c4], e4@5 ~@7", D: "~@7 c4, ~ c4@20 ~@3, ~@15 e3@8 ~, ~@18 a3@5 ~",
  E: "~@2 c4 b3@2 a3@3, d4@5 ~@7", F: "[g3,c4,d4]!2", G: "[g3,b3,d4]@12 [g3,b3,d4]@11 ~",
  H: "[[g3,c4,e4]!2 [g3,c4,e4]!2, c3]/2", I: "[g3,c4,e4]!2",
  J: "[[g3,c4,e4]@12 [g3,c4,e4]@12 [g3,c4,e4]@11 [g3,c4,e4]@12 ~, c3@47 ~]/2", // C
  K: "[[e3,g3,b3]@11 ~ b3@11 ~ b3@12 [e3,g3,b3]@12, e2, ~@11 [e3,g3]@12 [e3,g3]@12 ~@13]/2", // Em
  L: "[[f3,a3,c4]@12 [f3,a3,c4]@12 [f3,a3,c4]@11 ~ [f2,f3,a3,c4]@5 ~ [b3,d4]@5 ~ [a3,c4]@12 [a3,c4,e4]@11 ~ [g3,d4]@11 [g3,b3,d4]@12 ~ [g3,e4]@12 [g3,c4,e4]@11 [g3,c4,e4]@12 [g3,c4,e4]@13, f2@35 ~@6 [g2,g3]@6 a2@24 g2@24 ~ c3@48, ~@47 e4@12 ~@12 b3@12 ~@12 c4@12 ~@37]/6", // F Bm Am G5 G C G
  M: "[[e3,g3,b3,d4]@2 [e3,g3,b3,d4]@2 [e3,g3,b3,d4]@2 ~ e2, e2@7 ~, ~@3 [e3,g3,b3,d4]]/2", // Em7
  N: "[[f3,a3,c4]@11 [f3,a3,c4]@12 ~ [f3,a3,c4]@11 [f2,f3,a3,c4]@6 [g2,g3,b3,d4]@6 ~ c4@12 [a3,c4,e4]@11 ~ [b3,d4]@11 [g3,b3,d4]@12 ~, f2@35 ~@12 [a3,e4]@12 ~@12 g2@24 ~, ~@48 a2@23 g3@12 ~@13]/4", // F G Am Bm G A5
  O: "[a3,c4,e4]!2, a2", // Am
  P: "[[d3,f3,a3,c4]@11 c4@13 [g3,c4,d4]@11 ~ g3@12, d2@35 [b3,d4]@13, ~@11 [d3,f3,a3]@25 ~@12, ~ g2]/2", // Dm7 Gsus4 Bm Dm
  Q: "[g3,c4,e4]!2, c3", // C
  R: "[[a3,c4,e4]@12 c4@11 ~ [d3,f3,a3]@12 [d3,f3,a3,c4]@12, a2@23 c4@12 ~@13, ~ [a3,e4] d2@2]/2", // Am Dm Dm7 A5
  S: "[[g3,c4,d4]@12 ~@12 [g3,b3,d4]@23 ~ [c4,e4]@12 ~@6 c3@6, g2@3 g2@5 c3@3 ~, ~@12 [g3,c4,d4]@13 ~@22 g3@12 ~ [g3,c4,e4]@12]/3", // Gsus4 G C Gsus4 C
  T: "[f3,a3,c4]@2 ~ a2, a2@3 ~, ~ [f3,a3,c4]", U: "[b2,g3,b3,d4] [a2,g3,b3,d4]",
  V: "[g#3,b3,e4]@2 ~ g#2, g#2@3 ~, ~ [g#3,b3,e4]", // E
  W: "[[a2,e3,a3,c4]@11 [g2,e3,a3,c4]@12 ~ [f#3,a3,d4]@6 ~@6 [f#3,a3,d4]@5 f#2@6 ~, ~@23 f#2@15 ~@10]/2", // Am Am7 D
  X: "[g3,c4,e4]@11 [g3,b3,d4]@13, g2", Y: "[a2,a3,c4,e4,g4] [b2,g3,b3,d4]", Z: "[f3,a3,c4]@12 [f3,a3,c4]@11 ~, a2",
  AA: "[b2,g3,b3,d4]@11 [a2,g3,b3,d4]@13", AB: "[g#3,b3,e4]!2, g#2",
  AC: "[[a2,e3,a3,c4]@12 [g2,e3,a3,c4]@11 ~ a3@11 ~ [a3,d4]@11 [g3,c4,d4]@12 ~ [g3,c4,d4]@12 [g3,b3,d4]@12 [g3,b3,d4]@12 [g3,c4,d4]@12 [g3,c4,d4]@12 [g3,b3,d4]@24, ~@23 f#2@24 g2@96 ~, ~@23 [f#3,d4]@12 f#3@12 ~@97]/6", // Am Am7 D5 Gsus4 G Gsus4 G D
  AD: "[[g3,c4,e4]@12 [g3,c4,e4]@12 [g3,c4,e4]@11 ~ [g3,c4]@11 ~ [e3,g3]@12 [e3,g3,b3]@12 [e3,g3,b3]@12 [e3,g3,b3]@11 ~, c3@47 ~ e2@48, ~@35 e4@11 ~ b3@12 ~@37]/4", // C C5 Em
  AE: "[[f3,a3,c4]@12 [f3,a3,c4]@12 [f3,a3,c4]@11 [f2,f3,a3,c4]@6 ~ [g2,d4]@6, f2@35 ~@6 [g3,b3]@5 ~@2]/2", // F G5 G
  AF: "[g3,b3,d4]!2, g2", AG: "[[g3,c4,e4]@11 ~ [g3,e4]@11 ~ [g3,c4]@11 [g3,c4,e4]@13, c3, ~@11 c4@12 e4@12 ~@13]/2",
  AH: "[[e3,g3,b3]@12 [e3,g3,b3,d4]@12 [e3,g3,b3,d4]@12 [e3,g3,b3,d4]@11 ~, e2@47 ~]/2", // Em Em7
  AI: "[[f3,a3,c4]@12 [f3,a3,c4]@12 [f3,a3,c4]@11 [f2,f3,a3,c4]@6 ~ [g3,b3,d4]@5 ~ [c4,e4]@11 ~ c4@11 ~ [g3,b3,d4]@12 [g3,b3,d4]@11 ~, f2@35 ~@6 g2@6 a3@12 [a3,e4]@12 g2@25, ~@2 a2 ~]/4", // F G C G A5
  AJ: "[[d3,f3,a3,c4]@6 ~@6 [d3,f3,a3,c4]@4 ~@8 [g3,c4,d4]@11 ~ [g3,b3,d4]@12, d2@35 ~@13, ~ g2]/2", // Dm7 Gsus4 G
  AK: "[c3,g3,c4,e4]@12 ~ b2@11, ~ [g3,c4,e4]", // C
  AL: "[[a3,c4,e4]@11 ~ [a3,c4,e4]@11 ~ [f3,a3,c4]@12 [d3,f3,a3,c4]@12, a2@23 d3@12 ~@13, ~ d2]/2", // Am F Dm7
  AM: "[[g3,c4,d4]@12 [g3,c4,d4]@12 [g3,b3,d4]@12 [g3,b3,d4]@11 ~@12 [a3,c4,e4]@12 ~, g2@47 [a3,c4,e4]@12 ~@13, ~@2 a2]/3", // Gsus4 G Am
  AN: "[f3,a3,d4]@11 ~ [f3,d4]@12, d2, ~@11 a3@12 ~", AO: "[g3,b3,d4]@11 [g3,b3,d4]@13, g2",
  AP: "[g3,c4,e4]@2 ~ b2, c3, ~ [g3,c4,e4]", AQ: "[f3,a3,d4]!2, d2",
  AR: "[~@2 [g3,b3]@14 [g3,b3,d4]@14 [g3,b3,d4,f4]@13 [g3,b3,d4,f4]@11 ~ [g3,c4,e4]@12 [g3,c4,e4]@12 [f3,a3,c4]@12 [f3,a3,c4]@11 ~ b2@11 [a2,g3,b3,d4]@6, ~ d4@14 ~@87 [g3,b3,d4]@12 ~@6, ~@2 g2@49 ~@4 c3@24 a2@24 ~@17]/5", // G G7 C F G
  AS: "[~@7 b3@12 [g#3,b3,e4]@12 [a2,e3,a3,c4]@12 [g2,e3,a3,c4]@12 [f#3,a3,d4]@12 [f#3,a3,d4]@12 [g3,c4,e4]@12 [g3,b3,d4]@12 [a2,a3,c4,e4,g4]@12 [b2,g3,b3,d4]@12 [g3,c4,e4]@12 [g3,c4,e4]@12 [a3,c4,e4]@12 [f3,a3,c4]@12 [b2,g3,b3,d4]@12 [a2,g3,b3,d4]@5, ~@6 g#2@25 ~@24 f#2@25 ~@71 a2@24 ~@17, ~@6 [g#3,e4]@12 ~@61 g2@25 ~@23 c3@24 ~@41]/8", // E Am Am7 D C G Am7 G …
  AT: "[~@7 [g#3,b3,e4]@12 [g#3,b3,e4]@11 ~ [e3,a3,c4]@12 [g2,e3,a3,c4]@12 [f#3,a3,d4]@12 [f#3,a3,d4]@12 [g3,c4,d4]@12 [g3,c4,d4]@12 [g3,c4,d4]@12 [g3,c4,d4]@5, ~@7 g#2@23 a2@13 ~@12 f#2@24 g2@24 f2@17]/5", // E Am Am7 D Gsus4
  AU: "[~@8 [a#3,d#4,g4]@11 ~@6 d#3@6 [g#3,c4,d#4,g4]@12 ~@6 c3@5 ~ d3@11 ~ c3@12 [g3,b3,d4]@11 ~@6 b2@6 ~ [c3,g3,d#4]@11 ~ [g3,c4,d#4]@11 [f3,a3,c4,d#4]@12 ~@6 a2@6 ~ [a#2,a#3,d#4,g4]@12 [a#2,a#3,d4,f4]@12 [a#2,a#3,d4,f4,a#4]@9 [c3,c4,d#4,g4,a#4]@8, ~@7 d#3@17 ~@7 c3@17 ~@6 [a#3,d4,f4]@12 [a#3,d4,f4]@12 ~@12 [g3,b3,d4]@12 c4@12 ~@24 f3@12 ~@42, ~@19 [a#3,d#4,g4]@12 ~@12 [g#3,c4,d#4,g4]@12 ~@24 b2@17 ~@18 a#2@12 a2@18 ~@48, ~@139 [a3,c4,d#4]@12 ~@41]/8", // D# G#maj7 G Cm F7 D# A# Cm7 …
  AV: "[~ [d3,a#3]@6 [a#3,d#4,g4]@12 ~@6 d#3@6 ~@12 [g#3,c4,d#4,g4]@6 c3@2 ~@4 [d3,a#3,d4,f4]@12 [c3,a#3,d4,f4]@11 ~ [g3,b3,d4]@11 ~@6 b2@6 [c3,g3,c4,d#4]@12 [a#2,g3,c4,d#4]@12 ~ [f3,a3,d#4]@12 ~@6 a2@6 [a#3,d#4,g4]@12 [a#3,d4,f4]@11 ~ [a#2,a#3,d4,f4,g#4]@9 [c3,c4,d#4,g4,a#4]@8, [d4,f4]@6 ~ d#3@18 ~@6 c3@18 ~@29 b2@18 ~@31 a2@18 ~@6 a#2@23 ~@18, ~@19 [a#3,d#4,g4]@13 ~@58 [g3,b3,d4]@11 ~@25 c4@12 ~ [f3,a3,c4,d#4]@12 ~@41]/8", // Gm D# G#maj7 A# G Cm Cm7 F7 …
  AW: "[~ [d3,a#3,d4,f4]@6 [a#3,d#4,g4]@12 ~@6 d#3@6 [c4,d#4,g4]@12 ~@6 c3@6 [d3,a#3,f4]@12 [c3,a#3,f4]@5, ~@7 d#3@18 ~@6 c3@18 ~@23, ~@19 [a#3,d#4,g4]@12 ~@12 [c4,d#4,g4]@11 ~@18]/3", // A# D# Cm A# Fsus4 D# Cm
  AX: "[~@7 [g3,b3,d4]@12 [g3,b3,d4]@13 [c3,g3,c4,d#4]@11 ~ g3@4, ~@7 b2@25 ~@11 [a#2,c4,d#4]@5]/2", // G Cm Cm7
  AY: "[~@7 [a2,f3,a3,c4,d#4]@12 [g#2,f3,g#3,c4,d#4]@12 [g3,c4,d4]@12 [g3,c4,d4]@12 [g3,c4,d4]@12 [g3,c4,d4]@12 [g3,b3,d4]@12 [g3,b3,d4]@12 ~@21 b4@4 [c2,c3,c5]@49 ~@15, ~@31 g2@96 ~@65, ~@103 [g3,b3,d4]@26 ~@63, ~@115 c4@13 ~@64, ~@119 g4@9 ~@64]/8", // F7 Fm7 Gsus4 G C G
})).s("gm_piano").gain(0.27)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  A B C D E F G@2 ~@4 H@5 I@8 J@3 K L M N@3 O@2 P K Q@2 R@2 S@2 T U V@2 W@2 X@4 ~@16 Y Z AA@3 Z AB@2 Y Z AA@3 Z AC@7
  AD@8 AE@3 AF@8 AG@8 AH AI@3 AJ@7 ~@2
>`.pickRestart({
  A: "c3@23 ~", B: "a2", C: "b2 a2", D: "g#2", E: "a2 g2", F: "f#2", G: "[[g3,c4,d4]@24 g3@23 ~, g2@47 ~]/2",
  H: "[c4@47 b3@48 a3@25]/5", I: "[~@17 b3@6 c4@24 b3@24 c4@48 b3@48 a3@25]/8", J: "[~@17 b3@6 c4@24 b3@24 ~]/3",
  K: "[a2,a3,c4,e4]", L: "[d2,f3,a3,c4]", M: "c4@5 ~ b3@6, [g2,g3,d4]",
  N: "[c3@10 b2@12 [a2,a3,c4,e4]@24 [a3,c4]@25 ~, g3 ~@2, [c4,e4]@11 ~@25]/3", O: "[g2@5 ~]/2", P: "[c3,g3,c4]",
  Q: "[b2@6 a2@5 [g#2,g#3,e4]@13, b3, d4 ~, g3@11 ~@13]/2", // C#m
  R: "[a2@12 ~@10 [f#2,f#3,a3,d4]@25 ~, [e3,a3,c4]@11 ~@13, ~ g2 ~@2]/2", // D Am
  S: "[c4@5 ~ b3@5 [a2,a3,c4,g4]@6 [b2,g3,b3,d4]@7, [g2,g3,d4]@23 ~@25]/2", T: "[c3,g3,c4,e4]", U: "[a2,c4]",
  V: "[b2 a2 [g#2,g#3,e4]@2, b3, d4@23 ~@25, g3@7 ~@9]/2", // C#m
  W: "[a2@10 g2@12 [f#2,f#3,d4]@25 ~, a3, c4@23 ~@25, e3@7 ~@9]/2", X: "[g2@15 ~, c4@11 ~@37]/4", Y: "[e3,c4]",
  Z: "[f3,a3]", AA: "[d3@24 e3@47 ~, c4]/3", AB: "[c4 b3, d3]/2",
  AC: "[~@2 b3@52 ~ c4@48 d4@24 e4@12 d4@12 c4@17, ~ d3@25 ~@58]/7",
  AD: "[~@7 a3@24 c4@12 b3@12 c4@12 d4@12 e4@36 f4@12 g4@24 b3@24 e4@17]/8",
  AE: "[~@7 d4@36 g3@6 a3@6 b3@6 c4@6 d4@5]/3",
  AF: "[~ g3@6 g4@24 g#4@24 a#4@12 g#4@12 g4@12 f4@12 d#4@24 c4@24 d#4@12 d4@12 d#4@9 f4@8]/8",
  AG: "[~@7 g4@24 g#4@24 a#4@11 ~ g#4@12 g4@12 f4@12 d#4@24 c4@24 d#4@12 d4@12 d#4@9 f4@8]/8",
  AH: "~@19 a#5@5, ~@2 d#4@5 ~, ~@3 a#4",
  AI: "[[g#4,g#5]@6 [g4,g5]@6 [f4,f5]@6 [d#4,d#5]@4 [f4,f5]@4 ~ g5@3 [f4,f5]@24 d4@18, ~@13 g4@2 ~@21]/3", // G# G F D# F
  AJ: "[~@6 d#4@25 d#6@24 d6@98 ~@15]/7",
})).s("gm_string_ensemble_2").gain(0.15)

// chords · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft = note("<~@29 A ~@2 B@2 C@2 D ~@5 E@2 ~ F ~@4 G@4 ~@74 H@3>".pickRestart({
  A: "d3", B: "[~@22 [d2,d3,f3]@25 ~]/2", C: "[c4@20 ~@2 b3@13 ~@13, [g3,d4]@37 ~@11]/2", D: "e4",
  E: "[~@11 e4@6 ~@7]/2", F: "[a3,e4]", G: "[~@24 b3@23 ~ c4@22 ~@26, [g3,d4]@43 ~@5]/4", H: "[~@8 e6@55 ~@9]/3",
})).s("gm_string_ensemble_2").gain(0.1)

// other · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note("<~@10 A@2 B ~@118>".pickRestart({
  A: "[~@6 e4@2 ~@4 c4 ~@5 g3@9 ~@3 c4@3 ~@3 e3@2 ~ d3@9]/2", B: "c3@5 ~@7",
})).s("gm_pizzicato_strings").gain(0.23).pan(0.2)

// other · cello
const cello = note("<~@10 A@2 B ~@118>".pickRestart({
  A: "[~@6 e3@2 ~@4 c3 ~@5 g2@9 ~@3 c3@3 ~@3 e2@2 ~ d2@9]/2", B: "c2@5 ~@7",
})).s("gm_cello").gain(0.15)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note("<~@54 A@7 B C@8 ~@61>".pickRestart({
  A: "[[e3,g3,c4,e4]@5 ~ [c4,e4]@5 ~@25 e4@5 ~ [c4,e4]@5 ~@7 [b3,d4]@4 ~@2 d4@4 ~@2 d4@4 ~ [g3,b3,d4]@5 ~@2 [b3,d4]@5 ~ [b3,d4]@4 ~@2 d4@5 ~ f4@5 ~ f4@5 ~ f4@5 ~ [a3,c4,f4]@5 ~ [c4,f4]@5 ~ [a3,c4,f4]@5 ~ [c4,f4]@5 ~ [d4,g4]@5 ~ a4@5 ~ [e4,a4]@5 ~ [e4,a4]@6 [a3,c4,e4,a4]@5 g3, ~@5 [e3,g3]@6 [e3,g3]@5 e3@6 e3@6 e3@6 e3@6 ~ [e3,g3]@6 [e3,g3]@6 g3@5 ~ [g3,b3]@6 [g3,b3]@6 ~@6 g3@6 ~@5 e3@7 [f3,a3,c4]@6 [f3,a3,c4]@6 [f3,a3,c4]@6 f3@5 ~ [f3,a3]@6 f3@6 [f3,a3]@6 ~@31, ~@12 [c4,e4]@5 [g3,c4]@6 [g3,c4]@6 [g3,c4]@6 [g3,c4]@6 ~@7 [b3,d4]@6 ~@89 [a3,c4,e4]@6 [a3,c4]@6 [a3,c4]@6 ~@7, ~@18 e4@6 e4@6 e4@6 ~@16 e3@6 e3@5 ~ e3@6 e3@6 e3@6 ~ [e3,g3]@6 [g3,b3]@6 ~@42 [g3,b3]@6 ~@25]/7", // C Bm G Bm F F5 F F5 …
  B: "[b3,d4,g4]@5 ~ g4@5 ~ [d4,g4]@5 ~ [b3,d4,g4]@5 e3, ~@5 [g3,b3,d4]@6 [g3,b3]@6 g3@6 ~", // G G5 G
  C: "[[g3,c4,e4]@5 ~ [c4,e4]@5 ~ e4@5 ~ [c4,e4]@5 ~ [c4,e4]@5 ~ [c4,e4]@4 ~@2 e4@4 ~@2 e4@5 ~ d4@5 ~ d4@5 ~ [b3,d4]@5 ~@13 d4@4 ~ [g3,b3,d4]@5 ~@2 d4@5 ~ [c4,f4]@5 ~ f4@5 ~ [c4,f4]@5 ~ f4@5 ~ f4@5 ~ [c4,f4]@5 ~ [c4,f4]@5 ~ [d4,g4]@5 ~ [e4,a4]@5 ~ [e4,a4]@5 ~ [c4,e4,a4]@5 ~ [c4,e4,a4]@5 ~ [b3,d4,g4]@6 [g3,b3,d4,g4]@5 ~ g4@6 [g3,b3,d4,g4]@5 ~, ~@5 [e3,g3]@6 [e3,g3,c4]@6 [e3,g3]@6 [e3,g3]@6 [e3,g3]@5 e3@6 [e3,g3]@7 [e3,g3,b3]@6 [e3,g3,b3]@6 [e3,g3]@6 [e3,g3,b3]@5 e3@6 e3@6 e3@6 e3@6 ~ [f3,a3]@6 [f3,a3,c4]@6 [f3,a3]@6 [f3,a3,c4]@6 [f3,a3,c4]@6 [f3,a3]@6 [f3,a3]@7 ~@29 g3@7 ~@5 [g3,b3,d4]@6 ~@7, ~@35 [g3,c4]@5 ~ c4@7 ~@18 d4@5 [g3,b3]@6 [g3,b3]@6 ~@6 [g3,b3]@6 ~@42 [g3,b3]@6 [a3,c4]@6 [a3,c4]@6 a3@6 a3@7 ~@24, ~@12 d4 ~@19]/8", // C Bm G F5 G5 A5 Am G …
})).s("gm_acoustic_guitar_nylon").gain(0.07).pan(0.7)

// other · french horn · "FR.HORN"
const french_horn = note("<~@78 A@3 B C@5 ~@17 D@6 ~@7 E F@5 G@5 ~@3>".pickRestart({
  A: "[c4@18 e3@3 f3@15 e3@2 ~ f3@2 ~ g3@30]/3", B: "~@6 e4@6 c4@3 d4@2 ~ e4@2 ~ f4@3",
  C: "[~@24 d4@19 c4@7 d4@48 ~@22, e4@13 ~@47]/5", D: "[~@19 d4@12 d#4@12 f4@12 d#4@24 c4@24 d#4@12 d4@24 ~@5]/6",
  E: "~ a#2@2 ~ c3@2 ~ d3@5 ~ d#3@2 ~ f3@2 ~ g3@5", F: "[g#3@7 g3@24 c4@12 g#3@12 f3@11 c4@13 d4@24 c4@9 d4@8]/5",
  G: "[~ d#4@6 f4@95 ~@18]/5",
})).s("gm_french_horn").gain(0.21).pan(0.7)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@109 A B@2 C@3 D@5 ~@11>".pickRestart({
  A: "~@10 a#3@6 d#4@3 f4@3 g4@2", B: "[~ a#4@3 ~ a#4@23 ~@3 e4@5 ~ c5@3 ~ d#5@5 f5@2]/2",
  C: "[~ f5@6 ~ f5@11 d#5@8 ~ f5@14 ~ d5@8 f5@3 ~ d#5@5 ~ d#5@3 d#5@8]/3",
  D: "[~ d5@15 ~@3 c5@8 ~ d#5@3 ~ d5@12 d5@11 c5@11 ~ a#4@11 ~ g4@23 ~@18]/5",
})).s("gm_overdriven_guitar").gain(0.2).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@28 A ~@25 B A@4 C A@7 D A@16 E F G@23 H I G@6 H I G@3 J ~@8>".pickRestart({
  A: "x", B: "x ~@6 x", C: "x ~ x!2", D: "x ~@2 x", E: "~ x ~@10", F: "~ x ~@2", G: "~@7 x ~@16", H: "~@7 x ~@8 x ~@7",
  I: "~ x ~@5 x ~@16", J: "~@7 x ~@11 x ~@4",
})).gain(0.25)

// drums · snare
const snare = s("sd").struct("<~@54 A@30 B C@24 ~ C@7 ~ C@4 D ~@8>".pickRestart({
  A: "~ x", B: "~@2 x", C: "~@19 x ~@4", D: "~@7 x ~@16",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct("<~@54 A@29 B C D E@23 F G E@6 F G E@3 F ~@8>".pickRestart({
  A: "x!4", B: "x ~@5 x ~@5 x ~@6 x ~@4", C: "~@2 x ~@6 x ~@6 x ~@6 x", D: "~@6 x ~@5 x ~@6 x ~@4",
  E: "~ x ~@5 x ~@5 x ~@5 x ~@4", F: "~ x ~@22", G: "~@7 x ~@5 x ~@5 x ~@4",
})).gain(0.22)

// drums · ride
const ride = s("rd").struct("<~@127 [~@4 x ~@2 x ~@16] [~ x ~@22] ~@2>").gain(0.11)

// drums · splash
const splash = s("cr").struct("<~@70 A ~@7 A ~@7 B ~@7 B ~@7 B ~@7 B ~@11 B ~@5 C ~@2>".pickRestart({
  A: "x", B: "~@7 x ~@16", C: "~ x ~",
})).gain(0.25)

stack(
  bass, piano, string_ensemble_2, string_ensemble_2_soft, pizzicato_strings, cello, acoustic_guitar_nylon, french_horn,
  overdriven_guitar, kick, snare, hihat, ride, splash
)

More by Chicago