Strudelify

Over the Rainbow

Garland

KeyA♭ majorTempo74 bpm
0:00/0:00
// Over the Rainbow — Garland
// 74 bpm, 4/4, key G# 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, 2/4 at bar 7, 4/4 at bar 8, 2/4 at bar 32, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 61 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(74/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 · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<A@7 B C D E F@5 G H@2 I@3 J@7 K@2 L M@2 N@8 O@2 P@6 Q@8 R@3>".pickRestart({
  A: "[~@72 eb6@9 ~ c7 ~ eb7@11 ~ d7@12 bb6@6 c7@5 ~@6 c4@6 ~@6 b3@6 ~ f7@18 db7@3 eb7@3 f7@11 eb7@6 db7@6 ~ c7@6 eb7@6 c7@5 eb7@6 c7@7 eb7@5 c7@7 eb7@5 ~ db7@6 eb7@6 db7@6 eb7@5 ~ db7@6 eb7@5 db7@7 eb7@25 ~@5 [c6,eb6]@3 f6@2 ~ [c6,eb6]@3 f6@3 [c6,eb6]@2 ~ f6@2 ~ [c6,eb6]@3 f6@3, ~@47 eb3@48 [g3,eb4]@24 [eb3,a3]@24 [ab3,db4,f4]@48 [gb2,e3,bb3,c4,e4]@48 [eb3,db4]@69 ~@28, ~@81 ab6@2 d7@2 ~@34 b3@6 ~@6 db4@6 ~@102 [ab3,f4]@24 [bb3,g4]@45 ~@28, ~@10 d7 eb7 ~@16]/7", // Cm Ebdim Db Gb7 Eb7 Db Eb
  B: "[c6,eb6]@2 ~ f6@3 [c6,eb6]@3 f6@3 [c6,eb6]@3 f6@2 ~ [c6,eb6]@2 ~ f6@2 ~ [c6,eb6]@3 f6@3 [c6,eb6]@3 f6@3 ~ [c6,eb6]@3 f6@3 ~ [c6,eb6]@4", // Cm
  C: "f6@4 [c6,eb6]@3 ~ f6@4 [c6,eb6]@3 ~@2 f6@3 [c6,eb6]@4 gb6@3 [c6,eb6]@3 ~ gb6@3 [ab5,db6]@3 eb6@3 [ab5,db6]@2 ~ eb6@3 [ab5,db6]@2", // Cm Db5
  D: "~ eb6@3 [ab5,db6]@3 ~ eb6@3 [ab5,db6]@3 ~ eb6@3 [ab5,db6]@3 ~ eb6@4 [ab5,db6]@3 eb6@4 [ab5,db6]@3 ~ eb6@3 [c6,eb6]@3 f6@2 ~ [c6,eb6]@2", // Db5 Cm
  E: "~ f6@2 ~ [c6,eb6]@3 f6@2 ~ [c6,eb6]@3 f6@3 [c6,eb6]@3 ~ f6@3 [c6,eb6]@3 f6@4 [c6,eb6]@3 gb6@3 [c6,eb6]@4 gb6@4 ~ [ab5,db6]@3", // Cm Db5
  F: "[eb6@3 [ab5,db6]@3 eb6@3 [ab5,db6]@3 eb6@3 [ab5,db6]@3 eb6@3 ~ [ab5,db6]@3 eb6@3 [ab5,db6]@3 eb6@3 ~ [ab5,db6]@3 eb6@4 [ab5,db6]@4 eb6@4 [c6,eb6]@4 f6@3 [c6,eb6]@2 ~ f6@3 [c6,eb6]@3 f6@3 [c6,eb6]@4 f6@4 [db6,gb6]@34 [ab5,c6,f6]@3 [bb5,d6,g6]@3 [ab5,c6,f6]@3 ~ [bb5,d6,g6]@3 [ab5,c6,f6]@3 ~ d6@3 [ab5,c6,f6]@4 [bb5,d6,g6]@4 [db6,f6]@8 [bb5,eb6]@4 [ab5,db6]@5 [bb5,eb6]@16 ~ [ab5,c6]@4 eb6@4 [ab5,c6]@3 eb6@4 [ab5,c6]@3 eb6@3 [ab5,c6]@3 eb6@3 [ab5,db6]@14 ~ [bb5,eb6]@18 [c6,eb6]@4 f6@3, ~@127 [bb5,g6]@4 ~@109]/5", // Db5 Cm Gb5 Fm Gm Fm Gm Fm …
  G: "[c6,eb6]@2 f6@3 [c6,eb6]@3 f6@3 [c6,eb6]@3 f6@3 [c6,eb6]@4 f6@2 [c6,eb6]@4 f6@2 [c6,eb6]@3 ~ f6@2 ~ eb6@2 f6@3 ~ eb6@3 f6@3, ~@35 c6@3 ~@3 c6@3 ~@4", // Cm
  H: "[[c6,eb6]@3 f6@3 ~ eb6@3 f6@3 [c6,eb6]@4 f6@4 [c6,eb6]@4 f6@3 [c6,eb6]@4 f6@4 ~ eb6@4 gb6@4 [c6,eb6]@5 gb6@4 [ab5,db6]@4 eb6@3 [ab5,db6]@3 eb6@3 [ab5,db6]@3 eb6@3 [ab5,db6]@3 eb6@3 [ab5,db6]@3 eb6@2 ~ db6@2 eb6@3 [ab5,db6]@3 ~ eb6@2, ~@6 c6@4 ~@26 c6@5 ~@43 ab5@2 ~@10]/2", // Cm Db5
  I: "[[ab5,db6]@3 eb6@3 [c6,eb6]@3 f6@3 [c6,eb6]@3 f6@3 ~ [c6,eb6]@3 f6@3 [c6,eb6]@4 f6@3 [c6,eb6]@4 f6@3 [c6,eb6]@3 f6@4 ~ eb6@4 gb6@4 [c6,eb6]@5 gb6@5 [ab5,db6]@4 eb6@3 [ab5,db6]@3 eb6@3 ~ ab5@2 eb6@3 ~ ab5@2 eb6@4 [ab5,db6]@3 eb6@4 [ab5,db6]@3 ~ eb6@3 [ab5,db6]@4 eb6@4 [ab5,db6]@3 eb6@3 ~ [c6,eb6]@3 f6@3 ~ [c6,eb6]@3 f6@3 ~ [c6,eb6]@3 f6@3 [c6,eb6]@4, ~@46 c6@4 ~@28 db6@3 ~@3 db6@3 ~@57]/3", // Db5 Cm Db5 Cm
  J: "[f6@4 ~ [db6,eb6]@5 gb6@5 [db6,eb6]@5 gb6@4 [db6,eb6]@5 gb6@4 [db6,eb6]@4 gb6@5 [d6,g6]@5 [c6,f6]@4 [d6,g6]@4 [c6,f6]@4 [d6,g6]@4 [c6,f6]@11 ~ [c6,f6]@7 [bb5,eb6]@5 [c6,f6]@5 [bb5,eb6]@10 [c6,f6]@10 ~@4 [f6,c7,f7]@4 [bb5,eb6,bb6,eb7]@4 ~ [g6,c7]@4 [f5,bb5,f6,bb6]@7 [eb5,ab5,eb6,ab6]@7 ~ c5@9 [bb4,c5,eb5,bb5,eb6]@24 ~@10 [eb3,eb4]@14 [f3,f4]@14 [g3,g4]@16 [ab3,ab4]@13 [f3,f4]@12 [g3,g4]@13 [ab3,f4,ab4]@13 [bb3,g4,bb4]@18 [bb3,c4,f4,c5]@28 ~@8, ~@112 [bb5,eb6,bb6,eb7]@6 ~@6 [g5,c6]@6 ~@13 [f5,c6,f6]@10 ~@34 c4@54 ~@3 db4@52 ~@40, ~@115 c6@5 ~@67 ab3@27 ~ eb4@29 bb3@26 ~@12 eb4@46 ~@8]/7", // Dbsus2 G5 F5 G5 F5 G5 F5 Eb5 …
  K: "[~@2 [f4,c5,eb5]@5 ~ [ab4,c5,eb5,ab5]@5 [c5,f5,ab5,c6]@7 [bb4,c5,eb5,g5,bb5]@13 [g4,c5,eb5,g5]@6 [ab4,c5]@7 [db4,ab4,bb4]@7 ~ [eb3,db4,eb4,g4,bb4,c5]@42, ~@2 f5@10 ~ eb5@5 ~@21 [eb5,f5,ab5]@11 ~@46, ~@23 [f4,db5]@4 ~@21]/2", // F7 Ab Fm Cm7 Cm Ab Bbm7 Eb7 …
  L: "~@7 [eb3,ab3]@12 [f3,f4]@12 [g3,g4]@14 [ab3,ab4]@3, ~@7 [c4,eb4]@41", // Ab5 F G Ab Cm
  M: "[~@12 [bb3,d4,c5,c6]@31 ~@17 [ab4,ab5]@18 [c4,eb4,g4,g5]@18, ~@2 f4@11 ~@3, ~@43 b3@35 ~@18, ~@43 [bb4,bb5]@18 ~@35, ~@11 eb4@8 ~@5]/2", // Bb Ab Cm Bb
  N: "[~@9 db6@28 ~ f5@16 [c4,eb4,g4,g5]@16 ~ [f4,ab4]@18 [eb4,g4,bb4,bb5]@21 eb4@26 ~@14 d4@8 eb4@7 [c4,eb4,g4]@44 [ab3,c4,eb4,gb4]@16 [c5,eb5]@13 [bb4,db5]@13 c5@15 b4@16 [g4,bb4]@13 [f4,ab4]@13 ~ g4@15 gb4@17 f4@24 ~ [bb3,e4]@18, ~@4 a5@2 b5@2 [g4,db5]@32 ~@30 ab5@20 ~@20 c5@99 ~@175, ~@5 bb5@2 c6@2 ~@28 [db4,f4]@16 ~@18 db4@39 ab4@51 ~@90 ab4@31 eb4@24 ~@3 eb4@33 ~@42, ~@8 [f3,a3]@27 ~@2 bb3@72 ~ ab3@56 ~@59 [ab3,db4,f4]@58 ~@41 ab3@60, ~@110 c4@26 f4@25 ~@121 c4@59 db4@43]/8", // Cm Fm Eb Cm Ab7 Cm Bbm Gm …
  O: "[~@7 ab3@25 ~@16 db4@17 [ab3,bb3,d4,f4]@31, ~@7 eb4@58 ~@31, ~@7 c4@41 ~@48, ~@33 [f3,a3,gb4]@32 ~@31]/2", // Bb7 F
  P: "[~@6 [bb3,db4,g4]@36 [ab3,c4,eb4]@45 ~@8 eb4@33 g4@7 ~@39 ab4@13 ~ [eb4,g4]@13 [ab3,c4,eb4,f4]@50 ~@3 [c5,eb5,f5,ab5,c6]@7 [bb4,c5,eb5,g5,bb5]@13 [g4,c5,eb5,g5]@6 [ab4,c5,eb5,f5,ab5]@7 [db4,f4,ab4,bb4,db5], ~@95 [ab3,c4]@53 bb3@53 ~@87, ~@135 f4@53 bb4@61 ~@39, ~@37 db4@10 ~@25]/6", // Gdim Ab Eb Fm7 Cm7 Cm Fm7 Bbm7 …
  Q: "[~@6 [eb3,db4,f4,g4,c5]@38 ~ [bb4,g5,bb5]@13 ~ [ab4,f5,ab5]@13 [g4,eb5,g5]@26 [ab4,f5,ab5]@52 ~ ab4@27 [g4,bb5]@27 [f4,ab4]@53 [db5,g5,bb5]@52 ~ ab5@52 ~ g5@20, ~@45 [c4,eb4,eb6]@106 [bb3,bb4,db5,f5]@53 ~ [eb3,db4]@105 ~@74]/8", // Cm Eb Db Cm Db Gm Fm Gdim …
  R: "[~@19 ab5@13 ~ b5@24 ~@2 [e5,ab5,b5,db6]@10 ~@3 [f5,ab5,bb5,db6]@10 ~@4 [ab5,c6,eb6]@53 ~@5]/3", // Dbm7 Bbm7 Ab
})).s("gm_string_ensemble_2").gain(0.22).pan(0.7)

