Strudelify

Rhythm Parade (Beginner)

Asuka Ohta

KeyF majorTempo110 bpm
0:00/0:00
// Rhythm Parade (Beginner) — Asuka Ohta
// 110 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 26, 4/4 at bar 26) are rendered on a constant 4/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 13 "Sousaphone" tuba (copy of ch 3 "Bass Clarinet" clarinet); ch 7 "B♭ Trumpet" trumpet (copy of ch 4 "Alto Saxophone" alto sax)
// note: Transcription provider: pdmx. https://musescore.com/score/5936327; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 77 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. 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 · flute · "Flute/Piccolo"
const flute = note(`<
  A B C D E B F G H B C D E B F I J K L M N K L O P Q ~@3 R S T U R S V W X Y Z AA X Y AB AC AD AE ~@3 AF AG AH AI AJ AK
  AL AM AJ AK AN AO AJ AK AL AM AJ AK AN AO AP AQ AR AS@3 AT
>`.pickRestart({
  A: "~@4 c5@4 f5@3 f5 c5 ~ f5 ~", B: "a5 ~ d6 ~ c6@2 a5 ~ c6@2 d6 e6 f6 ~ c6 ~",
  C: "b5@2 ~@2 d6@2 ~@2 c6@3 ~@3 c6 db6 d6@2 ~@2 d6@2 c6@2 bb5@2 ~@2 d6@2 ~@2",
  D: "c6 ~ a5 ~ bb5@2 ab5 ~ gb5 f5 gb5 f5 gb5 ~@2 f5", E: "gb5 ab5 bb5 b5 c6 bb5 a5 g5 f5@3 f5 c5 ~ f5 ~",
  F: "b5@2 ~@2 d6@2 ~@2 c6@3 ~@3 c6 db6 d6@2 ~@2 d6@2 db6@2 d6@2 ~@2 e6@2 ~@2",
  G: "f6@2 ~@2 d6@2 ~@2 gb6@4 b6@2 ~@2 c7@4 c7@2 b6@2 c7@3 ~@3 d7@2", H: "c7 bb6 a6 g6 f6@2 ~@2 f5@3 f5 c5 ~ f5 ~",
  I: "f6@2 ~@2 d6@2 ~@2 gb6@4 d6@4 [c6,c7]@2 ~@2 [c6,c7]@2 [b5,b6]@2 [c6,c7]@3 ~@3 [d6,d7]@2, ~@6 b6 ~@9", // C B C D
  J: "[c6,c7] [bb5,bb6] [a5,a6] [g5,g6] [f5,f6]@2 ~@2 e6@4 e6@3 e6", K: "d6 e6 gb6 ~ ab6 ~ e6 ~ d6 ~ d6 db6 b5 ~ d6 ~",
  L: "db6 ~ a5 ~ b5 ~ e5 ~ e6@4 e6@3 e6", M: "d6 e6 gb6 ~ ab6 ~ e6 ~ d6 db6 b5 d6 db6 b5 a5@2",
  N: "~@2 e5 ~ e5@2 ~@2 e6@4 e6@3 e6, b5 ~@3", O: "d6 e6 gb6 ~ ab6 ~ e6 ~ c6 b5 a5 c6 b5 a5 g5@2",
  P: "a5@11 ~ e5@2 e5@2 a5@2 ~@2 e6@2 e6@2 a6@2 ~@2 e6@2 ~@2", Q: "a6@11 ~@21",
  R: "a5@3 a5 e5 ~ a5 ~ db6 ~ gb6 ~ e6@2 db6 ~",
  S: "e6@4 gb6@2 ab6@2 a6@2 ~@2 e6@2 ~@2 eb6@2 ~@2 gb6@2 ~@2 e6@3 ~@3 e6 f6",
  T: "gb6 ~ gb6 e6 d6 ~ gb6 ~ e6 ~ db6 ~ d6@2 c6 ~", U: "bb5 a5 bb5 a5 bb5 ~@2 a5 bb5 c6 d6 eb6 e6 d6 db6 b5",
  V: "gb6 ~ gb6 f6 gb6 ~ ab6 ~ a6 ~ gb6 ~ bb6@2 gb6@2, ~@14 eb7 ~",
  W: "[e6,e7]@2 ~@2 [e6,e7]@2 [eb6,eb7]@2 [e6,e7]@3 ~@3 [gb6,gb7]@2 [e6,e7]@2 [d6,d7]@2 [db6,db7]@2 [b5,b6]@2 [a5,a6]@4 ~@4", // E Eb E Gb E D Db B …
  X: "gb5@3 gb5 db5 ~ gb5 ~ bb5 ~ eb6 ~ db6@2 bb5 ~",
  Y: "db6@4 eb6@2 f6@2 gb6@2 ~@2 db6@2 ~@2 c6@2 ~@2 eb6@2 ~@2 db6@3 ~@3 db6 d6",
  Z: "eb6 ~ eb6 db6 b5 ~ eb6 ~ db6 ~ bb5 ~ b5@2 a5 ~", AA: "g5 gb5 g5 gb5 g5 ~@2 gb5 g5 a5 b5 c6 db6 b5 bb5 ab5",
  AB: "eb6 ~ eb6 d6 eb6 ~ f6 ~ gb6 ~ eb6 ~ g6@2 eb6@2, ~@14 c7 ~",
  AC: "[db6,db7]@2 ~@2 [db6,db7]@2 [c6,c7]@2 [db6,db7]@3 ~@5 [d6,d7]@2 ~@2 [d6,d7]@2 [db6,db7]@2 [d6,d7]@3 ~@5", // Db C Db D Db D
  AD: "[eb6,eb7]@2 ~@2 [eb6,eb7]@2 [d6,d7]@2 [eb6,eb7]@3 ~@5 [e6,e7]@4 ~@4 [c6,c7]@8", AE: "[f6,f7]@11 ~@21",
  AF: "~@2 c6 ~ bb6 ~ a6 ~ f6 ~ c6 ~@3 c6 ~", AG: "bb6 ~ a6 ~ f6 ~ g6 ~@3 c7 ~@5",
  AH: "~@2 b5 ~ ab6 ~ g6 ~ f6 ~ d6 ~@3 d6 ~", AI: "e6@3 ~@3 e6@2 e6@2 ~@2 f6@2 ~@2 g6@2 ~@14",
  AJ: "f5@3 f5 c5 ~ f5 ~ a5 ~ d6 ~ c6@2 a5 ~", AK: "c6@4 d6@2 e6@2 f6@2 ~@2 c6@2 ~@2 b5@2 ~@2 d6@2 ~@2 c6@3 ~@3 c6 db6",
  AL: "d6 ~ d6 c6 bb5 ~ d6 ~ c6 ~ a5 ~ bb5@2 ab5 ~", AM: "gb5 f5 gb5 f5 gb5 ~@2 f5 gb5 ab5 bb5 b5 c6 bb5 a5 g5",
  AN: "d6 ~ d6 db6 d6 ~ e6 ~ f6 ~ d6 ~ gb6@2 d6@2, ~@14 b6 ~",
  AO: "[c6,c7]@2 ~@2 [c6,c7]@2 [b5,b6]@2 [c6,c7]@3 ~@3 [d6,d7]@2 [c6,c7]@2 [bb5,bb6]@2 [a5,a6]@2 [g5,g6]@2 [f5,f6]@4 ~@4", // C B C D C Bb A G …
  AP: "~@8 a5@2 a5 g5 f5@2 a5@2", AQ: "c6@4 c6@2 b5@2 c6@4 f6@4 bb6@15 ~", AR: "f6@15 ~ [d6,d7]@8 [e6,e7]@8",
  AS: "[[f6,f7]@91 ~@5]/3", AT: "[f6,f7] ~@4 [e6,e7] [f6,f7] ~",
})).s("gm_flute").gain(0.4)

