Strudelify

star wars theme

John Williams

KeyB♭ majorTempo65 bpm
0:00/0:00
// star wars theme — John Williams
// 65 bpm, 4/4, key Bb 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/2 at bar 9, 4/4 at bar 20) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5940541; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 94 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(65/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 · violin · "Violin I"
const violin = note(`<
  A B@3 C D@2 E@2 F G H@2 I J K L@3 M ~@11 N O P Q R S T U V W X Y Z ~@2 AA@4 AB AC AD@6 AE AF ~@3 AG AH@2 AI AJ@2 AK@2
  AL@2 AM@2 AN@2 AO@3 ~@3 AP AQ AR@3 AS@3 AT@2 ~
>`.pickRestart({
  A: "~@19 [f5,bb5]@4 ~", // Bb5
  B: "[~@31 bb4@3 f5@2 eb5@3 f5@3 eb5@2 bb4@3 bb4@8 f5@3 eb5@3 bb4@3 bb4@8 f5@8 f5@3 f5@3 f5@2 bb4@16 ~ f5@16 eb5@3 d5@3 c5@2 bb5@15]/3",
  C: "~@2 f5@8 eb5@3 d5@2 c5@3 bb5@16 ~ f5@8 [c5,eb5]@3 [b4,d5]@2", // Cm Bm
  D: "[[c5,eb5]@3 [a4,c5]@8 ~@8 f4@3 f4@3 f4@3 bb4@16 f5@16 eb5@3 d5@3 c5@3 bb5@16 f5@8 eb5@3]/2", // Cm Am
  E: "[d5@3 c5@3 bb5@16 f5@8 eb5@3 d5@3 eb5@2 c5@8 ~ bb5@2 a5@3 bb5@3 c6@8 ~@25 g5@2 f5@3 eb5@3]/2", F: "d5 ~@23",
  G: "~@4 a4@2 ~ d5@2 ~ a4@2 ~@2 d5@2 ~ a4@2 d5 ~@2 f5 ~@3 e5 f5@2 ~ f5@2 e5 f5@2 e5 ~@3 eb5 e5@2 bb4 c5@5",
  H: "[a4 a4@6 ~ a4@2 ~ d5@2 ~ a4@2 ~@2 d5@2 ~ a4@2 d5 ~@2 f5 ~@3 e5 f5@2 ~ d5@2 ~ d5@3 d5@2 ~ db5 d5@2 ~ c5@2 bb4@3 a4@3 ~ g4@4 a4@2 ~ d5@2 ~ a4@2 ~@2 d5@2 ~ a4@2 d5 ~@2 f5 ~@3 e5 f5@2 ~ c5 ~@2 c5@3 c5@2 ~ a4]/2",
  I: "g4@2 ~ f4@5 d4 d4@6 ~ d4@6 f4@6 ~ a4@6 c5@6 ~ eb5@3 d5@3",
  J: "ab5@2 ~ a5 ~@2 f5 ~@15 a5@3 f5 a5@2 ~@7 a5@3 f5 a5@2 ~@7",
  K: "a5@3 f5 ab5@2 ~ a5@3 f5@6 d5 d5@6 ~@3 a5@3 f5 a5@2 ~@7 a5@3 f5 a5@2 ~@3",
  L: "[~@4 a5@3 f5 ab5@2 ~ a5@3 g5@7 c5@6 ~@3 a5@3 f5 a5@2 ~@7 a5@3 f5 a5@2 ~@7 a5@3 f5 ab5@2 ~ a5@3 f5@6 d5 d5@6 ~ bb4@2 d5 d5@2 ~ b4@2 ~ d5 d5@2 ~ ab5@2 a5@3 gb5 gb5@6 ~ d4@3 bb4@3 ab4@2 ~ a4@3 f4@7 f4@2 ~@17]/3",
  M: "~@19 a5@13 b5@8 ~@8", N: "gb4 g4 a4 gb4 g4 a4 gb4 g4 a4 gb4 g4 a4", O: "gb5@3 ~",
  P: "e4 f4 g4 e4 f4 g4 e4 f4 g4 e4 f4 g4", Q: "[a4,a5]@6 ~ a4", R: "a4 gb5 gb5@4 gb5!2",
  S: "g5@2 g5 gb5 e5@8 e5@2 a4@2", T: "a4 gb5 gb5@4 gb5 a5", U: "bb5@2 bb5 a5 g5@8 g5@2 bb4@2",
  V: "bb4 bb5 bb5@4 bb5!2", W: "db6@2 b5 bb5 ab5@8 ab5@2 ab5@2", X: "b5@2 bb5 ab5 gb5@8 gb5@2 gb5@2",
  Y: "bb5@2 ab5 gb5 f5@8 f5@2 f5@2", Z: "e5 ~@15",
  AA: "[~@26 e4@3 gb4@3 g4@7 a4@7 b3@7 a4@6 g4@3 ~ gb4@3 e4@7 ~@7 e4@3 gb4@3 ~ g4@6 a4@7 b3@7 a4@7 g4@3 gb4@3 ~ e4@7 ~@6 eb4@3 e4@3 ~ gb4@7 g4@6 b3@7 b4@7 a4@3 g4@3 ~ gb4@7 ~@6 eb4@3 ~]/4",
  AB: "e4@3 gb4@7 g4@7 a3@6 g4@7 gb4@3 ~ e4@3 eb4@7 ~@4", AC: "~@37 gb4@3 gb4@3 ~@5",
  AD: "[~@2 [e5,g5]@3 g5@24 g5@27 [e5,g5]@3 ~ gb5@3 gb5@47 ~ [e5,b5]@3 b5@24 b5@27 [gb5,c6]@3 [gb5,a5]@3 ~ gb5@20 gb5@27 ~@7 [e5,b5]@3 ~@10 [e5,b5]@3 ~@11 [e5,b5]@3 ~@11 [gb5,b5]@3 [gb5,b5]@3 ~@7 [e5,b5]@3 ~@5, ~@5 e5@51 ~@58 e5@51 ~@7 a5@47 ~@69]/6", // Em E5 Gbdim Gbm E5 B5 E5
  AE: "~@6 [e5,b5]@3 ~@10 [e5,b5]@3 ~@11 [gb5,b5]@3 [gb5,b5]@3 ~@9", AF: "~@32 g5@3 ~ a5@3 g5@2 gb5@2 e5@3 ~@2",
  AG: "~@36 e5@4 ~ e5@2 a5@4 ~, ~@20 g5 ~@3",
  AH: "[~@10 a4@2 ~@2 c5@2 a4@2 a4@7 a4@2 ~@2 c5@2 ~ e4@4 g4@2 e4@2 a4@2 ~@3 a4@2 a4@7 ~ a4@2 ~ c5@2 a4@2 e4@4 g4@2 e4@2 [e4,a4]@14 [e4,a4]@12, ~@31 a4@2 ~@11 c5@2 ~@50]/2", // A5
  AI: "~ [f4,a4]@5 [f4,a4]@5 e4@5", // F
  AJ: "[e4@11 a4@4 c5@11 c6@2 a5@2 a5@3 c6@2 a5@2 a5@4 ~@3 a4@11 ~@2 c5@2 b4@7 ~ c5@7 ~@8 a5@3 c6@2 a5@2 a5@4 d6@2 a5, ~@28 d5 ~@19]/2",
  AK: "[a5@4 c6@2 a5@2 ~@30 gb5@7 d5@22 a4@15 ~@4 g4@4 c4@3 f4@3]/2",
  AL: "[~ a4@15 g4@15 e4@7 d4@7 ~ e4@11 c4@3 d4@7 ~ b3@7 c4@15 e5@6]/2",
  AM: "[~@2 d5@7 e5@11 c5@4 d5@7 b4@7 ~ e5@7 a4@4 e5@4 f5@7 eb5@7 f5@11 ~ db5@3 eb5@7 ~ c5@5]/2",
  AN: "[~@10 f5@3 bb5@4 [gb5,b5]@7 e5@7 ~ gb5@11 d5@4 e5@7 a4@7 ~@4 g5@4 g5@4 a5@3 a5@4 bb5@4 bb5@4 c6@4 bb5@4]/2", // B5
  AO: "[c6@4 ~ c6@4 db6@5 c6@10 ~ bb5@10 f6@78 ~@31]/3", AP: "~@17 g4@5 ~ d4@5 eb4@5 g3@5 d4@5 a3@5",
  AQ: "~ bb3@5 d4@5 ~@37", AR: "[~@5 g3@5 d4@5 a4@10 g4@10 ~@11 g3@5 d4@5 ~ a4@10 ~@10 g4@10 ~ c5@31 d4@13 g4@12]/3",
  AS: "[~ g4@6 a4@6 ~ bb4@6 g4@6 ~ d5@6 bb4@6 ~ [eb5,g5]@26 [eb4,g4]@13 bb4@4 a4@4 ~ g4@4 d5@13 d5@4 bb4@4 ~ g4@4 c5@26]/3", // Eb
  AT: "[bb4@13 a4@13 ~@22]/2",
})).s("gm_violin").gain(0.3)

