Strudelify

Hard Habit to Break

Chicago

KeyD♭ majorTempo92 bpm
0:00/0:00
// Hard Habit to Break — Chicago
// 92 bpm, 4/4, key Db major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 97 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(92/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 · epiano2 · "tk1"
const epiano2 = note("<A@2 B@2 ~@93>".pickRestart({
  A: "[~ db3 ~@13 [f2,bb4,gb5], gb2@2 [db5,bb5]@8 [bb3,bb4,gb5] [ab3,ab4,f5]@2 [b4,ab5] ab3@2, ~@2 gb2@3 f5 ab3 db3 gb2@8, ~@2 db3@3 db6@11, ~@3 [b4,ab5]@6 db3@7]/2", // Gbmaj7 Gb Ebm Db E
  B: "[~@15 f2, [bb4,gb5]@7 db3 eb2@3 ab3@2 [db4,f4,db5] ab3@2, eb2@3 ab3@2 [bb3,bb4,gb5]@3, ~ db3@2 ab3@2 db4@6 [ab4,f5]@5, ~@2 bb3@7 db3@7]/2", // Ebm Db Ebm Db
})).s("gm_epiano2").gain(0.56)

// chords · piano · "tk1"
const piano = note(`<
  ~@4 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 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 AB@2 AC
  AD AE AF AG AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT@2 AU AV AS AT@2 AU AV AS AT@2 AU AV AS AT@2 AW ~@2
>`.pickRestart({
  A: "gb2 db3 bb3 ab3 ~ db4 ab3 db3, [gb4,bb4,db5,gb5]!4", B: "gb2 db3 bb3 ab3 ~ db4 ab3 f2, [gb4,bb4,db5,gb5]!4",
  C: "[eb2,eb5] db3 [bb3,eb5] ab3 ~ db4 ab3 db3, [gb4,bb4]!2 [gb4,bb4,eb5]!2", // Eb Eb5 Gb Ebm
  D: "eb2 db3 bb3 ab3 ~ db4 ab3 f2, [gb4,bb4,eb5]!3 [gb4,bb4,db5]", // Ebm Gb
  E: "b2 gb3 [gb4,b4,eb5]@2 [gb4,b4,eb5]@2 gb3 b2, [gb4,b4,eb5] [b2,gb3]@2 [gb4,b4,eb5]", // B B5 B
  F: "[bb2,f3,ab3,db4]@3 [bb2,f3,ab3,db4] [eb2,eb3,gb3,bb3,db4]@4", // Bbm7 Ebm7
  G: "[gb3,b3,db4,eb4]!2 [ab2,gb3,b3,db4,eb4] [gb2,ab3,bb3,db4], ab2 ~", // B Abm7 Gb
  H: "[e2,b2,gb3,b3,gb4]@4 [gb2,a3,e4]@2 [ab2,b3] ~, ~@3 e4", // Esus2 Gbm7 Abm
  I: "a2 e3 [e4,db5,e5]@2 [e4,db5,e5]@2 b3 e3, [e4,db5,e5] [a2,e3]@2 [e4,db5,e5]", // Dbm A5 Dbm
  J: "a2@2 e3@2 [e4,db5,e5]@4 [e4,db5,e5]@4 a2 ab2 gb2 e2, [e4,db5,e5] [a2,e3]@2 [e4,db5,e5]", // Dbm A5 Dbm
  K: "gb2 e3 [gb4,db5,e5]@2 [gb4,db5,e5]@2 b3 e3, [gb4,db5,e5] [gb2,e3]@2 [gb4,db5,e5]", // Gb7
  L: "gb2 e3 [gb4,db5,e5]@2 [gb4,db5,e5]@2 gb3 e3, [gb4,db5,e5] [gb2,e3]@2 [gb4,db5,e5]", // Gb7
  M: "d3 a3 [e4,a4,d5,gb5]@2 [e4,a4,d5,gb5]@2 a3 d3, [e4,a4,d5,gb5] [d3,a3]@2 [e4,a4,d5,gb5]", // D D5 D
  N: "[e4,b4,e5]!2 [gb4,db5,gb5]!2, [db3,ab3] [gb2,gb3]", O: "[a3,d4,gb4,b4]!2 [b2,a3,d4,gb4,b4] [a2,db4,e4,b4], b2 ~",
  P: "[g2,d3,b3,d4,a4]@2 [a2,c4,g4] [b2,d4,g4]", Q: "[g4,c5,e5]!4", R: "[g4,b4,e5]!4", S: "[a4,c5,g5]!2 [a4,c5,f5]!2",
  T: "[ab4,c5,d5,g5]!4", // Abmaj7
  U: "[g4,c5,g5]@4 ~@2 [c2,c3]@2 [g4,c5,g5]@4 ~@2 c2 d2, [c2,c3]@3 ~ [c2,c3]@3 ~, ~ [g4,c5,g5] ~ [g4,c5,g5]", // C5 C C5 C C5
  V: "[g4,c5,d5,g5]@4 ~@2 e2@2 [g4,b4,d5,g5]@4 ~@2 d2 e2, [e2,e3]@3 ~ [e2,e3]@3 ~, ~ [g4,c5,d5,g5] ~ [g4,b4,d5,g5]", // Gsus4 G E Gsus4 G
  W: "[g4,c5,a5]@2 ~ f2 [f4,c5]@2 [f4,c5,a5] [g2,c4], [f2,f3]@3 ~ [f2,f3]@3 ~, ~@2 [g4,c5,a5]@2 a5 ~@3", // Am7 F5 F C5 F Am7
  X: "[c4,f4,ab4]@2 ~ ab2 [ab2,c4,g4,e5]@2 [f2,c4,g4,d5,f5]@2, ab2@3 ~@5, ~ [c4,f4,ab4] ~@2", // Fm C Fsus2 Fm
  Y: "[g2,f3,e4,a4,c5]@3 [g2,f3,a4,b4,d5] [g2,f3,d4,b4,d5,a5]@4", // Fmaj7 G7
  Z: "[ab2,eb3]@4 ab2 g2 f2 eb2 [d2,d3,d4,f4,b4,c5]@8, [eb4,ab4,c5,eb5] ~", AA: "[c2,c3,g3,c4,e4,g4]@3 ~",
  AB: "[[ab2,eb3]@4 ab2 g2 f2 eb2 [d2,d3,d4,f4,bb4,c5]@6 [ab2,ab3,eb4,ab4,c5]@6 ~@2 [ab2,bb4]@2 ~@6 ab2@2, [c4,eb4,ab4] ~@2 bb4, ~@12 ab2@3 ~, ~@13 [c4,eb4,gb4]@3]/2", // Ab5 Bb Ab Absus2 Ab Cdim
  AC: "d4@3 f4@2 ~ g2@2 [bb3,eb4]@3 bb4@2 d4@3, [g2,f3,bb3]@5 bb4@3 [c3,g3]@8", // Eb5 Gm7 C5
  AD: "[ab4,c5]@4 [ab3,c4,g4]@2 [f2,ab3,c4,ab4]@2 [c4,ab4]@6 bb4 a4, eb3, f2@3 ~ f2@4, ~@2 ab3 ~", // Ab Abmaj7 Fm
  AE: "[g2,f3]@2 g2 f2 g2 f2 g2 ab2 [g2,f3,b3]@4 b3 d4 g4 b4, [d4,g4]@3 ~, c4@2 ~ [g2,f3]", // G7 G5 G7
  AF: "ab2!16, [c4,eb4,g4,c5] ~@2 [d4,f4,bb4] ~@2 [eb4,g4,bb4] ~", // Cm Bb Eb
  AG: "ab2!8 g2 a2 b2 c3 [d3,b3,d4,g4]@4, ~ [c4,eb4,ab4] ~@2 [c4,d4,g4]@2 ~@2", // G Ab Csus2
  AH: "[a2,a3,c4,f4]@3 [ab2,ab3,c4,f4] [ab2,ab3,c4,f4]@2 [g2,g3,b3,eb4]@3 [gb2,gb3,b3,eb4]@3 [bb2,bb3,c4,f4,a4,bb4]@4", // F Fm Gaug B F
  AI: "[gb2,gb3,bb3,eb4,gb4]@6 [f2,f3,e4,g4,c5]@3 [eb2,eb3,eb4,gb4,b4]@2 b3 gb3 d3 b2 gb2, ~@3 [eb4,gb4,b4]", // Ebm C B
  AJ: "[db4,f4,ab4]!2 [db4,f4,ab4,f5] [db4,f4,ab4,gb5]", // Db
  AK: "[c4,f4,ab4]!2 [c4,f4,ab4,bb4,bb5] [c4,f4,ab4,c5,c6], ab5 ~", // Fm
  AL: "[bb3,db4,ab4]!2 [bb3,db4,gb4,eb5] [bb3,db4,gb4,f5], db6, db5 ~", AM: "[a3,db4,eb4,gb4]!4, [gb5,db6]",
  AN: "[ab3,db4,f4]@4 ~@2 [db2,db3]@2 [ab3,db4,f4]@4 ~@2 db2 eb2, [db2,db3]@3 ~ [db2,db3]@3 ~, ~ [ab3,db4,f4] ~ [ab3,db4,f4]", // Db
  AO: "[db4,eb4,bb4]@2 ab4@2 [db4,eb4,bb4]@2 [f2,c5]@2 [ab3,c4,eb4]@4 ~@2 eb2 f2, [f2,f3]@3 ~ ab4@4, ~@4 [f2,f3]@3 ~, ~@3 [ab3,c4,eb4]", // Eb7 F5 Ab F Ab
  AP: "[bb3,db4,ab4]@2 ~ gb2 [bb3,db4,gb4]@2 db4 [ab2,db4], [gb2,gb3]@3 ~ [gb2,gb3]@3 ~, ~ [bb3,db4,ab4] ~ [bb3,gb4]", // Bbm7 Gb Db5 Gb Bbm7 Ebm
  AQ: "[db4,eb4,gb4,a4]@2 ~ a2 [a2,a3,db4,f4,ab4]@2 [gb2,a3,db4,eb4,gb4]@2, a2@3 ~@5, ~ [db4,eb4,gb4,a4] ~@2", // Ebm7b5 Db Ebm7b5
  AR: "[ab2,gb3,bb3,db4,f4]@3 [ab2,gb3,bb3,c4,eb4] [ab2,gb3,bb3,c4,eb4]@4", // Gbmaj7 Ab7
  AS: "a2!3 [a2,b3,eb4,gb4] a2!4, [a3,db4,e4]@3 ~ [b3,eb4,gb4]@4", // B7 A B
  AT: "a2!3 [a2,b3,eb4,gb4] a2!4, [db4,e4,ab4]@3 ~ [b3,eb4,gb4]@4", // B7 Dbm B
  AU: "a2!3 [a2,b3,d4,gb4] a2!4, [a3,db4,e4]@3 ~ [b3,d4,gb4]@4", // Bm7 A Bm
  AV: "[ab2,gb3,bb3,db4,f4]@3 [ab2,gb3,bb3,c4,eb4] ab2!4, ~ [bb3,c4,eb4], ~@2 gb3 ~", // Gbmaj7 Ab7 Cm7
  AW: "a2!3 [a2,b3,d4,gb4] a2!2 ~@2, [a3,db4,e4]@3 ~ [b3,d4,gb4]@4", // Bm7 A Bm
})).s("gm_piano").gain(0.56)

