Strudelify

Danny Boy

Robert Vogel

KeyE♭ majorTempo80 bpm
0:00/0:00
// Danny Boy — Robert Vogel
// 80 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "Bb Clarinet" clarinet (copy of ch 2 "Flute" flute); ch 14 "Bb Cornet" trumpet (copy of ch 4 "Bb Clarinet" clarinet); ch 9 "Baritone Horn (Treble Clef)" french horn (copy of ch 5 "Bass Clarinet" clarinet); ch 11 "Euphonium" tuba (copy of ch 5 "Bass Clarinet" clarinet)
// note: Transcription provider: pdmx. https://musescore.com/score/2431536; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 37 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/4)

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

// other · glockenspiel
const glockenspiel = note(`<
  A B C D E B F G H I J K L M N O P Q R S T Q U V W X Y Z AA AB AC AD AE AD AF@3
>`.pickRestart({
  A: "~@5 d6 eb6 f6", B: "g6@3 f6 g6 c7 bb6 g6", C: "f6 eb6 c6@2 ~ eb6 g6 ab6", D: "bb6@3 c7 bb6 g6 eb6 g6",
  E: "f6@4 ~ d6 eb6 f6", F: "f6 eb6 c6@2 ~ d6 eb6 f6", G: "g6@3 ab6 g6 f6 eb6 f6", H: "eb6@4 ~ bb6 c7 d7",
  I: "[c7,eb7]@3 [bb6,d7]!2 [ab6,c7] [g6,bb6] [ab6,c7]", J: "bb6 g6 eb6 ~@2 bb6 c7 d7", K: "eb7@3 d7!2 c7 bb6 g6",
  L: "f6@4 ~ bb6!3", M: "g7@3 f7!2 eb7 c7 eb7", N: "bb6 g6 eb6@2 ~ d6 eb6 f6", O: "g6 c7 bb6 g6 f6 eb6 c6 d6",
  P: "eb6@3 ~@2 e6 f6 g6", Q: "a6@3 g6 a6 d7 c7 a6", R: "g6 f6 d6@2 ~ f6 a6 bb6", S: "c7@3 d7 c7 a6 f6 a6",
  T: "g6@4 ~ e6 f6 g6", U: "g6 f6 d6@2 ~ e6 f6 g6", V: "a6@3 bb6 a6 g6 f6 g6", W: "f6@4 ~ c7 d7 e7",
  X: "[d7,f7]@3 [c7,e7]!2 [bb6,d7] [bb6,c7] [bb6,d7]", Y: "c7 a6 f6 ~@2 c7 d7 e7", Z: "f7@3 e7!2 d7 c7 a6",
  AA: "g6@4 ~ c7!3", AB: "[f7,a7]@3 [e7,g7] [d7,g7] [bb6,f7] d7 f7", AC: "[f6,c7] a6 f6@2 ~ e6 f6 g6",
  AD: "a6 d7 c7 a6 g6 f6 d6 e6", AE: "f6@3 ~@2 e6 f6 g6", AF: "f6",
})).s("gm_glockenspiel").gain(0.3)