// bass · clarinet · "Bass Clarinet"
const bass = note(`<
  ~@8 A B C D E B C D F ~@12 G@2 H I G@2 H J K@2 L M K@2 L N O ~@4 P Q R S T@2 U V T@2 U W T@2 U V T@2 U W X Y Z AA@2 AB
  AC
>`.pickRestart({
  A: "~@4 f2 ~ e2 ~", B: "d2 ~ c2 ~ f2 ~ e2 ~", C: "d2 ~ c2 ~ g2 ~ c2 ~", D: "f2 ~ d2 ~ g2 ~@2 g2",
  E: "~ b1 c2 ~ f2 ~ e2 ~", F: "~ b1 f2 ~@5", G: "a2 ~ ab2 ~ gb2 ~ e2 ~", H: "b2 ~ e2 ~ a2 ~ gb2 ~",
  I: "b2 ~@2 b2 ~ eb2 e2 ~", J: "b2 ~@2 b2 ~ eb2 a2 ~", K: "gb2 ~ f2 ~ eb2 ~ db2 ~", L: "ab2 ~ db2 ~ gb2 ~ eb2 ~",
  M: "ab2 ~@2 ab2 ~ c2 db2 ~", N: "ab2@2 ~@4 c2@2 ~@2 a2 ~ c2@2 ~@2", O: "b1@3 ~@3 b1@3 ~@3 b1@2 ~@2 c2@4 ~@12",
  P: "bb2 ~@7", Q: "a2 ~@7", R: "ab2 ~@7", S: "c2@3 ~@3 c2@2 c2@2 ~@2 db2@2 ~@2 c2@2 ~@6 c2@8",
  T: "f2 ~ e2 ~ d2 ~ c2 ~", U: "g2 ~ c2 ~ f2 ~ d2 ~", V: "g2 ~@2 g2 ~ b1 c2 ~", W: "g2 ~@2 g2 ~ b1 f2 ~",
  X: "bb2!2 a2 d3", Y: "g2@4 ~@20 g2@3 ~@3 g2@2", Z: "c2 ~@3 d2 ~ e2 ~", AA: "f2/2", AB: "~ f3 e3 d3 c3 bb2 a2 g2",
  AC: "f2 ~@4 c3 f2 ~",
})).s("gm_electric_bass_finger").gain(0.25)

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~@8 A B C D E B F G H I J K L I J M N ~@4 O P Q R O P S T U V W X U V Y Z AA AB AC AD AC AE@2 AF AG AH AI AJ AK AH AI
  AL AM AH AI AJ AK AH AI AL AM AN AO ~ AP AQ AR AS