// bass · synth bass 1 · "tk2"
const bass = note(`<
  ~@4 A B C D E F G H I J K L M N O P ~@4 Q R S T U V W A B X D Y Z G H I J K L M N O P ~@4 Q R S T U V AA AB AC AD AE
  AF AE AF AG AH ~@4 AI AJ K AK AL AM AN AM AN AO AM AN AM AN AO AM AN AM AN AO AM AN AM AP ~@2
>`.pickRestart({
  A: "gb1@6 db2@7 ~ db1 ~", B: "gb1@4 gb2@2 db2@9 ~", C: "eb1@6 bb1@7 ~ bb0 ~", D: "eb1@4 eb2@2 bb1@6 db2@3 ~",
  E: "b0@6 gb1@7 ~ gb1 ~", F: "bb0@4 bb1@2 f1@2 eb2@7 ~", G: "ab1@6 eb2@6 gb2 ~ eb1 ~",
  H: "e1@4 e2@2 b1@2 gb2@4 ab2@3 ~", I: "a1@4 ~@2 a1 ~ a1@4 ~ a1 e2 gb2", J: "a1@5 ~ a1 ~ a1@2 a1 ~ gb2 e2 e1 ~",
  K: "gb1@4 ~@2 gb1 ~ gb1@4 ~ gb1 db2 eb2", L: "gb1@5 ~ gb1 ~ gb1@2 gb2 ~ e2 db2 db1 ~",
  M: "d1@4 ~@2 d1 ~ d1@4 ~ d1 a1 b1", N: "db1@5 ~ db1 ~ gb1@2 gb2 ~ eb2 db2 db1 ~", O: "b1@4 ~@2 b1 ~ b1@4 a1!2 gb2 a1",
  P: "g1@5 ~ g1 ~ a1@2 a1 ~ b1 d2!2 ~", Q: "c2@4 ~@2 c2 ~ c2@4 ~ c2 g2 a1", R: "e1@5 ~ e1 ~ e1@2 e2 ~ db2 b1!2 ~",
  S: "a1@4 ~@2 a1 ~ a1@4 ~ a1 c2!2", T: "ab1@5 ~ ab1 ~ ab1@2 ab2 ~ d2 c2!2 ~", U: "g1@4 ~@2 g1 ~ g1@4 ~ g1 d2 e2",
  V: "ab1@5 ~ ab1 ~ d1@2 d2 ~ f2!2 f1 ~", W: "c1@3 ~", X: "eb1@6 bb1@7 ~ bb1 ~", Y: "b1@6 gb1@7 ~ gb1 ~",
  Z: "bb1@4 bb1@2 f1@2 eb2@7 ~", AA: "ab1@6 eb2@7 ~ eb1 ~", AB: "g1@4 g2@2 d2@2 c2@7 ~", AC: "f1@6 c2@7 ~ c1 ~",
  AD: "g1@4 g2@2 d2@2 g2@7 ~", AE: "ab1!16", AF: "ab1!8 g1 a1 b1 c2 d2@4", AG: "a1@3 ab1@3 g1@3 gb1@3 bb1!2 c2!2",
  AH: "gb1@3 f1@3 e1@3 eb1@2 b2 gb2 eb2 b1 gb1", AI: "db1@4 ~@2 db1 ~ db1@4 ~ db1 ab1 bb1",
  AJ: "f1@5 ~ f1 ~ f1@2 f2 ~ d2 c2 c1 ~", AK: "a1@5 ~ a1 ~ a1@2 a1 ~ gb2 db2 db1 ~",
  AL: "ab1@4 ~@2 ab1 ~ ab1@4 ~ ab1 eb2 f2", AM: "a1@4 ~@2 a1 ~ a1@4 ~ a1 gb2!2",
  AN: "a1@5 ~ a1 ~ a1@2 a1 ~ gb2!2 gb1 ~", AO: "ab1@5 ~ ab1 ab2 ab2@2 ~@6", AP: "a1@5 ~ a1 ~ a1@2 a1 ~@5",
})).s("gm_synth_bass_1").gain(0.48)

