Strudelify

Böhmische Sterne

Michael Kuhn

KeyF majorTempo96 bpm
0:00/0:00
// Böhmische Sterne — Michael Kuhn
// 96 bpm, 2/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 9 "Basse" named as a bass, played on electric bass finger (its tuba patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5920153; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 131 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · trumpet · "Trompette"
const trumpet = note(`<
  A B C D C D E F G H I J I J K L M N ~@4 O M P Q R S T U ~@12 I@2 V W X@2 Y Z C D C D E F G H I J I J K L M N ~@4 O M P
  Q R S T U ~@3 AA AB@2 T AC M@2 P AD AE Q AF W AG T AH AI AB@2 G AJ AK AL AM AN AO AP R S O M P AQ M@2 J AR T@2 M AS
  M@2 AT AU R@2 T AV@2
>`.pickRestart({
  A: "bb4@2 ab4 ~ f4@2 d4@2", B: "bb3 ~@3", C: "eb4@6 eb4!2", D: "eb4@3 ~", E: "eb4 ~ eb4 ~ eb4 ~ eb4 ~", F: "eb4 f4",
  G: "f4", H: "f4 ~@3", I: "bb4@6 bb4!2", J: "bb4@3 ~", K: "c5 ~ c5 ~ c5 ~ c5 ~", L: "c5 d5", M: "eb5", N: "eb5 ~@3",
  O: "eb5@2 eb5!2 eb5@2 eb5!2", P: "ab5", Q: "ab5 ~", R: "f5", S: "f5 ~", T: "bb4", U: "eb5!2 ~@2",
  V: "eb5@2 ~@2 eb4@2 g4 bb4", W: "eb5@3 ~", X: "f5@2 f5!2 f5@4", Y: "bb5", Z: "bb5 ~@3", AA: "eb5 ~ ab4 g4", AB: "ab4",
  AC: "bb4 ~@3", AD: "ab5 ~ c5 eb5", AE: "ab5 ~ ab5 ~ ab5 ~ ab5 ~", AF: "~@4 eb5@2 eb5!2", AG: "~@4 bb4@2 bb4!2",
  AH: "ab4@2 ab4!2 ab4@2 ab4!2", AI: "ab4 ~ ab4 g4", AJ: "f4!2", AK: "g4", AL: "g4 eb4", AM: "eb4", AN: "eb4 ~ c5 db5",
  AO: "eb5 ~ eb5 ~ eb5 ~ eb5 ~", AP: "eb5@2 d5 eb5", AQ: "ab5@4 ~@4 ab5@3 ~@5", AR: "~@2 bb4!2 bb4@2 bb4@2",
  AS: "~@2 eb5!2 eb5@2 eb5@2", AT: "c5", AU: "~@2 c5!2 c5@2 c5@2", AV: "bb4 ~ ab4 g4",
})).s("gm_trumpet").gain(0.15)

// other · trumpet · "Trompette" · soft notes
const trumpet_soft = note("<~@29 A B C D E ~@43 A B C D ~@50>".pickRestart({
  A: "~@2 c5 b4", B: "bb4 ~ bb4 ~ bb4 ~ bb4 ~", C: "bb4", D: "eb5", E: "eb5@4 ~@4 eb5@3 ~@5",
})).s("gm_trumpet").gain(0.08)