>`.pickRestart({
  A: "~@8 f4@3 f4 c4 ~ f4 ~", B: "a4 ~ d5 ~ c5@2 a4 ~ c5@2 d5 e5 f5 ~ c5 ~",
  C: "b4@2 ~@2 d5@2 ~@2 c5@3 ~@3 c5 db5 d5@2 ~@2 d5@2 c5@2 bb4@2 ~@2 d5@2 ~@2",
  D: "c5 ~ a4 ~ bb4@2 ab4 ~ gb4 f4 gb4 f4 gb4 ~@2 f4", E: "gb4 ab4 bb4 b4 c5 bb4 a4 g4 f4@3 f4 c4 ~ f4 ~",
  F: "b4@2 ~@2 d5@2 ~@2 c5@3 ~@3 c5 db5 d5@2 ~@2 d5@2 db5@2 d5@2 ~@2 e5@2 ~@2",
  G: "f5@2 ~@2 d5@2 ~@2 gb5@4 d5@2 ~@2 c5@2 ~@2 c5@2 b4@2 c5@3 ~@3 d5@2", H: "c5 bb4 a4 g4 f4@2 ~@2 e5@6 ~@2",
  I: "e5@3 ~ e5@3 ~", J: "e5 ~ d5 ~ e5@3 ~", K: "e5@3 ~ d5 ~ db5 ~", L: "b4@3 ~ e5@3 ~", M: "e5 ~ d5 ~ c5 ~ b4 ~",
  N: "a4@3 ~@5", O: "a4@3 a4 e4 ~ a4 ~ db5 ~ gb5 ~ e5@2 db5 ~",
  P: "e5@4 gb5@2 ab5@2 a5@2 ~@2 e5@2 ~@2 eb5@2 ~@2 gb5@2 ~@2 e5@3 ~@3 e5 f5",
  Q: "gb5 ~ gb5 e5 d5 ~ gb5 ~ e5 ~ db5 ~ d5@2 c5 ~", R: "bb4 a4 bb4 a4 bb4 ~@2 a4 bb4 c5 d5 eb5 e5 d5 db5 b4",
  S: "gb5 ~ gb5 f5 gb5 ~ ab5 ~ a5 ~ gb5 ~ bb5@2 gb5 ~",
  T: "e5@2 ~@2 e5@2 eb5@2 e5@3 ~@3 gb5@2 e5@2 d5@2 db5@2 b4@2 a4@4 ~@4",
  U: "gb4@3 gb4 db4 ~ gb4 ~ bb4 ~ eb5 ~ db5@2 bb4 ~",
  V: "db5@4 eb5@2 f5@2 gb5@2 ~@2 db5@2 ~@2 c5@2 ~@2 eb5@2 ~@2 db5@3 ~@3 db5 d5",
  W: "eb5 ~ eb5 db5 b4 ~ eb5 ~ db5 ~ bb4 ~ b4@2 a4 ~", X: "g4 gb4 g4 gb4 g4 ~@2 gb4 g4 a4 b4 c5 db5 b4 bb4 ab4",
  Y: "eb5 ~ eb5 d5 eb5 ~ f5 ~ gb5 ~ eb5 ~ g5@2 eb5 ~", Z: "db5@2 ~@2 db5@2 c5@2 db5@3 ~@5 d5@2 ~@2 d5@2 db5@2 d5@3 ~@5",
  AA: "eb5@2 ~@2 eb5@2 d5@2 eb5@3 ~@5 e5@4 ~@4 c5@8", AB: "[c5,f5]@3 ~ c5@3 ~", AC: "c5@3 ~ c5 ~ bb4 ~",
  AD: "c5@3 ~ c5@3 ~", AE: "[[d4,d5]@7 [f4,c5]]/2", AF: "[bb4,f5]@2 [bb4,f5] [f4,c5]",
  AG: "[e4,e5]@3 ~@3 [e4,e5]@2 [e4,e5]@2 ~@2 [f4,f5]@2 ~@2 [g4,g5]@2 ~@14", AH: "f4@3 f4 c4 ~ f4 ~ a4 ~ d5 ~ c5@2 a4 ~",
  AI: "c5@4 d5@2 e5@2 f5@2 ~@2 c5@2 ~@2 b4@2 ~@2 d5@2 ~@2 c5@3 ~@3 c5 db5",
  AJ: "d5 ~ d5 c5 bb4 ~ d5 ~ c5 ~ a4 ~ bb4@2 ab4 ~", AK: "gb4 f4 gb4 f4 gb4 ~@2 f4 gb4 ab4 bb4 b4 c5 bb4 a4 g4",
  AL: "d5 ~ d5 db5 d5 ~ e5 ~ f5 ~ d5 ~ gb5@2 d5 ~",
  AM: "c5@2 ~@2 c5@2 b4@2 c5@3 ~@3 d5@2 c5@2 bb4@2 a4@2 g4@2 f4@4 ~@4", AN: "d5 f5", AO: "c5", AP: "~@4 f4@3 f4 g4@8",
  AQ: "~@4 a4@3 a4 bb4@8", AR: "[a4,c5]", AS: "[a4,c5] ~@4 [g4,e5] [f4,f5] ~",
})).s("gm_alto_sax").gain(0.3)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@8 A B C D E B C F G ~@12 H@2 I J H@2 I K L M N O P M N Q R S T S T U@2 V W B@2 X Y B@2 X Z AA AB AC Y AD AB AC Z AE
  AF ~ AG@2 AH AI
>`.pickRestart({
  A: "~@10 a3 ~@3 a3 ~", B: "~@2 a3 ~@3 a3 ~@3 a3 ~@3 a3 ~", C: "~@2 a3 ~@3 a3 ~@3 bb3 ~@3 bb3 ~",
  D: "~@4 a3@2 ~@6 a3@2 ~@6 bb3@2 bb3@2 bb3@3 ~@3 bb3@2", E: "bb3 ~ db4 ~ c4@2 ~@4 a3 ~@3 a3 ~",
  F: "~@2 a3 ~@3 a3 ~@3 bb3!2 bb3@2 ~@2", G: "bb3 ~ g3 ~ a3@2 ~@10", H: "~@2 db4 ~@3 db4 ~@3 db4 ~@3 db4 ~",
  I: "~@2 d4 ~@3 d4 ~@3 db4 ~@3 db4 ~", J: "~@4 d4@2 d4@2 d4@3 ~@3 d4@2 d4@2 ~@2 f4@2 ~@2 e4@4 ~@4",
  K: "~@2 d4!2 d4@2 ~@2 d4 ~ b3 ~ db4@2 ~@2", L: "gb3@6 bb3 ~", M: "bb3@2 bb3!2", N: "b3 bb3",
  O: "~@4 b3@2 b3@2 b3@3 ~@3 b3@2 b3@2 ~@2 d4@2 ~@2 db4@4 ~@4", P: "gb3@3 bb3", Q: "~@2 b3!2 b3@2 ~@4 c4!2 c4@2 ~@2",
  R: "eb4@2 ~@2 eb4@2 d4@2 eb4@3 ~@5 e4@4 ~@4 c4@8", S: "c4@3 ~ c4@3 ~", T: "c4@3 ~ c4 ~ bb3 ~", U: "[d3@7 f3]/2",
  V: "bb3@2 bb3 f3", W: "e3@3 ~@3 e3@2 e3@2 ~@2 f3@2 ~@2 g3@2 ~@14", X: "~@2 bb3 ~@3 bb3 ~@3 a3 ~@3 a3 ~",
  Y: "~@4 bb3@2 bb3@2 bb3@3 ~@3 bb3@2 bb3@2 ~@2 db4@2 ~@2 c4@4 ~@4", Z: "~@2 bb3!2 bb3@2 ~@2 bb3 ~ g3 ~ a3@2 ~@2",
  AA: "f3@6 a3 ~", AB: "a3@2 a3!2", AC: "bb3 a3", AD: "f3@3 a3", AE: "d4 f4", AF: "c4", AG: "~@4 f3@3 f3 g3@8",
  AH: "f3", AI: "f3 ~@4 e3 f3 ~",
})).s("gm_tenor_sax").gain(0.25)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  ~@8 A B C D E B C D F ~@12 G@2 H I G@2 H J K@2 L M K@2 L N O ~@4 P Q R S T@2 U V T@2 U W T@2 U V T@2 U W X Y Z AA@2 AB
  AC
