Strudelify

Danny Boy

Percy Grainger

KeyE♭ majorTempo120 bpm
0:00/0:00
// Danny Boy — Percy Grainger
// 120 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 89 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/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.

// chords · piano · "A.PIANO 1"
const piano = note("<A@5 B@7 C@8 D@5 E F@8 G@6 H@2 I@2 J ~ K@6 L@3 M@6 N@6 O@4 P@3 Q@7 ~ R@4 ~@3>".pickRestart({
  A: "[~@11 bb3@7 bb3@12 [eb3,eb4]@33 ~ eb4@11 ~@57 c3@28, d3@11 c3@11 ~@63 [ab2,f3,c4,d4]@13 ~@5 g3@8 f3 ab2@48, ~@10 eb3@12 ~@8 g3@38 ~@7 [g3,eb4]@14 ~@5 [bb3,eb4]@26 eb3@18 ~@22, ~@18 [d3,f3]@17 ~@28 f3@15 ~@16 eb3@17 c4@20 g4@29, ~@111 f4@27 ~@22]/5", // Eb Dm7b5 Cm Eb5 Dm
  B: "[~@69 g4@8 ~@48 [c4,ab4]@21 ~@20 eb4@2 ~@6 bb2@9 ~@31 f3@10, ~@2 eb3@28 bb4@38 bb3 bb2@18 d3@9 g3@15 ~@46 d3@12 ~@14 eb2@41, ~@13 [g3,f4]@21 ~@7 eb3@10 d4@26 [g3,eb4]@12 ~@6 [eb4,a4]@16 ~@44 ab4@11 [eb3,g4]@11 ~@7 [g3,eb4]@40, ~@21 ab3@9 bb3@30 [c4,ab4]@18 ~@7 g4@13 ~@9 bb4@61 ~@6 f4@5 ~@17 d4@18 ~@10, ~@22 [f2,eb4]@9 g2@47 ~@8 eb3@12 ~@10 f3@60 ~@6 [f3,ab3]@15 ~@15 bb2@20]/7", // Fm G7 Cm Ebdim Eb Cm Fm F7 …
  C: "[~@9 c4@9 ~@10 g3@10 ~ f3@12 ~@10 c3@9 [bb2,eb4]@12 ~@46 g4@8 ~@11 c3@10 [g3,eb5]@12 f3@11 eb4@5 ~@8 f3@34 ~@29, [g3,bb3,eb4]@18 [bb3,g4]@20 ab2@17 ~@6 f2@30 d3@14 ~@5 [ab2,f3,d4]@12 ~@14 bb4@13 ~@107, ~@27 [d4,bb4]@12 ~@12 [eb3,g4]@14 ~@17 c4@19 ~@18 [g3,eb4]@18 ~@9 [ab3,eb4,c5]@12 ~@22 eb3@19 ~@57, ~@91 bb3@10 [g1,eb3,c4]@12 ~@143, ~@92 ab3@13 ~@14 bb2@30 ~@107]/8", // Eb5 Cm Eb Ddim Gm Eb Cm Ab …
  D: "[~@3 ab3@11 ~ eb4@9 bb2@11 ~@33 [d4,bb4]@11 ~@27 eb4@8 ~@22 [eb3,c4]@24, ~@3 [bb3,d4]@21 [bb1,ab3,d4,f4]@12 bb3@17 g2@35 [c4,ab4] [c2,c3]@8 [eb2,eb3,bb3,g4]@18 eb3@21 ~@24, ~@14 c4@11 ~@10 eb4@20 eb3@2 bb3@22 [d4,bb4]@21 ~@14 bb3@27 ~@19, ~@36 g3@64 ~@5 g3@11 ~@9 [g3,d4]@17 ~@18, ~@36 g4@43 eb4 [ab1,ab2]@20 ~@15 eb4@26 ~@19]/5", // Gm Cm Bb Bb7 Fm C Eb Gm …
  E: "~@3 bb3@11 ~@9 [bb2,ab3,d4,ab4]@9, ~@3 [g2,eb3,g3,eb4]@12 eb3@11 ~@6, ~@7 [ab2,bb3,c4,f4]@6 ~@3, ~@23 f3@5 ~@4", // Bb7 Cm Fm
  F: "[~@31 eb4@11 [ab2,bb3,d4,bb4]@9 ~ [c3,ab3,ab4,c5]@8 ~@34 [d4,eb4,a4]@8 ~ d4@4 ~@12 [bb3,ab4]@8 ~ [bb3,ab4]@10 bb3@8 ~@3 eb4@3 ~@42 [f4,bb4,d5]@11 [f4,bb4,d5]@9 ~@9 g4@9 [eb4,f4,ab4]@11 [bb3,ab4]@13, ~ [c3,g3,c4,g4]@29 [d4,bb4]@12 eb4@4 ~@14 eb4@8 ~ d2@6 c2@27 [c4,eb4,a4,c5]@5 bb1@12 eb4@8 d5 [d4,g4]@10 [f4,ab4,d5,f5]@8 g3@38 eb3@2 bb3@19 ab2@18 [ab2,eb3]@22 ~@11, ~ eb4@19 bb3@22 ~@9 c4@9 [bb3,g4,eb5]@16 f2@2 [c3,bb3]@30 ab3@3 bb2@36 bb3@7 [eb4,g4]@60 [eb4,ab4,c5]@12 ~@17 eb4@5 ~@8, ~@16 g2@28 ~@24 [d3,g3,eb4]@9 [f3,f4]@32 f2@43 eb5@62 ~@8 [c4,bb4]@11 ~@23, ~@18 eb3@25 ~@18 eb3@16 eb4@9 g4@8 [f1,f2,a3]@15 d4@2 [f4,bb4]@8 [c4,c5]@33 bb4@21 eb2@41 ~@9 ab3@13 ~@20]/8", // Bb7 Fm D Bb7 Bb Fm7 Bb7 C5 …
  G: "[~@14 f3@30 [d3,f4]@11 [g2,g3,g4]@3 ~@3 ab3@3 ~@51 f3@9 [eb3,ab3]@9 c3@13 d3@24 ~@22, [g3,g4]@22 ~@39 bb2@11 eb2@35 [g3,eb4]@7 ab2@20 ~@58, ~@7 c2@48 ~@6 f2@11 g3@2 db4@13 g4@30 ~@75, ~@14 [eb3,a3]@41 eb3@9 [f3,d4]@13 eb3@11 c4@10 [bb3,f4]@19 ~@75, ~@67 c5@12 bb4@38 ~@75]/6", // Dm G Ab5 G Cm Ebdim Dm Bb5
  H: "[~@24 [f3,d4]@14 eb4@9 f4@13 ~@4]/2", I: "[~@30 f4@9 ~@10 c5@8 [eb4,bb4]@7, ~@39 g4@18 ~@7]/2", J: "~ g4@11 ~@20",
  K: "[~@7 eb4@10 ~@21 d4@20 ~@22 [g3,f4,bb4]@12 ~@57 c5@26 ~@14 d4@3, ~@17 [f4,g4]@14 ~@7 bb4@42 ~@13 g4@13 ~@5 [c4,g4]@18 f4@45 ~@18, ~@28 [eb4,ab4]@13 ~@17 c4@25 ~@9 eb4@10 [d4,eb4]@37 ~@53, ~@70 c5@13 ~@37 d3@5 bb3@49 ~@18, ~@123 ab3@26 ~@43]/6", // Gm7 Fsus2 C5 Ab5 Ebmaj7
  L: "[~@16 [ab3,d4,f4]@9 ~@33 c4@8 g2@3 ~@3 bb2@3 ~@8 bb3@6 ~@2 [d4,g4]@5, ~@7 [eb4,g4]@18 [g3,eb4,g4]@41 ~@9 [ab3,c4,d4,f4,c5]@11 ~@10, ~@37 d4@30 ~@29, ~@46 eb3@20 [eb3,g3,bb3,eb4,g4]@10 ~@7 [g3,eb4,bb4]@13, ~@57 [ab2,d3,f3,f4]@10 ~@4 f2@15 ~@10]/3", // Ddim G5 Eb Cm Dm7b5 Eb Ddim
  M: "[~@11 eb4@9 ~@10 bb3@11 c4@9 ~ f3@8 ~@9 eb4@7 ~ eb4@10 eb4@9 ~@11 eb4@9 ~ [g3,bb3,eb4,g4]@9 [ab1,ab2,f3,ab3,c4,eb4,f4]@8 ~ bb1@11 bb2@9 ~@10 [eb3,g3,bb3,eb4]@28, ~@3 [ab2,c4,f4]@11 ~@6 f3@22 ~@8 [ab3,c4,d4]@10 [g1,g2,g3,d4]@8 [ab1,f3,c4]@11 ~@16 [g1,d4]@31 ~@29 eb2@13 ~@24, ~@20 c4@15 ~@24 eb4@8 [ab2,f4]@9 [bb2,g3,bb3,g4]@28 c4@2 ab4@20 ~@19 [ab3,d4,f4]@25 ~@22, ~@75 bb1@28 [ab2,f3]@12 [bb1,bb2]@11 ~@7 [bb2,g3,bb3,eb4]@13 ~@8 bb2@13 ~@25, ~@95 eb4@6 ab1@24 ~@20 f3@22 ~@25]/6", // Eb Fm7 Eb Fm Dm7b5 G5 Fm G5 …
  N: "[~@3 bb0@3 ~@21 [bb2,bb3,d4,g4,c5]@11 ~@42 eb3@2 ~@11 [d4,eb4,bb4,d5]@10 d4 ~@8 [c2,c3,d4,ab4,c5]@8 ~ g4@8 ~@8 bb3@10 ~ g3@12 [g2,eb3,g3,eb4]@25 [eb3,g3,bb3,eb4,bb4]@7, ~@3 bb1@35 ~ [c4,d4]@9 g3@5 bb4@13 ~@8 g1@5 [g3,d4,eb4] bb3@24 ~@25 [g3,f4,g4]@8 bb4@30 ~@25, ~@3 bb2@24 ~@11 [bb2,f4,d5]@8 bb2@3 bb3@7 [g3,bb3,eb4]@20 g2@27 [ab1,ab2,c4,bb4,d5]@18 [eb2,eb3]@16 eb4@11 [bb3,d4,g4]@20 ~@24, ~@17 [c4,eb4,ab4,bb4]@21 [ab3,bb3]@2 ~@5 eb2@3 eb3@2 ~ eb4@5 ~ eb5@47 ~@25 bb3@4 g1@35 ~@17 g2@4 ~@3, ~@52 g4@51 ~@17 [eb4,bb4]@15 g2@25 [c2,c3,c4]@28 ~@4]/6", // Gm Ebmaj7 Dm7b5 Cm Eb Csus2 Ebmaj7 G7 …
  O: "[~@4 [ab2,eb3,bb3,c4,g4,c5]@9 ~@9 g3@9 ~@11 [d4,bb4]@11 ~@18 [c2,c3,d4,ab4]@8 [bb3,eb4,g4]@8 [d2,d3,g3,bb3,eb4,g4]@7 ~ f3@9 ~@18 d4@6, ~@13 [bb2,ab3,bb3,d4,f4,d5]@13 ~@12 g2@22 eb4 bb4 [ab1,ab2,d5]@8 c5@9 ~@15 f2@18 [f1,f2,eb3,a3]@16, ~@22 eb5@57 ~@16 [c3,bb3,eb4,f4]@33, ~@22 [c3,c4,eb4,g4,c5]@20 bb3@11 [d4,eb4,bb4,d5]@6 c4@21 ~@14 c2@34, ~@40 eb3@39 [eb2,eb3,bb4]@17 ~@8 g3@24]/4", // Abmaj7 Gm Dm7b5 Eb Ebmaj7 Bb7 Abdim F7 …
  P: "[~@4 [bb0,bb1,d3]@3 ~@20 [bb3,ab4,bb4]@10 ~ bb3@6 ~ bb2@2 eb3 ~@18 g4@9 ~@11 g2@4 ab2@2 eb3@4, ~@4 ab3@40 eb2@3 ~@3 eb5@25 bb4 g4@9 [f4,f5]@11, ~@4 c4@14 bb2@27 ~@4 bb4@4 eb4@32 eb3@6 ~@5, ~@17 d4@20 [d4,f4,ab4,bb4]@10 g4@5 g5@39 ~@5, ~@17 [bb3,ab4,bb4]@10 [c4,eb4]@18 ~@4 bb3@42 ~@5]/3", // Bb Bb7 F Bb7 Cm
  Q: "[~@14 ab4@8 ~@17 bb2@3 ~ g3@11 ~ g3@3 ~@80 d4@14 ~@31 c5@25 ~@16, ~ [bb4,f5]@36 bb1@5 [bb3,f4,bb4]@20 g2@56 ~@8 [g2,g3,eb4]@14 ~@34 db4@46 ~@4, ~ f4@22 c4@20 bb2@21 eb4@17 c4@15 [bb1,bb2]@17 [ab2,d4]@15 ~@42 ab3@38 ~@16, ~ c5@21 ab3@11 [f4,eb5]@11 ~@10 eb4@6 c2@54 [f3,c4]@16 ~@7 [ab3,f4]@15 g4@33 ~@39, ~@14 eb5@10 [g4,ab4,c5]@20 ~@10 g4@10 d4 [eb3,g3]@52 ~@9 bb3@59 ~@39]/7", // Bb5 Cm Bb Abdim F7 F5 Db Abmaj7 …
  R: "[~@47 f3@52 ~@29, ~ eb4@23 ~@104, ~@20 c4@37 ~@71]/4",
})).s("gm_piano").gain(0.32)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note(`<
  A@4 B@8 C@8 D E@5 ~ F ~@3 G@2 H@3 I@2 J@6 K@5 L@8 M@2 N@3 ~ O@2 ~@10 P ~ Q R@4 S@7
>`.pickRestart({
  A: "[~ [ab3,bb3]@10 [bb2,ab3]@7 ~@13 eb2@33 ~ eb2@10 ~ bb2@13 ~@5 g2@30 ~@4, bb1@13 ~@6 ab3@17 ~@28 [c3,ab3]@14 ~@50, bb2@10 ~@8 bb2@12 bb2@37 ~@8 [eb2,eb3]@14 ~@39, ~@31 bb3@37 ~@8 bb3@5 ~@47, ~@64 eb3@11 ~@53]/4", // Absus2 Bb7 Fm Eb
  B: "[~@4 [g3,c4]@30 ~ g3@10 ~@47 [ab2,eb3]@18 ~@30 ab3@36 ~@22 c4@4 ~@5 bb3@2 ~@9 bb3@3 ~@26 ab2@9, ~@34 g4@32 ~@61 a3@16 ~@33 [bb3,g4]@21 bb3@9 ~@50, ~@34 bb3@28 ~ eb4@46 ~@8 bb3@13 ~@10 d4@60 ~@6 d4@14 ~@36, ~@34 bb2@11 bb2@56 ~@27 c3@15 ~@45 [c4,f4]@12 ~@46 [c4,d4]@10, ~@45 eb2@21 ~@74 bb2@49 bb2@17 ~@10 bb2@20 ~@20]/8", // C5 Ab5 Eb F5 Csus2
  C: "[~@10 bb2@6 ~@3 eb4@9 eb4@10 [c4,ab4]@13 ~ c3@9 ~@9 g3@11 ab3@11 ~@10 bb3@4 ~@14 bb3@17 ~ g4@12 ~@8 bb2@11 ~ [eb4,ab4]@10 [bb2,bb3]@13 ~ [bb2,bb3]@25 ~ [eb2,bb2,eb3,g3,bb3]@35 ~, g2@16 g2@24 ~@21 [ab3,f4]@12 ~@19 [f1,f2]@13 ~@5 ab1@4 ~@2 bb1@33 ~@107, ~@9 ab3@8 bb2@22 ~@12 bb3@14 ~@37 g2@12 ~@23 [d3,g3,bb3]@13 ~@19 [ab2,c4,c5]@12 ~@12 [ab3,d4]@34 ~@29, ~@10 [f2,f4]@10 ~@61 c3@24 ~@6 bb3@9 ~@17 eb4@9 ~@11 [eb4,bb4]@13 ~@10 [g3,bb4]@19 ~@20 eb4@35 ~@2]/8", // Fm Ab5 Bb Eb Db F Gm Ab …
  D: "~@2 ab3 ~, ~@3 [bb1,bb2]@21 ~@8", // Bb
  E: "[~@50 eb4@18 ~@15 g2@22 [c2,c3]@40 ~@15, ~@4 eb2@61 ~@18 g1@26 ~@51, ~@4 eb3@19 ~@137, ~@5 bb2@63 ~@37 g2@26 ~@29]/5", // C
  F: "~@11 eb3@10 eb3@2 ~@9", G: "[~@45 ab1@12 ~@7, ~@21 g2@33 ~@10]/2",
  H: "[~@46 f4@30 ~ ab2@9 bb3@10, ~@19 bb2@35 ~@42, ~@10 bb1@17 ~@21, ~@31 bb3@22 ~@23 [f3,b3]@11 ~@9]/3", // Fdim
  I: "[~@33 db4@18 ~ ab3@8 ~@4, ~@3 eb4@13 ~@8 db4@9 ~@18 c4@10 ~@3, ~@9 bb2@44 ~@11, ~@27 eb3@25 ~@12]/2",
  J: "[~@6 [f2,g3]@11 ~ bb2@19 ~ [eb2,bb2]@43 ~@21 eb3@9 ~@11 bb2@22 [ab2,c4]@23 ~ g3@2 ~@7 [ab3,c4,f4]@8 ~ g3@6, ~@5 eb4@12 [ab3,d4]@24 ~@47 c4@17 ~@16 g4@46 bb3@18 bb3@7, ~@17 bb3@20 [eb3,g3,bb3,eb4]@43 ~@8 [bb2,ab3]@24 [bb2,d3,ab3,bb3]@10 [eb2,bb3,eb4]@26 ~@20 [eb2,bb2,eb3,eb4]@18 ~@6, ~@9 f3@12 ~@40 [eb3,g3]@23 ~@12]/6", // Fsus2 Eb5 Ab Fm Abdim Eb Bb7 Eb5 …
  K: "[~@2 [eb3,d4]@9 ~@22 bb3@25 ~@14 [bb2,eb3]@10 [eb2,bb2,g3]@11 ~@10 [g2,eb3]@19 ~@22 bb3@16, ~@11 ab2@64 ~@18 [bb2,ab3]@13 ~@16 [ab2,ab3]@26 ~@12, ~@11 ab3@47 ab3@24 ~@20 bb3@21 [eb3,g4]@25 ~@12, ~@11 f4 c4@10 eb4@11 c4@49 ~@78, ~@12 eb3@59 g3@10 ~@13 f2@11 ~@38 bb2@17]/5", // Ebmaj7 Eb5 Eb Cm Bb7 Ab Eb
  L: "[~@77 d4@15 ~@11 bb3@9 bb3@7 ~@2 bb3@41 ~@33 ab3@8 ~ c3@6 ~@2 ab3@30 [f1,f2]@10 bb3@4, ~@3 c2@7 ~@12 bb1@33 f3@64 eb2@44 ~@47 f2@26 ~@20, ~@4 f2@25 f2@47 bb4@46 ~@81 bb3@12 ~@41, ~@6 a3@36 bb2@12 eb4@25 ~@13 [c4,ab4]@31 ~@65 eb3@17 ~@7 c3@24 ~@20, ~@7 eb3@36 ~@10 ab3@59 ~@8 bb2@42 ~@18 [g2,bb2]@17 ~@7 g3@11 ~@41]/8", // F Fm Gm
  M: "[~@31 g2@31 ~@2]/2", N: "[~@17 bb3@18 ~@5 bb2@27 ~@29]/3", O: "[~@9 eb3@11 ~@12, ~@2 bb4@27 ~@35]/2",
  P: "~@13 g3@3", Q: "~@18 ab1@13 g1",
  R: "[~@10 [f1,f2]@14 ~@53 [eb2,bb4]@15 [g3,bb3,db4,g4]@14 [ab2,eb3,f3,c4,f4]@22, ~@24 [g3,eb4]@33 ~@35 eb3@5 ~@31, ~@24 g1@4 ~@7 f2@45 ~@48, ~@25 g2@32 ~@71, ~@19 bb2@28 ~@17]/4", // F Eb5 Gdim Fm7 Cm
  S: "[~@21 f3@6 ~@20 bb2@41 ~@34 eb1@86 ~@16, ~ [c3,bb3]@55 ~@32 eb4@117 ~@19, ~ [g2,g3]@22 ~@24 [ab3,d4]@53 ~@124, ~@10 f2@18 ~@16 g3@57 ~@11, ~@11 [eb2,bb2]@8 ~@9]/7", // C7 G Abdim Eb5
})).s("gm_piano").gain(0.16)

stack(piano, piano_soft)

More by Percy Grainger