Strudelify

buckeye battle cry

R. Heine 1969 ed. Lisa Galvin

KeyF majorTempo180 bpm
0:00/0:00
// buckeye battle cry — R. Heine 1969 ed. Lisa Galvin
// 180 bpm, 2/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 8, 2/4 at bar 38) are rendered on a constant 2/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5287248; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(180/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · trumpet · "E♭ Soprano Cornet"
const trumpet = note(`<
  A B C D E F G@2 H I J K L I M@2 H I J N O I P@2 Q R S@2 T U V W X Y Z AA AB AC AD AE E AF AG W E AH AI@2 AJ AK AL AJ
  AM AN AO R E AF AG W AP AQ AR@2 AJ B W D E W AD AE E AF AG W E AH AI@2 AJ AK AL AJ AM AN AO R E AF AG W AP AQ AR@2 AJ
  B W D E W AS@2
>`.pickRestart({
  A: "db5 db5@3", B: "d5", C: "eb5 eb5@3", D: "eb5 db5", E: "c5", F: "bb4", G: "[ab4@5 ~ eb4@2]/2", H: "c5@3 b4",
  I: "c5 ab4", J: "bb4@3 a4", K: "bb4 g4", L: "ab4@3 bb4", M: "[eb5@3 eb4]/2", N: "bb4 c5", O: "d5 c5",
  P: "[bb4@3 eb4]/2", Q: "db5@3 c5", R: "db5 eb5", S: "[f5 eb5@2 ab4]/2", T: "db5 c5", U: "c5 f5", V: "e5", W: "eb5",
  X: "d5@3 db5", Y: "d5 bb4", Z: "c5 g4", AA: "bb4@2 g4 ab4", AB: "bb4 f4", AC: "c5 b4", AD: "~@2 eb5!2 eb5@2 eb5@2",
  AE: "eb5!2 d5 db5", AF: "b4 c5", AG: "c5 ab4@2 c5", AH: "bb4 ab4@2 bb4", AI: "db5/2", AJ: "db5", AK: "c5 db5",
  AL: "bb4 g4@2 bb4", AM: "eb5 bb4", AN: "a4 bb4", AO: "c5 ~@3 c5@4", AP: "ab4 c5", AQ: "bb4 ab4", AR: "[db5@5 ~@3]/2",
  AS: "[ab5@5 ~@3]/2",
})).s("gm_trumpet").gain(0.5)

// other · trumpet · "B♭ Trumpet 2"
const trumpet_2 = note(`<
  A B C D B E F@2 G H I J K L M@2 G H N O H P Q R S T U@2 V W X Y Z AA J AB AC H AD AE B H AF@2 AG AH AI AJ X AK AL@2 AM
  AN AO T B H AP@2 AQ@2 AR@2 AS B@2 D B E AT AE B H AF@2 AG AH AI AJ X AK AL@2 AM AN AO T B H AP@2 AQ@2 AR@2 AS B@2 D B
  E AU@2
>`.pickRestart({
  A: "f4 f4@3", B: "ab4", C: "ab4 ab4@3", D: "a4!2", E: "g4", F: "[eb4@5 ~ eb4@2]/2", G: "ab4@3 ab4", H: "ab4!2",
  I: "g4@3 gb4", J: "g4 eb4", K: "eb4@3 eb4", L: "eb4!2", M: "[eb4@3 eb4]/2", N: "bb4@3 a4", O: "bb4 a4", P: "eb4 f4",
  Q: "g4 f4", R: "e4 eb4", S: "ab4@3 a4", T: "bb4!2", U: "[ab4@3 eb4]/2", V: "f4 g4", W: "ab4 g4", X: "bb4", Y: "a4",
  Z: "ab4@3 g4", AA: "ab4 f4", AB: "g4 e4", AC: "f4!2", AD: "bb4 ~ bb4!2 bb4@2 bb4@2", AE: "bb4!2 ab4 g4",
  AF: "[ab4 f4 eb4@6]/2", AG: "eb4", AH: "eb4 eb4@2 eb4", AI: "eb4 ~@3 g4@4", AJ: "ab4 a4", AK: "a4 bb4",
  AL: "[bb4 g4 eb4@3 g4 f4 e4]/2", AM: "eb4 g4", AN: "gb4 g4", AO: "ab4 ~@3 a4@4", AP: "[ab4 f4 eb4@4 eb4@2]/2",
  AQ: "gb4!2", AR: "[ab4@5 ~@3]/2", AS: "f4", AT: "eb4 ~ bb4!2 bb4@2 bb4@2", AU: "[eb4@5 ~@3]/2",
})).s("gm_trumpet").gain(0.45)

