Strudelify

Fanfare from JanáÄek's Sinfonietta

Leoš JanáÄek

KeyA♭ majorTempo120 bpm
0:00/0:00
// Fanfare from JanáÄek's Sinfonietta — Leoš JanáÄek
// 120 bpm, 2/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 (2/4 at bar 1, 3/4 at bar 60, 2/4 at bar 74, 3/2 at bar 101) are rendered on a constant 2/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5230109; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 123 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/2)

// 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 · trumpet · "C Trumpet"
const trumpet = note(`<
  ~@10 A B C ~@4 A B C ~ D E B C ~ D E B C ~ F G H I J F G H I J K L M N O P Q P Q K L M N O P Q P Q R@3 S@3 T U@2 V W X
  Y Z AA@2 AB@3 AC@2 AD@3 AE@2 AF@3 AG@2 AH@3 AI@2 AJ@3 AK@2 AL@3 AM@2 AN@3 AO@2 AN@3 AP@2 AQ@3 AM@2 AR@3
>`.pickRestart({
  A: "bb4 db5 bb4@2", B: "ab4 eb4 gb4@2", C: "eb4@2 gb4 eb4", D: "[ab4,bb4,db5] [bb4,db5,gb5] [ab4,bb4,db5]@2",
  E: "[ab4,b4] ab4 [gb4,bb4]@2", F: "[g4,bb4,eb5] [bb4,eb5,g5] [g4,bb4,eb5] [ab4,c5]", G: "[g4,bb4]@2 [f4,ab4] eb4",
  H: "g4 eb4", I: "g4 eb4 g4@2", J: "eb4@2 g4 eb4", K: "[bb4,c5,eb5] [c5,eb5,ab5] [bb4,c5,eb5] [a4,db5]",
  L: "[ab4,c5] [gb4,ab4] [e4,ab4,c5]@2", M: "eb4 d4 c5 ab4, [e4,ab4] [db4,e4]",
  N: "eb5 ab5 [c4,eb5] [b3,d5], [db4,bb4] ab4", O: "[bb3,ab4,db5]@2 c5 bb4, ~ [db4,e4]",
  P: "[db4,e4,c5]@2 [c4,eb4] [b3,d4], ~ ab4", Q: "c5 ~ ab4 ~ [c4,eb4]@2 [bb3,db4]@2, [db4,e4] ~",
  R: "[~@2 b4 ~@2 e5 ~ b4 ~@2 ab4 ~ gb4 ~@4 db4@2 b3 ~@2 ab3 ~@3 b3 ~@4 db4@2 ~ b3 ~ ab3 ~ db4 ~@2 b3 ~@4 b4 ~, ~@14 e4@5 e4@10 e4@14 ~@5, ~@24 db4@5 ~@19]/3",
  S: "[e5 ~ b4 ~@2 ab4 ~ gb4 ~@4 db4@2 b3 ~@2 ab3 ~@4 b3 ~@3 db4@2 ~ b3 ~ ab3 ~@2 db4 ~ b3 ~ e4@2 ~ db4@2 b5 ~@2 e5 ~, ~@10 e4@4 e4@10 e4@14 ~@3 e5 ~@6, ~@19 db4@5 ~@19 e4@5]/3",
  T: "db5 ~ b4 ~@2 e4@2 [db5,e5] ~@2 [b4,b5] ~ e5 ~ db5 ~, db4@5 ab4 ~ db4@2 ~@7", // Dbm B
  U: "[~ b4 ~ e4@2 ~ [db5,e5] ~ [b4,b5] ~ e5 ~@2 db5 ~ b4 ~@2 e4@2 [db5,e5] ~ [b4,b5] ~@2 e5 ~ db5 ~@2 b4 ~, ~@3 ab4 ~@2 db4@2 e4@5 db4@5 ab4 ~ db4@2 ~@10]/2", // Dbm B Dbm B
  V: "~@2 db5 ~@2 b4 ~ gb4 ~@2 db5 ~ b4 ~@3", W: "~ ab4 ~ gb4 ~@2 db4 ~ ab4 ~ gb4 ~@4 eb4",
  X: "~@2 db4 ~ ab3 ~ eb4 ~@2 db4 ~@4 eb4 ~", Y: "db4 ~ ab3 ~@2 eb4 ~ db4 ~@4 eb4 ~ db4 ~",
  Z: "~ ab3 ~ eb4 ~@2 db4 ~ ab3 ~ eb4 ~@2 db4 ~ ab3", AA: "[~@6 [ab4,bb4,db5]@13 ~ [bb4,db5,gb5]@12]/2",
  AB: "[~ [ab4,bb4,db5]@7 ~@3 db4@3 [ab4,b4]@7 ~@3 db4@3 ~ [ab4,bb4,db5]@6 ~@4 db4@3 [ab4,b4]@7, ~@8 [gb4,bb4]@7 ~@6 [gb4,bb4]@7 ~@6 [gb4,bb4]@7 ~@7]/3", // Bbm7 Abm Bbm7 Abm Gb
  AC: "[~@3 db4@3 [f4,gb4,bb4]@13 ~ [gb4,bb4,eb5]@12, [gb4,bb4]@3 ~@13]/2", // Gbmaj7 Ebm Gb
  AD: "[~ [f4,gb4,bb4]@7 ~@3 bb3@3 [f4,ab4]@7 ~@3 bb3@3 ~ [f4,gb4,bb4]@6 ~@4 bb3@3 [f4,ab4]@7, ~@8 [eb4,gb4]@7 ~@6 [eb4,gb4]@7 ~@6 [eb4,gb4]@7 ~@7]/3", // Gbmaj7 Fm Gbmaj7 Fm Ebm
  AE: "[~@3 bb3@3 [f4,gb4,bb4]@7 ~@3 bb3@3 ~ [bb4,c5,eb5]@6 [ab4,c5]@4 eb4@2, [eb4,gb4]@7 ~@6 [eb4,gb4]@7 ~@12]/2", // Gbmaj7 Cm7 Ab Ebm
  AF: "[~ [f4,gb4,bb4]@7 ~@3 bb3@3 [bb4,c5,eb5]@7 ~@3 eb4@3 ~ [bb4,c5,eb5]@6 ~@4 eb4@3 [bb4,c5,eb5]@7, ~@8 [eb4,gb4]@7 ~@6 [ab4,c5]@7 ~@6 [ab4,c5]@7 ~@7]/3", // Gbmaj7 Cm7 Ebm Ab
  AG: "[~@3 eb4@3 [bb4,c5,eb5]@7 ~@3 eb4@3 ~ f5@6 [db5,f5]@4 ab4@2, [ab4,c5]@7 ~@6 [ab4,c5]@7 [ab4,eb5,ab5]@9 ~@3]/2", // Cm7 Db Ab Ab5
  AH: "[~ [db5,eb5,f5,ab5]@7 ~@3 ab4@3 [eb4,f4,ab4,eb5,f5,ab5]@7 ~@3 [ab3,ab4]@3 ~ [eb4,gb4,eb5,f5,ab5]@6 ~@4 [ab3,ab4]@3 [eb4,f4,ab4,eb5,f5,ab5]@7, ~@8 [db5,f5]@7 ~@6 [db4,f4,db5,f5]@7 ~@6 [db4,f4,db5,f5]@7 ~@7]/3", // Db Fm7 Ab Fm7 Ab Fm7 Db
  AI: "[~@3 [ab3,ab4]@3 [eb4,gb4,eb5,f5,ab5]@7 ~@3 [ab3,ab4]@3 ~ [bb3,c4,eb4,bb4,c5,eb5]@6 [ab3,ab4]@3 ~ [eb3,eb4]@2, [db4,f4,db5,f5]@7 ~@6 [db4,f4,db5,f5]@7 ~@12]/2", // Ab Fm7 Ab Cm7 Ab Eb Db
  AJ: "[~ [ab4,eb5,f5,ab5]@7 ~@3 ab4@3 [db5,eb5,f5,ab5]@7 ~@3 ab4@3 ~ [eb4,f4,ab4,eb5,f5,ab5]@6 ~@4 [ab3,ab4]@3 [eb4,gb4,eb5,f5,ab5]@7, ~@8 [db5,f5]@6 ~@7 [db5,f5]@7 ~@6 [db4,f4,db5,f5]@7 ~@7]/3", // Fm7 Db Fm7 Ab Fm7 Db
  AK: "[~@3 [ab3,ab4]@3 [eb4,f4,ab4,eb5,f5,ab5]@7 ~@3 [ab3,ab4]@3 ~ [bb3,c4,gb4,bb4,c5,eb5]@6 [c4,ab4]@4 [eb3,eb4]@2, [db4,f4,db5,f5]@7 ~@6 [db4,f4,db5,f5]@7 ~@6 [ab3,eb4]@3 ~@3]/2", // Ab Fm7 Ab Cm7b5 Fm Eb Db Ab5
  AL: "[~ [bb3,db4,eb5,f5,ab5]@7 ab3@3 [f3,ab4]@3 [eb5,f5,ab5]@7 ~@3 ab4@3 ~ [eb5,f5,ab5]@6 ~@4 ab4@3 [eb5,f5,ab5]@7, ~@8 [db5,f5]@7 ~@6 [db5,f5]@7 ~@6 [db5,f5]@7 ~@7]/3", // Bbm7 Fm Fm7 Db
  AM: "[~@3 ab4@3 [ab4,eb5,f5,ab5]@7 ~@3 ab4@3 ~ [db5,eb5,f5,ab5]@6 [db5,f5]@4 ab4@2, [db5,f5]@7 ~@6 [db5,f5]@7 ~@12]/2", // Fm7 Db
  AN: "[~ [eb4,f4,ab4,eb5,f5,ab5]@7 ~@3 [ab3,ab4]@3 [eb4,gb4,ab4,eb5,f5,ab5]@7 ~@3 [ab3,ab4]@3 ~ [db5,eb5,f5,ab5]@6 ~@4 ab4@3 [eb4,f4,ab4,eb5,f5,ab5]@7, ~@8 [db4,f4,db5,f5]@7 ~@6 [db4,f4,db5,f5]@7 ~@6 [db5,f5]@7 ~@7]/3", // Fm7 Ab Fm7 Ab Db Fm7 Db
  AO: "[~@3 [ab3,ab4]@3 [eb4,gb4,ab4,eb5,f5,ab5]@7 ~@3 [ab3,ab4]@3 ~ [db5,eb5,f5,ab5]@6 [db5,f5]@4 ab4@2, [db4,f4,db5,f5]@7 ~@6 [db4,f4,db5,f5]@7 ~@12]/2", // Ab Fm7 Ab Db
  AP: "[~@3 [ab3,ab4]@3 [eb4,f4,gb4,ab4,eb5,f5,ab5]@7 ~@3 [ab3,ab4]@3 ~ [db5,f5]@6 [db5,f5]@4 ab4@2, [db4,f4,db5,f5]@7 ~@6 [db4,f4,db5,f5]@7 [f4,ab4,eb5,ab5]@9 ~@3]/2", // Ab Fm7 Ab Db Fm7
  AQ: "[~ [ab4,eb5,f5,ab5]@7 ~@3 ab4@3 [db5,eb5,f5,ab5]@7 ~@3 ab4@3 ~ f5@6 ~@4 ab4@3 [f4,ab4,db5,eb5,f5,ab5]@7, ~@8 [db5,f5]@6 ~@7 [db5,f5]@7 [eb4,f4,ab4,eb5,ab5]@9 ~@11, ~@34 [db5,f5]@7 ~@7]/3", // Fm7 Db Fm7 Db
  AR: "[~ [eb4,f4,ab4,eb5,f5,ab5]@7 ~@3 ab4@3 [f4,ab4,db5]@27 db4@7, ~@8 [db5,f5]@6 [eb5,f5,ab5]@33 ~]/3", // Fm7 Db Fm7
})).s("gm_trumpet").gain(0.4)