// bass · acoustic bass · "ACOU BASS"
const bass = note("<~@4 A B@2 ~@18 C@2 D@4 E@3 F@7 G@6 H@5 I@5 J@4>".pickRestart({
  A: "gb1@6 ~ gb1", B: "[eb1@67 ~@29]/2", C: "[~@43 ab1@53]/2", D: "[~@4 bb1@24 ~ eb1@32 ab1@49 eb1@82]/4",
  E: "[~@7 ab1@51 ~@2 ab1@32 g1@34 c2@18]/3",
  F: "[~@9 f1@29 bb1@33 ~ eb1@38 ~ ab1@25 ~ ab1@27 ~ c1@44 ab1@16 db1@58 c1@40 ~@2 c1@11]/7",
  G: "[~@6 db1@23 ~ bb1@25 eb1@27 f1@32 bb1@37 eb1@35 ab1@50 ~@3 ab1@25 ~@2 ab1@22]/6",
  H: "[~@4 bb1@27 eb1@26 ab1@53 ~ eb1@79 ab1@50]/5", I: "[~@3 ab1@53 bb1@53 eb1@51 ~@2 eb1@52 ~ ab1@25]/5",
  J: "[~ ab1@24 ~@3 c2@26 c3@5 ~@2 bb2@6 ~ ab2@6 gb2@6 ~ e2@6 ~ eb2@7 db2@6 b1@6 ~ bb1@12 ~ eb2@13 ab1@52 ~@6]/4",
})).s("gm_acoustic_bass").gain(0.38)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2_2 = note("<A@4 ~@2 B@6 C@3 D@4 E@8 F@7 G@7 H@5 I@6 J@5 ~@4>".pickRestart({
  A: "[~@47 [ab1,ab2]@48 c2@24 f1@24 bb1@48 ~]/4", // Ab
  B: "[~@35 eb3@12 ~@12 db4@6 d4@6 c2@45 [ab2,gb3]@14 ~@12 db4@13 c4@14 b3@15 bb3@12 ab3@12 g3@13 [ab2,eb4,gb4]@15 [db2,f3,f4]@24 ~ [db2,e3,bb3,e4]@27, ~@23 ab2@48 g3@41 ~@72 [c2,eb4]@37 ~@67, ~@23 c4@39 ~@9 eb4@69 ~@96 db4@51 ~, ~@47 f3@26 ~@57 [db2,f3]@55 ~@103]/6", // Ab7 Db Bbdim Cm Db
  C: "[~ [eb2,eb3,ab3,c4]@28 [f2,f3,a3,eb4,gb4]@33 [bb2,c4,d4]@28 f3@17 [g3,bb3]@17 [ab2,ab3,c4,eb4]@20, ~ eb4@24 ~@37 f4@63 ~@19, ~@31 ab3@22 ~@19, ~@5 [eb2,db4]@2 ~]/3", // Ab Ebdim Bb Gm Ab Eb7
  D: "[~@2 [bb2,f4]@6 [eb2,f3,ab3]@14 [eb2,g3,bb3]@18 ~@13 eb3@12 ~@19 db4@3 ~@2 c2@42 ~ [ab2,gb3]@17 ~@13 db4@12 c4@12 b3@6, ~@8 eb4@32 ab2@49 eb4@74 ~@29, ~@40 c4@42 ~@5 d4@4 ~@101, ~@65 f3@26 ~@58 [db2,f3,ab3]@43]/4", // Bb5 Fm7 Eb Ab7 Db
  E: "[~@6 [g3,bb3]@12 ab3@13 g3@15 [ab2,gb3]@18 [db2,f4]@25 ~@2 [db2,bb3,e4]@28 [eb2,ab3,c4]@30 [f2,a3,db4,gb4]@37 [bb2,c4,d4]@31 eb2@16 ~ eb2@21 ab2@68 ~@8 ab2@53, ~@6 c2@41 ~@17 db4@55 eb4@67 f4@137 ~@61, ~@32 ab3@25 ~@36 ab3@23 ~@76, ~@217 db4@39 ~@128]/8", // Gm Ab7 Db Bbdim Ab Gbm Bb
  F: "[~@4 bb2@25 eb2@31 ab2@49 eb2@90 ab2@51 ~@2 ab2@31 g2@35 c3@18]/7",
  G: "[~@8 f2@29 bb2@34 eb2@39 ab2@55 c2@44 ab2@16 db2@57 c2@54]/7",
  H: "[~@5 db2@24 ~ bb1@25 eb2@26 f2@32 bb1@36 ~ eb2@36 ab1@51 ~@3]/5",
  I: "[~@25 ab2@27 bb1@26 eb2@26 ~ ab1@53 eb2@78 ~ ab1@51]/6", J: "[~@2 ab1@52 ~ bb1@52 ~@2 eb2@53 eb2@51 ~@27]/5",
})).s("gm_string_ensemble_2").gain(0.22).pan(0.9)