// other · trumpet · "Flugel"
const trumpet_3 = note(`<
  A B C D E F G@2 H I J K L M N@2 H I O I P Q R@2 S T U@2 V W X Y Z AA I AB AC W AD AE AF AG AH@2 AI AJ AK AL X AM AN@2
  I@2 AO AP AF AG AQ@2 I@2 AR@2 B@2 AF D E F AS AE AF AG AH@2 AI AJ AK AL X AM AN@2 I@2 AO AP AF AG AQ@2 I@2 AR@2 B@2 AF
  D E F AT@2
>`.pickRestart({
  A: "f4 f4@3", B: "f4", C: "eb4 eb4@3", D: "eb4 f4", E: "d4", F: "db4", G: "[c4@5 ~ eb4@2]/2", H: "eb4@3 d4",
  I: "eb4!2", J: "db4@3 c4", K: "db4!2", L: "c4@3 db4", M: "eb4 c4", N: "[eb4@3 eb4]/2", O: "g4@3 eb4", P: "f4 eb4",
  Q: "eb4 d4", R: "[db4@3 db4]/2", S: "f4@3 gb4", T: "g4 eb4", U: "[f4 eb4@2 eb4]/2", V: "db4 c4", W: "f4!2", X: "g4",
  Y: "gb4", Z: "f4@3 e4", AA: "f4 d4", AB: "eb4 e4", AC: "f4 db4", AD: "g4 ~ g4!2 g4@2 g4@2", AE: "g4!2 f4 e4",
  AF: "eb4", AG: "d4 eb4", AH: "[ab4 f4 eb4@6]/2", AI: "c4", AJ: "eb4 c4@2 eb4", AK: "g4 ~@3 eb4@4", AL: "f4 gb4",
  AM: "gb4 g4", AN: "[bb4 g4 eb4@3 g4 f4 e4]/2", AO: "eb4 ~@3 gb4@4", AP: "g4!2", AQ: "[ab4 f4 eb4@4 eb4@2]/2",
  AR: "[f4@5 ~@3]/2", AS: "c4 ~ g4!2 g4@2 g4@2", AT: "[c4@5 ~@3]/2",
})).s("gm_trumpet").gain(0.45)

// other · french horn · "F Horn"
const french_horn = note(`<
  A B C D E F G@2 H I J K L I K M H N O N P Q R@2 J S T@2 U V W X Y Z X M AA AB AC AD E AE AF@2 E AG AH K F M AI@2 AJ M
  AK N AL AM AN@2 AO S AP@2 F B X D E F AQ AD E AE AF@2 E AG AH K F M AI@2 AJ M AK N AL AM AN@2 AO S AP@2 F B X D E F
  AR@2
>`.pickRestart({
  A: "db4 db4@3", B: "d4", C: "eb4 eb4@3", D: "eb4 db4", E: "c4", F: "db4", G: "[c4@5 ~ db4@2]/2", H: "eb4@3 d4",
  I: "eb4 c4", J: "db4@3 c4", K: "db4!2", L: "c4@3 db4", M: "c4 db4", N: "eb4!2", O: "eb4@3 eb4", P: "f4 eb4",
  Q: "eb4 d4", R: "[db4@3 bb3]/2", S: "db4 eb4", T: "[db4 c4@2 c4]/2", U: "db4 c4", V: "c4 f4", W: "e4", X: "eb4",
  Y: "d4@3 db4", Z: "d4!2", AA: "d4 bb3", AB: "c4 d4", AC: "eb4 ~ eb4!2 eb4@2 eb4@2", AD: "eb4!2 d4 db4", AE: "b3 c4",
  AF: "[eb4 ~@3 c4@12]/2", AG: "c4 c4@2 c4", AH: "db4 ~@3 db4@4", AI: "[db4@5 db4!3]/2", AJ: "db4 bb3",
  AK: "eb4 ~@3 eb4@4", AL: "[c4,eb4]", AM: "[b3,d4] [c4,eb4]", AN: "[eb4 ~ c4@4 eb4@2]/2", AO: "ab3 c4",
  AP: "[f4@5 ~@3]/2", AQ: "c4 ~ eb4!2 eb4@2 eb4@2", AR: "[c4@5 ~@3]/2",
})).s("gm_french_horn").gain(0.45)

