Strudelify
Rock the Boat cover art

Rockin' Soul

Rock the Boat

Hues Corporation

KeyE♭ majorTempo110 bpm
0:00/0:00
// Rock the Boat — Hues Corporation
// 110 bpm, 4/4, key D# 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 (4/4 at bar 1, 3/4 at bar 30, 4/4 at bar 31, 3/4 at bar 54, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/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.

// other · piano
const piano = note("<A@4 ~@10 B C@2 D@2 E@6 F@2 G@2 ~@10 H I H J K J L M N O P Q R@3 ~@28>".pickRestart({
  A: "[~ ab2@4 ~@3]/2", B: "~@2 eb3@3 eb3@3", C: "[g2@2 c3@8 eb3@3 eb3@3]/2", D: "[g2@4 f2@15 ~ g2@6 c3@6]/2",
  E: "[g2@4 f2@15 ~ g2@6 g2@10 g3@3 f3@3 f2@2 g3@3 f3@3 f2@2 g3@3 f3@3 bb1@2 g3@3 f3@3 bb1@2 eb3@8 g2@8 c3@8 b2@4]/6",
  F: "[bb2 ab2@2 g2@2 f2@2 bb2]/2", G: "[eb3@27 ~ eb3@4]/2", H: "eb3@3 eb3@3 g2@2", I: "c3", J: "f2@15 ~",
  K: "g2@3 c3@3 g2@2", L: "g2@3 g2@5", M: "g3@3 f3@3 f2@2 g3@3 f3@3 f2@2", N: "g3@3 f3@3 bb1@2 g3@3 f3@3 bb1@2",
  O: "~ eb3 d3@2", P: "c3@2 b2 bb2", Q: "ab2 g2", R: "[f2@7 ~ bb2@3 ~ eb3@27 ~ eb3@4 ~@4]/3",
})).s("gm_piano").gain(0.45).pan(0.2)