// chords · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft = note("<~@10 A@2 ~@2 B ~ C@2 ~ D@2 ~@2 E@3 ~@19 F@2 ~@14>".pickRestart({
  A: "[~@44 ab3@25 ~@27]/2", B: "~@7 eb3@5", C: "[~@41 bb3@54 ~, ~@41 g3@39 ~@16]/2",
  D: "[~@6 eb4@59 ~@31, ~@3 c4@20 ~@25]/2", E: "[~@42 [g3,bb3]@21 [ab3,c4]@68 ~@13]/3", F: "[~@47 ab2@25 ~@24]/2",
})).s("gm_string_ensemble_2").gain(0.16).pan(0.9)

// other · glockenspiel · "GLOCKENSPL"
const glockenspiel = note("<~@6 A ~@3 B C ~@3 D ~@2 E ~ F G ~@22 H ~@16>".pickRestart({
  A: "~@25 ab6 ~@22, ~@12 eb6 ~@11", B: "~@45 f6 ~@2", C: "~@22 e6 ~@25", D: "~@41 ab5 ~@6", E: "~@7 f5 ~@40",
  F: "~@18 f5 ~@25 e5 ~@3", G: "~@24 eb5 ~@23", H: "~@39 c6@2 eb6@2 ab6 ~@4",
})).s("gm_glockenspiel").gain(0.22).pan(0.2)