// other · clarinet · "Bb Clarinet"
const clarinet = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA Z AB AC AD AE AF ~@2 AG AH
>`.pickRestart({
  A: "~@5 d4 c4 b3", B: "bb3@2 b3@2 c4@2 d4 db4", C: "c4 bb3 ab3@2 ~ c4 eb4 f4", D: "g4@3 ab4 g4 eb4 c4 eb4",
  E: "c4@2 eb4@2 d4!2 c4 bb3", F: "eb4 d4 db4@2", G: "c4 bb3 ab3@2", H: "bb3 b3 d4 c4", I: "bb3@4 ~ g4 ab4 b4",
  J: "c5@3 bb4!2 ab4 g4 eb4", K: "eb4 d4 c4 ~@2 g4 ab4!2", L: "g4@3 bb4!2 ab4 g4 eb4", M: "eb4@2 c4@2 d4@2 ab4!2",
  N: "bb4@2 b4@2 c5 ab4!2 c5", O: "eb4 d4 c4@2 c4@2 b3@2", P: "eb4@4 db4@4 c4@4 ab3@2 bb3 ab3", Q: "g3@3 ~@2 e4 d4 db4",
  R: "c4@2 db4@2 d4@2 e4 eb4", S: "d4@2 bb3@2 ~ d4 f4 g4", T: "a4@3 bb4 a4 f4 d4 f4", U: "d4@2 f4@2 e4!2 d4 c4",
  V: "f4 e4 eb4@2", W: "d4 c4 bb3@2", X: "c4 db4 e4 d4", Y: "c4@4 ~ a4 b4 bb4", Z: "a4@3 c5!2 bb4 a4 f4",
  AA: "f4 e4 d4 ~@2 a4 bb4 g4", AB: "f4@2 d4@2 e4@2 a4 g4", AC: "f4@3 ~ d5@2 bb4@2", AD: "f4 d4 db4@2",
  AE: "f4@4 eb4@4 d4@4 bb3@2 c4 bb3", AF: "a3@3 ~@5", AG: "db4", AH: "c4",
})).s("gm_clarinet").gain(0.3)

// bass · clarinet · "Bass Clarinet"
const bass = note("<~ A B C D E F G H I H J K L M N O P Q R S T U V W X W Y C Z D AA AB ~@2 AC AD>".pickRestart({
  A: "eb3", B: "ab2@2 f2 bb2", C: "g2 c3", D: "f3 bb2", E: "eb3!2", F: "ab2 g2 f2@2", G: "eb3 bb2", H: "eb3 ~",
  I: "c3 ab2", J: "c3@2 ab2 bb2", K: "f2 bb2", L: "eb3@2 ab2 f2", M: "eb3 d3 c3 bb2 a2@2 ab2@2", N: "eb3@2 ab2 bb2",
  O: "eb3@3 ~@5", P: "f3", Q: "bb2@2 g2 c3", R: "a2 d3", S: "g3 c3", T: "f3!2", U: "bb2 g2", V: "f2 c3", W: "f3 ~",
  X: "d3 bb2", Y: "d3@2 bb2 c3", Z: "f3@2 bb2 g2", AA: "f3@2 bb2 c3", AB: "f3@3 ~@5", AC: "gb2", AD: "f2",
})).s("gm_electric_bass_finger").gain(0.3)

// other · alto sax · "Alto Saxophone"
const alto_sax = note("<~ A B C D E F G H I J I K L M N O P Q R S T U V W X Y X Z AA AB AC AD ~@2 AE T>".pickRestart({
  A: "d4 eb4", B: "eb4@3 d4", C: "f4 eb4", D: "eb4 d4", E: "bb3", F: "c4 bb3 ab3@2", G: "bb3 b3 d4 c4",
  H: "bb3@4 ~ g4 ab4 f4", I: "g4@3 bb4!2 ab4 g4 eb4", J: "eb4 d4 c4 ~@2 g4 ab4 f4", K: "eb4@2 c4@2 d4 ab4 g4 f4",
  L: "eb4@3 ~ c5@2 ab4@2", M: "eb4 c4!2 eb4", N: "eb4@4 db4@4 c4@4 ab3@2 bb3 ab3", O: "g3@3 ~@5", P: "e4 f4",
  Q: "f4@3 e4", R: "g4 f4", S: "f4 e4", T: "c4", U: "d4 c4 bb3@2", V: "c4 db4 e4 d4", W: "c4@4 ~ a4 b4 bb4",
  X: "a4@3 c5!2 bb4 a4 f4", Y: "f4 e4 d4 ~@2 a4 bb4 g4", Z: "f4@2 d4@2 e4@2 a4 g4", AA: "f4@3 ~ d5@2 bb4@2",
  AB: "f4 d4 db4@2", AC: "f4@4 eb4@4 d4@4 bb3@2 c4 bb3", AD: "a3@3 ~@5", AE: "db4",
})).s("gm_alto_sax").gain(0.15)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<A B C D E F G H I J K J L M N O P Q R S D T@2 U V W X W Y Z AA AB AC ~@2 AD T>".pickRestart({
  A: "~@5 bb3 c4 b3", B: "bb3@2 b3@2 c4@2 d4 db4", C: "c4 bb3 ab3@2", D: "bb3!2", E: "ab3!2", F: "g3", G: "g3 f4 eb4@2",
  H: "g3 ab3", I: "g3@4 ~ g4 eb4 d4", J: "bb3 c4", K: "bb3!2 ab3 ~@2 d4!2 b3", L: "ab3@4 ~ ab3!3", M: "d4@2 c4 ab3",
  N: "g3!2 a3 b3", O: "bb3@2 c4 eb4", P: "eb4@3 ~@2 e4 d4 db4", Q: "c4@2 db4@2 d4@2 e4 eb4", R: "d4 bb3", S: "c4!2",
  T: "a3", U: "a3 bb3", V: "a3@4 ~ a4 g4 e4", W: "c4 d4", X: "c4!2 d4 ~@2 e4!3", Y: "bb3@4 ~ bb3!3", Z: "e4@2 d4 bb3",
  AA: "a3!2 bb3@2", AB: "c4@2 d4 f4", AC: "f4@3 ~@5", AD: "bb3",
})).s("gm_tenor_sax").gain(0.15)

// other · french horn · "Horn in F"
const french_horn = note(`<
  ~ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF ~@2 AG AH