// chords · tuba · "Euphonium (Treble Clef)"
const tuba = note(`<
  A B C B C B C A B C B C B C A B C B C B C D E F G E D E F G E H@2 I@3 H@2 I@3 J@3 K@6 J@3 K@6 L@8 M N@7 O@5 P@5 Q@4
  R@6 S@5 T@8 U@10 V@5
>`.pickRestart({
  A: "[ab3,eb4]", B: "[gb3,db4]", C: "[eb3,bb3]", D: "~ [eb3,bb3]", E: "[db3,ab3] [ab2,eb3]", F: "[eb3,bb3] [db3,ab3]",
  G: "[ab2,eb3] [eb3,bb3]", H: "[eb3,bb3]/2", I: "[eb3,bb3]/3", J: "[ab3,eb4]/3", K: "ab3/2",
  L: "[[e4,b4]@14 [e4,b4]@14 ~ [e4,b4]@14 [e4,b4]@14 ~ [e4,b4]@14 [e4,b4]@14 [e4,b4]@14 ~ [e4,b4]@14 [e4,b4]@13]/8", // E5
  M: "~ [e4,b4]@7", N: "[[e4,b4]@14 [db4,ab4]@14 ~ [ab3,eb4]@29 [ab3,eb4]@28 [ab3,eb4]@13 ~ [gb3,db4]@12]/7",
  O: "[~ [db3,ab3]@13 [ab3,eb4]@13 ~ [gb3,db4]@13 [db3,ab3]@13 [bb3,f4]@13 ~ [ab3,eb4]@12]/5", // Db5 Ab5 Gb5 Db5 Bb5 Ab5
  P: "[~ [eb3,bb3]@13 [bb3,f4]@13 ~ [ab3,eb4]@13 [eb3,bb3]@13 [ab2,eb3]@26]/5", Q: "[~ [ab2,eb3]@27 [ab2,eb3]@36]/4",
  R: "[~@4 [db3,ab3]@26 [db3,ab3]@27 [db3,ab3]@27 [db3,ab3]@12]/6", S: "[~ [db3,ab3]@27 [db3,ab3]@26 [db3,ab3]@26]/5",
  T: "[~ [db3,ab3]@13 [db3,ab3]@40 [db3,ab3]@40 [db3,ab3]@34]/8", U: "[~@3 [db3,ab3]@20 [db3,ab3]@17]/5",
  V: "[~@6 [db3,ab3]@40 [db3,ab3]@33 ~]/5", // Db5
})).s("gm_tuba").gain(0.4)