>`.pickRestart({
  A: "~@4 f3 ~ e3 ~", B: "d3 ~ c3 ~ f3 ~ e3 ~", C: "d3 ~ c3 ~ g3 ~ c3 ~", D: "f3 ~ d3 ~ g3 ~@2 g3",
  E: "~ b2 c3 ~ f3 ~ e3 ~", F: "~ b2 f3 ~@5", G: "a3 ~ ab3 ~ gb3 ~ e3 ~", H: "b3 ~ e3 ~ a3 ~ gb3 ~",
  I: "b3 ~@2 b3 ~ eb3 e3 ~", J: "b3 ~@2 b3 ~ eb3 a3 ~", K: "gb3 ~ f3 ~ eb3 ~ db3 ~", L: "ab3 ~ db3 ~ gb3 ~ eb3 ~",
  M: "ab3 ~@2 ab3 ~ c3 db3 ~", N: "ab3@2 ~@4 c3@2 ~@2 a3 ~ c3@2 ~@2", O: "b2@3 ~@3 b2@3 ~@3 b2@2 ~@2 c3@4 ~@12",
  P: "bb2 ~@7", Q: "a2 ~@7", R: "ab2 ~@7", S: "c3@3 ~@3 c3@2 c3@2 ~@2 db3@2 ~@2 c3@2 ~@6 c3@8",
  T: "f3 ~ e3 ~ d3 ~ c3 ~", U: "g3 ~ c3 ~ f3 ~ d3 ~", V: "g3 ~@2 g3 ~ b2 c3 ~", W: "g3 ~@2 g3 ~ b2 f3 ~",
  X: "bb2!2 a2 d3", Y: "g2@4 ~@20 g2@3 ~@3 g2@2", Z: "c2 ~@3 d2 ~ e2 ~", AA: "f2/2", AB: "~ f3 e3 d3 c3 bb2 a2 g2",
  AC: "f2 ~@4 c3 f2 ~",
})).s("gm_baritone_sax").gain(0.25)

// other · french horn · "Mellophone"
const french_horn = note(`<
  ~@8 A B C D E B C F G ~@12 H@2 I J K L M N O@2 P Q O@2 P R S T ~ U@2 V W X Y B@2 Z AA B@2 Z AB AC AD AE AF AC AD AE AG
  AH AI AJ AK@3 AL