// other · trumpet · "Cornet 2"
const trumpet_2 = note(`<
  A B C D E F G H I J I K E L M N C O C D E P G Q R S T U V W ~@4 X Y Z C AA AB AC AD X Y AE AF AG AH I J C D E F G H I
  J I K E L M N C O C D E P G Q R S T U V W ~@3 AI AJ AK AL AM E AN AJ AO AP AQ AR AS AT AU AJ AV AJ AK AL AW E AN AJ AV
  AP AX AY AZ C BA AJ BB BC V BD AY Y T BE C BC V BE BF BG BH V BI@2
>`.pickRestart({
  A: "d4@2 f4 ~ d4@2 bb3@2", B: "ab3 ~@3", C: "eb4", D: "eb4@2 eb4 bb3", E: "bb3", F: "bb3@2 bb3!2",
  G: "eb4 ~ eb4 ~ eb4 ~ eb4 ~", H: "eb4!2", I: "d4", J: "d4 ~ bb3!2", K: "d4@2 d4 bb3", L: "bb3@2 bb3 c4",
  M: "f4 ~ f4 ~ f4 ~ f4 ~", N: "f4!2", O: "eb4 ~ g3 ab3", P: "bb3@2 g3 bb3", Q: "g4@2 gb4 g4", R: "ab4",
  S: "ab4@2 g4 ab4", T: "bb4", U: "bb4@2 bb4 ab4", V: "g4", W: "g4 ~@3", X: "bb3 d4", Y: "d4 f4",
  Z: "eb4@2 d4@2 c4@3 d4", AA: "c4 eb4", AB: "f4 a4", AC: "bb4@2 a4@2 g4@3 eb4", AD: "d4!2 db4 c4",
  AE: "g4@2 f4@2 eb4@3 d4", AF: "eb4@3 e4", AG: "f4@3 f4", AH: "eb4@3 f4", AI: "bb3 ~ ab3 bb3", AJ: "c4",
  AK: "c4 eb4 d4 eb4", AL: "db4", AM: "db4@2 g3 ab3", AN: "bb3 db4 c4 db4", AO: "c4 ~ ab3 c4",
  AP: "c4 ~ c4 ~ c4 ~ c4 ~", AQ: "c4 db4", AR: "d4 eb4", AS: "eb4@2 g4 f4", AT: "eb4 db4", AU: "db4 c4 db4 eb4",
  AV: "c4 ~ ab3 bb3", AW: "db4@2 bb3 ab3", AX: "eb4@2 d4 eb4", AY: "f4", AZ: "f4@2 db4 d4", BA: "eb4@2 eb4 db4",
  BB: "c4@4 ~@4 c4@3 ~@5", BC: "eb4 g4", BD: "bb4@2 bb4@2 bb4@3 ab4", BE: "ab4@2 ab4@2 ab4@3 g4", BF: "ab4@3 a4",
  BG: "bb4@3 a4", BH: "ab4@3 ab4", BI: "g4 ~ ab3 bb3",
})).s("gm_trumpet").gain(0.15)

// other · trumpet · "Cornet 2" · soft notes
const trumpet_soft_2 = note("<~@29 A B C D E ~@43 A B C D ~@50>".pickRestart({
  A: "~@2 c4 b3", B: "bb3 ~ bb3 ~ bb3 ~ bb3 ~", C: "d4 c4 bb3!2", D: "bb3", E: "bb3@4 ~@4 bb3@3 ~@5",
})).s("gm_trumpet").gain(0.08)

// other · tuba · "Euphonium 1"
const tuba = note(`<
  A B C D E F G H I J K L M N O P C Q R S T U V H W X Y Z AA AB ~@3 AC C@2 M AD AE@2 AF AG AH AI AJ AK AL AM I AN C D E
  F G H I J K L M N O P C Q R S T U V H W X Y Z AA AB ~@3 AO AP AQ AR AS C AT AP AU O AV AW AX AY AZ AP BA BB BC BD BE
  BF BG BH BI BJ BC BK BL BM BN AP BO BP BQ BR AE AI AE BS C BP BQ BT BU AE@2 BQ BV@2
>`.pickRestart({
  A: "ab3@2 ab3!2", B: "ab3 ~ g3 ab3", C: "bb3", D: "bb3@2 bb3 ab3", E: "g3", F: "g3@2 g3 ab3",
  G: "bb3 ~ bb3 ~ bb3 ~ bb3 ~", H: "bb3 eb4", I: "d4", J: "d4 ~ f3 g3", K: "ab3", L: "ab3@2 ab3 g3", M: "f3",
  N: "f3@2 f3 ab3", O: "c4 ~ c4 ~ c4 ~ c4 ~", P: "c4 d4", Q: "bb3 ~ g3 ab3", R: "bb3 ~ bb3@2 ab3@2 g3@2", S: "bb3@3 ~",
  T: "bb3 g3 ab3 bb3 c4 d4 eb4 f4", U: "g4@3 ~", V: "g4@3 f4 eb4@3 c4", W: "c4@2 ab3@2 c4@2 ~ eb4", X: "ab4 ~",
  Y: "d4 ~ d4@2 c4@2 bb3@2", Z: "ab3@3 gb3", AA: "g3@2 eb4@2 d4@3 c4", AB: "bb3 g3 ~@2", AC: "~@8 g3@3 ~@5",
  AD: "~@2 f3@2 a3@3 c4", AE: "f4", AF: "d4 c4 eb4@2", AG: "d4!2 db4 c4", AH: "bb3 d4", AI: "d4 f4",
  AJ: "g4@2 f4@2 eb4@3 d4", AK: "eb4@3 e4", AL: "f4@3 f4", AM: "eb4@3 f4", AN: "d4 ~ g3 ab3", AO: "g3 ~ ab3 bb3",
  AP: "c4", AQ: "c4 eb4 d4 eb4", AR: "db4", AS: "db4@2 g3 ab3", AT: "bb3 db4 c4 db4", AU: "c4 ~ ab3 c4", AV: "c4 db4",
  AW: "d4 eb4", AX: "eb4@2 g4 f4", AY: "eb4 db4", AZ: "db4 c4 db4 eb4", BA: "c4 ~ ab3 bb3", BB: "c4 ~ ab3@2 c4@2 eb4@2",
  BC: "ab4", BD: "bb4 ~ ab4@4 f4@2", BE: "d4 ~@3", BF: "db4 ~ bb3@4 c4@2", BG: "db4 ~@3", BH: "ab4 ~ f4@4 c4@2",
  BI: "eb4 ~@3", BJ: "eb4 ~ ab3@2 c4@2 eb4@2", BK: "db4@2 c4 ~ bb3@2 ab3@2", BL: "f3@3 ~", BM: "g3 ~ eb3@2 g3@2 bb3@2",
  BN: "eb4", BO: "c4@4 ~@4 c4@3 ~@5", BP: "eb4 g4", BQ: "g4", BR: "~@2 bb3@2 d4@3 eb4", BS: "~@2 eb3@2 eb3@3 g3",
  BT: "~@2 f3@2 ab3@3 c4", BU: "f4@3 ~", BV: "g4 ~ ab3 bb3",
})).s("gm_tuba").gain(0.21)