// chords · string ensemble 1 · "tk5"
const string_ensemble_1 = note(`<
  ~@12 A@2 B@2 C D E F ~@4 G H I J K L M ~@8 N O P Q R S T U ~@4 V W X Y Z AA ~@8 AB AC@8 AD@2 AE@2 AF@3 AG@2 AH@3 AG@2
  AF@3 AI@3 AJ ~@2
>`.pickRestart({
  A: "[e4,a4,db5]/2", B: "[[db4,gb4,a4,e5]@24 [a4,db5]@4 [a4,db5] ~@3]/2", C: "[a3,d4,gb4]@7 ~ [gb4,a4]@8",
  D: "[b3,e4,a4,db5] [b3,e4,a4,db5,e5], ab4@6 ~@2 ab4 ~@7, [gb4,d5] ~@15", E: "[gb4,b4,d5,a5]@2 [d5,gb5] [d5,gb5,a5]",
  F: "[b4,d5,g5,a5]@2 [c5,e5,g5] [b4,d5], [gb5,b5] ~@7 [b4,d5] ~@7", G: "[g3,c4,e4]@7 ~ [e4,g4]@8",
  H: "[d4,g4,e5]@8 [d4,g4,b4]@7 ~, b4@3 ~@5, c5 ~@3, e4 ~@15", I: "[c4,a4] [a4,c5], f4@3 ~@5",
  J: "[ab4,a4,c5,f5] [ab4,c5], d5@3 ~@5", K: "[c4,f4,a4]@7 ~ [a4,c5]@8, ~@4 [b4,d5]@3 ~",
  L: "[b4,c5,eb5,ab5]@7 ~ [c5,d5,eb5]@8, [d5,g5] ~@7 f5@5 ~@3", M: "[g3,c4,e4]@3 ~", N: "[e4,a4,db5]@3 ~ [db5,e5]@3 ~",
  O: "[db5,e5,a5]@7 ~ [db5,e5]@5 ~@3", P: "[db4,gb4,a4,e5]@3 ~ [a4,db5,e5]@3 ~",
  Q: "[a4,db5,e5,gb5]@6 ~@2 [a4,db5]@4 [a4,db5] ~@3", R: "[a3,d4,gb4]@3 ~ [gb4,a4]@3 ~",
  S: "[b3,e4,ab4,db5]@6 ~@2 [a4,db5,e5]@5 ~@3, [gb4,a4,d5] ~@7 [e4,ab4] ~@7", // Dbm7 A D E
  T: "[gb4,b4,d5,a5]@3 ~ [d5,gb5]@2 [d5,gb5] ~", // Bm7 D
  U: "[b4,d5,g5]@6 ~@2 [c5,e5,g5]@4 [b4,d5] ~@3, [gb5,a5,b5] ~@7 [b4,d5] ~@7", V: "[g3,c4,e4]@3 ~ [e4,g4]@3 ~",
  W: "[d4,g4,b4,e5]@6 ~@2 [g4,b4]@5 ~@3, [e4,c5] ~@15", X: "[c4,f4,a4]@3 ~ [a4,c5]@3 ~",
  Y: "[ab4,c5,d5,f5]@6 ~@2 [ab4,c5]@5 ~@3, a4 ~@15", Z: "[c4,f4,a4]@3 ~ [b4,d5]@3 ~, ~@8 [a4,c5] ~@7",
  AA: "[c5,eb5,ab5]@6 ~@2 [d5,f5]@5 ~@3, [b4,d5,g5] ~@7 [c5,eb5] ~@7", // Ab Dm G Cm
  AB: "[e4,a4,c5,g5]@2 [c4,f4,ab4] ~ [gb4,bb4]@2 [a4,c5] ~, ~@8 [ab4,c5] ~@7", // Am7 Fm Gb Am Ab
  AC: "[~@80 [ab3,db4,f4]@6 ~@2 [f4,ab4]@6 ~@2 [eb4,ab4,db5]@6 ~@2 [eb4,f4] ~@7 [db4,gb4,bb4]@6 ~@2 [bb4,db5]@6 ~@2, [a4,f5], c5@13 c5@3, ~@96 f4 ~@7 ab4@5 ~@11 ab4 ~@7]/8", // Db Fm Dbsus2 Ebsus2 Gb Bbm Dm
  AD: "[[db5,eb5,gb5]@6 ~@2 [a4,db5,e5,ab5]@4 db5 ~@3 [db4,gb4,bb4]@6 ~@2 [eb5,bb5]@6 ~@2, a4@2 ~ a4@5, bb4 ~@23 [bb4,db5] ~@7]/2", // Ebm7 Amaj7 Gb Eb5 Bbm
  AE: "[[eb5,gb5,ab5,bb5] ~@7 [eb5,gb5]@6 ~@2 [db5,e5,ab5,a5]@6 ~@2 [eb5,gb5]@5 ~@3, a4, [e4,db5]@6 ~@2 [db5,e5] ~@7 [eb5,gb5,b5] ~@7 [db5,e5] ~@7]/2", // Ebm Amaj7 Ebm Dbm B Dbm
  AF: "[[e4,db5,ab5]@6 ~@2 [db5,e5,ab5] ~@7 [db5,e5,a5]@6 ~@2 [eb5,gb5]@5 ~@19, a4, ~@8 [eb5,gb5]@6 ~@2 [eb5,gb5,b5] ~@7 [db5,e5] ~@23]/3", // Dbm A Ebm B Dbm
  AG: "[[e4,db5]@6 ~@2 [eb5,gb5]@6 ~@2 [db5,e5,ab5,a5]@6 ~@2 [eb5,gb5]@5 ~@3, a4, ~@8 [db5,e5] ~@7 [eb5,gb5,b5] ~@7 [db5,e5] ~@7]/2", // Dbm Ebm Amaj7 Ebm Dbm B Dbm
  AH: "[[e4,db5,ab5]@6 ~@2 [eb5,gb5]@6 ~@2 [db5,e5,a5]@6 ~@2 [eb5,gb5]@5 ~@19, a4, ~@8 [db5,e5] ~@7 [eb5,gb5,b5] ~@7 [db5,e5] ~@23]/3", // Dbm Ebm A Ebm Dbm B Dbm
  AI: "[[e4,db5]@6 ~@2 [eb5,gb5]@6 ~@2 [db5,e5,ab5,a5]@6 ~@2 [eb5,gb5]@5 ~@3 [e4,db5,ab5]@6 ~@2 [db5,e5,ab5] ~@7, a4@19 ~@5, ~@8 [db5,e5] ~@7 [eb5,gb5,b5] ~@7 [db5,e5] ~@15 [eb5,gb5]@6 ~@2]/3", // Dbm Ebm Amaj7 Ebm Dbm B Dbm Ebm
  AJ: "[db5,e5,a5]@6 ~@2 [eb5,gb5]@5 ~@3, [eb5,gb5,b5] ~@7 [db5,e5] ~@7", // A Ebm B Dbm
})).s("gm_string_ensemble_1").gain(0.33).pan(0.4)