// bass · trumpet · "B♭ Bass Trumpet"
const bass = note(`<
  ~@5 A B ~@5 A B ~@5 A B ~@3 A B ~@3 A B ~@2 C D E ~@2 C D E ~@5 F G F G ~@5 F G F G ~ H@2 ~ I@2 J K@2 ~@2 L M N O@3 P
  Q R@3 S T U V ~ W X Y Z AA AB AC AD AE AA AB AC AD AE AA AF@2 AG AH AI AF@2 AG AH AI AF@2 AG AH AI AF@2 AG AH AI AJ@2
>`.pickRestart({
  A: "gb3 eb3 gb3@2", B: "eb3@2 gb3 eb3", C: "~@2 bb3 g3", D: "bb3 g3", E: "bb3 g3 ~@2", F: "ab3 e3 ab3@2",
  G: "e3@2 ab3 e3", H: "[~@8 ab3@2 e3@2 ~ ab3@5 e3@4 ab3@2 ~ e3@2 ~@5]/2",
  I: "[~@3 ab3@2 ~ e3@2 ab3@5 e3@5 ab3@2 e3@2 ~@10]/2", J: "ab3@2 e3@2 ~ ab3@5 e3@4 ab3@2",
  K: "[~ e3@2 ~@10 ab3@2 e3@2 ~ ab3@4 e3@5 ab3@2 ~ e3@2]/2", L: "~@4 eb3 ~ db3 ~@2 a2 ~ eb3 ~@2 db3 ~",
  M: "~@2 eb3 ~@2 db3 ~ a2 ~@2 eb3 ~ db3 ~@3", N: "~ eb3 ~ db3 ~@2 a2 ~ eb3 ~ db3 ~@2 a2 ~ eb3",
  O: "[~@2 db3 ~ a2 ~@4 ab3@2 gb3@2 db3@2 ab3@2 ~ gb3@2 ~@2 ab3@2 gb3@2 db3@2 ~ ab3@2 gb3@2 ~@2 ab3@2 ~ gb3@2 db3@2 ab3@2 gb3@2 ~@2]/3",
  P: "~ ab3@2 gb3@2 db3@2 ab3@2 ~ gb3@2 ~@2 ab3@2", Q: "gb3@2 db3@2 ~ ab3@2 gb3@2 ~@2 ab3@2 ~ gb3@2",
  R: "[db3@2 ab3@2 gb3@2 ~@3 bb3@2 ab3@2 eb3@2 ab3@2 ~ gb3@2 ~@2 bb3@2 ab3@2 eb3@2 ~ ab3@2 gb3@2 ~@2 bb3@2 ~ ab3@2 eb3@2 ab3@2 gb3@2 ~@2]/3",
  S: "~ bb3@2 ab3@2 eb3@2 ab3@2 ~ gb3@2 ~@2 bb3@2", T: "ab3@2 eb3@2 ~ ab3@2 gb3@2 ~@2 bb3@2 ~ ab3@2",
  U: "eb3 ab3 gb3 ~@5", V: "~@10 ab3@3 ~ eb3@2", W: "~@5 ab3@3 eb3@3 ~@5", X: "~@2 ab3@3 ~ eb3@3 ~@7",
  Y: "ab3@3 eb3@3 ~@7 ab3@3", Z: "eb3@3 ~@7 db3@3 ~ ab2@2", AA: "~@8 db3@3 ab2@3 ~@2", AB: "~@5 db3@3 ab2@3 ~@5",
  AC: "~@2 db3@3 ~ ab2@3 ~@7", AD: "db3@3 ab2@3 ~@7 db3@3", AE: "ab2@3 ~@7 ab3@3 ~ eb3@2",
  AF: "[~@5 f3@3 db3@3 ~ f3@6 db3@7 f3@3 db3@3 ~]/2", AG: "~@13 f3@3", AH: "db3@3 ~ f3@6 db3@6", AI: "~ f3@3 db3@3 ~@9",
  AJ: "[~@5 f3@3 db3@3 ~ f3@6 db3@7 f3@2 ~ db3@2 ~@2]/2",
})).s("gm_electric_bass_finger").gain(0.4)