// other · tuba · "Euphonium 1" · soft notes
const tuba_soft = note("<~@29 A B C D E ~@43 A B C D ~@50>".pickRestart({
  A: "~@2 c4 b3", B: "bb3 ~ bb3 ~ bb3 ~ bb3 ~", C: "d4 c4 bb3 ab3", D: "g3", E: "g3 ~@3",
})).s("gm_tuba").gain(0.14)

// other · tuba · "Euphonium 2"
const tuba_2 = note(`<
  A B C D E F G H I J K L M N O P C Q R S T U V W X Y Z AA AB AC ~@3 AD I@2 K AE K@2 AF AG AH AI AJ AK AL AM I AN C D E
  F G H I J K L M N O P C Q R S T U V W X Y Z AA AB AC ~@3 AO E AP I AQ AR AS AT AU O P AV AW AX AY E AO AZ AT BA BB BC
  BB BD BE BF AT BG BH BI C AT BJ BK I BL BM AI BM BN C BK I BO BP BQ@2 BR BS@2
>`.pickRestart({
  A: "ab3@2 ab3!2", B: "ab3 ~ eb3 f3", C: "g3", D: "g3@2 g3 f3", E: "eb3", F: "eb3@2 eb3 f3", G: "g3 ~ g3 ~ g3 ~ g3 ~",
  H: "g3 c4", I: "bb3", J: "bb3 ~ d3 eb3", K: "f3", L: "f3@2 f3 eb3", M: "d3", N: "d3@2 d3 f3",
  O: "ab3 ~ ab3 ~ ab3 ~ ab3 ~", P: "ab3 bb3", Q: "g3 ~ eb3 f3", R: "g3 ~ g3@2 f3@2 eb3@2", S: "g3@3 ~",
  T: "g3 eb3 f3 g3 ab3 bb3 c4 d4", U: "eb4@3 ~", V: "bb3@3 ab3 g3@3 ab3", W: "g3 eb3", X: "ab3@2 ab3@2 ab3@2 ~ c4",
  Y: "c4 ~", Z: "d4 ~ d4@2 c4@2 bb3@2", AA: "ab3@3 gb3", AB: "g3@2 c4@2 bb3@3 ab3", AC: "g3 eb3 ~@2",
  AD: "~@8 eb3@3 ~@5", AE: "~@2 f3@2 a3@3 c4", AF: "bb3 a3 g3@2", AG: "f3!2 e3 eb3", AH: "d3 f3", AI: "bb3 d4",
  AJ: "eb4@2 d4@2 c4@3 bb3", AK: "g3@3 bb3", AL: "a3@3 a3", AM: "g3@3 a3", AN: "bb3 ~ eb3 f3", AO: "eb3 ~ c3 db3",
  AP: "eb3 c4 b3 c4", AQ: "bb3@2 bb2 c3", AR: "db3", AS: "db3 bb3 a3 bb3", AT: "ab3", AU: "ab3 ~ c3 eb3", AV: "ab3 g3",
  AW: "g3@2 bb3 ab3", AX: "g3 f3", AY: "f3 e3 f3 g3", AZ: "eb3 ~ ab3@2 ab3@2 c4@2", BA: "d4 ~ f4@4 d4@2", BB: "bb3 ~@3",
  BC: "bb3 ~ g3@4 ab3@2", BD: "c4 ~ ab3@4 ab3@2", BE: "c4 ~@3", BF: "eb4 ~ ab3@2 c4@2 eb4@2",
  BG: "db4@2 c4 ~ bb3@2 ab3@2", BH: "f3@3 ~", BI: "g3 ~ eb3@2 eb3@2 g3@2", BJ: "ab3@4 ~@4 ab3@3 ~@5", BK: "g3 bb3",
  BL: "~@2 bb3@2 bb3@3 c4", BM: "d4", BN: "~@2 eb3@2 eb3@3 g3", BO: "~@2 f3@2 ab3@3 c4", BP: "f4@3 ~", BQ: "f4",
  BR: "eb4", BS: "eb4 ~ c3 db3",
})).s("gm_tuba").gain(0.22)