// chords · pad new age · "tk5"
const pad_new_age = note("<~@57 A B C D ~@5 E ~@13 F ~@4 G ~@4 H ~@6>".pickRestart({
  A: "[ab4,eb5,g5,ab5] ~@3 [ab4,eb5,g5,ab5] ~@3 [c5,eb5,g5,ab5] ~@3 [c5,eb5,g5,ab5] ~@3", // Abmaj7
  B: "[g4,d5,f5,g5] ~@3 [g4,d5,f5,g5] ~@3 [eb4,g4,bb4,c5] ~@3 [eb4,g4,bb4,c5] ~@3", // G7 Cm7
  C: "[f4,c5,eb5,f5] ~@3 [f4,c5,eb5,f5] ~@3 [ab4,c5,eb5,f5] ~@3 [ab4,c5,eb5,f5] ~@3", // F7 Fm7
  D: "[g4,d5,f5,g5] ~@3 [g4,d5,f5,g5] ~@3 [b4,d5,f5,g5] ~@3 [b4,d5,f5,g5] ~@3", // G7
  E: "[eb4,gb4,bb4,eb5] ~@3 [f4,bb4,c5,f5] ~@2 [f4,bb4,c5,f5] ~@8", // Ebm Fsus4
  F: "[gb4,bb4,db5,gb5] ~@3 [gb4,bb4,db5,f5,gb5] ~@2 [gb4,bb4,db5,gb5] ~@8", // Gb Gbmaj7 Gb
  G: "[gb4,db5,f5,gb5] ~@3 [gb4,bb4,db5,f5,gb5] ~@2 [gb4,db5,f5,gb5] ~@8", // Gbmaj7
  H: "[gb4,bb4,db5,gb5] ~@3 [gb4,bb4,db5,f5,gb5] ~@2 [gb4,bb4,db5,f5,gb5] ~@8", // Gb Gbmaj7
})).s("gm_pad_new_age").gain(0.16).pan(0.4)