>`.pickRestart({
  A: "g3", B: "c4@2 ab3@2 ~ c4 eb4 f4", C: "g4@3 ab4 g4 eb4 c4 eb4", D: "c4@2 eb4@2 d4!2 c4 bb3", E: "eb4 d4 db4@2",
  F: "c4 bb3 ab3@2", G: "bb3 b3 d4 c4", H: "bb3 ~", I: "g3!2", J: "g3@4 ~ bb3 ab3 g3", K: "g3@2 eb4 d4",
  L: "eb4@2 c4@2 d4 ab4 g4 f4", M: "bb3 b3 c4 ab3", N: "eb4 c4!2 eb4", O: "eb4@4 db4@4 c4@4 ab3@2 bb3 ab3",
  P: "g3@3 ~@5", Q: "a3", R: "d4 bb3 ~@2", S: "c4!2", T: "bb3!2", U: "f4 e4 eb4@2", V: "d4 c4 bb3@2", W: "c4 db4 e4 d4",
  X: "c4 ~", Y: "a3!2", Z: "a3 ~", AA: "a3@2 f4 e4", AB: "f4@2 d4@2 e4@2 a4 g4", AC: "a3@2 d4 bb3", AD: "f4 d4 db4@2",
  AE: "f4@4 eb4@4 d4@4 bb3@2 c4 bb3", AF: "a3@3 ~@5", AG: "db4", AH: "c4",
})).s("gm_french_horn").gain(0.3)

// other · trumpet · "Bb Cornet"
const trumpet = note("<A B C D E B F G H I J K L M N O P Q R S T Q U V W X Y Z AA AB AC AD AE ~@2 AF@2>".pickRestart({
  A: "~@5 d4 eb4 f4", B: "g4@3 f4 g4 c5 bb4 g4", C: "f4 eb4 c4@2 ~ eb4 g4 ab4", D: "bb4@3 c5 bb4 g4 eb4 g4",
  E: "f4@4 ~ d4 eb4 f4", F: "f4 eb4 c4@2 ~ d4 eb4 f4", G: "g4@3 ab4 g4 f4 eb4 f4", H: "eb4@4 ~ bb4 c5 d5",
  I: "eb5@3 [bb4,d5]!2 [ab4,c5] [ab4,bb4] [ab4,c5]", J: "bb4 g4 eb4 ~@2 bb4 c5 d5", K: "eb5@3 d5!2 c5 bb4 g4",
  L: "f4@4 ~ bb3!3", M: "[eb4,g4]@3 [d4,f4] [c4,f4] [ab3,eb4] c4 eb4", N: "[eb4,bb4] g4 eb4@2 ~ d4 eb4 f4",
  O: "g4 c5 bb4 g4 f4 eb4 c4 d4", P: "eb4@3 ~@2 e4 f4 g4", Q: "a4@3 g4 a4 d5 c5 a4", R: "g4 f4 d4@2 ~ f4 a4 bb4",
  S: "c5@3 d5 c5 a4 f4 a4", T: "g4@4 ~ e4 f4 g4", U: "g4 f4 d4@2 ~ e4 f4 g4", V: "a4@3 bb4 a4 g4 f4 g4",
  W: "f4@4 ~ c4 d4 e4", X: "[d4,f4]@3 [c4,e4]!2 [bb3,d4] [bb3,c4] [bb3,d4]", Y: "c4 a3 f3 ~@2 c4 d4 e4",
  Z: "f4@3 e4!2 d4 c4 a3", AA: "g3@4 ~ c4!3", AB: "[f4,a4]@3 [e4,g4] [d4,g4] [bb3,f4] d4 f4",
  AC: "[f4,c5] a4 f4@2 ~ e4 f4 g4", AD: "a4 d5 c5 a4 g4 f4 d4 e4", AE: "f4@3 ~@5", AF: "f4",
})).s("gm_trumpet").gain(0.15)

stack(glockenspiel, clarinet, bass, alto_sax, tenor_sax, french_horn, trumpet)