// other · violin · "Violin I" · soft notes
const violin_soft = note("<~@19 A B@2 C B C D E F G C H ~@49 I@2 J ~@9 K@2>".pickRestart({
  A: "~@5 db6", B: "d6 a5 d6 a5 d6 a5 d6 a5", C: "d6 bb5 d6 bb5 d6 bb5 d6 bb5", D: "eb6 bb5 eb6 bb5 eb6 bb5 eb6 bb5",
  E: "db6 ab5 db6 ab5 db6 ab5 db6 ab5", F: "b5 ab5 bb5 gb5 bb5 gb5 bb5 gb5", G: "bb5 f5 bb5 f5 bb5 f5 bb5 f5",
  H: "a5 e5 a5 e5 a5@2 a5 ~", I: "[~@26 eb4@10 ~@11 bb3@10 c4@10 ~ eb4@10 f4@18]/2", J: "~ ab3@7 ~@8",
  K: "[~ g4@13 ~@10]/2",
})).s("gm_violin").gain(0.15)

// other · viola
const viola = note(`<
  A B@2 C@2 D E@2 F G H I@2 J K L M@3 ~@9 N O P Q R S T ~@8 U@3 V@3 W X@8 Y Z ~@3 AA AB@3 AC@2 AD@2 AE@2 AF@2 AG@2 AH
  ~@6 AI@4 AJ@5 ~
>`.pickRestart({
  A: "~@19 [f3,bb3]@4 ~", // Bb5
  B: "[~@2 bb3@2 bb3@2 bb3@8 ~@4 bb3@2 ~ bb3@2 bb3@8 ~@16 eb3@3 bb3@3 f3@2 ab3@4 ~@5 bb3@2 bb3@3 bb3@3 bb3@8 f3@3 f3@3 f3@3 ~@5 [f3,bb3]@2]/2", // Bb5
  C: "[[f3,bb3]@8 ~@5 [f3,bb3]@2 [d3,f3]@2 [f3,bb3]@4 [ab3,bb3]@4 ~@4 [ab3,bb3]@4 ~@4 [ab3,bb3]@4 ~ [ab3,bb3]@2 [ab3,bb3]@3 [ab3,bb3]@3 [f3,bb3]@2 [f3,bb3]@3 [f3,bb3]@3 ~@4 [ab3,bb3]@4 ~@4 [ab3,bb3]@4 [ab3,bb3]@3 [ab3,bb3]@3 [ab3,bb3]@3 [f3,bb3]@2 [f3,bb3]@3 [f3,bb3]@3 [ab3,c4]@3 [g3,b3]@2]/2", // Bb5 Dm Bb5 Absus2 Bb5 Absus2 Bb5 Ab …
  D: "[ab3,c4]@3 [f3,a3]@25 [f3,bb3]@8 [f3,bb3]@8 [f3,bb3]@4", // Ab F Bb5
  E: "[~@2 [f3,bb3]@2 [f3,bb3]@3 [f3,bb3]@3 [f3,bb3]@2 [f3,bb3]@8 ~ [f3,bb3]@5 [f3,bb3]@3 [f3,bb3]@8 [f3,a3]@8 [f3,bb3]@8 ~ [f3,bb3]@2 [f3,bb3]@3 [f3,bb3]@3 [f3,a3]@8 [f3,a3]@3 [f3,a3]@2 [f3,a3]@3 [ab3,c4]@3 [g3,b3]@3 [ab3,c4]@2 [f3,a3]@10]/2", // Bb5 F Bb5 F Ab G Ab F
  F: "~@7 f4@3 eb4@2 f4@3 eb4@8 ~@8 c4@3 bb3@3 a3@3 g3@2 f3@3 eb3@3", G: "d3 ~@23",
  H: "~@4 d4@2 ~ f4@2 ~ d4@2 ~@2 f4@2 ~ d4@2 f4 ~@2 d4 ~@3 d4 d4@2 ~ d4@2 db4 d4@2 c4 ~@3 b3 c4@2 bb3 a3@5",
  I: "[f3 f3@6 ~ d4@2 ~ f4@2 ~ d4@2 ~@2 f4@2 ~ d4@2 f4 ~@2 d4 ~@3 d4 d4@2 ~ b3@2 ~ b3@3 b3@2 ~ bb3 b3@2 ~ e4@2 d4@3 c4@3 ~ bb3@4 d4@2 ~ f4@2 ~ d4@2 ~@2 f4@2 ~ d4@2 f4 ~@2 d4 ~@3 d4 d4@2 ~ e4 ~@2 e4@3 e4@2 ~ c4]/2",
  J: "c4@2 ~ a3@5 f3 f3@6 ~ f3@6 bb3@6 ~ c4@6 gb4@6 ~ g4@3 gb4@3",
  K: "b3@2 ~ bb3 ~@2 a3 ~@15 d4@3 a3 d4@2 ~@7 d4@3 a3 d4@2 ~@7",
  L: "d4@3 bb3 d4@2 ~ db4@3 a3@6 f3 f3@6 ~@3 d4@3 a3 d4@2 ~@7 d4@3 a3 d4@2 ~@3",
  M: "[~@4 d4@3 bb3 d4@2 ~ db4@3 a3@7 e3@6 ~@3 d4@3 a3 d4@2 ~@7 d4@3 a3 d4@2 ~@7 d4@3 bb3 d4@2 ~ db4@3 a3@6 f3 f3@6 ~ bb3@2 d4 bb3@2 ~ b3@2 ~ d4 b3@2 ~ c4@5 gb3 gb3@6 ~ d3@3 bb3@3 b3@2 ~ bb3@3 a3@7 a3@2 ~@17]/3",
  N: "~@7 d4", O: "f4@12 d3@12 f3@6 g3@3 a3@3 d4@4 e4@4 f4@4", P: "e4 ~", Q: "db5!4", R: "eb4@3 b3", S: "c5!2 b4!2",
  T: "a3@4 ~ a3 e4@2",
  U: "[g4@3 a4@3 ~@2 gb4@2 e4@3 ~ g4@3 a4@3 g4@2 gb4@2 e4@3 g4@3 ~ a4@3 g4@2 ~ e4@3 ~ g4@3 a4@3 g4@2 gb4@2 e4@3 g4@3 ~ a4@3 g4@2 ~ e4@3 ~ g4@3 a4@3 ~@2 gb4@2 e4@3 g4@3 ~ a4@3 g4@2 gb4@2 e4@3 g4@3 a4@3 ~@2 gb4@2 e4@3 ~@36, ~@7 g4@2 ~@27 gb4@2 ~@25 gb4@2 ~@10 g4@2 ~@25 g4@2 ~@40]/3",
  V: "[~@26 e4@3 gb4@3 g4@7 a4@7 b3@7 a4@6 g4@3 ~ gb4@3 e4@7 ~@7 e4@3 gb4@3 ~ g4@6 a4@7 b3@7 a4@7 ~@13 gb3@3 ~ g3@3 gb3@2 ~ eb3@3 ~ gb3@3, ~@68 e3 ~@3]/3",
  W: "g3@3 ~@2 e3@2 eb3@3 gb3@3 ~ g3@3 gb3@2 e3@2 eb3@3 gb3@3 g3@3 ~@2 e3@2 eb3@3 ~ gb3@3 g3@3 gb3@2 e3@2, ~@4 gb3@2 ~@25 gb3@2 ~@15",
  X: "[eb3@3 gb3@3 ~ g3@3 gb3@2 ~ eb3@3 ~ gb3@3 g3@3 gb3@2 e3@2 eb3@3 gb3@3 ~ g3@3 gb3@2 ~ eb3@3 ~ gb3@3 g3@3 ~@2 e3@2 eb3@3 gb3@3 ~ g3@3 gb3@2 e3@2 eb3@3 gb3@3 g3@3 ~@2 e3@2 eb3@3 ~ gb3@3 g3@3 gb3@2 e3@2 eb3@3 [b3,b4]@3 b3@24 b3@27 [b3,b4]@3 ~ [a3,a4]@3 a3@20 a3@27 ~ [b3,e4]@3 b3@24 b3@27 [c4,c5]@3 [a3,a4]@3 ~ a3@20 a3@27 ~@7 [e4,g4]@3 ~@10 [e4,g4]@3 ~@11 [e4,g4]@3 ~@11 gb4@3 eb4@3 ~@7 [e4,g4]@3 ~@5, ~@12 e3@2 ~@25 e3@2 ~@10 gb3@2 ~@25 gb3@2 ~@21 b4@51 ~@7 a4@47 ~@4 e4@51 ~@7 a4@47 ~@69]/8", // B A E5 C A Em
  Y: "~@6 [e4,g4]@3 ~@10 [e4,g4]@3 ~@11 gb4@3 eb4@3 ~ g4@3 a4@3 g4@2", // Em
  Z: "gb4@2 e4@3 g4@3 ~ a4@3 g4@2 ~ e4@3 ~ g4@3 a4@3 ~@2 gb4@2 e4@3 g4@3 ~ a4@3 g4@2 gb4@2 e4@3 ~@2, ~@7 gb4 ~@5 g4 ~@10",
  AA: "~@3 e3@2 g3 e3 a3@2 ~@15",
  AB: "[~@10 f4@7 ~ f4@7 f4@7 f4@7 ~ f4@7 f4@7 ~ f4@7 f4@7 ~ a3@2 ~ c4@2 a3@2 a3@7 a3@2 ~@2 d4@2 a3@2 a3@7 a3@2 ~@2 e4@2 a3@2 a3@7 a3@2 ~@2 f4@2 a3@2 a3@7 a3@7 c4@7 ~]/3",
  AC: "[e3@11 a3@4 d4@7 e4@22 e4@30 a3@22]/2", AD: "[~@8 a3@7 c4@7 ~ a3@11 e4@4 a3@7 a3@22 a3@29]/2",
  AE: "[~ f3@15 d3@15 a3@29 b3@7 ~ a3@7 e3@15 e5@6]/2",
  AF: "[~@2 d5@7 e5@11 c5@4 d5@7 b4@7 ~ e5@15 bb3@7 bb3@7 bb3@11 ~ bb3@3 bb3@7 ~ bb3@5]/2",
  AG: "[~@2 bb3@15 b3@7 b3@7 ~ b3@11 b3@4 b3@7 b3@7 ~ b3@14 a3@4 bb3@4 bb3@4 c4@4 bb3@4]/2",
  AH: "c4@4 ~ c4@4 db4@5 ~@34",
  AI: "[~ d3@10 g3@21 a3@15 bb3@3 c4@3 bb3@20 d3@16 d3@5 g3@16 a3@5 bb3@5 d3@5 bb3@3 ~ g3@3 d4@3 ~ c4@31 d4@13 bb3@12]/4",
  AJ: "[~ bb3@6 a3@6 ~ bb3@6 g3@6 ~ d3@6 bb3@6 ~ g3@26 eb3@13 bb3@4 a3@4 ~ g3@4 d4@13 d4@4 bb3@4 ~ g3@4 d3@52 a3@26 ~@44]/5",
})).s("gm_viola").gain(0.3)