// chords · lead 5 charang · "tk6"
const lead_5_charang = note(`<
  ~@12 A B C D E F G H ~@4 I J K L M N ~@9 A B C D E F G H ~@4 I J K L M N O P Q R ~@4 S T ~@4 U V W X Y Z AA Z AA AB Z
  AA Z AA AC Z AA Z AA AC Z AA Z AD ~@2
>`.pickRestart({
  A: "~@2 [db5,e5] ~@2 [db5,e5] ~@2 [db5,e5] ~@2 [db5,e5] ~@2 [db5,e5] ~", // Dbm
  B: "[db5,e5]@2 [db5,e5]!2 ~@5 e4 a3 a4 ~ a4 a3 e4", // Dbm
  C: "~@2 [a4,db5] ~@2 [a4,db5] ~@2 [a4,db5] ~@2 [a4,db5] ~@2 [a4,db5] ~", // A
  D: "[a4,db5]@2 [a4,db5]!2 ~@5 db4 e4 gb4 ~ gb4 e4 db4", // A
  E: "~@2 [gb4,a4] ~@2 [gb4,a4] ~@2 [gb4,a4] ~@2 [gb4,a4] ~@2 [gb4,a4] ~", // Gbm
  F: "[e4,ab4]@2 [e4,ab4]!2 ~@5 db4 e4 gb4 ~ gb4 e4 db4", // E
  G: "~@2 [d5,gb5] ~@2 [d5,gb5] ~@2 [d5,gb5] ~@2 [d5,gb5] ~@2 [d5,gb5] ~", // D
  H: "[b4,d5]@2 [b4,d5]!2 ~@5 e4 g4 a4 ~ g4 g3 d4", I: "~@2 [e4,g4] ~@2 [e4,g4] ~@2 [e4,g4] ~@2 [e4,g4] ~@2 [e4,g4] ~",
  J: "[g4,b4]@2 [g4,b4]!2 ~@5 b3 d4 e4 ~ e4 d4 b3", K: "~@2 [a4,c5] ~@2 [a4,c5] ~@2 [a4,c5] ~@2 [a4,c5] ~@2 [a4,c5] ~",
  L: "[ab4,c5]@2 [ab4,c5]!2 ~@5 c4 d4 f4 ~ f4 d4 c4", // Ab
  M: "~@2 [a4,c5] ~@2 [a4,c5] ~@2 [b4,d5] ~@2 [b4,d5] ~@2 [b4,d5] ~", // Am Bm
  N: "[c5,eb5]@2 [c5,eb5]!2 ~@5 f4 bb3 bb4 ~ bb4 bb3 f4", O: "~@8 [c5,eb5,g5] ~@2 [c5,eb5,g5] ~@2 [c5,eb5]!2",
  P: "~@8 [eb4,g4] ~@2 [eb4,g4] ~@2 [c4,g4,bb4]!2", Q: "~@8 [ab4,c5] ~@2 [ab4,c5,eb5] ~@2 [ab4,c5]!2",
  R: "~@8 [b4,d5,f5] ~@2 [b4,d5,f5] ~@2 [g4,d5,f5]!2", // Bdim G7
  S: "~@2 [c5,e5] ~@2 [ab4,c5] ~@2 [gb4,bb4] ~@2 [gb4,bb4] ~@2 [a4,c5] ~", T: "~@6 [f4,bb4,c5]!2 ~@8",
  U: "~@2 [f4,ab4] ~@2 [f4,ab4] ~@2 [f4,ab4] ~@2 [f4,ab4] ~@2 [f4,ab4] ~", // Fm
  V: "[eb4,ab4]@2 [f4,ab4]!2 ~@5 c4 eb4 f4 ~ f4 eb4 c4", // Ab5 Fm
  W: "~@2 [ab4,db5] ~@2 [ab4,db5] ~@2 [bb4,db5] ~@2 [bb4,db5] ~@2 [bb4,db5] ~", // Db5 Bbm
  X: "[a4,db5]@2 [a4,db5]!2 ~@5 db4 e4 gb4 ~ gb4 eb4 db4", // A
  Y: "~@2 [bb4,db5] ~@2 [bb4,db5] ~@2 [eb5,bb5] ~@2 [eb5,bb5] ~@2 [eb5,bb5] ~", // Bbm Eb5
  Z: "~@2 [db5,e5] ~@2 [db5,e5] ~@2 [eb5,gb5] ~@2 [eb5,gb5] ~@2 [eb5,gb5] ~", // Dbm Ebm
  AA: "[db5,e5]@2 [db5,e5]!2 ~@5 gb4 b3 b4 ~ b4 b3 gb4", AB: "~@6 [gb4,db5,f5] [gb4,bb4,db5] ~@8",
  AC: "~@6 [gb4,db5,f5]!2 ~@8", AD: "[db5,e5]@2 [db5,e5]!2 ~@5 gb4 b3 b4 ~@4",
})).s("gm_lead_5_charang").gain(0.39).pan(0.6)