// other · trombone · "Trombone (I & II)"
const trombone = note(`<
  A B C D E F G@2 H@2 I@2 J K L M H@2 N O P Q R S T U V@2 W X Y Z AA@2 Y AB AC@2 AD@2 AE AF AG@2 AH AI AJ AK F M AL@2 AM
  AN AO AP AE AF AQ@2 AR Z AS@2 P B AR D E F AT@2 AE AF AG@2 AH AI AJ AK F M AL@2 AM AN AO AP AE AF AQ@2 AR Z AS@2 P B
  AR D E F AU@2
>`.pickRestart({
  A: "f3 f3@3", B: "[f3,ab3]", C: "ab3 ab3@3", D: "a3 [f3,a3]", E: "c4", F: "bb3", G: "[ab3@5 ~ [g3,bb3]@2]/2",
  H: "[eb3@2 ab3@3 eb3 ab3 c4]/2", I: "[eb4@3 bb3]/2", J: "ab3@3 eb3", K: "eb3 ab3", L: "g3 ab3", M: "a3 bb3",
  N: "eb4@3 gb3", O: "g3 gb3", P: "f3", Q: "c4 ab3", R: "eb3 f3", S: "gb3 g3", T: "ab3@3 a3", U: "bb3 g3",
  V: "[ab3@3 ab3]/2", W: "ab3 e3", X: "f3 bb3", Y: "g3", Z: "gb3", AA: "[f3 ~ bb3@4 ab3@2]/2", AB: "[eb3,c4] [e3,db4]",
  AC: "[f3,d4]!2", AD: "[[bb3,db4]@5 g3 ab3 bb3]/2", AE: "c4 ~@3 eb3@4", AF: "f3 eb3", AG: "[c4@3 ~ ab3@3 ~ c4@24]/2",
  AH: "ab3@4 ab3@3 ab3", AI: "bb3 ab3@2 bb3", AJ: "db4 ~@3 g3@4", AK: "ab3 a3", AL: "[bb3@5 bb3!3]/2", AM: "bb3 db4",
  AN: "eb4 db4", AO: "c4 ~@3 [gb3,c4]@4", AP: "[g3,db4]!2", AQ: "[c4@3 ~ ab3@3 ~ c4@16 eb3@8]/2", AR: "ab3",
  AS: "[[f3,ab3]@5 ~@3]/2", AT: "[ab3 ~@3 [bb3,db4]@6 g3@2 ab3@2 bb3@2]/2", AU: "[ab3@5 ~@3]/2",
})).s("gm_trombone").gain(0.45)

// other · tuba · "Baritone"
const tuba = note(`<
  A B C D E F G H I J K L M J N O I J K P Q R S@2 T U V@2 W X Y Z AA@2 E F AB@2 AC@2 AD H AE@2 AF AG AH AI AJ AK AL@2 AM
  Y AN AO AD H AP@2 J P AQ@2 A B C D E F AR@2 AD H AE@2 AF AG AH AI AJ AK AL@2 AM Y AN AO AD H AP@2 J P AQ@2 A B C D E F
  AS@2
>`.pickRestart({
  A: "ab3 g3@2 ab3", B: "b3@2 bb3 ab3", C: "c4 b3@2 c4", D: "eb4 f4", E: "c4", F: "bb3", G: "ab3 ~ eb3@2", H: "f3 eb3",
  I: "c4@3 b3", J: "c4 ab3", K: "bb3@3 a3", L: "bb3 g3", M: "ab3@3 bb3", N: "eb3", O: "eb3!2", P: "bb3 c4", Q: "d4 c4",
  R: "ab3 f3", S: "[bb3@3 eb3]/2", T: "db4@3 c4", U: "db4 eb4", V: "[db4 c4@2 ab3]/2", W: "f3 g3", X: "ab3 db4",
  Y: "c4 bb3", Z: "a3", AA: "[~ bb3@2 d4]/2", AB: "ab3!2", AC: "[g3@5 eb3 f3 g3]/2", AD: "ab3 ~@3 eb3@4",
  AE: "[c4@3 ~ ab3@3 ~ c4@24]/2", AF: "ab3@4 ab3@3 ab3", AG: "bb3 ab3@2 bb3", AH: "db4 ~@3 eb3@4", AI: "f3 gb3",
  AJ: "g3", AK: "gb3 g3", AL: "[g3@5 eb3 f3 gb3]/2", AM: "g3 db4", AN: "ab3 ~@3 a3@4", AO: "bb3 eb3",
  AP: "[c4@3 ~ ab3@3 ~ c4@16 eb3@8]/2", AQ: "[db4@5 ~ f3 g3]/2", AR: "[ab3 ~@3 g3@6 eb3@2 f3@2 g3@2]/2",
  AS: "[ab3@5 ~@3]/2",
})).s("gm_tuba").gain(0.3)