// other · glockenspiel · "GLOCKENSPL" · soft notes
const glockenspiel_soft = note("<~@6 [~@22 eb5 ~ c6 ~@23, ~@21 ab4@2 ab5@2 ~@23] ~@54>")
  .s("gm_glockenspiel").gain(0.16).pan(0.2)

// other · clarinet
const clarinet = note("<~@2 A B C D@2 ~ E F G H@3 I@2 ~@6 J@3 K ~@3 L@3 ~@4 M@5 N@7 O@2 ~@3 P@4 ~@4>".pickRestart({
  A: "~@4 b3 c4 db4 b3", B: "bb3@47 ~", C: "e5 ab5 e5 ab5 e5 ab5 e5 ab5, bb3",
  D: "[f5@6 ab5@6 f5@6 ab5@6 f5@6 g5@6 f5@6 g5@25 ~@29, bb3@67 ~@29]/2", E: "~@34 db5@3 eb5@3 db5@3 eb5@3 db5@2",
  F: "~ eb5@3 ~ db5@3 eb5@3 db5@3 ~ eb5@3 db5@3 ~ eb5@4 db5@3 eb5@4 db5@4 eb5@3 c5@3 eb5@3 c5@2",
  G: "~ eb5@3 c5@3 eb5@3 c5@3 eb5@3 ~ c5@3 eb5@3 c5@3 eb5@4 c5@3 eb5@3 c5@4 eb5@5 db5@3",
  H: "[eb5@3 db5@3 eb5@3 db5@3 eb5@3 db5@3 eb5@4 db5@3 eb5@3 db5@3 eb5@4 db5@3 eb5@4 db5@4 eb5@4 c5@4 eb5@3 c5@3 eb5@3 c5@3 eb5@4 c5@4 eb5@4 db5@32 ~ c5@3 d5@3 c5@3 ~ d5@3 c5@3 d5@4 c5@4 d5@3 ~ ab4@5]/3",
  I: "[~@3 g4@4 f4@4 g4@15 ~@3 c5@3 ~ eb5@3 c5@3 ~ eb5@4 c5@3 eb5@3 c5@3 eb5@3 db5@3 eb5@3 db5@4 ~ eb5@4 db5@4 ~ eb5@4 db5@4 eb5@4 ~@8]/2",
  J: "[~@42 g5@4 ~ f5@4 g5@4 f5@4 g5@5 f5@9 ~@3 f5@7 eb5@4 f5@6 eb5@10 f5@8 ~@2 eb5@4 f5@4 eb5@4 c5@5 bb4@7 ab4@7]/3",
  K: "f4@9 ~ bb4@19 ~@19, ~@9 eb4@19 ~@20", L: "[~@3 f4@5 ab4@6 c5@6 bb4@14 g4@6 ab4@6 db4@9 c4@45 ~@44]/3",
  M: "[~@41 f3@29 g3@42 ~@17 c5@13 bb4@14 ab4@31 g4@12 ~ f4@13 eb4@27]/5",
  N: "[~@6 db4@24 bb3@25 ~ ab3@26 a3@32 bb3@73 ab3@25 ~ [c3,ab3]@6 [eb3,bb3]@7 [ab3,c4]@7 [bb3,eb4]@6 [c4,ab4]@7 [eb4,g4]@7 [c4,ab4]@6 [eb4,g4]@7 [c4,ab4]@6 ~ g4@6 [c4,ab4]@7 [eb4,g4]@7 [db4,f4]@6 [eb4,g4]@7 [db4,f4]@6 [eb4,g4]@7 [db4,f4]@6 [eb4,g4]@7 [db4,f4]@4, ~@272 eb4@7 ~@57]/7", // Fm Eb5 Ab Eb5 Fm Eb Fm Eb …
  O: "[~@3 [eb4,g4]@6 [f4,ab4]@52 ~@35]/2", P: "[~@8 f4@27 g4@26 eb4@104 ~@27]/4",
})).s("gm_clarinet").gain(0.16).pan(0.2)