// other · viola · soft notes
const viola_soft = note("<~@20 A B C B D@2 E F G ~@6 H I H I J K J ~@36 L@4 M ~@9 N@2>".pickRestart({
  A: "d4", B: "d3", C: "e3", D: "g3", E: "gb3 ab3", F: "e4 gb4", G: "f4@7 ~", H: "d4 a3 d4 a3 d4 a3 d4 a3",
  I: "d4 bb3 d4 bb3 d4 bb3 d4 bb3", J: "eb4 bb3 eb4 bb3 eb4 bb3 eb4 bb3", K: "db4 ab3 db4 ab3 db4 ab3 db4 ab3",
  L: "[~@29 bb3@31 ~@31 f3@31 bb3@10 ~ f3@10 bb3@10 c4@10 ~ eb4@10 f4@18]/4", M: "~ db3@7 ~@8", N: "[~ g3@13 ~@10]/2",
})).s("gm_viola").gain(0.2)

// other · cello
const cello = note(`<
  A B C D@2 E F@3 G H I@2 J K L M@3 ~ N O P Q R S T U V W X Y Z AA AB AC AD AC AE AF AG AH AC AI ~@2 AJ@4 AK AL AM@5
  AN@2 AO ~@4 AP@3 AQ AR AS AT AU@2 AV@2 AW@2 AX AY AZ@3 BA@6 BB@2 ~ BC@3
>`.pickRestart({
  A: "~@19 d2@4 ~", B: "~@2 bb2@2 bb2@2 bb2@8 ~@4 bb2@2 ~ bb2@2 bb2@2 f3@3 eb3@3 f3@3 eb3@2 bb2@3 bb2@3 f3@2 eb3@3 ~",
  C: "~@7 eb3@3 bb2@3 f3@3 ab3@4 ~@12 f3@3 f3@3 f3@3 ~@5 [f2,bb2]@2", // Bb5
  D: "[[f2,bb2]@8 ~@5 [f2,bb2]@4 [f2,bb2]@4 [f2,c3]@4 ~@4 eb3@4 ~@4 eb3@4 ~ eb3@2 eb3@3 eb3@3 d3@2 d3@3 d3@3 ~@4 eb3@4 ~@4 eb3@4 eb3@3 eb3@3 eb3@3 d3@2 d3@3 d3@3 ab3@3 g3@2]/2", // Bb5 F5
  E: "ab3@3 f3@8 ~@8 f3@3 f3@3 f3@3 d3@8 d3@8 d3@4",
  F: "[~@2 d3@2 d3@3 d3@3 d3@2 c3@8 ~ d3@5 eb3@3 eb3@8 d3@8 c3@8 ~ c3@2 c3@3 c3@3 a3@8 f3@3 f3@2 f3@3 ab3@3 g3@3 ab3@2 f3@8 ~ bb3@2 a3@3 bb3@3 c4@8 c4@3 bb3@2 a3@3 g3@3 f3@3 eb3@2 c4@3 bb3@3 a3@3 g3@2 f3@3 eb3@3]/3",
  G: "d3@3 ~@3 a2@3 ~@4 d3@3 ~@3 a2@3 ~@4 d3@3 ~@3 a2@3 ~@4 d3@3 ~@3 a2@3",
  H: "~@4 d3@3 ~@3 a2@3 ~@4 d3@3 ~@3 a2@3 ~@4 d3@3 ~@3 c3@3 ~@4 f3@3 ~@2",
  I: "[~ c3@3 ~@4 d3@3 ~@3 a2@3 ~@4 d3@3 ~@3 a2@3 ~@4 g2@3 ~@3 g2@3 ~@4 c3@2 ~ d3@2 ~ eb3@2 ~@2 e3@2 ~ d3@3 ~@3 a2@3 ~@4 d3@3 ~@3 a2@3 ~@4 c3@3 ~@3 c3@3 ~]/2",
  J: "~@3 f3@3 ~@3 c3@3 ~@4 bb2@3 ~@3 bb2@3 ~@4 f3@3 ~@3 d3@3 ~@4 g3@3 g3@3",
  K: "c3@3 ~ c3@3 f3@3 e3@3 d3@3 ~ c3@3 d3@3 ~@3 a2@3 ~@4 d3@3 ~@3 a2@3 ~@4 d3@2",
  L: "~@4 a2@3 ~@4 d3@5 ab2@4 ~ a2@3 d3@3 ~@3 a2@3 ~@4 d3@3 ~@3 a2@3 ~@2",
  M: "[~@2 d3@3 ~@3 a2@3 ~@4 eb3@6 c3@3 ~ c3@3 d3@3 ~@3 a2@3 ~@4 d3@3 ~@3 a2@3 ~@4 d3@3 ~@3 g2@3 ~@4 d3@3 ~@3 a2@3 ~@4 bb2@2 bb2 ~@3 b2@2 ~ b2 ~@3 c3@5 d3 ~@3 d3 d3@3 d3@3 ~@3 c3@5 ~ f3@7 f3@2 ~@17]/3",
  N: "d3@6 ~ a2", O: "a2 gb3 gb3@4 gb3!2", P: "g3@2 g3 gb3 e3@8 e3@2 a2@2", Q: "a2 gb3 gb3@4 gb3 a3",
  R: "bb3@2 bb3 a3 g3@8 g3@2 bb2@2", S: "bb2 bb3 bb3@4 bb3 db4", T: "db4@2 b3 bb3 ab3@8 ab3@2 ab3@2",
  U: "b3@2 bb3 ab3 gb3@4 gb3@2 f3 gb3 ab3@2 gb3 ab3", V: "bb3@4 f3@3 f3", W: "bb3@2 a3 g3 f3@4 f3@2 e3 f3 g3@2 f3 g3",
  X: "a3@6 a3 e3", Y: "b3 a3 g3 b3 a3 g3 bb3 a3 g3 bb3 a3 g3", Z: "b2 gb3 b3 eb4 gb4@2 ~@2",
  AA: "a3 g3 f3 a3 g3 f3 ab3 g3 f3 ab3 g3 e3", AB: "~ e3 a3 e4@2 ~@3", AC: "d2", AD: "e2", AE: "g2", AF: "eb3",
  AG: "ab2 e2", AH: "eb2", AI: "e2 ~@15",
  AJ: "[~@26 e3@3 gb3@3 g3@7 a3@7 b2@7 a3@6 g3@3 ~ gb3@3 e3@7 ~@7 e3@3 gb3@3 ~ g3@6 a3@7 b2@7 a3@7 g3@3 gb3@3 ~ e3@7 ~@6 eb3@3 e3@3 ~ gb3@7 g3@6 b2@7 b3@7 a3@3 g3@3 ~ gb3@7 ~@6 eb3@3 ~]/4",
  AK: "e3@3 gb3@7 g3@7 a2@6 g3@7 gb3@3 ~ e3@3 eb3@7 ~@4", AL: "~@9 gb3@3 ~ gb3@3 ~@7 gb3@3 gb3@3 ~@8 gb3@3 gb3@3 ~@5",
  AM: "[~@2 [b2,e3]@3 b2@24 b2@27 [b2,e3]@3 ~ a2@3 a2@47 ~ [b2,e3]@3 b2@24 b2@27 c3@3 a2@3 ~ a2@47 e3@3 ~ e3@3 ~@7 e3@3 e3@3 ~, ~@5 e3@51 ~@58 e3@51 ~@75]/5", // E5
  AN: "[~@6 e3@3 ~ e3@3 ~@7 e3@2 e3 e3@3 ~@7 e3@3 ~ e3@3 ~@7 e3@3 e3@3 ~@8 e3@3 e3@3 ~@7 e3@2 e3 e3@3 ~@16]/2",
  AO: "~@19 b2@3 c3@3 ~ b2@3 g2@3 b2@3 ~ c3@3 b2@3 ~ g2@3 ~@2",
  AP: "[~@3 e2@3 g2@2 e2@2 a2@30 a2@30 d3@7 c3@7 b2@7 ~ a2@7 g3@7 ~ f3@7 e3@7 ~ d3@7 ~@15]/3",
  AQ: "a2@4 e3@3 c4@4 e3@4 ~@15 a2@3 e3@4 e2@4 e3@4 ~@3", AR: "~@11 a2@4 e3@4 c3@3 e3@4 ~@15 d2@4 a2@3",
  AS: "gb3@4 a2@4 ~@15 a2@3 e3@4 e2@4 e3@4 ~@10", AT: "~@4 c4@4 a3@4 gb3@4 a2@3 [a2,a3]@29",
  AU: "[~ c3@15 b2@15 a2@30 ~@29 c4@6]/2",
  AV: "[~@2 b3@7 c4@11 c4@4 b3@7 b3@7 ~ c4@15 ~@3 f2@4 bb2@4 c3@3 db3@4 f3@4 bb3@20]/2",
  AW: "[~@6 bb3@4 f3@3 bb2@4 ~@4 gb2@3 b2@4 db3@4 d3@4 e3@3 gb3@37 d2@4 a2@4 d3@4 a2@4 eb2@4]/2",
  AX: "bb2@4 ~ eb3@4 bb2@5 ~@34", AY: "~@8 bb2@21 f3@19",
  AZ: "[~ eb3@3 ~ d3@3 c3@3 ~ bb3@21 f3@31 bb2@10 ab3@3 ~ g3@3 f3@3 ~ eb3@20 bb2@31 ~ ab3@3 g3@3 ~]/3",
  BA: "[ab3@3 f3@21 c4@166 c4@21 ~@10 bb2@3 ~ g2@3 d3@3 ~ c3@31 gb3@13 g2@6 g2@6]/6",
  BB: "[~ g2@13 g2@13 f2@13 eb2@26 eb2@13 ~@17]/2", BC: "[~@13 a2@13 d3@26 ~@20]/3",
})).s("gm_cello").gain(0.3)

