Strudelify

You Don't Mess Around With Jim

Jim Croce

KeyA♭ majorTempo100 bpm
0:00/0:00
// You Don't Mess Around With Jim — Jim Croce
// 100 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 2 "Bass" named as a bass, played on electric bass finger (its piano patch is not one); ch 4 "Rhythm2/Guitar" named as a guitar, played on electric guitar clean (its piano patch is not one); ch 5 "Rhythm3/Guitar" named as a guitar, played on electric guitar clean (its piano patch is not one); ch 6 "Horns" named as a brass, played on brass section (its piano patch is not one)
// note: duplicate parts dropped: ch 8 "Solo 2" lead 6 voice (copy of ch 9 "Solo 1" pad choir); ch 8 "Solo 2" electric guitar clean (copy of ch 9 "Solo 1" electric guitar clean)
// note: Full arrangement: all 117 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · electric bass finger · "Bass"
const bass = note(`<
  ~@4 A B A B A C B D E F E G H I J K L M N O P Q R S T L U V W A C A C A B C D E F@2 G J X Y Z L AA K AB K AC AD@2 W L
  AE AF T A B A C A C@2 D AG@2 AH@2 AI AJ AK AL AM Z AB Z AB AN I T AO@3 L AO@2 L AO@2 M P Q N AA AP X W AO M P Q N AA
  AP X W AO W AO W AO
>`.pickRestart({
  A: "ab1@3 ~ ab1@2 ab1@3 ~ ab1@2 ab1@3 ~ ab1@2 ab1@3 ~ ab1@2",
  B: "ab1@3 ~ ab1@2 ab1@3 ~ ab1@2 ab1@3 ~ ab1@2 ab1@3 ~ g1@2",
  C: "ab1@3 ~ ab1@2 ab1@3 ~ ab1@2 ab1@3 ~ ab1@2 ab1@3 ~ eb1@2", D: "ab1@3 ~ ab1@2 ab1@3 ~ ab1@2 ab1@3 ~ ab1@2 ab2@5 ~",
  E: "db2@3 ~ db2@5 ~ f2@2 gb2@3 ~ gb2@3 ~ eb2@2 d2@2", F: "db2@3 ~ db2@5 ~ f2@2 gb2@3 ~ gb2@3 ~ b1@2 c2@2",
  G: "db2@3 ~ db2@5 ~ f2@2 gb2@3 ~ gb2@3 ~ gb2@2 db2@2", H: "eb2@3 ~ eb2@3 ~@3 eb2@2 eb2@3 ~ eb2@3 ~ eb2@2 d2@2",
  I: "db2@3 ~ db2@3 ~@3 ab1@2 db2@3 ~ db2@3 ~ db2@2 d2@2", J: "eb2@3 ~ eb2@3 ~@3 bb1@2 eb2@3 ~ eb2@3 ~ eb2@2 bb1@2",
  K: "db2@3 ~ db2@3 ~@3 ab1@2 db2@3 ~ db2@3 ~ bb1@2 a1@2", L: "ab1@3 ~ ab1@5 ~ c2@2 db2@3 ~ db2@3 ~ gb1@2 g1@2",
  M: "ab1@3 ~ ab1@3 ~@3 ab1@2 ab1@3 ~ ab1@3 ~ bb1@2 c2@2", N: "db2@3 ~ db2@3 ~@3 db2@2 db2@3 ~ db2@3 ~ bb1@2 a1@2",
  O: "ab1@3 ~ ab1@3 ~@3 ab1@2 ab1@3 ~ ab1@3 ~ b1@2 c2@2", P: "db2@3 ~ db2@3 ~@3 ab1@2 db2@3 ~ db2@3 ~ gb1@2 g1@2",
  Q: "ab1@3 ~ ab1@3 ~@3 eb1@2 ab1@3 ~ ab1@3 ~ eb2@2 d2@2", R: "db2@3 ~ db2@3 ~@3 ab1@2 db2@3 ~ db2@3 ~ b1@2 c2@2",
  S: "db2@3 ~ db2@3 ~@3 db2@2 db2@3 ~ db2@3 ~ db2@2 d2@2", T: "eb2@3 ~ eb2@3 ~@3 bb1@2 eb2@3 ~ eb2@3 ~ bb1@2 g1@2",
  U: "ab1@3 ~ ab1@5 ~ c2@2 db2@3 ~ db2@3 ~ db2@2 d2@2", V: "eb2@3 ~ eb2@3 ~@3 eb2@2 eb2@3 ~ eb2@3 ~ db2@2 d2@2",
  W: "eb2@3 ~ eb2@3 ~@3 bb1@2 eb2@3 ~ eb2@3 ~ eb2@2 g1@2", X: "db2@3 ~ db2@3 ~@3 db2@2 db2@3 ~ db2@3 ~ f2@2 e2@2",
  Y: "eb2@3 ~ eb2@3 ~@3 bb1@2 eb2@3 ~ eb2@3 ~ bb2@2 bb1@2", Z: "db2@3 ~ db2@3 ~@3 db2@2 db2@3 ~ db2@3 ~ gb1@2 g1@2",
  AA: "ab1@3 ~ ab1@3 ~@3 ab1@2 ab1@3 ~ ab1@3 ~ eb2@2 d2@2", AB: "ab1@3 ~ ab1@3 ~@3 eb1@2 ab1@3 ~ ab1@3 ~ b1@2 c2@2",
  AC: "ab1@3 ~ ab1@3 ~@3 eb1@2 ab1@3 ~ ab1@3 ~ bb1@2 c2@2", AD: "db2@3 ~ db2@3 ~@3 ab1@2 db2@3 ~ db2@3 ~ f2@2 e2@2",
  AE: "ab1@3 ~ ab1@5 ~ c2@2 db2@3 ~ db2@3 ~ f2@2 e2@2", AF: "eb2@3 ~ eb2@3 ~@3 bb1@2 eb2@3 ~ eb2@3 ~ bb1@2 c2@2",
  AG: "db2@3 ~ db2@2 db2@3 ~ db2@2 gb2@3 ~ gb2@2 gb2@3 ~ db2@2",
  AH: "db2@3 ~ db2@2 db2@3 ~ db2@2 gb2@3 ~ gb2@2 gb2@3 ~ gb2@2",
  AI: "eb2@3 ~ eb2@2 eb2@3 ~ eb2@2 eb2@3 ~ eb2@2 eb2@3 ~ c2@2",
  AJ: "db2@3 ~ db2@2 db2@3 ~ db2@2 db2@3 ~ db2@2 db2@3 ~ d2@2",
  AK: "eb2@3 ~ eb2@2 eb2@3 ~ eb2@2 eb2@3 ~ eb2@2 eb2@3 ~ d2@2",
  AL: "ab1@3 ~ ab1@2 ab1@3 ~ ab1@2 db2@3 ~ db2@2 db2@3 ~ db2@2",
  AM: "ab1@3 ~ ab1@2 ab1@3 ~ ab1@2 ab1@3 ~ ab1@2 ab1@3 ~ eb2@2",
  AN: "db2@3 ~ db2@3 ~@3 ab1@2 db2@3 ~ db2@3 ~ ab1@2 b1@2", AO: "ab1@3 ~ ab1@5 ~ c2@2 db2@3 ~ db2@3 ~ bb1@2 a1@2",
  AP: "db2@3 ~ db2@3 ~@3 db2@2 db2@3 ~ db2@3 ~ bb2@2 ab2@2",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · piano · "Rhythm1/Piano"
const piano = note(`<
  A B A B C@2 D@2 E@2 F@4 G@2 H I J@3 K L M L N O P Q@2 R@2 S T U V@2 T W X@3 Y@2 Z@2 AA AB@2 AC AD L M L N O P Q@2 AE@4
  AF@2 AG ~ AH@2 Y@2 G@2 H AA AI@3 AJ L M L N O P AK@2 AL AM AN AM AO AP AO AM AQ AR M AS AT AU AV AW@2 AX AY AZ AS AT
  AU AV BA@4 BB@2
>`.pickRestart({
  A: "[c4,eb4]!2 [db4,f4]!2", B: "[eb4,gb4]@6 [eb4,gb4]@6 [db4,f4]@3 ~ [eb4,gb4]@2 [db4,f4]@6",
  C: "[[ab4,c5]@12 [eb4,ab4]@9 ~ [eb4,ab4]@6 [ab4,c5]@9 ~@11]/2", D: "[[ab4,c5]@6 [eb4,ab4]@15 ~ [ab4,c5]@9 ~@17]/2",
  E: "[[ab4,c5]@6 [eb4,ab4]@15 ~ [ab4,c5]@6 [eb4,ab4]@15 ~@5]/2", // Ab Ab5 Ab Ab5
  F: "[[ab4,c5]@6 [eb4,ab4]@15 ~ [ab4,c5]@9 ~@11 gb4@3 ~ f4@12 gb4@12 ab4@14 gb4@12]/4", // Ab Ab5 Ab
  G: "[f4@12 gb4@9 ~ ab4@14 gb4@12]/2", H: "g4", I: "f4@9 ~ f4@14",
  J: "[g4@6 ~@6 g4@9 ~ f4@14 [b3,f4]@9 ~ [c4,eb4]@8 [c4,eb4]@6 [db4,f4]@6 [db4,f4]@6]/3", // Bdim Cm Db
  K: "[eb4,gb4]@9 ~ eb4@8 eb4@6", L: "[f4,b4] [f4,ab4]", M: "[eb4,ab4] ~@3", N: "[c4,gb4]@2 ~ [c4,gb4]",
  O: "[f4,ab4]!2", P: "[f4,ab4]@9 ~ [f4,ab4]@14", Q: "[g4@12 [db4,f4]@9 ~ [c4,eb4]@14 [f4,ab4]@12]/2",
  R: "[[gb4,ab4]@12 [f4,ab4]@9 ~ [g4,db5]@9 ~@17]/2", S: "~@16 [g4,db5]@2 [g4,db5]@3 ~ [g4,db5]@2",
  T: "[ab4,c5] [eb4,ab4]@3", U: "~ [c4,eb4] ~ [c4,eb4]", V: "[[eb4,ab4]@21 ~ [ab4,c5]@9 ~@11 [ab4,c5]@6]/2",
  W: "[ab4,c5]@9 ~ [c4,gb4]@14", X: "[[ab4,c5]@6 [eb4,ab4]@15 ~ [ab4,c5]@9 ~@11 gb4@3 ~ f4@14 gb4@12]/3",
  Y: "[f4@12 gb4@9 ~ f4@14 gb4@12]/2", Z: "[ab4@12 gb4@6 gb4@3 ~ g4@26]/2", AA: "f4", AB: "[g4@21 ~ f4@21 ~@5]/2",
  AC: "eb4 [db4,f4]", AD: "[eb4,gb4]",
  AE: "[[gb4,ab4]@12 [f4,ab4]@9 ~ [g4,db5]@9 ~@9 [g4,db5]@2 [g4,db5]@3 ~ [ab4,c5]@14 [eb4,ab4]@9 ~ [ab4,c5]@6 [c4,eb4]@9 ~@5 [c4,eb4]@6]/4", // Gbsus2 Fm Gdim Ab Ab5 Ab Cm
  AF: "[[eb4,ab4]@12 [eb4,ab4]@9 ~ [ab4,c5]@9 ~@11 [ab4,c5]@6]/2", AG: "[ab4,c5]@9 ~ [eb4,ab4]@14",
  AH: "[[ab4,c5]@6 [eb4,ab4]@15 ~ [ab4,c5]@9 ~@11 gb4@6]/2", // Ab Ab5 Ab
  AI: "[g4@21 ~ f4@12 b3@12 [c4,eb4]@8 [c4,eb4]@6 [db4,f4]@6 [db4,f4]@6]/3", AJ: "[eb4,gb4] ~ eb4@2",
  AK: "[g4@12 [db4,f4]@9 ~@13 ab4@2 b4@6 b4@6, ~@11 [c4,eb4]@7 [f4,ab4]@6]/2", AL: "eb5@6 db5@3 ~ b4@2 db5@3 ~ b4@8",
  AM: "eb4 c4 f4 db4", AN: "gb4@6 eb4@6 f4@3 ~ eb4@2 f4@6", AO: "eb4@6 gb4@6 db4@3 ~ gb4@2 db4@6", AP: "eb4!2 f4!2",
  AQ: "[eb4,gb4]@6 [eb4,gb4,ab4]@6 [eb4,gb4,ab4]@3 ~ [gb4,b4]@8", AR: "~ f4", AS: "b4 ab4", AT: "gb4@2 ~ gb4",
  AU: "ab4!2", AV: "ab4@9 ~ ab4@14", AW: "[g4@12 f4@9 ~@13 ab4@2 b4@6 b4@6, ~@11 eb4@7 [f4,ab4]@6]/2",
  AX: "[eb4,gb4]@6 [gb4,ab4]@6 [gb4,ab4]@3 ~ [gb4,b4]@8", AY: "~ ab4", AZ: "ab4 ~@3",
  BA: "[g4@12 f4@9 ~ eb4@12 ab4@2 b4@6 b4@6]/2", BB: "[g4@12 f4@9 ~ eb4@11 ~ ab4@2 b4@6 b4@6]/2",
})).s("gm_piano").gain(0.43)

// other · electric guitar clean · "Rhythm2/Guitar"
const electric_guitar_clean = note(`<
  A B A B A B A B A B A C D E D E F G H@2 A I J A J A J@2 K A@2 L@2 A M A M A M A N D E D O@3 P@2 A I J A J A J@2 K A@2
  L Q@7 C D E D E R S T@2 A I J A J A J@2 K A@10 J A J A J@2 K A@2 J A J A J@2 K A K A K A
>`.pickRestart({
  A: "ab3!4", B: "ab3@6 ab3@6 ab3@3 ~ eb3@2 ab3@3 ~ eb3@2", C: "ab3!2 bb3 [c4,ab4]", D: "[db4,ab4]!2 [db4,bb4]!2",
  E: "[db4,b4]!2 [db4,bb4]!2", F: "[eb4,db5]", G: "[db4,b4]@9 ~ [db4,b4]@14",
  H: "[[eb4,db5]@21 ~ [db4,b4]@14 db3@6 db3@6]/2", I: "ab3!2 bb3 c4", J: "db4!4", K: "eb4!4",
  L: "eb3@3 ~ eb3@2 eb4@6 eb3@6 eb4@6", M: "ab3!3 eb3", N: "ab3!3 [c4,ab4]",
  O: "[[db4,b4]@6 [db4,b4]@6 [db4,bb4]@6 [db4,bb4]@3 ~ [eb4,db5]@26 [db4,b4]@24]/3", // Db7 Gb Eb7 Db7
  P: "[[eb4,db5]@21 ~ [db4,b4]@20 db3@6]/2", Q: "ab3@9 ~ ab3@2 eb3@6 ~@6", R: "eb4", S: "[db4,b4]",
  T: "[[eb4,db5]@21 ~ [db4,b4]@12 db3@14]/2", // Eb7 Db7
})).s("gm_electric_guitar_clean").gain(0.5)

// chords · electric guitar clean · "Rhythm3/Guitar"
const electric_guitar_clean_2 = note(`<
  ~@2 A B A B A C D E F G H I J K L M N O P Q R S T U T V W X Y Z AA AB AC D AD AE AF AE G AG AH J AI AJ AK AL AM AN Q
  AO AP AQ U AK V AJ AR AS AJ AT AU AV F C AW AX AW G AY AZ BA ~ BB BC BD BE BF BG BH BI U R BG BJ AR BK P BL AR BM BN
  BO X Q V BP BQ BR R T BS BT Q V BP BQ BR R T BS BT BS BT BS BT
>`.pickRestart({
  A: "ab3@5 ~ [c4,eb4,ab4]@3 ~ ab3@2 ab3@5 ~ [c4,eb4,ab4]@3 ~ ab3@2", // Ab
  B: "[c4,eb4,ab4]@3 ~ ab3@2 [c4,eb4,ab4]@5 ~ [c4,eb4,ab4]@11 ~", C: "ab3@5 ~ [c4,eb4,ab4]@5 ~ [c4,eb4,ab4]@11 ~",
  D: "ab3@5 ~ [c4,eb4,ab4]@3 ~ ab3@2 [c4,eb4,ab4]@11 ~", // Ab
  E: "[c4,eb4,ab4]@3 ~@3 [c4,eb4,ab4]@5 ~ ab3@5 ~ [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@2", // Ab
  F: "ab3@5 ~ [c4,eb4,ab4]@3 ~@3 [c4,eb4,ab4]@11 ~", // Ab
  G: "ab3@5 ~ [c4,eb4,ab4]@5 ~ [c4,eb4,ab4]@5 ~ [eb4,gb4,ab4,c5]@5 ~", // Ab Ab7
  H: "~@4 db3@2 [db4,f4,ab4]@5 ~@7 [db4,gb4,bb4]@3 ~ [db4,gb4,bb4]@2", // Db Gb
  I: "~@4 db3@2 [f4,ab4,b4,db5]@3 ~ [f4,ab4,b4,db5]@2 ~@4 gb3@2 [db4,gb4,bb4]@5 ~", // Db7 Gb
  J: "~@4 db3@2 [db4,f4,ab4]@3 ~ [db4,f4,ab4]@2 ~@4 gb3@2 [bb3,db4,gb4]@3 ~ [bb3,db4,gb4]@2", // Db Gb
  K: "~@6 [f4,ab4,b4,db5]@5 ~ [bb3,db4,gb4]@5 ~ [bb3,db4,gb4]@3 ~ [bb3,db4,gb4]@2", // Db7 Gb
  L: "~@6 [db4,eb4,g4,bb4]@3 ~ [db4,eb4,g4,bb4]@2 ~@6 [db4,eb4,g4,bb4]@3 ~ [db4,eb4,g4,bb4]@2", // Eb7
  M: "~@6 [b3,db4,f4,ab4]@5 ~@7 [b3,db4,f4,ab4]@3 ~ [b3,db4,f4,ab4]@2", // Db7
  N: "~@4 eb3@2 [db4,eb4,g4,bb4]@5 ~@5 eb3@2 [db4,eb4,g4,bb4]@5 ~", // Eb7
  O: "~@6 [b4,db5]@5 ~ [b4,db5]@5 ~ [b4,db5]@3 ~ [b4,db5]@2", // Bsus2
  P: "~@4 ab3@2 [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@2 ~@4 db3@2 [db4,f4,ab4]@5 ~", // Ab Db
  Q: "~@4 ab3@2 [eb4,gb4,ab4,c5]@3 ~ [eb4,gb4,ab4,c5]@2 ~@4 ab3@2 [eb4,gb4,ab4,c5]@3 ~ [eb4,gb4,ab4,c5]@2", // Ab7
  R: "~@6 [f4,ab4,b4,db5]@3 ~ [f4,ab4,b4,db5]@2 ~@6 [f4,ab4,b4,db5]@3 ~ [f4,ab4,b4,db5]@2", // Db7
  S: "~@4 ab3@2 [c4,eb4,ab4]@5 ~@7 [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@2", // Ab
  T: "~@6 [f4,ab4,b4,db5]@3 ~ [f4,ab4,b4,db5]@2 ~@4 db3@2 [f4,ab4,b4,db5]@5 ~", // Db7
  U: "~@4 ab3@2 [eb4,gb4,ab4,c5]@5 ~ [eb4,gb4,ab4,c5]@5 ~ [eb4,gb4,ab4,c5]@3 ~ [eb4,gb4,ab4,c5]@2", // Ab7
  V: "~@4 db3@2 [f4,ab4,b4,db5]@3 ~ [f4,ab4,b4,db5]@2 ~@6 [f4,ab4,b4,db5]@3 ~ [f4,ab4,b4,db5]@2", // Db7
  W: "~@4 eb3@2 [db4,eb4,g4,bb4]@3 ~ [db4,eb4,g4,bb4]@2 ~@6 [db4,eb4,g4,bb4]@3 ~ [db4,eb4,g4,bb4]@2", // Eb7
  X: "~@4 ab3@2 [c4,eb4,ab4]@5 ~ [db4,f4,ab4]@5 ~ [db4,f4,ab4]@3 ~ [db4,f4,ab4]@2", // Ab Db
  Y: "~@6 [eb4,gb4,ab4,c5]@3 ~ [eb4,gb4,ab4,c5]@2 ~@6 [ab3,db4,f4]@3 ~ [ab3,db4,f4]@2", // Ab7 Db
  Z: "~@4 eb3@2 [db4,eb4,g4,bb4]@5 ~@5 eb3@2 [db4,eb4,g4,bb4]@3 ~ [db4,eb4,g4,bb4]@2", // Eb7
  AA: "~@6 [g4,bb4]@3 ~ [g4,bb4]@2 ~@6 [g4,bb4]@3 ~ [g4,bb4]@2", AB: "[eb4,ab4]@3 ~@3 [eb4,ab4]@5 ~ [eb4,ab4]@11 ~",
  AC: "ab3@5 ~ [eb4,ab4]@3 ~@3 ab3@5 ~ [eb4,ab4]@3 ~ [eb4,ab4]@2", // Ab5
  AD: "ab3@5 ~ [c4,eb4,ab4]@5 ~ [c4,eb4,ab4]@3 ~@3 [c4,eb4,ab4]@5 ~", // Ab
  AE: "[c4,eb4,ab4]@11 ~ ab3@5 ~ [c4,eb4,ab4]@3 ~@3", // Ab
  AF: "ab3@5 ~ [c4,eb4,ab4]@3 ~ ab3@2 ab3@5 ~ [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@2", // Ab
  AG: "~@4 db3@2 [db4,f4,ab4]@3 ~ [db4,f4,ab4]@2 ~@6 [db4,gb4,bb4]@5 ~", // Db Gb
  AH: "~@6 [f4,ab4,b4,db5]@5 ~@5 gb3@2 [bb3,db4,gb4]@5 ~", // Db7 Gb
  AI: "~@4 db3@2 [f4,ab4,b4,db5]@5 ~ [bb3,db4,gb4]@5 ~ [bb3,db4,gb4]@3 ~ [bb3,db4,gb4]@2", // Db7 Gb
  AJ: "~@4 eb3@2 [db4,eb4,g4,bb4]@3 ~ [db4,eb4,g4,bb4]@2 ~@4 eb3@2 [db4,eb4,g4,bb4]@3 ~ [db4,eb4,g4,bb4]@2", // Eb7
  AK: "~@4 db3@2 [f4,ab4,b4,db5]@3 ~ [f4,ab4,b4,db5]@2 ~@4 db3@2 [f4,ab4,b4,db5]@3 ~ [f4,ab4,b4,db5]@2", // Db7
  AL: "~@4 eb3@2 [db4,eb4,g4,bb4]@5 ~@7 [db4,eb4,g4,bb4]@3 ~ [db4,eb4,g4,bb4]@2", // Eb7
  AM: "~@6 [f4,ab4,b4,db5]@5 ~ [f4,ab4,b4,db5]@5 ~ [f4,ab4,b4,db5]@3 ~ [f4,ab4,b4,db5]@2", // Db7
  AN: "~@4 ab3@2 [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@2 ~@6 [db4,f4,ab4]@5 ~", // Ab Db
  AO: "~@6 [f4,ab4,b4,db5]@5 ~@7 [f4,ab4,b4,db5]@5 ~", // Db7
  AP: "~@4 ab3@2 [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@2 ~@6 [c4,eb4,ab4]@5 ~", // Ab
  AQ: "~@4 db3@2 [f4,ab4,b4,db5]@5 ~@7 [f4,ab4,b4,db5]@3 ~ [f4,ab4,b4,db5]@2", // Db7
  AR: "~@6 [c4,eb4,ab4]@5 ~ [db4,f4,ab4]@5 ~ [db4,f4,ab4]@3 ~ [db4,f4,ab4]@2", // Ab Db
  AS: "~@4 ab3@2 [eb4,gb4,ab4,c5]@3 ~ [eb4,gb4,ab4,c5]@2 ~@4 db3@2 [ab3,db4,f4]@5 ~", // Ab7 Db
  AT: "~@6 [g4,bb4]@5 ~@7 [g4,bb4]@3 ~ [g4,bb4]@2", AU: "ab3@5 ~ [eb4,ab4]@3 ~@3 ab3@5 ~ [eb4,ab4]@3 ~@3",
  AV: "ab3@5 ~ [c4,eb4,ab4]@3 ~@3 ab3@5 ~ [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@2", // Ab
  AW: "ab3@5 ~ [c4,eb4,ab4]@3 ~@3 ab3@5 ~ [c4,eb4,ab4]@3 ~@3", // Ab
  AX: "[c4,eb4,ab4]@11 ~ ab3@5 ~ [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@2", // Ab
  AY: "db3@5 ~ [ab3,db4,f4]@3 ~ db3@2 gb3@5 ~ [bb3,db4,gb4]@3 ~ gb3@2", // Db Gb
  AZ: "db3@5 ~ [f4,ab4,b4,db5]@3 ~ db3@2 gb3@5 ~ [bb3,db4,gb4]@3 ~ [bb3,db4,gb4]@2", // Db7 Gb
  BA: "db3@5 ~ [db4,f4,ab4]@3 ~ db3@2 [db4,gb4,bb4]@11 ~", // Db Gb
  BB: "eb3@5 ~ [db4,eb4,g4,bb4]@3 ~@3 eb3@5 ~ [db4,eb4,g4,bb4]@3 ~ eb3@2", // Eb7
  BC: "db3@5 ~ [f4,ab4,b4,db5]@3 ~@3 db3@5 ~ [f4,ab4,b4,db5]@3 ~ [f4,ab4,b4,db5]@2", // Db7
  BD: "eb3@5 ~ [db4,eb4,g4,bb4]@3 ~ eb3@2 [db4,eb4,g4,bb4]@3 ~@3 [db4,eb4,g4,bb4]@5 ~", // Eb7
  BE: "ab3@5 ~ [c4,eb4,ab4]@3 ~ ab3@2 db3@5 ~ [db4,f4,ab4]@3 ~ [db4,f4,ab4]@2", // Ab Db
  BF: "ab3@5 ~ [eb4,gb4,ab4,c5]@3 ~ ab3@2 ab3@5 ~ [eb4,gb4,ab4,c5]@3 ~@3", // Ab7
  BG: "~@4 db3@2 [f4,ab4,b4,db5]@3 ~ [f4,ab4,b4,db5]@2 ~@4 db3@2 [f4,ab4,b4,db5]@5 ~", // Db7
  BH: "~@4 ab3@2 [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@2 ~@4 ab3@2 [c4,eb4,ab4]@5 ~", // Ab
  BI: "~@6 [b3,db4,f4,ab4]@3 ~ [b3,db4,f4,ab4]@2 ~@6 [b3,db4,f4,ab4]@5 ~", // Db7
  BJ: "~@6 [db4,eb4,g4,bb4]@5 ~@7 [db4,eb4,g4,bb4]@3 ~ [db4,eb4,g4,bb4]@2", // Eb7
  BK: "~@6 [eb4,gb4,ab4,c5]@3 ~ [eb4,gb4,ab4,c5]@2 ~@4 db3@2 [db4,f4,ab4]@5 ~", // Ab7 Db
  BL: "~@6 [eb4,gb4,ab4,c5]@5 ~@5 db3@2 [db4,f4,ab4]@3 ~ [db4,f4,ab4]@2", // Ab7 Db
  BM: "~@4 ab3@2 [eb4,gb4,ab4,c5]@5 ~@7 [db4,f4,ab4]@5 ~", // Ab7 Db
  BN: "~@6 [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@2 ~@4 db3@2 [ab3,db4,f4]@3 ~ [ab3,db4,f4]@2", // Ab Db
  BO: "~@4 ab3@2 [eb4,gb4,ab4,c5]@3 ~ [eb4,gb4,ab4,c5]@2 ~@6 [db4,f4,ab4]@3 ~ [db4,f4,ab4]@2", // Ab7 Db
  BP: "~@6 [c4,eb4,ab4]@5 ~@5 ab3@2 [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@2", // Ab
  BQ: "~@4 db3@2 [f4,ab4,b4,db5]@5 ~ [f4,ab4,b4,db5]@5 ~ [f4,ab4,b4,db5]@3 ~ [f4,ab4,b4,db5]@2", // Db7
  BR: "~@4 ab3@2 [eb4,gb4,ab4,c5]@5 ~@5 ab3@2 [eb4,gb4,ab4,c5]@5 ~", // Ab7
  BS: "~@6 [db4,eb4,g4,bb4]@5 ~ [db4,eb4,g4,bb4]@5 ~ [db4,eb4,g4,bb4]@3 ~ [db4,eb4,g4,bb4]@2", // Eb7
  BT: "~@6 [c4,eb4,ab4]@5 ~@5 db3@2 [db4,f4,ab4]@3 ~ [db4,f4,ab4]@2", // Ab Db
})).s("gm_electric_guitar_clean").gain(0.5)

// chords · brass section · "Horns"
const brass_section = note(`<
  ~@22 A B A C D E F@2 G@3 H I J@2 H K L@3 M@2 N@2 O P@2 Q R S B S C D E F@2 T@4 U@2 V ~ W@2 M@2 X@2 Y O Z@3 AA S AB AC
  AD D E AE@2 AF ~@7 AG AH B S C D E AE@2 AI AH B S C D E AE@6
>`.pickRestart({
  A: "b5 ab5", B: "[eb5,ab5] ~@3", C: "[c5,gb5]@2 ~ [c5,gb5]", D: "[f5,ab5]!2", E: "[f5,ab5]@9 ~ [f5,ab5]@14",
  F: "[g5@12 [db5,f5]@9 ~ [c5,eb5]@14 [f5,ab5]@12]/2", // Db Cm Fm
  G: "[[gb5,ab5]@12 [f5,ab5]@9 ~ [g5,db6]@31 ~@11 [g5,db6]@2 [g5,db6]@3 ~ [g5,db6]@2]/3", H: "[ab5,c6] [eb5,ab5]@3",
  I: "~ [c5,eb5] ~ [c5,eb5]", J: "[[eb5,ab5]@21 ~ [ab5,c6]@9 ~@11 [ab5,c6]@6]/2", K: "[ab5,c6]@9 ~ [c5,gb5]@14",
  L: "[[ab5,c6]@6 [eb5,ab5]@15 ~ [ab5,c6]@9 ~@11 gb5@3 ~ f5@14 gb5@12]/3", M: "[f5@12 gb5@9 ~ f5@14 gb5@12]/2",
  N: "[ab5@12 gb5@6 gb5@3 ~ g5@26]/2", O: "f5", P: "[g5@21 ~ f5@18 ~@2 eb5@6, ~@41 b4@6 ~]/2", Q: "[c5,eb5] [db5,f5]",
  R: "[eb5,gb5]", S: "[f5,b5] [f5,ab5]",
  T: "[[gb5,ab5]@12 [f5,ab5]@9 ~ [g5,db6]@14 ~@4 [g5,db6]@2 [g5,db6]@3 ~ ab5@14 [eb5,ab5]@9 ~ [ab5,c6]@6 [c5,eb5]@9 ~@5 [c5,eb5]@6, ~@23 c6 ~@24]/4", // Gbsus2 Fm Gdim Ab5 Ab Cm
  U: "[[eb5,ab5]@12 [eb5,ab5]@9 ~ [ab5,c6]@9 ~@11 [ab5,c6]@6]/2", V: "c6@9 ~ [eb5,ab5]@14",
  W: "[[ab5,c6]@6 [eb5,ab5]@15 ~ [ab5,c6]@9 ~@11 gb5@6]/2", X: "[f5@12 gb5@9 ~ ab5@14 gb5@12]/2", Y: "g5",
  Z: "[g5@21 ~ f5@12 b4@12 [c5,eb5]@8 [c5,eb5]@6 [db5,f5]@6 [db5,f5]@6]/3", AA: "[eb5,gb5] ~ eb5@2",
  AB: "[eb5,ab5]@11 ~@13", AC: "[f5,b5] ~", AD: "gb5@2 ~ [c5,gb5]",
  AE: "[g5@12 [db5,f5]@9 ~@13 ab5@2 b5@6 b5@6, ~@11 [c5,eb5]@7 [f5,ab5]@6]/2", // Db Cm Fm
  AF: "eb6@6 db6@3 ~ b5@2 db6@3 ~ b5@8, [gb5,ab5] [f5,ab5]", // Gbsus2 Fm
  AG: "[eb5,gb5]@6 [eb5,gb5,ab5]@6 [eb5,gb5,ab5]@3 ~ [c5,gb5,b5]@8", AH: "f5 [f5,ab5]",
  AI: "[eb5,gb5]@6 [gb5,ab5]@6 [gb5,ab5]@3 ~ [gb5,b5]@8", // Ebm Gbsus2 B5
})).s("gm_brass_section").gain(0.36)

// drums · kick
const kick = s("bd").struct("x ~@4 x!2 ~@5").gain(0.64)

// drums · rim
const rim = s("rim").struct("~ x ~ x").gain(0.64)

// drums · snare
const snare = s("sd").struct("<~ A@10 B C@9 D C@9 D@2 C@7 D C@9 E C@9 D E C@11 D C@2 E C@2 D C@37>".pickRestart({
  A: "~ x ~ x", B: "~@13 x!4 ~@2 x!4 ~", C: "~@5 x!2 ~@10 x!2 ~@5", D: "~@5 x!2 ~@6 x!10 ~",
// … 31 more lines

More by Jim Croce