// other · french horn · "FR.HORN"
const french_horn = note("<~ A@3 B C@2 ~@2 D@3 E@5 ~@2 F@7 ~@2 G H@3 ~@16 I J@2 ~@3 K@3 L M@3>".pickRestart({
  A: "[~@6 c4@6 eb4@6 f4@6 g4@30 f4@6 g4@6 f4@6 g4@6 f4@23 ~@2 f4@5 ab4@6 bb4@6 c5@15 bb4@5 ab4@4]/3", B: "e4",
  C: "[f4@24 g4@43 ~@29]/2", D: "[~@40 bb4@12 ab4@12 g4@13 ~ gb4@15 f4@24 ~ bb3@26]/3",
  E: "[~@2 c4@27 gb4@34 f4@62 eb4@14 ~ f4@12 c5@15 bb4@17 ab4@31 ~@25]/5",
  F: "[~@6 bb4@12 ~ ab4@13 g4@15 gb4@18 f4@27 bb3@27 ~ c4@30 gb4@37 f4@70 eb4@65 ~@14]/7", G: "~@13 [bb2,bb3]@3",
  H: "[~@3 [c3,c4]@11 [eb3,eb4]@87 ~@43]/3", I: "~@3 [bb2,bb3]", J: "[~ [c3,c4]@13 [eb3,eb4]@78 ~@4]/2",
  K: "[~@13 ab4@53 bb4@52 ~ ab4@11 ~@2 c4@5 ~@2 eb4@5]/3",
  L: "~ g4@5 ~@2 f4@5 ~@2 eb4@5 ~ d4@6 ~ f4@6 ~ eb4@5 ~ eb4@6 ~",
  M: "[f4@6 g4@9 ~@5 ab4@11 ~@2 ab4@9 ~@4 e4@6 ~ gb4@5 ~@2 ab4@8 ~@5 bb4@8 ~@5 ab4@52 ~@6]/3",
})).s("gm_french_horn").gain(0.33).pan(0.1)