>`.pickRestart({
  A: "~@10 a3 ~@3 a3 ~", B: "~@2 a3 ~@3 a3 ~@3 a3 ~@3 a3 ~", C: "~@2 a3 ~@3 a3 ~@3 bb3 ~@3 bb3 ~",
  D: "~@4 a3@2 ~@6 a3@2 ~@6 bb3@2 bb3@2 bb3@3 ~@3 bb3@2", E: "bb3 ~ db4 ~ c4@2 ~@4 a3 ~@3 a3 ~",
  F: "~@2 a3 ~@3 a3 ~@3 bb3!2 bb3@2 ~@2", G: "bb3 ~ g3 ~ a3@2 ~@10", H: "~@2 db4 ~@3 db4 ~@3 db4 ~@3 db4 ~",
  I: "~@2 d4 ~@3 d4 ~@3 db4 ~@3 db4 ~", J: "~@4 d4@2 d4@2 d4@3 ~@3 d4@2 d4@2 ~@2 f4@2 ~@2 e4@4 ~@4", K: "a3@3 db4",
  L: "e4@10 gb4 ab4 a4@2 e4@2", M: "d4@2 db4 d4", N: "gb3@3 d4@2 e4 db4 ~", O: "~@2 bb3 ~@3 bb3 ~@3 bb3 ~@3 bb3 ~",
  P: "~@2 b3 ~@3 b3 ~@3 bb3 ~@3 bb3 ~", Q: "~@4 b3@2 b3@2 b3@3 ~@3 b3@2 b3@2 ~@2 d4@2 ~@2 db4@4 ~@4",
  R: "~@2 b3!2 b3@2 ~@4 c4!2 c4@2 ~@2", S: "eb4@2 ~@2 eb4@2 d4@2 eb4@3 ~@5 e4@4 ~@4 c4@8", T: "c4@3 ~@5", U: "eb4/2",
  V: "d4", W: "f4 e4", X: "f4", Y: "e4@3 ~@3 e4@2 e4@2 ~@2 f4@2 ~@2 g4@2 ~@14", Z: "~@2 bb3 ~@3 bb3 ~@3 a3 ~@3 a3 ~",
  AA: "~@4 bb3@2 bb3@2 bb3@3 ~@3 bb3@2 bb3@2 ~@2 db4@2 ~@2 c4@4 ~@4", AB: "~@2 bb3!2 bb3@2 ~@2 bb3 ~ g3 ~ a3@2 ~@2",
  AC: "f3@3 a3", AD: "c4@10 d4 e4 f4@2 c4@2", AE: "bb3@2 a3 bb3", AF: "g3@4 ~ db4 c4 ~", AG: "g3@4 ~ g3 f3 ~",
  AH: "f5@3 ~ f5@2 d5@2", AI: "c5", AJ: "f5@11 f5@2 f5@3 e5@8 e5@8", AK: "[f5 f5@11]/3", AL: "a4 ~@4 c5 a4 ~",
})).s("gm_french_horn").gain(0.25)

// chords · trombone
const trombone = note(`<
  ~@8 A B C D E B C F G ~@12 H@2 I J H@2 I K L@2 M N L@2 M O P Q ~ R@2 ~@4 B@2 S T B@2 S U B@2 S T B@2 S U V ~ W X@2 Y Z