// other · pizzicato strings
const pizzicato_strings = note("<~@62 A@2 ~@30>".pickRestart({
  A: "[~@13 e3@4 a3@4 ~@3 a2@4 ~@15 e2@4 a2@4 ~@45]/2",
})).s("gm_pizzicato_strings").gain(0.25)

// bass · contrabass
const bass = note(`<
  A B C D@2 E F@2 G H I J@2 K L M N@3 ~@9 O P Q R S T U Q V Q W V X Y Z AA AB AC AD AE AF AG AH@2 AI@5 AJ@2 AK ~@4 AL@3
  AM AN AO AP AQ@2 AR@2 AS@2 AT ~@8 AU AV AW@2 ~@4
>`.pickRestart({
  A: "~@19 bb1@4 ~", B: "~@23 g2@2 d2@3 c2@3 d2@8 g2@8 ~",
  C: "~@7 eb2@3 bb1@3 f2@3 ab2@4 ~@12 f2@3 f2@3 f2@3 ~@5 bb1@2",
  D: "[bb1@8 ~@5 bb1@4 bb1@4 d2@4 ~@4 f1@4 ~@4 f1@4 ~ f1@2 f1@3 f1@3 bb1@2 bb1@3 bb1@3 ~@4 f1@4 ~@4 f1@4 f1@3 f1@3 f1@3 bb1@2 bb1@3 bb1@3 ~@5]/2",
  E: "~@19 f2@3 f2@3 f2@3 bb1@8 a1@8 a1@4",
  F: "[~@2 a1@2 bb1@3 bb1@3 a1@2 g1@8 ~ g1@5 eb2@3 eb2@3 d2@2 c2@3 bb1@3 a1@3 g1@2 f1@8 ~ g1@4 a1@4 bb1@2 a1@3 g1@3 f1@4 bb1@4 f2@8 ~@10]/2",
  G: "~@15 f2@3 eb2@2 f2@3 eb2@3 d2@3 eb2@2 f2@3 eb2@3 f2@3 g2@2 f2@3 eb2@3",
  H: "d2@3 ~@3 a1@3 ~@4 d2@3 ~@3 a1@3 ~@4 d2@3 ~@3 a1@3 ~@4 d2@3 ~@3 a1@3",
  I: "~@4 d2@3 ~@3 a1@3 ~@4 d2@3 ~@3 a1@3 ~@4 d2@3 ~@3 c2@3 ~@4 f2@3 ~@2",
  J: "[~ c2@3 ~@4 d2@3 ~@3 a1@3 ~@4 d2@3 ~@3 a1@3 ~@4 g1@3 ~@3 g1@3 ~@4 c2@2 ~ d2@2 ~ eb2@2 ~@2 e2@2 ~ d2@3 ~@3 a1@3 ~@4 d2@3 ~@3 a1@3 ~@4 c2@3 ~@3 c2@3 ~]/2",
  K: "~@3 f2@3 ~@3 c2@3 ~@4 bb1@3 ~@3 bb1@3 ~@4 f2@3 ~@3 d2@3 ~@4 g2@3 ~@3",
  L: "c2@3 ~@4 f2@3 e2@3 d2@3 ~ c2@3 d2@3 ~@3 a1@3 ~@4 d2@3 ~@3 a1@3 ~@4 d2@2",
  M: "~@4 a1@3 ~@4 d2@5 ab1@4 ~ a1@3 d2@3 ~@3 a1@3 ~@4 d2@3 ~@3 a1@3 ~@2",
  N: "[~@2 d2@3 ~@3 a1@3 ~@4 eb2@6 c2@3 ~ c2@3 d2@3 ~@3 a1@3 ~@4 d2@3 ~@3 a1@3 ~@4 d2@3 ~@3 g1@3 ~@4 d2@3 ~@3 a1@3 ~@4 bb1@3 ~@3 b1@3 ~@4 c2@5 d2 ~@3 d2 d2@3 g1@3 ~@3 c2@5 ~ f2@7 f2@2 ~@17]/3",
  O: "~@7 d3", P: "f3@7 g2", Q: "a2", R: "b2 a2 g2 e2@3 bb2 a2 g2 e2@3", S: "gb2", T: "a2 g2 f2 d2@3 ab2 g2 f2 d2@3",
  U: "db2@3 ~", V: "g2", W: "bb2", X: "ab2 e2", Y: "eb2", Z: "d2@3 ~", AA: "e1 ~@15", AB: "~@6 e1@3 ~ g1@3 ~@35",
  AC: "~@9 e1@3 ~ g1@3 gb1@3 e1@3 ~ g1@3 ~@22", AD: "~@19 e1@3 ~@26", AE: "~@25 e1@3 g1@3 ~@17", AF: "~@31 eb2@3 ~@14",
  AG: "~@38 eb2@3 gb2@3 ~@4", AH: "[~@44 gb1@3 gb1@3 ~@7 gb1@3 ~ gb1@3 ~@7 gb1@3 gb1@3 ~@8 gb1@3 gb1@3 ~@5]/2",
  AI: "[~@2 g2@3 g2@51 g2@3 ~ gb2@3 gb2@47 ~ g2@3 g2@51 gb2@3 gb2@3 ~ gb2@47 e2@3 ~ e2@3 ~@7 e2@3 e2@3 ~]/5",
  AJ: "[~@6 e2@3 ~ e2@3 ~@7 e2@2 e2 e2@3 ~@7 e2@3 ~ e2@3 ~@7 e2@3 e2@3 ~@8 e2@3 e2@3 ~@7 e2@2 e2 e2@3 ~@16]/2",
  AK: "~@5 g2@3 ~ a2@3 g2@3 e2@3 ~ g2@3 a2@3 ~ g2@3 e2@3 g2@3 ~ a2@3 g2@3 ~ e2@3 ~@2",
  AL: "[~@3 e2@3 g2@2 e2@2 a2@30 a2@30 d2@7 c2@7 b1@7 ~ a1@7 g2@7 ~ f2@7 e2@7 ~ d2@7 a1@4 c2@3 d2@4 e2@4]/3",
  AM: "~@15 a1@3 e2@4 c3@4 e2@4 ~@14 a1@4", AN: "e2@4 c3@4 e2@4 ~@14 d2@4 a1@4 d2@3 a1@4 ~@7",
  AO: "~@8 a1@4 e2@3 c3@4 e2@4 ~@15 d2@3 a1@4 gb2@3", AP: "~ a2@4 ~@14 c2@29", AQ: "[~ c2@15 b1@15 a1@30 ~@29 a2@6]/2",
  AR: "[~@2 a2@7 a2@11 a2@4 a2@7 a2@7 ~ a2@15 ~@3 f1@4 bb1@4 c2@3 db2@4 f2@4 bb2@20]/2",
  AS: "[~@6 bb2@4 f2@3 bb1@4 ~@4 gb1@3 b1@4 db2@4 d2@4 e2@3 gb2@37 d2@4 a1@4 d2@4 a1@4 eb2@4]/2",
  AT: "bb1@4 ~ eb2@4 bb1@5 ~@34", AU: "~@29 bb2@10 ~ c3@8", AV: "~@2 c2@10 ~ c2@10 d2@13 g1@6 g1@6",
  AW: "[~ g1@13 g1@13 f1@13 bb2@26 g2@13 ~@17]/2",
})).s("gm_contrabass").gain(0.4)

// bass · contrabass · soft notes
const bass_soft = note("<~@20 A B C B A D E F G ~@50 H@3 I ~@8 J@3>".pickRestart({
  A: "d2", B: "a1", C: "g1", D: "bb1", E: "db2 b1", F: "b2 bb2", G: "f3@7 ~",
  H: "[~@43 bb2@31 f2@10 ~ f1@10 bb1@10 c2@10 ~ eb2@10 f2@18]/3", I: "~ g1@7 ~@8", J: "[d2@13 a1@13 g1@26 ~@20]/3",
})).s("gm_contrabass").gain(0.15)

// bass · acoustic bass
const bass_2 = note("<~@62 A@2 ~@30>".pickRestart({
  A: "[~@13 e2@4 a2@4 ~@3 a1@4 ~@15 e1@4 a1@4 ~@45]/2",
})).s("gm_acoustic_bass").gain(0.25)

stack(violin, violin_soft, viola, viola_soft, cello, pizzicato_strings, bass, bass_soft, bass_2)

More by John Williams