// other · flute
const flute = note("<~ A B C D E@2 ~ F G H I@3 J@2 K L M N O@2 P@3 Q@4 ~@2 R@6 ~ S@5 T@7 ~ U V@5 ~@4>".pickRestart({
  A: "~@24 eb5@9 ~@2 d6@2 eb6@11, ~@33 ab5@2 ~@13, ~@17 c6 ~@6", B: "d6@2 bb5 c6 d6@2 eb6@2",
  C: "f6@6 db6 eb6 f6@4 eb6@2 db6@2", D: "[c5,c6] [eb5,eb6] [c5,c6] [eb5,eb6] [c5,c6] [eb5,eb6] [c5,c6] [eb5,eb6]",
  E: "[[db5,db6]@2 [eb5,eb6]@2 [db5,db6]@2 [eb5,eb6]@2 [db5,db6]@2 [eb5,eb6]@2 [db5,db6]@2 [eb5,eb6]@9 ~@9]/2", // Db Eb Db Eb Db Eb Db Eb
  F: "~@34 f6@3 ab6@3 f6@3 ab6@3 f6@2",
  G: "~ ab6@3 f6@3 ~ ab6@3 f6@3 ~ ab6@3 ~ f6@3 ab6@4 f6@3 ab6@3 ~ f6@3 ~ ab6@3 eb6@3 f6@3 eb6@2",
  H: "~ f6@3 eb6@3 f6@3 eb6@3 f6@3 eb6@4 f6@3 eb6@3 f6@4 eb6@3 gb6@3 ~ eb6@4 gb6@4 f6@3",
  I: "[ab6@3 f6@2 ~ ab6@3 f6@3 ab6@3 f6@3 ab6@3 e6@4 ab6@3 e6@3 ab6@3 e6@4 ab6@4 e6@4 ab6@4 eb6@3 ~ f6@3 eb6@3 f6@3 eb6@3 f6@4 eb6@4 f6@4 gb6@33 f6@3 g6@3 ~ f6@3 g6@3 f6@3 g6@4 f6@3 g6@4 f6@6]/3",
  J: "[~@3 eb6@4 db6@5 eb6@14 ~@3 eb6@4 f6@3 eb6@3 ~ f6@3 eb6@4 f6@3 eb6@3 f6@3 eb6@3 f6@3 eb6@4 f6@5 eb6@4 f6@4 ~ eb6@4 f6@4 eb6@5 f6@3]/2",
  K: "eb6@3 f6@2 eb6@3 f6@3 eb6@3 f6@3 eb6@2 ~ f6@3 eb6@3 f6@3 eb6@3 f6@3 eb6@3 f6@3 ~ eb6@3 f6@3",
  L: "eb6@4 f6@4 eb6@3 f6@3 eb6@4 f6@3 eb6@4 f6@4 eb6@3 f6@4 ~ eb6@4 gb6@4 eb6@3",
  M: "~@2 gb6@4 db6@4 eb6@3 db6@3 eb6@3 db6@3 eb6@3 db6@3 eb6@3 db6@3 eb6@3 db6@3 eb6@3 db6@2 eb6@3",
  N: "~ db6@2 eb6@3 ~ f6@3 eb6@3 f6@3 eb6@3 f6@3 eb6@3 ~ f6@3 eb6@3 ~ f6@3 eb6@4 f6@3 eb6@5",
  O: "[gb6@4 eb6@5 gb6@4 eb6@5 db6@4 ~ eb6@3 db6@3 eb6@3 db6@3 eb6@3 db6@3 eb6@3 db6@3 eb6@4 db6@3 eb6@3 db6@4 eb6@4 db6@3 eb6@4 f6@3 eb6@4 ~ f6@3 eb6@4 f6@4 eb6@3 f6@2]/2",
  P: "[~@2 eb6@4 gb6@5 eb6@4 gb6@5 eb6@5 gb6@4 eb6@5 gb6@4 eb6@2 ~@2 [bb5,bb6]@5 [ab5,ab6]@4 [bb5,bb6]@4 [ab5,ab6]@4 [bb5,bb6]@4 ~ ab5@10 ~ [ab5,ab6]@8 [g5,g6]@4 ~ ab6@4 [g5,g6]@10 [ab5,ab6]@11 [bb5,bb6]@4 [c6,c7]@4 [bb5,bb6]@5 ~@3 [f5,f6]@7 [eb5,eb6]@8, ~@63 ab6@10 ~@14 ab5@5 ~@34 [g5,g6]@5 ~@13]/3", // Bb Ab Bb Ab Bb Ab G Ab …
  Q: "[[c5,c6]@10 [f4,bb4,bb5]@24 ~@9 eb4@14 f4@14 g4@16 ab4@14 f4@12 g4@12 ab4@13 bb4@18 c5@26 ~@10]/4", // C Bb5
  R: "[~@7 eb4@12 f4@13 g4@13 ab4@15 c5@31 bb4@17 ab4@17 ~ g4@26 db5@31 f4@15 g4@17 ab4@18 bb4@19 ~@36]/6",
  S: "[~@33 eb5@13 db5@13 ~ c5@15 b4@16 bb4@12 ~ ab4@13 g4@15 ~ gb4@17 f4@24 db4@25 eb4@27 c4@14]/5",
  T: "[~ db4@17 d4@37 db4@36 c4@25 ~ c4@6 eb4@7 ab4@7 eb5@6 c5@7 eb5@7 c5@6 eb5@7 c5@7 eb5@6 c5@7 eb5@6 db5@6 ~ eb5@7 db5@6 eb5@7 db5@6 eb5@7 db5@7 eb5@6 f5@51 ~@36]/7",
  U: "~@11 c4@27 c5@10", V: "[~@3 f5@53 ab4@27 bb4@26 eb4@105 ~@26]/5",
})).s("gm_flute").gain(0.22).pan(0.6)