// other · timpani
const timpani = note(`<
  ~@5 A B ~@5 A B ~@5 A B ~@3 A B ~@3 A B ~@2 C D E ~@2 C D E ~@5 F G F G ~@5 F G F G ~ H@2 ~ I@2 J K@2 ~@2 L M N O P Q
  R S T U V W X Y Z ~ AA AB AC AD AE AF AG AH AI AE AF AG AJ AK AL AM@2 AN AO AP AM@2 AN AO AP AM@2 AN AO AP AM@2 AN AO
  AP AM@2
>`.pickRestart({
  A: "gb3 eb3 gb3@2", B: "eb3@2 gb3 eb3", C: "~@2 bb3 g3", D: "bb3 g3", E: "bb3 g3 ~@2", F: "ab3 e3 ab3@2",
  G: "e3@2 ab3 e3", H: "[~@8 ab3@2 e3@2 ~ ab3@5 e3@4 ab3@2 ~ e3@2 ~@5]/2",
  I: "[~@3 ab3@2 ~ e3@2 ab3@5 e3@5 ab3@2 e3@2 ~@10]/2", J: "ab3@2 e3@2 ~ ab3@5 e3@4 ab3@2",
  K: "[~ e3@2 ~@10 ab3@2 e3@2 ~ ab3@4 e3@5 ab3@2 ~ e3@2]/2", L: "~@6 db3@2 ~ ab2@2 ~@5", M: "~@5 db3@2 ab2@2 ~@7",
  N: "~@3 db3@2 ~ ab2@2 ~@2 db3@2 ~ ab2@2 ~", O: "~@2 db3@2 ab2@2 ~@5 gb3@2 db3@2 ~", P: "~@4 gb3 db3 ~@2",
  Q: "~@3 gb3 db3 ~@3", R: "~@3 gb3@2 db3@2 ~@9", S: "gb3 db3 ~@5 gb3", T: "db3@2 ~@9 ab3@2 eb3@2 ~",
  U: "~@4 ab3 eb3 ~@2", V: "~@3 ab3 eb3 ~@3", W: "~@3 ab3@2 eb3@2 ~@9", X: "ab3 eb3 ~@5 ab3", Y: "eb3 ~@7",
  Z: "~@10 ab3@3 ~ eb3@2", AA: "~@5 ab3@3 eb3@3 ~@5", AB: "~@2 ab3@3 ~ eb3@3 ~@7", AC: "ab3@3 eb3@3 ~@7 ab3@3",
  AD: "eb3@3 ~@7 db3@2 ~@2 ab2@2", AE: "~@8 db3@2 ~ ab2@2 ~@3", AF: "~@5 db3@2 ~ ab2@2 ~@6", AG: "~ db3 ~ ab2 ~@4",
  AH: "db3@2 ~ ab2@2 ~@8 db3@2 ~", AI: "ab2@2 ~@8 ab3@3 ~ eb3@2", AJ: "db3@2 ~ ab2@2 ~@8 db3@3",
  AK: "ab2@3 ~@7 ab3@3 ~ eb3@2", AL: "~@8 db3@3 ab2@3 ~@2", AM: "[~@5 f3@3 db3@3 ~ f3@6 db3@7 f3@3 db3@3 ~]/2",
  AN: "~@13 f3@3", AO: "db3@3 ~ f3@6 db3@6", AP: "~ f3@3 db3@3 ~@9",
})).s("gm_timpani").gain(0.4)

stack(trumpet, tuba, bass, timpani)