// bass · tuba
const bass = note(`<
  A B C D E F G H I J K L I J M N I O P Q R S M N T@2 U@2 V W X Y Z@2 K AA W AB AC@2 AD AE AF AG AF AH AI AJ AK AL AM AN
  AO N AP AQ AD AE AF AG AR AS AT AU AV AW L AX AY AZ BA@2 AD AE AF AG AF AH AI AJ AK AL AM AN AO N AP AQ AD AE AF AG AR
  AS AT AU AV AW L AX AY AZ BB BC
>`.pickRestart({
  A: "db2 db2@3", B: "d2", C: "eb2 eb2@3", D: "f2!2", E: "bb2 ~ bb2 ~", F: "eb2 ~ eb2 ~", G: "ab2 ~ eb2@2", H: "f2 g2",
  I: "ab2", J: "ab2!2", K: "eb2", L: "eb2!2", M: "eb2 f2", N: "gb2 g2", O: "ab2 c3", P: "eb3", Q: "g2 gb2", R: "f2",
  S: "bb2", T: "[bb2 eb2@2 g2]/2", U: "[ab2@3 c3]/2", V: "db3 e2", W: "f2 bb2", X: "g2", Y: "gb2",
  Z: "[f2 ~ bb2@4 ab2@2]/2", AA: "eb2 e2", AB: "f2 d2", AC: "[eb2@5 eb2 f2 g2]/2", AD: "ab2 ~@3 eb2@4", AE: "f2 eb2",
  AF: "ab2 ~ eb2 ~", AG: "ab2@3 ~ f2@3 ~ eb2@5 ~@3", AH: "ab2 ~ c3@2", AI: "bb2 ~ eb2@2", AJ: "f2 gb2",
  AK: "g2 ~ bb2@2", AL: "a2 bb2", AM: "eb2 ~ bb2 ~", AN: "eb2 ~ f2 gb2", AO: "g2!2", AP: "ab2 ~ a2@2", AQ: "bb2 eb2",
  AR: "ab2 ~ ab2@2", AS: "eb2 ab2", AT: "db3 ab2@2 f2", AU: "db2 ~@3", AV: "db2!2", AW: "d2!2", AX: "f2 ~ f2@2",
  AY: "bb2@3 ab2 g2@2 f2@2", AZ: "eb2 ~ eb2@2", BA: "[ab2 ~@3 eb2@6 eb2@2 f2@2 g2@2]/2", BB: "ab2 f2@2 eb2",
  BC: "ab2 ~@3",
})).s("gm_tuba").gain(0.5)

// drums · kick
const kick = s("bd").struct(`<
  A B A B A@2 C ~@31 A D A ~@2 E ~@2 C F A ~@2 E ~@2 C F A ~@2 E ~@2 D ~ A B A B A@3 D A ~@2 E ~@2 C F A ~@2 E ~@2 C F A
  ~@2 E ~@2 D ~ A B A B A@2 G ~
>`.pickRestart({
  A: "x", B: "~@8 x!2 ~ x!3 ~ x", C: "~ x", D: "~ x!3", E: "x!4", F: "x!2", G: "x ~@2 x",
})).gain(0.5)

// drums · high tom
const high_tom = s("ht").struct(`<
  A B A B A@3 C ~@30 A D A@3 D A@2 E A@4 D A@2 F@2 A@3 D A@2 G B A B A B A@3 D A@3 D A@2 E A@4 D A@2 F@2 A@3 D A@2 G B A
  B A B A@3 C
>`.pickRestart({
  A: "x ~ x!3 ~ x ~", B: "x ~@7 x!2 ~ x!3 ~ x", C: "x", D: "x!4", E: "x ~ x!3 ~ x!2", F: "x!2", G: "x ~ x!6",
})).gain(0.5)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  A B A B@3 C B ~@32 B@3 D B A D C B@3 D B@2 D C B@3 D B@2 C B A B A B@3 D@2 B@3 D B A D C B@3 D B@2 D C B@3 D B@2 C B A
  B A B@3 C B
>`.pickRestart({
  A: "~ x ~@2", B: "x", C: "x!2", D: "~ x",
})).gain(2.51)

// drums · whistle
const whistle = s("ballwhistle:0").struct(`<
  A ~ A ~ B@3 ~@33 B@3 C B A D C B@3 C B@2 D C B@3 C B@3 ~ A ~ A ~ B@2 D ~ B@3 C B A D C B@3 C B@2 D C B@3 C B@3 ~ A ~ A
  ~ B@3 ~
>`.pickRestart({
  A: "~ x ~@2", B: "x", C: "x!2", D: "~ x",
})).gain(0.64)

stack(trumpet, trumpet_2, trumpet_3, french_horn, trombone, tuba, bass, kick, high_tom, cabasa, whistle)