Strudelify

Be Thou My Vision

Traditional Irish Melody

KeyF majorTempo80 bpm
0:00/0:00
// Be Thou My Vision — Traditional Irish Melody
// 80 bpm, 3/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/2918076; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 35 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/3)

// 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 · "B♭ Trumpet"
const trumpet = note("<~@18 A@8 B@6 C@3>".pickRestart({
  A: "[~@22 c5@7 bb4@8 bb4@4 c5@4 eb5@8 eb5@8 f5@8 g5@24 f4@8 f4@8 f4@8 f4@8 g4@8 bb4@8 c5@8 bb4@8 g4@4 bb4@4 bb4@24 c5@3]/8",
  B: "[~@5 c5@4 d5@4 eb5@4 d5@4 c5@8 bb4@8 g4@8 bb4@8 eb4@8 d4@8 c4@24 bb3@8 eb4@8 g4@8 bb4@8 bb4 c5@3 bb4@4 g4@8 eb5@3]/6",
  C: "[~ g5@4 f5@8 eb5@8 eb5@8 bb4@40 ~@3]/3",
})).s("gm_trumpet").gain(0.35)

// other · trumpet · "B♭ Trumpet" · soft notes
const trumpet_soft = note("<A@4 B C D E F G H F ~@3 I@2 J@2 ~@16>".pickRestart({
  A: "eb4/4", B: "d5 eb5 d5", C: "c5@2 d5", D: "c5@4 g4 bb4", E: "f5", F: "c5", G: "g4", H: "bb4@2 bb4",
  I: "[~ g4@5]/2", J: "[~@21 eb5@8 eb5@8 f5@4 eb5@4 bb4 ~@2]/2",
})).s("gm_trumpet").gain(0.2)

// other · french horn · "Horn in F"
const french_horn = note("<A B C D ~@19 E@8 F G@3>".pickRestart({
  A: "eb4@2 eb4@2 f4 eb4", B: "bb3 c4@7 bb3@8 bb3@4 c4@4", C: "eb4!2 f4", D: "g4",
  E: "[~@13 bb3@8 c4@8 bb3@8 g3@4 bb3@4 bb3@24 c4@8 c4@4 d4@4 eb4@4 d4@4 c4@8 bb3@8 g3@8 bb3@8 eb3@8 d3@8 c3@24 bb3@8 eb4@8 g4@8 bb3@3]/8",
  F: "~@5 bb3 c4@3 bb3@4 g3@8 eb4@3", G: "[~ g4@4 f4@8 eb4@8 eb4@8 g4@40 ~@3]/3",
})).s("gm_french_horn").gain(0.4)

// other · french horn · "Horn in F" · soft notes
const french_horn_soft = note("<~@4 A B C D E F G E ~@3 H@2 ~@4 I@3 ~@11>".pickRestart({
  A: "g3", B: "c4@2 bb3", C: "ab3@4 g3 bb3", D: "d4", E: "eb4", F: "g4", G: "g4@2 d4", H: "[~ bb3@5]/2",
  I: "[~@21 f3@8 f3@8 f3@8 f3@8 g3@8 ~@11]/3",
})).s("gm_french_horn").gain(0.2)

// other · trombone
const trombone = note("<~@4 A B C D ~@18 E@6 F@3>".pickRestart({
  A: "f3!3", B: "f3 g3 bb3", C: "c4@2 bb3@2 g3 bb3", D: "bb3",
  E: "[~@13 eb4@4 d4@4 c4@8 bb3@8 g3@8 bb3@8 eb3@8 d3@8 c3@24 bb2@8 eb3@8 g3@8 bb3@8 bb3 c4@3 bb3@4 g3@8 eb4@3]/6",
  F: "[~ g4@4 f4@8 eb4@8 eb4@8 g3@40 ~@3]/3",
})).s("gm_trombone").gain(0.3)

// other · trombone · soft notes
const trombone_soft = note("<A@4 ~@4 B C D B ~@3 E@2 ~@8 F@2 ~@8>".pickRestart({
  A: "eb3/4", B: "ab3", C: "c3", D: "c3@2 g3", E: "[~ g3@5]/2", F: "[~@21 c4@8 c4@4 d4@4 ~@11]/2",
})).s("gm_trombone").gain(0.2)

// bass · tuba
const bass = note("<~@8 A B C D ~@17 E@3 F@3>".pickRestart({
  A: "c3@2 c3 d3 eb3 d3", B: "c3 bb2 g2", C: "bb2 eb2 d2", D: "c2",
  E: "[~@21 bb1@8 eb2@8 g2@8 bb2@8 bb2 c3@3 bb2@4 g2@8 eb2@3]/3", F: "[~ g2@4 f2@8 eb2@8 eb2@8 eb2@40 ~@3]/3",
})).s("gm_tuba").gain(0.3)

// bass · tuba · soft notes
const bass_soft = note("<A@4 B C D B ~@7 E@2 ~@18>".pickRestart({
  A: "eb2/4", B: "bb1", C: "f2@2 g2", D: "f2@4 g2 bb2", E: "[~ eb2@5]/2",
})).s("gm_tuba").gain(0.2)

stack(trumpet, trumpet_soft, french_horn, french_horn_soft, trombone, trombone_soft, bass, bass_soft)