// chords · orchestral harp · "HARP"
const orchestral_harp = note(`<
  A@7 B C D E F G H I J K L M N@2 O P Q R S ~ T U V W X Y Z AA AB AC ~@3 AD AE AF@2 AG AH AI AJ AK AL AM AN AO AP AQ AR
  AS ~@4
>`.pickRestart({
  A: "[~@49 g4@35 ~@13 bb4@19 ~@5 b4@19 ~@5 ab4@36 ~@12 [gb4,bb4]@16 bb3 ~@6 ab4 ~@23 f4@18 ~@7 g4@14 ~@5 c5@25 ~@2 c4 eb4 ab4 ~@22, ~@46 ab3@37 ~@13 g4@20 ~@3 c4@21 ~@2 bb3@37 ~@11 gb3@18 ~@30 ab3@19 ~@5 bb3@15 ~@3 eb3@27 ~@29, ~@48 [c4,eb4]@36 ~@11 [c4,eb4]@22 ~ f3@22 ~@4 f4@36 ~@12 e4@18 ~@54 f4@14 ~@4 db4@25 ~@29, ~@120 [eb4,g4]@21 ~@2 db4@37 ~@11 c4@18 ~@30 db4@20 ~@4 db4@15 ~@3 g3@26 ~@3 ab3@2 ~@24, ~@283 g4@24 ~@29]/7", // Gb Cm Eb
  B: "~@24 [c4,eb4] g4 ~@22, ~@11 g3 ~@12, ~@23 bb3@2 ~@23", // Cm
  C: "~@21 [eb4,gb4] ~@12 eb4 f4 ab4 ~@11, ~@18 ab3@2 c4@2 ~@11 db4@2 ~@13, ~@19 bb3@2 ~@11 ab3@2 ~@14", // Ebm
  D: "~@40 c4 eb4 g4 ~@5, ~@39 g3@2 ~@7, ~@20 bb3 ~@3",
  E: "~@30 c4 eb4 gb4 ~@12 eb4 ~ ab4, ~@28 ab3@2 ~@13 ab3@3 f4@2, ~@29 bb3@2 ~@13 db4@3 ~",
  F: "~@20 ab3 ~ ab4 bb4 ~@24, ~@21 [db4,e4]@2 ~@25", // Dbm
  G: "ab3 ~@2 ab4 ~@28 ab4 ~@15, ~ c4@2 ~@25 f3@2 db4@2 ~@16, ~@2 eb4@2 ~@25 a3@2 eb4@2 ~@15",
  H: "~@15 d4 f4 ~@24 ab3 ~ f4 ~@4, ~@13 ab3@2 ~@33, ~@7 c4 ~@13 db4 ~@2",
  I: "~@9 bb3 ~ eb4 ~ g4 ~@13 ab3 ~@2 eb4 ~@17, ~@10 db4@2 ~@17 c4@2 ~@17",
  J: "~@7 ab3 ~ f4 ~@11 bb3 db4@2 eb4 g4 ~@12 ab3 ~ c4@2 eb4 ~@5, ~@4 db4 ~@19",
  K: "~@42 [bb3,c4] eb4 ~@4, ~@41 g3@2 ~@5", L: "~@37 eb4@2 gb4 ~@8, ~@35 bb3@2 ~@11, ~@12 c4 ~@3",
  M: "~@7 f4 ~@40, ~@5 ab3@2 ~@41, ~@3 db4 ~@20",
  N: "[~@6 bb3 c4 eb4 ~@39 gb4 ~@17 f4 ~@25 db4 e4 ~@2, ~@5 g3@2 ~@38 ab3@2 eb4@2 ~@16 db4@2 ~@25 bb3@2 ~@2, ~@46 c4@2 ~@16 ab3@2 ~@25 ab3@2 ~@3]/2",
  O: "~@23 ab3@2 c4@2 ~@21, ~@25 eb4 ~@22",
  P: "~@8 gb4 ~@35 f4 ~@3, ~@5 a3@2 eb4@2 ~@33 c4@2 ~@4, ~@6 db4@3 ~@32 ab3@2 d4@2 ~@3",
  Q: "~@24 ab3@2 ~ f4 ~@15 bb3@2 ~ f4 ~, ~@26 db4@2 ~@14 g3@3 db4@2 ~",
  R: "~@34 eb4@2 ab4 ~@11, ~@32 ab3@3 ~@13, ~@11 c4 ~@4", S: "~@42 ab3@2 ~ eb4 ~@2, ~@22 c4 ~",
  T: "~@5 db4 f4 ~@23 db4 f4 ~@11 db4 eb4 ~@3, ~@3 ab3@2 ~@24 ab3@2 ~@10 g3@2 ~@5, ~@2 bb3 ~@18 bb3 ~@2",
  U: "~@10 ab3@2 c4@2 ~ f4 ~@32, ~@7 eb4 ~@16", V: "~@14 db4 eb4 f4 ~@31, ~@13 ab3@2 ~@33",
  W: "~@40 ab4 ~@7, ~@37 eb3@2 f4@2 ~@7, ~@38 db4@3 ~@7", X: "~@7 c4 eb4 ~@39, ~@3 ab3 ~@20",
  Y: "~@11 bb3@2 d4 f4 ~@29 f4 ~ bb4 ~, ~@14 b3 ~, ~@43 eb4@3 ~@2",
  Z: "~@14 ab4 ~@26 bb3@2 ~ eb4 g4 ~@2, ~@11 b3@2 f4@2 ~@33, ~@12 eb4@2 ~@29 c4@2 ~@3",
  AA: "~@21 a3 ~ eb4 ~ db5 ~@12 db4 f4 ~@8, ~@20 f3@2 ~@2 g4@3 ~@9 ab3@3 ~@9, ~@37 bb3@2 ~@9",
  AB: "~@7 eb4 g4 ~@16 ab4 ~@17 g4 bb4@2 ~@2, ~@5 bb3@3 ~@16 f4@2 ~@16 eb4@3 ~@3, ~@6 c4@2 ~@15 db4@2 ~@16 db4@2 ~@5",
  AC: "~@13 ab3@2 ~@2 eb4 ~@23 f4 ~@6, ~@16 c4@2 ~@21 c4@3 ~@6, ~@20 eb4 ~@3", AD: "~@34 c4@2 eb4@2 gb4 ~@9",
  AE: "~@29 db4 e4 ~@17, ~@14 bb3 ~@9",
  AF: "[~@50 gb4 ~@15 c4 ~ f4 ~@27, ~@47 a3@2 eb4@2 ~@16 d4@2 ~@27, ~@48 db4@3 ~@14 ab3@3 ~@28]/2",
  AG: "~@5 bb3@2 ~ eb4 ~@32 c4@2 ~ ab4 ~@3, ~@4 g3@2 ~ db4@3 ~@33 eb4@2 ~@3", AH: "~@47 c4, ~@23 ab3", AI: "~ eb4 ~@46",
  AJ: "~@5 db4 f4 ~@23 db4 ~ ab4 ~@15, ~@3 ab3@2 ~@24 ab3@2 ~@17, ~@4 bb3@2 ~@25 f4@2 ~@15",
  AK: "~@8 ab3 ~@2 f4 ~@36, ~@9 c4@2 ~@37, ~@5 eb4 ~@18", AL: "~@13 bb3 ~ f4 ab4 ~@31, ~@7 db4 ~@16",
  AM: "~@31 db4 ~ g4@2 c5 ~@9 ab3@2 c4, ~@15 eb3 f4 ~@7", AN: "eb4 ~@47", AO: "~@3 c4 ~ f4 ~@42, ~ ab3 eb4 ~@21",
  AP: "~@9 db4 f4 ~@24 f4 g4 ~@11, ~@7 ab3@2 ~@26 db4@2 ~@11, ~@8 bb3@3 ~@23 bb3@2 ~@12",
  AQ: "~@12 db4@2 f4 ab4 ~@32, ~@11 eb3@2 ~@35", AR: "~@17 eb4@2 g4 bb4 ~@27, ~@15 bb3@2 ~@31, ~@8 db4 ~@15",
  AS: "~@20 c4 eb4@2 ab4 ~@24",
})).s("gm_orchestral_harp").gain(0.27).pan(0.4)