// other · tuba · "Euphonium 2" · soft notes
const tuba_soft_2 = note("<~@29 A B C D E ~@43 A B C D ~@50>".pickRestart({
  A: "~@2 eb3 f3", B: "g3 ~ g3 ~ g3 ~ g3 ~", C: "bb3 ab3 d3 f3", D: "eb3", E: "eb3 ~@3",
})).s("gm_tuba").gain(0.14)

// bass · electric bass finger · "Basse"
const bass = note(`<
  A B C@2 D E C F G H I@2 J K I L M G C@2 N O C P Q R I@2 C S ~@4 I L T U V@2 W B X Y P Z AA AB AC AD C@2 D E C F G H
  I@2 J K I L M G C@2 N O C P Q R I@2 C S ~@3 AE AF AG AH AI C P AJ AK AF AL AM AN C P AO AP AF AG AQ AR C P AS AT AF AG
  AU AV Z AW AX AY C AW AZ BA J BB P BC C@2 V BD I L BE AP@2
>`.pickRestart({
  A: "bb1@2 d2 f2", B: "bb1 ~@3", C: "eb2 ~ bb1 ~", D: "eb2 ~ d2 ~", E: "c2 ~ bb1 ~", F: "eb2 g1 ab1 a1",
  G: "bb1 ~ bb1@2", H: "d2 ~ f2 ~", I: "bb1 ~ f2 ~", J: "bb1 ~ d2 ~", K: "f2 ~ d2 c2", L: "bb1 ~ bb1 ~",
  M: "eb2@2 f2 eb2 d2@2 c2@2", N: "eb2@2 d2 eb2", O: "c2 bb1", P: "eb2 ~ eb2 ~", Q: "ab2 ~ f2@2", R: "eb2 c2",
  S: "eb2!2 ~@2", T: "f2 ~ f2@2", U: "a1 c2", V: "f2 ~ c2 ~", W: "bb1 ~ eb2@2", X: "bb1 a1", Y: "g1 f1",
  Z: "eb2!2 bb1 g1", AA: "f1 ~ c2 ~", AB: "f1 ~ f1 ~", AC: "bb1@2 d2 c2", AD: "bb1 ab1 g1 f1", AE: "eb2 ~@3",
  AF: "ab1 ~ eb2 ~", AG: "ab1 ~ ab1 ~", AH: "bb1 ~ bb1 c2", AI: "db2 ~ bb1 ~", AJ: "ab2@2 g2 ab2", AK: "f2@2 eb2 c2",
  AL: "ab1@2 c2 ~ db2@2 eb2@2", AM: "f2@2 bb1@2 eb2@2 db2 ~", AN: "bb1 g1 eb2 d2", AO: "ab2@3 ab2 g2@2 f2@2",
  AP: "eb2 db2 c2 bb1", AQ: "bb1 ~ f2@2", AR: "d2 ~ bb1 ~", AS: "ab2 ~ g2 ~", AT: "f2 ~ eb2@2", AU: "db2 ~ ab1 ~",
  AV: "db2@3 ~", AW: "eb2", AX: "ab1@2 eb2 c2", AY: "ab1@4 ~@4 ab1@3 ~@5", AZ: "f2 ~ bb1 ~",
  BA: "bb1@2 d2@2 f2 eb2 d2 c2", BB: "bb1", BC: "eb2@2 g2@2 bb2 ab2 g2 f2", BD: "f2 c2 ab1 f1",
  BE: "eb2@3 eb2 g2@2 f2@2",
})).s("gm_electric_bass_finger").gain(0.64)

// bass · electric bass finger · "Basse" · soft notes
const bass_soft = note("<~@30 A B C D ~@44 A B C ~@50>".pickRestart({
  A: "eb2 ~ bb1 ~", B: "f2 ~ bb1 ~", C: "eb2 c2 bb1 g1", D: "eb2@4 ~@4 eb2@3 ~@5",
})).s("gm_electric_bass_finger").gain(0.32)

stack(trumpet, trumpet_soft, trumpet_2, trumpet_soft_2, tuba, tuba_soft, tuba_2, tuba_soft_2, bass, bass_soft)