>`.pickRestart({
  A: "~@10 [f2,a2] ~@3 [f2,a2] ~", B: "~@2 [f2,a2] ~@3 [f2,a2] ~@3 [f2,a2] ~@3 [f2,a2] ~",
  C: "~@2 [f2,a2] ~@3 [f2,a2] ~@3 [gb2,bb2] ~@3 [gb2,bb2] ~", // F Gb
  D: "~@4 [f2,a2]@2 ~@6 [f2,a2]@2 ~@6 bb2@2 bb2@2 bb2@3 ~@3 bb2@2", E: "bb2 ~ a2 ~ c3@2 ~@4 [f2,a2] ~@3 [f2,a2] ~",
  F: "~@2 [f2,a2] ~@3 [f2,a2] ~@3 bb2!2 bb2@2 ~@2", G: "bb2 ~ g2 ~ f2@2 ~@10",
  H: "~@2 [a2,db3] ~@3 [a2,db3] ~@3 [a2,db3] ~@3 [a2,db3] ~", // A
  I: "~@2 [bb2,d3] ~@3 [bb2,d3] ~@3 [a2,db3] ~@3 [a2,db3] ~", // Bb A
  J: "~@4 d3@2 d3@2 d3@3 ~@3 d3@2 d3@2 ~@2 db3@2 ~@2 e3@4 ~@4", K: "~@2 d3!2 d3@2 ~@2 d3 ~ b2 ~ a2@2 ~@2",
  L: "~@2 [gb2,bb2] ~@3 [gb2,bb2] ~@3 [gb2,bb2] ~@3 [gb2,bb2] ~", // Gb
  M: "~@2 [g2,b2] ~@3 [g2,b2] ~@3 [gb2,bb2] ~@3 [gb2,bb2] ~", // G Gb
  N: "~@4 b2@2 b2@2 b2@3 ~@3 b2@2 b2@2 ~@2 bb2@2 ~@2 db3@4 ~@4", O: "~@2 b2!2 b2@2 ~@4 c3!2 c3@2 ~@2",
  P: "eb3@2 ~@2 eb3@2 d3@2 eb3@3 ~@5 e3@4 ~@4 c3@8", Q: "c3@3 ~@5", R: "[c3,eb3]/2",
  S: "~@2 [gb2,bb2] ~@3 [gb2,bb2] ~@3 [f2,a2] ~@3 [f2,a2] ~", // Gb F
  T: "~@4 bb2@2 bb2@2 bb2@3 ~@3 bb2@2 bb2@2 ~@2 a2@2 ~@2 c3@4 ~@4", U: "~@2 bb2!2 bb2@2 ~@2 bb2 ~ g2 ~ f2@2 ~@2",
  V: "d3 f3", W: "f3@11 f3@2 f3@3 e3@8 g3@8", X: "~@4 [f2,f3]@3 [f2,f3] [eb2,g3]@8", Y: "[f2,f3]",
  Z: "[c3,c4]@4 ~@4 [c3,c4]@3 ~@3 [c3,c4]@2 [c3,c4]@2 ~@2 [e3,e4]@2 ~@2 [f3,c4]@4 ~@4", // C E F5
})).s("gm_trombone").gain(0.25)

// chords · trombone · soft notes
const trombone_soft = note("<~@50 A@2 B C ~@23>".pickRestart({
  A: "[[d3,d4]@7 [f3,c4]]/2", B: "[bb3,f4]@2 [bb3,f4] [f3,c4]",
  C: "[e3,e4]@3 ~@3 [e3,e4]@2 [e3,e4]@2 ~@2 [f3,f4]@2 ~@2 [g3,g4]@2 ~@14", // E F G
})).s("gm_trombone").gain(0.1)

// chords · french horn · "Baritone Horn"
const french_horn_2 = note(`<
  ~@8 A B C D E B C F G ~@12 H@2 I J H@2 I K L@2 M N L@2 M O P Q@4 R@2 S T B@2 U V B@2 U W B@2 U V B@2 U W X ~ Y Z@3 AA