// chords · epiano2 · "tk7"
const epiano2_2 = note("<~@4 A B C D E F G H ~@19 A B C D E F G H ~@22 I J I J ~@32>".pickRestart({
  A: "eb4 eb5 gb5 ~@2 gb5 bb4 eb5, bb4@6 bb4@5 ~@5, gb4 ~ eb5 ~",
  B: "~@4 gb5@2 ~@4 gb5@2 bb4@2 eb5 ~, bb4@6 bb4@5 ~@5, ~ eb5@2 ~ eb5@2 ~@2",
  C: "bb3 bb4 eb5 ~@2 eb5 gb4 bb4, gb4@6 gb4@5 ~@5, eb4 ~ bb4 ~",
  D: "~@4 eb5@2 ~@4 eb5@2 gb4@2 bb4 ~, gb4@6 gb4@5 ~@5, ~@2 bb4@4 ~@2 bb4@4 eb5 ~@3",
  E: "gb4 gb5 b5 ~@2 b5 eb5 gb5, eb5@6 eb5@5 ~@5, b4 ~ gb5 ~",
  F: "f5 ~@3 bb5@2 db5@2 ~@2 eb5@2 gb4@2 bb4 ~, db5@3 ~ [gb4,bb4]@2 ~@2, ~ f5@2 ~@5", // Gb
  G: "eb4@2 eb5@2 ab5@2 ~@4 ab5@2 [eb5,ab5] ~ eb5@2, b4@6 b4@5 ~ b4@2 ~@2, ab4 ~ eb5 ~", // Ab5
  H: "b4 ~@3 e5@2 ab4@2 ~@2 gb5@2 ab4@2 b4 ~, ab4@3 ~ [a4,db5]@2 ~@2, ~@2 b4@4 ~@6 e5 ~@3", // A
  I: "[bb3,eb4,g4,bb4]@3 [bb3,g4,bb4] ~@4 [f4,d5,f5]@2 ~ [f4,bb4,d5,f5] ~@4", // Eb Dm Bb
  J: "[bb3,eb4,g4,bb4]@3 [bb3,g4] ~@2 [ab4,c5,eb5,ab5]@2 [g4,c5,f5,g5]@4 [g4,b4,f5,g5]@2 ~@2", // Eb Ab Csus4 G7
})).s("gm_epiano2").gain(0.36)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@9 B A B A B A B ~@4 A B A B A B ~ A@9 B A B A B A B ~@4 A B A B A B A@5 B A B A C ~@4 A B A B A@2 B A B C A B A
  B C A B A B C A B A B ~@2
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!3 ~@2", C: "x ~@5 x!2 ~@8",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@4 A@8 ~@19 A@8 ~@18 A@4 ~@5 B ~@13 B ~@4 B ~@4 B ~@6>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@12 A@8 ~@4 A@6 ~@9 A@8 ~@4 A@6 ~@4 A@5 ~@5 A@9 ~ A@4 ~ A@4 ~ A@3 B ~@2>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@13 A ~ A ~ A ~ A ~@5 A ~ A ~ A ~@10 A ~ A ~ A ~ A ~@5 A ~ A ~ A ~@5 A ~ A ~ B ~@5 A ~ A ~@2 A ~ A B ~ A ~ A B ~ A ~
  A B ~ A ~@4
>`.pickRestart({
  A: "~@3 x", B: "~@14 x!2",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
// … 45 more lines

More by Chicago