// chords · piano
const piano_2 = note(`<
  A@2 B@2 C@4 D E@2 F@4 G@2 H@2 I@8 J@2 K L K L M N M N O P Q R Q S T U V W X Y Z AA AB@8 AC@2 AD@8 AE@8 AF@5
>`.pickRestart({
  A: "[~@4 [ab3,c4,eb4]@16 [bb3,d4,g4]@3 [bb3,d4,f4]@3 [bb3,d4,f4]@6]/2", // Ab Gm Bb
  B: "[[bb3,d4,g4]@2 [bb3,d4,f4]@2 [ab3,c4,eb4]@16 [bb3,d4,g4]@3 [bb3,d4,f4]@2 ~ [bb3,d4,f4]@6]/2", // Gm Bb Ab Gm Bb
  C: "[[bb3,d4,g4]@2 [bb3,d4,f4]@2 [ab3,c4,eb4]@16 [bb3,d4,g4]@3 [bb3,d4,f4]@9]/2", // Gm Bb Ab Gm Bb
  D: "[bb3,d4,g4] [bb3,d4,f4] [bb3,eb4,g4]@6", E: "[[g3,bb3,eb4] [ab3,c4,eb4]@2 [c4,eb4,ab4]@2 [bb3,eb4,g4]@3]/2",
  F: "[[g3,bb3,eb4]@2 [ab3,c4,eb4]@4 [c4,eb4,ab4]@4 [bb3,eb4,g4]@8 [bb3,db4,gb4]@4 ~ [f3,ab3,db4]@3 [g3,bb3,eb4]@3 [g3,bb3,eb4]@3]/4", // Eb Ab Eb Gb Db Eb
  G: "[[bb3,d4,g4]@2 [g3,c4,eb4]@8 [g3,bb3,eb4]@3 [g3,bb3,eb4]@3]/2", // Gm Cm Eb
  H: "[[bb3,d4,g4]@2 [c4,f4,ab4]@8 [bb3,d4,g4]@3 [g3,c4,eb4]@3]/2", // Gm Fm Gm Cm
  I: "[[g3,bb3,d4]@4 [f3,ab3,c4]@16 [g3,bb3,d4]@6 [g3,bb3,d4]@10 [bb3,d4,g4]@3 [ab3,c4,f4]@5 [bb3,d4,g4]@3 [ab3,c4,f4]@5 [g3,bb3,d4]@3 [f3,ab3,c4]@5 [g3,bb3,d4]@3 [f3,bb3,d4]@5 [g3,bb3,eb4]@3 [g3,bb3,eb4]@5 [g3,b3,eb4]@3 [g3,b3,eb4]@5 [g3,c4,eb4]@3 [g3,c4,eb4]@5 [g3,b3,eb4]@3 [g3,b3,eb4]@5 [ab3,c4,eb4]@8 [g3,bb3,d4]@8 [a3,c4,eb4]@8 [ab3,d4,f4]@4]/8", // Gm Fm Gm Fm Gm Fm Gm Fm …
  J: "[[g3,bb3,eb4]@7 ~]/2", K: "[ab3,c4,eb4]", L: "[bb3,d4,g4]@3 [bb3,d4,f4]@9 [bb3,d4,g4]@2 [bb3,d4,f4]@2",
  M: "[bb3,eb4,g4]@3 [g3,bb3,eb4]", N: "[ab3,c4,eb4] [c4,eb4,ab4]", O: "[bb3,eb4,g4]",
  P: "[bb3,db4,gb4]@4 ~ [f3,ab3,db4]@3", Q: "[g3,bb3,eb4]@3 [g3,bb3,eb4]@3 [bb3,d4,g4]@2", R: "[g3,c4,eb4]",
  S: "[c4,f4,ab4]", T: "[bb3,d4,g4]@3 [g3,c4,eb4]@3 [g3,bb3,d4]@2", U: "[f3,ab3,c4]", V: "[g3,bb3,d4]@3 [g3,bb3,d4]@5",
  W: "[bb3,d4,g4]@3 [ab3,c4,f4]@5 [bb3,d4,g4]@3 [ab3,c4,f4]@5", // Gm Fm Gm Fm
  X: "[g3,bb3,d4]@3 [f3,ab3,c4]@5 [g3,bb3,d4]@3 [f3,bb3,d4]@5", // Gm Fm Gm Bb
  Y: "[g3,bb3,eb4]@3 [g3,bb3,eb4]@5 [g3,b3,eb4]@3 [g3,b3,eb4]@5", // Eb Gaug
  Z: "[g3,c4,eb4]@3 [g3,c4,eb4]@5 [g3,b3,eb4]@3 [g3,b3,eb4]@5", AA: "[ab3,c4,eb4] [g3,bb3,d4]",
  AB: "[[a3,c4,eb4]@7 ~ [ab3,d4,f4]@3 ~ [g3,bb3,eb4]@28 ~@4 [ab3,c4,eb4]@15 ~ g4@3 f4@4 ~ g4@3 f4@4 ~ [ab3,c4,eb4]@15 ~ g4@3 f4@4 ~ g4@3 f4@4 ~ [ab3,c4,eb4]@15 ~ [bb3,d4,g4]@3 f4, ~@60 [bb3,d4]@7 ~ [bb3,d4]@7 ~@17 [bb3,d4]@7 ~ [bb3,d4]@7 ~@21]/8", // Adim Ddim Eb Ab Gm Bb
  AC: "[~@4 g4@3 f4@4 ~ [ab3,c4,eb4]@15 ~ [bb3,d4,g4]@3 f4, ~@4 [bb3,d4]@7 ~@21]/2", // Ab Gm Bb
  AD: "[~@4 g4@3 f4@4 ~ [g3,bb3,eb4]@16 [ab3,c4,eb4]@16 [g3,bb3,eb4]@16 [ab3,c4,eb4]@16 [g3,bb3,eb4]@16 [ab3,c4,eb4]@16 [g3,bb3,eb4]@16 [ab3,c4,eb4]@4, ~@4 [bb3,d4]@7 ~@117]/8", // Eb Ab Eb Ab Eb Ab Eb Ab …
  AE: "[~@3 [g3,bb3,eb4]@4 [ab3,c4,eb4]@4 [g3,bb3,eb4]@4 [ab3,c4,eb4]@4 [g3,bb3,eb4]@4 [ab3,c4,eb4]@4 [g3,bb3,eb4]@4 [ab3,c4,eb4]]/8", // Eb Ab Eb Ab Eb Ab Eb Ab
  AF: "[~@12 [g3,bb3,eb4]@16 [ab3,c4,eb4]@16 [g3,bb3,eb4]@16 [ab3,c4,eb4]@14 [g3,bb3,eb4]!2 ~@4]/5", // Eb Ab Eb Ab Eb
})).s("gm_piano").gain(0.4).pan(0.8)