>`.pickRestart({
  A: "~@10 [f3,a3] ~@3 [f3,a3] ~", B: "~@2 [f3,a3] ~@3 [f3,a3] ~@3 [f3,a3] ~@3 [f3,a3] ~",
  C: "~@2 [f3,a3] ~@3 [f3,a3] ~@3 [gb3,bb3] ~@3 [gb3,bb3] ~", // F Gb
  D: "~@4 [f3,a3]@2 ~@6 [f3,a3]@2 ~@6 bb3@2 bb3@2 bb3@3 ~@3 bb3@2", E: "bb3 ~ a3 ~ c4@2 ~@4 [f3,a3] ~@3 [f3,a3] ~",
  F: "~@2 [f3,a3] ~@3 [f3,a3] ~@3 bb3!2 bb3@2 ~@2", G: "bb3 ~ g3 ~ f3@2 ~@10",
  H: "~@2 [a3,db4] ~@3 [a3,db4] ~@3 [a3,db4] ~@3 [a3,db4] ~", // A
  I: "~@2 [bb3,d4] ~@3 [bb3,d4] ~@3 [a3,db4] ~@3 [a3,db4] ~", // Bb A
  J: "~@4 d4@2 d4@2 d4@3 ~@3 d4@2 d4@2 ~@2 db4@2 ~@2 e4@4 ~@4", K: "~@2 d4!2 d4@2 ~@2 d4 ~ b3 ~ a3@2 ~@2",
  L: "~@2 [gb3,bb3] ~@3 [gb3,bb3] ~@3 [gb3,bb3] ~@3 [gb3,bb3] ~", // Gb
  M: "~@2 [g3,b3] ~@3 [g3,b3] ~@3 [gb3,bb3] ~@3 [gb3,bb3] ~", // G Gb
  N: "~@4 b3@2 b3@2 b3@3 ~@3 b3@2 b3@2 ~@2 bb3@2 ~@2 db4@4 ~@4", O: "~@2 b3!2 b3@2 ~@4 c4!2 c4@2 ~@2",
  P: "eb4@2 ~@2 eb4@2 d4@2 eb4@3 ~@5 e4@4 ~@4 c4@8", Q: "[c3,c4]/4", R: "[[d3,d4]@7 [f3,c4]]/2",
  S: "[bb3,f4]@2 [bb3,f4] [f3,c4]", T: "e3@3 ~@3 e3@2 e3@2 ~@2 f3@2 ~@2 g3@2 ~@14",
  U: "~@2 [gb3,bb3] ~@3 [gb3,bb3] ~@3 [f3,a3] ~@3 [f3,a3] ~", // Gb F
  V: "~@4 bb3@2 bb3@2 bb3@3 ~@3 bb3@2 bb3@2 ~@2 a3@2 ~@2 c4@4 ~@4", W: "~@2 bb3!2 bb3@2 ~@2 bb3 ~ g3 ~ f3@2 ~@2",
  X: "d3 f3", Y: "f3@11 f3@2 f3@3 e3@8 g3@8", Z: "[f3 f3@11]/3",
  AA: "[c3,c4]@4 ~@4 [c3,c4]@3 ~@3 [c3,c4]@2 [c3,c4]@2 ~@2 [e3,e4]@2 ~@2 [f3,c4]@4 ~@4", // C E F5
})).s("gm_french_horn").gain(0.25)

// drums · rim
const rim = s("rim").struct(`<
  ~@8 A B@2 C D B@2 C E ~@8 F G H I B@3 J B@3 J B@3 J B@3 J K ~@7 L B@3 J B@3 J B@3 J B@3 J ~ M N M@2 O P
>`.pickRestart({
  A: "~@2 x!2", B: "x!4", C: "x ~ x ~ x ~@2 x", D: "~ x!3", E: "~ x ~@2", F: "x!2 ~@2 x!2 ~@2",
  G: "x ~@4 x ~@2 x ~ x ~@5", H: "~@2 x ~@2 x ~ x", I: "x ~@3 x!2 ~ x!2 ~ x ~ x ~@3", J: "x ~@2 x ~@2 x ~",
  K: "x ~@2 x ~@2 x ~ x ~@7", L: "x ~@2 x!2 ~ x ~ x ~ x ~ x ~@3", M: "x ~@11 x ~@2 x", N: "x ~ x!2", O: "x",
// … 36 more lines