// other · trumpet
const trumpet = note("<~@57 A B@3>".pickRestart({
  A: "~@2 ab5@26 g5@10 ~@3 g5@4 ~@3",
  B: "[f5@4 ~@2 g5@7 ~@7 ab5@7 ~@6 ab5@7 ~@6 e5@5 ~@2 gb5@5 ~@2 ab5@6 ~@7 bb5@6 ~@7 c6@52 ~@6]/3",
})).s("gm_trumpet").gain(0.54).pan(0.7)

// chords · brass section · "BRASS 1"
const brass_section = note("<~@57 A B@3>".pickRestart({
  A: "~ [c5,eb5,ab5]@26 ~ [c5,eb5,g5]@10 ~@3 [c5,eb5,g5]@4 ~@3", // Ab Cm
  B: "[[c5,eb5,f5]@4 ~@2 [c5,eb5,g5]@10 ~@4 [c5,eb5,ab5]@11 ~@2 [b4,e5,ab5]@10 ~@3 [ab4,b4,e5]@5 ~@2 [b4,eb5,gb5]@6 ~ [db5,e5,ab5]@8 ~@5 [db5,f5,ab5,bb5]@8 ~@5 [c5,eb5,ab5,c6]@52 ~@6]/3", // F7 Cm Ab E B Dbm Bbm7 Ab
})).s("gm_brass_section").gain(0.55).pan(0.6)

// chords · trombone
const trombone = note("<~@56 A B@4>".pickRestart({
  A: "~@23 ab3@11 ~@2 c3@4 ~@3 eb3@4 ~",
  B: "[~ g3@5 ~@2 f3@4 ~@3 eb3@4 ~@2 d3@4 ~@3 [c4,eb4,g4]@7 eb3@5 ~ [eb3,c4,eb4,g4]@4 ~@3 d3@4 ~@2 [c4,eb4,g4]@7 bb2@5 ~@2 ab2@5 ~ gb2@4 ~@3 e2@5 ~ eb2@5 ~@2 [db2,ab3,b3,e4]@5 ~@2 [b1,b3,eb4,gb4]@5 ~@2 [bb1,db4,e4,ab4]@8 ~@5 [eb2,db4,f4,ab4,bb4]@8 ~@6 [ab2,c4]@54 ~@3, ~ [c4,eb4,ab4]@27 f3@5 ~@14 [c4,eb4,f4]@4 ~@3 c3@5 ~@8 [c4,eb4,ab4]@9 ~@5 [b3,e4,ab4]@10 ~@43 [eb4,ab4,c5]@54 ~@4]/4", // Cm Dbm7 B Bbm7b5 Bbm7 Ab F7 Ab …
})).s("gm_trombone").gain(0.55).pan(0.3)

// bass · tuba
const bass_2 = note("<~@56 A B@4>".pickRestart({
  A: "~@23 ab2@25",
  B: "[~@2 ab2@26 c3@25 ~@2 c3@5 ~ bb2@5 ~@2 ab2@5 ~ gb2@5 ~@2 e2@6 ~ eb2@6 ~ db2@5 ~ b1@6 ~ bb1@12 ~ eb2@13 ab1@53 ~@5]/4",
})).s("gm_tuba").gain(0.44).pan(0.1)

// other · timpani
const timpani = note("<~@60 [~@5 ab2!5 ~ ab2!6 ~ ab2!6 ~ ab2!6 ~ ab2!5 ~ ab2!5 ~@5]>")
  .s("gm_timpani").gain(0.27).pan(0.4)

// other · timpani · soft notes
const timpani_soft = note("<~@59 [~@39 ab2!5 ~ ab2!3] [ab2!3 ~ ab2 ~@43]>").s("gm_timpani").gain(0.16).pan(0.4)

stack(
  string_ensemble_2, bass, string_ensemble_2_2, string_ensemble_2_soft, glockenspiel, glockenspiel_soft, clarinet,
  french_horn, flute, orchestral_harp, trumpet, brass_section, trombone, bass_2, timpani, timpani_soft
)