// bass · acoustic bass
const bass = note(`<
  A@5 B C B D E F E F G@2 H I J K L M@2 N O P Q R S@2 T U T U V W V W V X Y Z AA AB AC AB AD AB AE AF@2 AG AH@3 AI AJ AI
  AJ AI AJ AI AK AL AM AL AM AL AM AL AM AL AM AL AM AL AM AL AM AL AM AL AN
>`.pickRestart({
  A: "[~@4 ab2@16 bb2@16 ab2@16 bb2@16 ab2@3 ab2 f2@2 eb2@2 ab2@3 ab2]/5",
  B: "f2@2 eb2@2 bb2@3 bb2 g2@2 f2@2 bb2@2 bb2@2", C: "g2@2 f2@2 ab2@3 ab2 f2@2 eb2@2 ab2@3 ab2",
  D: "g2@2 f2@2 eb2@3 eb2 c2@2 bb1@2 eb2@3 eb2", E: "c2@2 bb1@2 ab2@3 ab2 eb2@2 f2@2 ab2@3 ab2",
  F: "eb2@2 f2@2 eb2@3 eb2 c2@2 bb1@2 eb2@3 eb2",
  G: "[bb1@2 c2@2 gb2@7 gb2 db2@3 db2@3 db2@2 eb2@4 bb2@2 ~ eb3@3 g2@2]/2", H: "bb2@4 c2@3 c2 c2@2 g1@2 c2@3 c2",
  I: "c2@2 g1@2 eb2@4 bb2@2 ~ eb3@3 g2@2", J: "bb2@3 ~ f2@3 f2 f2@2 c2@2 f2@3 f2",
  K: "f2@2 c2@2 g2@2 ~ g2 d3@3 eb3@3 eb3@2", L: "d3@4 f2@3 f2 f2@2 c2@2 f2@3 f2",
  M: "[f2@2 c2@2 g2@3 g2 g2@2 d2@2 g2@3 d3@3 g2@2 f2@3 f2 f2@2 c2@2 f2@3 f2]/2",
  N: "f2@2 c2@2 bb1@3 bb1 bb1@2 bb1@2 bb1@3 bb1", O: "bb1@2 bb1@2 eb2@6 f2 gb2 g2@2 ab2 bb2",
  P: "b2 ~ c3@6 c3@2 b2@4 c3 bb2", Q: "g2 eb2 ab2@2 eb2 ab2 g2@2", R: "d2 g2 f2@4 bb2@2", S: "[eb2@14 eb2 f2]/2",
  T: "ab2@3 ab2 f2@2 eb2@2 ab2!2 ~ ab2 f2@2 eb2@2", U: "bb2@3 bb2 g2@2 f2@2 bb2@2 bb2@2 g2@2 f2@2",
  V: "eb2@3 eb2 bb1@2 c2@2 eb2@3 eb2 bb1@2 c2@2", W: "ab2@3 ab2 eb2@2 f2@2 ab2@3 ab2 eb2@2 f2@2",
  X: "gb2@7 gb2 db2@3 db2@3 db2@2", Y: "eb2@4 bb2@2 ~ eb3@3 g2@2 bb2@4", Z: "c2@3 c2 c2@2 g1@2 c2@3 c2 c2@2 g1@2",
  AA: "eb2@4 bb2@2 ~ eb3@3 g2@2 bb2@3 ~", AB: "f2@3 f2 f2@2 c2@2 f2@3 f2 f2@2 c2@2",
  AC: "g2@2 ~ g2 d3@3 eb3@3 eb3@2 d3@4", AD: "g2@3 g2 g2@2 d2@2 g2@3 d3@3 g2@2",
  AE: "bb1@3 bb1 bb1@2 bb1@2 bb1@3 bb1 bb1@2 bb1@2",
  AF: "[eb2@6 f2 gb2 g2@2 ab2 bb2 b2 ~ c3@6 c3@2 b2@4 c3 bb2 g2@2 eb2@2]/2", AG: "ab2@2 eb2 ab2 g2@2 d2 g2",
  AH: "[f2@7 ~ bb2@3 ~ eb2@23 ~ eb2 bb1 eb2@2 bb2@2 c3@2 ab2@3 ab2]/3", AI: "f2@2 eb2@2 ab2@3 ab2 f2@2 eb2@2 bb2@3 bb2",
  AJ: "g2@2 f2@2 bb2@2 bb2@2 g2@2 f2@2 ab2@3 ab2", AK: "g2@2 f2@2 bb2@2 bb2@2 g2@2 f2@2 eb2@3 eb2",
  AL: "bb1@2 c2@2 eb2@3 eb2 bb1@2 c2@2 ab2@3 ab2", AM: "eb2@2 f2@2 ab2@3 ab2 eb2@2 f2@2 eb2@3 eb2",
  AN: "eb2@2 f2@2 ab2@3 ab2 eb2@2 f2 eb2 ~@4",
})).s("gm_acoustic_bass").gain(0.45)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A B C B C B C B D E F E G H@2 I@2 J@2 K@8 L@2 M N M N O P O P Q R S T S U V W X Y Z AA AB AC AD@3 AE AF AE AF AE AF AE
  AG AH AI AH AI AH AI AH AI AH AI AH AI AH AI AH AI AH AI AH AJ
