Strudelify

danny boy

Traditional

KeyE majorTempo66 bpm
0:00/0:00
// danny boy — traditional
// 66 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/61265; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 42 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(66/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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
const trumpet = note("<~@2 A@2 ~@28 B C D E F G H I J@2>".pickRestart({
  A: "[~ e5 f#5 a5 g#5@8 ~@4]/2", B: "~@5 c5 d5 e5", C: "f5@3 e5!2 d5 c5 d5", D: "c5 a4 f4@3 c5 d5 e5",
  E: "f5@3 e5!2 d5 c5 a4", F: "g4@4 ~ c5!3", G: "a5@3 g5!2 f5 d5 f5", H: "c5 a4 f4@2 ~ e4 f4 g4",
  I: "a4 d5 c5 a4 g4 c5 d5 e5", J: "f5/2",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · soft notes
const trumpet_soft = note("<~@5 A@2 ~@3 B ~ C D E ~@7 F G H I J K L ~@13>".pickRestart({
  A: "[~ e4@2 ~]/2", B: "~ g4 e4 f#4 e4@4", C: "~@3 f4", D: "f#4@2 f#4 e4", E: "f#4 ~", F: "~ f#4 g4 e4 f#4 d4 c4 d4",
  G: "a4@3 g4 g4@3 f4", H: "e4@4 ~ e4 f4 g4", I: "a4@3 g4 a4 d5 c5 a4", J: "g4 f4 d4@3 f4 a4 a#4",
  K: "c5@3 d5 c5 a4 f4 a4", L: "g4 a4 a#4 ~",
})).s("gm_trumpet").gain(0.2)

// other · muted trumpet
const muted_trumpet = note("<~@29 [a4 c5] [d5 e5] [d5@2 a#4!2] [a4 ~] ~@9>").s("gm_muted_trumpet").gain(0.2)

// other · trumpet
const trumpet_2 = note("<~ A B@2 ~ C@2 D E F G D H I J ~@3 K L M N J O P ~@7 Q R S T U V W X Y Z>".pickRestart({
  A: "~@5 a4 b4 c#5", B: "[d5 b4 c#5 f#5 f5@8 ~@4]/2", C: "[~@4 c#4@8 ~ c#4 d4 e4]/2", D: "f#4@3 e4 f#4 b4 a4 f#4",
  E: "e4 d4 b3@3 d4 f#4 g4", F: "a4@3 b4 a4 f#4 d4 f#4", G: "e4@5 c#4 d4 e4", H: "e4 d4 b3@3 c#4 d4 e4",
  I: "f#4@3 g4 f#4 e4 d4 e4", J: "d4 ~", K: "~@5 a4!3", L: "f#5@3 e5!2 d5 b4 d5", M: "a4 f#4 d4@3 c#4 d4 e4",
  N: "f#4 b4 a4 f#4 e4 d4 b3 c#4", O: "d4@3 d4 c#4@3 c#4", P: "c4 ~", Q: "~@5 a4 a#4 c5", R: "d5@3 a#4!2 a4 g4 a4",
  S: "a4 f4 c4@3 ~ g4@2", T: "a4@3 g4!2 f4 d4 f4", U: "e4 ~@4 c5!3", V: "f5@3 e5!2 d5 c5 d5", W: "c5 a4 f4@3 ~@3",
  X: "f4@2 f4 g4", Y: "~ f4 a#4 c#5", Z: "c5",
})).s("gm_trumpet").gain(0.3)

// other · muted trumpet
const muted_trumpet_2 = note("<~@25 [~ e4@2 e4 ~ e4@2 e4] [~ f4@2 f4 ~ d4@2 d4] [c4 a4 f4 d4] [e4 f4 g4 ~] ~@13>")
  .s("gm_muted_trumpet").gain(0.39)

// other · muted trumpet · soft notes
const muted_trumpet_soft = note("<~@29 [f4 a4] [a#4 c5] [a4@2 f4 g4] [f4 ~] ~@9>").s("gm_muted_trumpet").gain(0.26)

// other · french horn · "Horn"
const french_horn = note("<A B@3 C D@2 E ~@17 F G H I J K L M N O P Q R S T U V>".pickRestart({
  A: "~@5 c#4 d4 e4", B: "[f#4@9 g4 a4 b4 a#4@8 ~ e4 f#4 b4]/3", C: "a4 f#4 e4 d4 b3@3 b3", D: "[d4@3 b3 a#3@8 ~@4]/2",
  E: "f#3@3 ~@5", F: "a3", G: "b3 d4 f4 a4 g4 f4 d4@2", H: "g4 f4 c4@3 f4 e4 f4", I: "d4 f4 g4 f4 d4@2 e4@2",
  J: "e4 d4!2 f4", K: "g4 a4 g4 e4", L: "f4@3 g4 f4@2 e4@2", M: "f4 a3 d4 c#4 c4!2 d4 e4", N: "f4@3 f4!3 e4 f4",
  O: "f4 d4 a3@4 c#4@2", P: "d4@3 f4!2 d4 c4 b3", Q: "a#3@4 ~ c5 b4 a#4", R: "a4@3 g4!2 a4 g4 f4",
  S: "g4 f4 d4 c#4 b3 ~@3", T: "d4@2 d4 e4", U: "~ c4 d4 c#4", V: "c4",
})).s("gm_french_horn").gain(0.48)

// other · french horn · "Horn" · soft notes
const french_horn_soft = note("<~@7 A B C D E F G H I J K L M N B O P Q ~@17>".pickRestart({
  A: "~@3 g3 a3@4", B: "b3 c#4", C: "c#4 d4", D: "~ b3 c#4 d4 e4!2 f#4 g4", E: "a4@4 f#4 g4 f#4 d4",
  F: "c#4 b3 f#3@2 ~@4", G: "d4@2 b3 c#4", H: "b3@4 ~ a3 b3 c#4", I: "d4@3 c#4!2 b3 a3 b3", J: "a3 f#3 d3@3 a3 b3 c#4",
  K: "d4@3 c#4!2 b3 a3 f#3", L: "e3 g3", M: "a3 a#3", N: "b3 g3", O: "~ d4 g4!2 f#4 b3 a3 b3", P: "a#3@3 a#3 a#3@3 a#3",
  Q: "a#3",
})).s("gm_french_horn").gain(0.32)

// bass · tuba · "C Tuba"
const bass = note(`<
  ~@2 A@2 B C@2 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 AG AH AI AJ AK X
>`.pickRestart({
  A: "[~@4 d#3@8 ~ a3 f#3 d3]/2", B: "b2 a2 g#2 f#2 d2@3 d2", C: "[e2@3 d2 a2@8 ~@4]/2", D: "d2@3 e2 f#2@4",
  E: "e2@3 e2 a2@2 f#2@2", F: "d2 b1", G: "e2 a2", H: "d2@3 e2 f#2@3 ~", I: "b2@6 a#2 f2", J: "d2@2 g2 a2", K: "d3 ~",
  L: "d3 b2", M: "a2@2 a2 f#2", N: "b2 d3", O: "g2 a2", P: "f#3!2", Q: "b2!2", R: "e3 a2", S: "~ d3 g2!2 d3!2 c3 a2",
  T: "g2@3 g2 g2@3 g2", U: "c#3", V: "f2 d2", W: "g2@3 g2 c3@2 a2@2", X: "f2", Y: "a#2 c3", Z: "f2 d3", AA: "g2 c3",
  AB: "f3 g3 c3@2", AC: "f3 b2 f2@2", AD: "f2@3 g2 a2 c3 d3 c3", AE: "f3 d3 c3 a2 f2 ~ a2@2", AF: "d3@3 e3 g3 f3 c3 g2",
  AG: "c3@3 ~@2 c2 d2 e2", AH: "f2@3 a2 c3@4", AI: "f3@2 f3 d#3 c#3 ~@3", AJ: "a2@2 g2 c2", AK: "~ f2 a#2 f#2",
})).s("gm_tuba").gain(0.32)

stack(
  trumpet, trumpet_soft, muted_trumpet, trumpet_2, muted_trumpet_2, muted_trumpet_soft, french_horn, french_horn_soft,
  bass
)

More by Traditional