>`.pickRestart({
  A: "~@4 [ab3,c4,eb4]@3 [ab3,c4,eb4] [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [ab3,c4,eb4]@3 [ab3,c4,eb4]", // Ab
  B: "[c4,eb4]@2 [ab3,c4]@2 [g3,bb3,d4]@3 [f3,bb3,d4]@3 [f3,bb3,d4]@2 [bb3,d4,f4]@2 [bb3,d4,f4]@2", // Cm Ab Gm Bb
  C: "[bb3,d4,g4]@2 [f3,bb3,d4]@2 [ab3,c4,eb4]@3 [ab3,c4,eb4] [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [ab3,c4,eb4]@3 [ab3,c4,eb4]", // Gm Bb Ab
  D: "[bb3,d4,g4]@2 [f3,bb3,d4]@2 [g3,bb3,eb4]@3 [g3,bb3,eb4] [g3,bb3,eb4]@2 [bb3,eb4,g4]@2 [g3,bb3,eb4]@3 [g3,bb3,db4]", // Gm Bb Eb Gdim
  E: "[g3,bb3,eb4]@2 [g3,bb3,eb4]@2 [ab3,c4,eb4]@3 [ab3,c4,eb4] [c4,eb4]@2 [ab3,c4]@2 [ab3,c4,eb4]@2 [ab3,c4,eb4]@2", // Eb Ab Cm Ab
  F: "[ab3,c4]@2 [ab3,c4,eb4]@2 [g3,bb3,eb4]@3 [g3,bb3,eb4] [g3,bb3,eb4]@2 [bb3,eb4,g4]@2 [g3,bb3,eb4]@3 [g3,bb3,db4]", // Ab Eb Gdim
  G: "[ab3,c4]@2 [ab3,c4,eb4]@2 [g3,bb3,eb4]@3 [g3,bb3,eb4] [bb3,eb4,g4]@2 [bb3,eb4]@2 [bb3,eb4]@3 [g3,bb3,eb4]", // Ab Eb Eb5 Eb
  H: "[[g3,bb3]@2 [g3,bb3,eb4]@2 [bb3,db4]@4 [bb3,gb4]@4 [bb3,db4] ~ [db4,f4]@4 [f3,ab3,db4] ~ [g3,bb3,eb4]@6 [g3,bb3,eb4]@6]/2", // Gm Eb Bbm Ebm Bbm Db Eb
  I: "[[d4,g4,bb4]@2 [c4,eb4,g4]@8 [g3,bb3,eb4]@3 [g3,bb3,eb4]@3]/2", // Gm Cm Eb
  J: "[[d4,g4,bb4]@2 [c4,f4,ab4]@8 [g3,bb3,d4]@3 [g3,c4,eb4]@3]/2", // Gm Fm Gm Cm
  K: "[[g3,bb3,d4]@4 [ab3,c4,f4]@16 [g3,bb3,d4]@6 [g3,bb3,d4]@10 [d4,g4,bb4]@3 [d4,f4,ab4]@5 [d4,g4,bb4]@3 [d4,f4,ab4]@5 [bb3,d4,g4]@3 [ab3,c4,f4]@5 [bb3,d4,g4]@3 [bb3,d4,f4]@5 [g3,bb3,eb4]@8 [g3,b3,eb4]@8 [g3,c4,eb4]@8 [g3,b3,eb4]@8 [ab3,c4,eb4]@8 [g3,bb3,d4]@8 [a3,c4,eb4]@8 [ab3,bb3,d4]@4]/8", // Gm Fm Gm Ddim Gm Ddim Gm Fm …
  L: "[[eb3,g3,bb3]@31 ~]/2", // Eb
  M: "[ab3,c4,eb4]@3 [ab3,c4,eb4] [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [ab3,c4,eb4]@3 [ab3,c4,eb4] [c4,eb4]@2 [ab3,c4]@2", // Ab Cm Ab
  N: "[g3,bb3,d4]@3 [f3,bb3,d4]@3 [f3,bb3,d4]@2 [bb3,d4,f4]@2 [bb3,d4,f4]@2 [bb3,d4,g4]@2 [f3,bb3,d4]@2", // Gm Bb Gm Bb
  O: "[g3,bb3,eb4]@3 [g3,bb3,eb4] [g3,bb3,eb4]@2 [bb3,eb4,g4]@2 [g3,bb3,eb4]@3 [g3,bb3,db4] [g3,bb3,eb4]@2 [g3,bb3,eb4]@2", // Eb Gdim Eb
  P: "[ab3,c4,eb4]@3 [ab3,c4,eb4] [c4,eb4]@2 [ab3,c4]@2 [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [ab3,c4]@2 [ab3,c4,eb4]@2", // Ab Cm Ab
  Q: "[g3,bb3,eb4]@3 [g3,bb3,eb4] [bb3,eb4,g4]@2 [bb3,eb4]@2 [bb3,eb4]@3 [g3,bb3,eb4] [g3,bb3]@2 [g3,bb3,eb4]@2", // Eb Eb5 Eb Gm Eb
  R: "[bb3,db4]@4 [bb3,gb4]@4 [bb3,db4] ~ [db4,f4]@4 [f3,ab3,db4] ~", S: "[g3,bb3,eb4]@3 [g3,bb3,eb4]@3 [d4,g4,bb4]@2",
  T: "[c4,eb4,g4]", U: "[c4,f4,ab4]", V: "[g3,bb3,d4]@3 [g3,c4,eb4]@3 [g3,bb3,d4]@2", W: "[ab3,c4,f4]",
  X: "[g3,bb3,d4]@3 [g3,bb3,d4]@5", Y: "[d4,g4,bb4]@3 [d4,f4,ab4]@5 [d4,g4,bb4]@3 [d4,f4,ab4]@5",
  Z: "[bb3,d4,g4]@3 [ab3,c4,f4]@5 [bb3,d4,g4]@3 [bb3,d4,f4]@5", AA: "[g3,bb3,eb4] [g3,b3,eb4]",
  AB: "[g3,c4,eb4] [g3,b3,eb4]", AC: "[ab3,c4,eb4] [g3,bb3,d4]",
  AD: "[[a3,c4,eb4]@7 ~ [ab3,bb3,d4]@3 ~ [eb3,g3,bb3]@31 ~ [ab3,c4,eb4]@3 [ab3,c4,eb4]]/3", // Adim Bb7 Eb Ab
  AE: "[ab3,c4,eb4]@2 [c4,eb4]@2 [ab3,c4,eb4]@3 [c4,eb4,ab4] [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [bb3,d4,f4]@3 [f3,bb3,d4]", // Ab Cm Ab Bb
  AF: "[bb3,d4]@2 [bb3,d4,f4]@2 [d4,f4]@3 [f3,bb3,d4] [bb3,d4,f4]@2 [d4,f4]@2 [ab3,c4,eb4]@3 [ab3,c4,eb4]", // Bb Dm Bb Dm Ab
  AG: "[bb3,d4]@2 [bb3,d4,f4]@2 [d4,f4]@3 [f3,bb3,d4] [bb3,d4,f4]@2 [d4,f4]@2 [g3,bb3,eb4]@3 [g3,bb3,eb4]", // Bb Dm Bb Dm Eb
  AH: "[bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [g3,bb3,eb4]@3 [g3,bb3,db4] [bb3,db4,eb4]@2 [g3,bb3,eb4]@2 [ab3,c4,eb4]@3 eb4", // Eb Gdim Eb7 Eb Ab
  AI: "[c4,eb4]@2 [ab3,c4,eb4]@2 [ab3,c4,eb4]@3 [ab3,c4,eb4] [c4,eb4]@2 [ab3,c4,eb4]@2 [g3,bb3,eb4]@3 [g3,bb3,eb4]", // Cm Ab Cm Ab Eb
  AJ: "[c4,eb4]@2 [ab3,c4,eb4]@2 [ab3,c4,eb4]@3 [ab3,c4,eb4] [c4,eb4]@2 [ab3,c4,eb4] [g3,bb3,eb4] ~@4", // Cm Ab Cm Ab Eb
})).s("gm_acoustic_guitar_nylon").gain(0.25).pan(0.1)

// other · electric guitar clean
const electric_guitar_clean = note("<~@8 A B C B D@2 ~@19 E F E F G ~@23 H@8 I@8 J@5>".pickRestart({
  A: "~ eb5@3", B: "~ db5@3 c5@11 ~", C: "c5 d5@3 eb5@12", D: "[c5 d5@3 eb5@16 ~@12]/2", E: "eb5@13 db5@3",
  F: "c5@11 ~ c5 d5@3", G: "eb5",
  H: "[~@12 eb5@13 db5@3 c5@12 c5 d5@3 eb5@13 db5@3 c5@12 c5 d5@3 eb5@13 db5@3 c5@12 c5 d5@3 eb5@13 db5@3 c5@4]/8",
  I: "[~@8 c5 d5@3 eb5@13 db5@3 c5@12 c5 d5@3 eb5@13 db5@3 c5@12 c5 d5@3 eb5@13 db5@3 c5@12 c5 d5@3 eb5@13 db5@3 c5@4]/8",
  J: "[~@8 c5 d5@3 eb5@13 db5@3 c5@12 c5 d5@3 eb5@13 db5@3 c5@12 c5 d5@3 ~@4]/5",
})).s("gm_electric_guitar_clean").gain(0.35).pan(0.9)

// chords · trombone
const trombone = note("<~@2 A B@2 ~@27 C D ~@23 E@5 F G H I J@4 K@8 L@2 M@2>".pickRestart({
  A: "c4@2 g3@2 bb3@11 ~", B: "[c3@2 eb3@2 g3@2 ~ g3@2 ~ f3@9 ~@13]/2", C: "~@6 g4@4 f4 ~ bb3@2 c4@2", D: "eb4 ~@15",
  E: "[~@8 c5@2 g4 ~ bb4@10 ~@2 c4 eb4@3 g4@2 ~ g4@2 ~ f4@5 ~ c5@2 g4@2 bb4@10 ~@2 c4 eb4@3 g4@2 ~ g4@2 ~ f4@10 ~@4]/5",
  F: "~@4 eb4 db4@2 ~ bb3 db4@2 ~ eb4@4", G: "db4@2 bb3@2 ab3@2 gb3 eb3", H: "db3@2 eb3@7 ~@7",
  I: "~@2 gb3 ab3 bb3 ab3 gb3 ab3@2 [ab3,bb3] gb3 ~@5", // Absus2
  J: "[~ eb3 gb3 ab3 bb3 ab3 gb3 ab3@2 ab3 gb3 ~ ab3 gb3 eb3 ab3@2 [ab3,bb3] gb3 ~@13]/2", // Absus2
  K: "[~ [eb4,gb4] [gb4,bb4] [ab4,db5] [bb4,eb5] [ab4,db5] [gb4,bb4] [ab4,db5]@2 [ab4,db5] [gb4,bb4] ~ [ab4,c5] [gb4,bb4] [eb4,gb4] [ab4,c5]@2 [ab4,bb4,c5,db5] [gb4,bb4] ~@13]/2", // Ebm Gb Db5 Eb5 Db5 Gb Db5 Gb …
  L: "[~ gb4 bb4 db5 eb5 db5 bb4 db5@2 db5 bb4 ~ c5 bb4 gb4 c5@2 [c5,db5] bb4 ~@13]/2", // Dbmaj7
  M: "[~ gb4 bb4 db5 eb5 db5 bb4 db5@2 db5 bb4 ~ c5 bb4 gb4 c5@2 [c5,db5] bb4 ~@7 eb4 eb4@2 ~@3]/2", // Dbmaj7
})).s("gm_trombone").gain(0.45).pan(0.3)

// chords · trumpet
const trumpet = note("<~@2 A B@2 ~@27 C D ~@25 E@3 F G H I J@4 K@8 L@2 M@2>".pickRestart({
  A: "c5@2 g4@2 bb4@11 ~", B: "[c4@2 eb4@2 g4@2 ~ g4@2 ~ f4@9 ~@13]/2", C: "~@6 g5@4 f5 ~ bb4@2 c5@2", D: "eb5 ~@15",
  E: "[~@8 c6@2 g5@2 bb5@11 ~ c5 eb5@3 g5@2 ~ g5@2 ~@3 db6!2 c6!2 bb5!2 gb5 f5 eb5 ~@3, ~@34 f5@9 ~@5]/3",
  F: "~@4 eb5 db5@2 ~ bb4 db5@2 ~ eb5@4", G: "db5@2 bb4@2 ab4@2 gb4 eb4", H: "db4@2 eb4@7 ~@7",
  I: "~@2 gb4 ab4 bb4 ab4 gb4 ab4 ~ [ab4,bb4] gb4 ~@5", // Absus2
  J: "[~ eb4 gb4 ab4 bb4 ab4 gb4 ab4@2 ab4 gb4 ~ ab4 gb4 eb4 ab4@2 [ab4,bb4] gb4 ~@13]/2", // Absus2
  K: "[~ [eb4,gb4] [gb4,bb4] [ab4,db5] [bb4,eb5] [ab4,db5] [gb4,bb4] [ab4,db5]@2 [ab4,db5] [gb4,bb4] ~ [ab4,c5] [gb4,bb4] [eb4,gb4] [ab4,c5]@2 [ab4,bb4,c5,db5] [gb4,bb4] ~@13]/2", // Ebm Gb Db5 Eb5 Db5 Gb Db5 Gb …
  L: "[~ [eb4,gb4,eb5] [gb4,bb4,gb5] [ab4,db5,ab5] [bb4,eb5,bb5] [ab4,db5,ab5] [gb4,bb4,gb5] [ab4,db5,ab5]@2 [ab4,db5,ab5] [gb4,bb4,gb5] ~ [ab4,c5,ab5] [gb4,bb4,gb5] [eb4,gb4,eb5] [ab4,c5,ab5]@2 [ab4,bb4,c5,db5,ab5,bb5] [gb4,bb4,gb5] ~@13]/2", // Ebm Gb Db5 Eb5 Db5 Gb Db5 Gb …
  M: "[~ [eb4,gb4,eb5] [gb4,bb4,gb5] [ab4,db5,ab5] [bb4,eb5,bb5] [ab4,db5,ab5] [gb4,bb4,gb5] [ab4,db5,ab5]@2 [ab4,db5,ab5] [gb4,bb4,gb5] ~ [ab4,c5,ab5] [gb4,bb4,gb5] [eb4,gb4,eb5] [ab4,c5,ab5]@2 [ab4,bb4,c5,db5,ab5,bb5] [gb4,bb4,gb5] ~@7 [g4,bb4,eb5]!2 ~@4]/2", // Ebm Gb Db5 Eb5 Db5 Gb Db5 Gb …
})).s("gm_trumpet").gain(0.54).pan(0.7)

// other · string ensemble 1
const string_ensemble_1 = note("<A@5 ~@3 B C D C E@4 ~@17 F G F G H I J ~@42>".pickRestart({
  A: "[~@2 c4@8 d4@8 c4@8 d4@3 d4@5 ~@6]/5", B: "~ eb4@3", C: "db4 c4@3", D: "d4 eb4@3",
  E: "[d4@2 eb4@8 db4@5 ab3@3 bb3@8 ~@6]/4", F: "eb4@3 db4", G: "c4@3 d4", H: "eb4", I: "db4@5 ab3@3", J: "bb3",
})).s("gm_string_ensemble_1").gain(0.4).pan(0.3)

// other · string ensemble 1
const string_ensemble_1_2 = note("<~@12 A B@3 ~@6 C D E F G ~@10 H I J ~@7 K L@2 M@2 ~@9 N ~@2 O P@16 Q>".pickRestart({
  A: "~@2 [eb4,eb5] [g4,g5]", // Eb G
  B: "[[bb4,bb5]@4 [db5,db6]@6 [b4,b5]@2 [bb4,bb5] [bb4,b4,bb5,b5] [ab4,ab5]@4 [b4,b5] ~ [bb4,bb5]@15 ~@13]/3", // Bb Db B Bb Bmaj7 Ab B Bb
  C: "~@14 bb4 c5", D: "d5 eb5 f5 g5 bb5@8 g5@4", E: "f5@2 g5 c6 g5 f5@2 g5", F: "f5@4 ab5@5 ~ ab5 ~ g5@4",
  G: "~@2 g5 ~ f5@11 ~", H: "~ [eb4,eb5] [g4,g5] [bb4,bb5]",
  I: "[db5,db6]@6 [b4,b5]@2 [bb4,bb5] [bb4,b4,bb5,b5] [ab4,ab5]@4 [b4,b5] ~", J: "[bb4,bb5]@15 ~",
  K: "~@10 bb4 c5 d5 eb5 f5 g5", L: "[bb5@8 b5@5 ~ c6@8 d6@6 eb6@4]/2", M: "[eb6@27 ~@5]/2",
  N: "~@4 [db5,db6]!2 [c5,c6]!2 [bb4,bb5]!2 [gb4,gb5] [f4,f5] [eb4,eb5] ~@3", O: "~@8 [eb5,eb6] ~@7",
  P: "[~@3 [eb5,eb6]@16 [eb5,eb6]@13]/8", Q: "~@10 eb6 eb6@2 ~@3",
})).s("gm_string_ensemble_1").gain(0.45)

// drums · kick
const kick = s("bd").struct(`<
  [~@4 x ~@2 x!2 ~@3 x ~@2 x]
  [x ~@3 x ~@2 x!2 ~@3 x ~@2 x]!25
  [x!2 ~ x]
  [x ~@2 x!2 ~@3 x ~@2 x!2 ~@3]!24
  [x ~@7 x ~@3 x ~@2 x]
  [x ~@3 x ~@2 x!2 ~@3 x ~@2 x]!29
  [x ~@3 x ~@2 x!2 ~@2 x ~@4]
>`).gain(0.45)

// drums · hihat
const hihat = s("hh").struct(`<
  [~@4 x!5 ~ x ~ x!4]
  [x ~ x ~ x!5 ~ x ~ x!4]!25
  [x!2 ~@6]
  [x!5 ~ x ~ x!5 ~ x ~]!24
  [~@12 x!4]
  [x ~ x ~ x!5 ~ x ~ x!4]!29
  [x ~ x ~ x!5 ~ x ~@5]
>`).gain(0.35)

// drums · low tom
const low_tom = s("lt").struct(`<
  [~@5 x ~@2]
  [~ x ~@3 x ~@2]!25
  [~ x ~@2 x ~@3]
  [~@3 x ~@3 x]!24
  [~ x ~@2]
  [~ x ~@3 x ~@2]!29
  [~@2 x ~@7 x!2 ~@4]
>`).gain(0.45)

// drums · crash
const crash = s("cr").struct("<~@26 [~ x ~ x] ~@2 x ~@21 [x!2] ~@29 [~@11 x ~@4]>").gain(0.45)

// drums · tambourine
// … 32 more lines