Strudelify

Danny Boy

Evans Bill

KeyE♭ majorTempo105 bpm
0:00/0:00
// Danny Boy — Evans Bill
// 105 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 97 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(105/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@8 B C@6 D@7 E@6 F G H I J K@2 L@3 M@6 N O@3 P Q@2 R S T@8 U@3 V W X@2 Y@4 Z AA@4 AB@3 AC AD@2 AE AF AG AH@2 AI@8 ~
>`.pickRestart({
  A: "[~@3 d4@6 ~@13 f4@5 ~@6 g3@5 ~@14 f4@6 ~@4 c5@4 ~@4 g4@5 ~@4 eb4@5 ~@21 f4@3 ~@4 ab4@5 ~@18 c5@5 ~@13 g4@4 ~@11 eb3@11 ~@21 d4@5 ~@5 f4@5 ~@5 [b2,g3,d4]@4 ~@10 f4@6 ~@4 c5@4 ~@4 g4@4, ~@9 [bb2,f3,ab3,c4,eb4]@18 [eb2,g4]@31 [db4,g4]@8 [db4,f4,bb4]@9 [bb3,c4,f4]@9 c4@23 ~@10 [g2,f3,f4,bb4]@23 ~@4 g4@9 ~@4 f4@23 ~@60 [ab3,db4,g4]@8 bb4@8, ~@32 [b2,d4]@6 [c3,g3,eb4]@20 [bb2,g3]@17 [ab2,eb3]@32 ~ [ab2,f3,b3,eb4,g4]@10 ~@22 [c3,bb4]@19 ~@20 [c4,eb4]@26 ~@10 [eb2,g4]@25 ~@9 [g3,db4,f4]@7, ~@103 eb4@5 ~@26 bb3@6 [bb3,eb4]@9 [g3,eb4]@9 ~@9 [b3,d4]@13 ~@25 [bb1,eb3,ab3,c4,eb4]@11 ~@8 [c3,g3,eb4]@16 bb2@16]/8", // G Fm7 Eb Dbdim Bbm Bbsus2 Gm7 Db …
  B: "~@5 eb4@5 ~@18 d4@4, ~ [ab2,eb3]@31, ~ [c4,f4]@9 c4@22", // Ab5 F5
  C: "[~ eb4 ~@10 f4@4 ~@23 ab4@5 [c3,bb3,g4]@5 ~ f2@5 ~@9 eb4@4 ~@12 ab3@13 ~@23 f5 ~@10 g4@2 ~@10 d5@5 ~@5 c5@6 ~@5 c5@6 ~@6 g4@6 c3@14, ~ [ab2,f3]@15 [g2,g4]@28 ~@11 [bb2,f3,ab3,c4]@14 [e2,e3,db4,eb4]@24 bb2@21 d5 eb5@2 d5@2 ~@10 bb4 g4@14 ~@48, ~@2 [b3,eb4]@15 ~@12 eb4@15 ~@30 b2@20 g4@24 ~@3 eb3@23 ~@22 [f3,d4,bb4]@13 ~@13, ~@30 [f3,b3]@14 ~@5 [eb3,a3,f4]@6 ~@14 ab3@10 [ab4,db5,eb5]@16 f4@23 [g2,eb5]@26 [ab2,eb3]@22 ~ [g2,f4]@12 ~@13, ~@110 bb4@8 ~@6 bb3@20 [bb3,f4,d5]@11 [ab3,d4,bb4]@11 ~@26]/6", // C7 Db G Fm Dbm B Bb Fdim …
  D: "[~@18 d5@3 ~@3 f5@3 ~@21 d5@5 ~@6 c5@6 ~@5 g4@6 ~@5 bb3@6 ~@6 c4@7 ~@30 f5@3 ~@20 f5@4 ~@6 [g4,eb5]@6 ~@6 eb5@6 [g2,f3,d4,f4,bb4]@7 [b2,ab3,b3,d4,g4]@7 [c3,g3,bb3]@7 [bb2,bb3,d4]@7 ~@7 d4@8, [bb2,f3,c4]@21 [b2,ab3,d4,b4,g5]@6 ~ [c3,bb3,bb4,eb5]@25 [bb3,g4,d5]@12 [ab3,f4,bb4]@11 [c3,eb4]@11 [a3,b3]@13 [ab3,c4,eb4]@28 eb5@5 ~@8 g4 bb3@2 [eb4,bb4]@7 bb3@6 ~@38 eb4@29, ~@15 c5@6 ~@32 [ab2,eb3]@23 f4@24 ~@16 bb4@17 [eb2,g5]@24 ~@67, ~@121 c5@12 ~@3 bb2@21 [ab2,eb3,bb3,ab4,f5]@12 [a2,gb3,c4,eb4,gb4]@11 ~@29 [a2,c4]@15, ~@124 d5@9 ~@6 g3@18 ~@67]/7", // Cm Gm7 G C7 Bb Bbsus2 G Cm7 …
  E: "[~@8 f4@9 ~ bb3@9 ~@2 c5@6 ~@16 g4@10 ~ c3@9 [eb3,eb4]@10 [bb2,c4]@24 ~@30 eb5@8 [c4,eb5]@18 ~@8 [ab3,c4,d4]@8 ~@12 f4@3, [b3,eb4]@17 ~ [g2,f3,g3,d4,g4]@17 [c3,bb3,d4,eb4,bb4]@27 ~@43 e2@13 b3@26 ~@33 [f3,ab3,c4,eb4]@15, ~@27 bb3@8 ~@26 [bb3,f4]@10 ~@35 db4@19 ab4@5 bb4@13 ~@49, ~@106 eb4@8 ab3@29 ~@26 eb3@23, ~@110 b2@33 ~@18 bb2@31]/6", // Eb Bbsus2 Cm Dm7b5 B G7 Cm7 Fm7 …
  F: "~@6 [b2,d4]@10 ~@13 f4@3, [eb2,g4]@31 ~, ~@3 g3@13, ~ [c3,c4,eb4]", // Bm Eb Cm
  G: "db4@8 ~@4 c5@4 ~@9 eb3@5 g4@2, bb2, [g3,g4] [g3,db4,e4,bb4]", // G Gdim
  H: "~@8 eb4@6 ~@13 eb2@2 d2@3, ~ ab2@30 ~, ~ [eb3,bb3,c4,f4]@13 [g3,bb3,c4]@17 ~", // Ebsus2 C7
  I: "~@29 ab4@2 ~, db2@31 ~, ~@3 [f3,b3,eb4]@13, ~@16 db3@15 ~, ~@27 g4@4 ~", // Fm7b5
  J: "~@5 bb3@19 ~@5 c5@3, [g2,bb4], ~@5 [f3,d4,f4]@27, ~@3 bb3", // Gm Dm
  K: "[~@12 g4@4 ~@8 g4@5 [c3,bb3,eb4]@8 [c3,bb3,eb4,g4,bb4]@8 [a3,gb4]@16 [a3,db4,eb4,gb4]@3, [bb3,bb4]@4 [c2,bb3,eb4]@3 ~@9, ~ [c3,d4,eb4]@16 g3@12 [g3,f4]@16 [eb3,a4,b4,d5]@19]/2", // Cm7 D Ebm7b5 Bb Cm7 Cm G7 B7
  L: "[~@14 a2@2 ~@9 f4@5 ~@7 [b2,g3,d4]@8 [c3,g3,eb4]@10 [b2,a3,db4,eb4,gb4]@6 db4@8 ~@8 c5@3 ~@12 g4@4, [c4,g4]@16 ~@45 [ab3,f4,g4]@20 [db4,f4,bb4]@15, ~ [f2,eb4]@16 [bb2,eb3,ab3,c4,eb4]@14 ~@30 bb2@35, ~@6 eb3@11 ~@13 [eb2,g4]@25 ~@14 db4@11 g3@16, ~@11 eb3]/3", // G Cm B7 C5 Db Bbm F7 Ab …
  M: "[~@8 eb4@5 ab3@11 ab2@2 ~@2 d2@3 ~@28 f4@5 ~@13 b2@3 ~@5 [bb3,db4,e4,ab4]@8 [c3,g3,bb3,eb4,g4]@8 [bb3,db4]@3 d4@6 a2@2 [f3,c4,eb4]@8 ~ [d4,f4]@5 ~@8 db2@9 ~ [d2,a2,gb3,a3]@13 [eb2,bb2,f3,bb3,c4]@19 ~@11 d5@5, ab2@23 ~@8 db2@33 [g2,g4]@16 ~@21 [f2,eb3,a3,f4]@10 ~@81, bb3@13 [g3,c4]@19 ~@5 [f3,b3]@27 ~@6 f3@10 ~@40 [ab3,c4]@6 ~@17 b3@13 ~@36, ~ eb3@24 ~@23 db3@17 ~@15 c3@13 ~@19 bb2@21 [ab2,f3,ab3,bb3]@10 ~@33 [bb2,bb3,c4,eb4,ab4,bb4]@16, ~ [c4,f4]@13 ~@23 eb4@17 eb4@15 [b3,eb4]@10 ~@47 eb4@50 ~@5 c5@11]/6", // Bbm7b5 Cm7 Bbm F7 Dm D Ebsus2 G …
  N: "~@7 [bb3,f4,bb4,eb5]@9, eb5@13 g5@19, ~ [g2,eb4,g4]@31, ~ bb4@13 ~@18, ~@9 eb3@23", // Bbsus4 Cm
  O: "[~@13 c5@3 ~ [ab3,d4,f4]@12 [f3,bb3,d4,bb4]@8 [bb3,db4]@2 d4@6 bb2@2 ~ [c3,g3,bb3]@5 f2@2 ~ gb2@6 eb2@2 ~@14 bb2@8 [b2,ab3,d4,f4,ab4,b4,d5,f5]@8 g5@2, ab2@29 ~@8 [b2,g3,g4]@11 ~@16 [f2,eb3,ab3,c4]@23 ~@9, ~@6 eb3@23 ~@43 bb1@14 ~@10, ~@6 [bb3,c4,f4,bb4,d5]@10 bb4@12 ~ f4 ~@18 eb4@39 ~@9]/3", // Ddim Bb Bbm C7 Bdim Em Fm7 Bb
  P: "~ [eb4,g4]@15 ~@12 d5@4, ~ [c3,bb3,bb4,eb5]@31, ~ [eb4,g4]", // Eb Cm7 Eb
  Q: "[~@8 c5@5 ~@8 g4@8 ~@16 [eb3,ab3]@2 ~@6 db4@2 ~ d4@5 bb2@2 ~, [c4,f4,d5]@13 [ab3,d4,f4,bb4]@17 ~@13 g3@4 ~@17, ~ [ab2,eb3]@29 ~@18 [f2,a3]@15 ~, ~ bb3@13 ~@15 [c3,bb3,eb4,f4]@18 ~@6 [eb3,g4]@11]/2", // Ab5 Dm7 Bb7 Ab5 F Cm7 Eb
  R: "[b2,a3,db4,eb4,f4]@8 ~@19 f5@4 ~, ~@8 [bb2,ab3,c4,f4]@23 ~, ~@8 eb4@16 eb4@7 ~, ~@16 bb1@15 ~, ~@21 eb5@10 ~", // Fm
  S: "~@29 f5@3, [g2,g5], ~@5 [bb4,d5]@27, ~@3 [bb3,f4]@13, ~@3 g3", // G Bb Bb5
  T: "[~@8 [c4,g4,eb5]@5 ~@8 [c4,eb5]@8 [eb3,g3,d4,f4,bb4]@8 bb2@2 ~ db4 ~@4 bb2@2 ~ [c3,g3,bb3]@5 a2@2 ~ [bb2,f3,bb3,d4]@5 ab2@3 ~@8 d4@5 ~@8 f4@8 bb3@11 ~@5 c5@3 ~@7 g4@6 [c3,bb3,f4]@8 [f2,eb3,g3,a3,eb4]@8 a2@3 ~@8 d4@6 ~@42 bb3@6 bb4@3 ~@7 c5@5 ~ bb3@10 bb3@7 ~ [c3,bb3,eb4,g4,bb4,eb5]@8 [b2,a3,e4,a4,db5,e5]@8, ab3@13 [a2,gb3,eb4,gb4,c5]@16 ~@11 [b2,g3,g4]@7 ~@17 [a2,g3,c4]@14 ~@34 [c3,bb3,d4,eb4,bb4]@13 ~@19 bb2@47 [bb2,c4,eb4,ab4]@17 ~ [bb2,ab3,d4,g4,b4,d5]@13 ~@34, ~ [eb4,f4,ab4,f5]@12 ~@26 bb3@2 d4@5 ~@2 eb4@29 ~@27 bb3@8 ~@32 [eb3,ab3,c4]@14 eb4@15 [b3,eb4,ab4,bb4]@18 bb4@14 ~@16 bb4@18 ~@17, ~@42 b3@5 ~@30 [ab2,f3,b3,eb4]@16 [g2,f3,d4,g4]@19 ~@46 [e3,ab3,db4]@33 ~@31 [f3,d4,f4,g4]@18 ~@16, ~@165 bb1@16 bb3@19 ~@56]/8", // Cm Ebmaj7 C7 Bb Fsus4 F7 Cm7 A …
  U: "[db5@8 db5@5 ~@8 bb4@8 ~@16 c5@3 ~@8 [eb3,ab4]@5 ~@29 ab4@5 ~, [bb2,ab3,db4,f4,ab4,f5]@13 [a2,g3,c5]@16 ab2@32 ab2@34 ~, ~@14 [db4,e4]@15 [eb3,bb3,eb4,g4,bb4,eb5]@19 [ab3,eb4,bb4]@13 f3@8 f4@27, ~@49 c4@12 bb3 g4@2 b3@14 db2@18, ~@62 eb4@23 [f3,b3,eb4,g4]@11]/3", // Ab5 Bbm7 Am7 Dbm Eb Absus2 Ebaug
  V: "~@29 d5@3, [g2,f3]@19 d5@2 g5@3 [d4,f5]@8, d4@16 [f4,bb4]@10 eb5@5 ~, [f4,bb4]@13 g4@18 ~, ~@8 bb3@23 ~", // G7 Dm Bb5
  W: "[bb3,eb4,c5]@16 ~@11 g4@5, c3, ~ [bb3,d4,eb4,c5], ~@21 bb4@11, ~@3 g3", // Cm7
  X: "[~@6 [g3,bb3]@7 ~@11 c4@5 ~@8 bb1@8 c5@3 ~@11 c5@5, f4@29 eb4@18 ~ ab3@8 ab3@8, c3@13 [eb3,b3]@16 ~ [bb2,f3,ab3,c4]@18 [bb2,d4,g4,d5]@16, ~@14 [f2,g3]@16 ~@23 eb5@11]/2", // Gm Abm Fm Gm Fsus2
  Y: "[~@13 bb2@2 ~ [c3,d4,eb4,g4]@5 bb2@2 ~ [b2,a3,gb4]@5 [ab3,db4,f4]@11 [ab3,db4,f4,ab4,c5]@5 ~ c5@11 c5@5 ~@11 ab4@5 ~@10 [eb3,eb4]@5 eb4@16 eb4@2 ~ [ab2,f3,b3,eb4,f4]@8 [gb2,gb3,b3,eb4,gb4]@8, [g2,bb4]@15 ~@14 [bb2,c4]@17 ~@16 ab2@33 ~@33, ~@5 f4@10 bb3@8 ~ [db4,d4] ~@20 eb5@16 ~ [bb3,c4,eb4,g4,bb4]@16 [g3,ab3,c4,g4]@17 ~@33, ~@6 [f3,bb3,d4,g4]@10 ~@30 [g3,db4,e4,a4]@16 eb3@26 ~@5 [f3,b3,f4]@19 ~@16]/4", // Cm B7 Db Dbmaj7 Eb Fm7b5 B Gm …
  Z: "[g2,f3,bb3,d4]@8 [b1,g3,b3,d4]@8 ~@13 ab4@3, g4, ~ [c2,g3,bb3,eb4], ~@3 c3", // Gm7 G Cm7
  AA: "[~ eb4@7 [eb3,bb3]@2 b3@4 a2@2 ~ [f3,ab3,c4,eb4]@6 [c4,eb4,f4]@7 ~@18 bb2@2 [f3,ab3,bb3] ~@2 [db2,ab2]@2 ~ [gb3,a3,b3]@2 d2@2 ~ bb2@11 ~@21 d5@2 ~@30 d5@3, [c3,bb3,g4]@8 [f2,g3,f4]@8 ~ bb2@28 f3@5 ~@8 a2 ~@13 bb2@11 g4@13 ~@7 eb3@5 bb3 f4@19, ~@30 eb4@47 eb4@8 bb4@3 c5@8 ~@12 [bb4,c5]@12 bb3@8, ~@30 [bb3,c4]@20 ~@11 bb3@19 [bb3,f4]@10 f5@5 ~ eb5@32, ~@30 f3@7 bb1@13 ~@11 [eb2,f3,c4]@34 g2@33]/4", // Eb5 Fm7 F7 Bb7 Db5 B7 C7 Fsus2 …
  AB: "[~@8 c5@5 ~@8 c5@8 [g2,f3,d4,f4,bb4]@8 bb2@2 ~ [b2,g3,g4]@5 bb2@2 ~ [c3,g3,bb3]@5 f2@2 ~ [gb2,e3,ab3,bb3]@6 eb2@2 ~@13 [bb3,eb4,ab4,eb5]@8 [b2,ab3,d4,f4,ab4,b4,d5,f5]@11, [ab2,eb3]@29 ~@35 [f2,eb3,ab3,c4]@21 ~@11, [bb3,c4,f4,bb4,d5]@13 [ab3,d4,f4,bb4]@16 ~@11 [bb3,db4] ~@7 eb4@29 ~@19, ~@35 bb1@8 ~@5]/3", // Gm7 Em C7 Gb7 Ebsus4 Bdim Ab5 Fm7 …
  AC: "[bb3,eb4,g4,bb4]@16 ~@13 d5@3, [c3,c5,eb5], ~ [bb3,eb4,g4,bb4], ~@3 f3", // Eb Cm Eb
  AD: "[~@8 c5@5 ~@8 g4@8 ~@14 ab3@5 [f2,eb3,g3,a3]@15 ~, [ab2,eb3]@29 [c3,bb3,eb4]@19 ~@16, [bb3,f4,bb4,d5]@13 [ab3,d4,f4,bb4]@17 ~@7 g3@11 ~@16, ~ c4@12 ~@16 f4@34 ~]/2", // F7 Ab5 Cm7 Bb Bb7
  AE: "~@4 bb1@4 d4@2 ~@5 f5, [bb2,ab3,c4,eb4,f4] [bb2,g4,bb4], ~@5 [ab3,c5]@3, ~@3 d5, ~@7 eb5", // Fm7 Eb Ab
  AF: "~ [eb3,g3]@15 ~ eb4@8 ~@4 f5@3, g5, [bb3,d4,f4,bb4,d5] [b4,eb5], ~@17 [g3,b3,g4]@15, ~@25 eb4@7", // Eb Bb B G
  AG: "~@9 eb5@8 ~@7 eb5@7 g2, ~ [ab2,eb3,bb3,g4,ab4,f5]@16 [a2,gb3,c4,eb4,a4,c5]@15", // Eb Adim
  AH: "[[d4,f4,bb4]@8 [b2,g3,b3,d4,g4]@9 [c3,f3,bb3]@7 [bb2,g3,d4]@8 ~@11 d4@5 ~@13 f3@3, ~@17 eb4@31 [ab2,b3,eb4]@16, ~@32 [g3,c4]@16 f3@13 ~@3, ~@33 a2@16 ~@8 f4@7, ~@40 a1@9 ~@15]/2", // Bb G Fsus4 Gm Abm C5
  AI: "[~@15 c5@5 ~@10 g4@10 ~@10 eb4@9 ~@11 c5@3 ~@24 d6@18 ~@43 gb5@12 ~@41 eb1@45, ~@2 [g2,d4,g4]@18 [c3,bb3,eb4,bb4]@20 [eb3,c4]@21 c5@6 [ab3,eb4,ab4]@6 [gb4,a4]@5 d4@4 gb4@2 a4@2 b4@2 d5 [d4,e5]@4 b5 d6 [gb4,e6]@19 ~@2 eb5@17 e4@2 [ab3,gb4]@3 b4@3 [b3,ab4]@29 bb2@64 ~@22, ~@2 bb3@9 bb3@9 ~ d4@19 f4@33 d5@7 e4@35 ~ db5@5 ab3@3 b3@2 db4@2 gb4@3 eb4@40 ~ [g5,bb5]@64 ~@20, ~@6 f3@14 ~@20 ab3@21 [eb4,ab4]@3 [eb3,c4]@9 b2@42 e2@28 b4@4 [db4,db5]@24 g3@64 ~@21, ~@40 f2@19 f2@13 ~ d4@3 a3@39 ~ ab4@2 b2@32 gb5@3 eb5 gb4@17 bb4@20 ~@2 bb6@63]/8", // G5 Cm7 Cm Ab5 Gbm Dsus2 Gb7 Ab7 …
})).s("gm_piano").gain(0.4)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note(`<
  ~@2 A@5 ~ B C@2 D@2 ~ E@3 F@3 G H I ~ J@4 ~ K L ~@3 M N ~@2 O ~@2 P ~@3 Q@2 ~@12 R@2 ~@10 S ~ T ~@4 U V ~@3 W ~@7 X@2
  Y@3 ~
>`.pickRestart({
  A: "[~@20 [g3,ab3]@23 ~@10 bb3@17 ~@15 bb3@9 ~@10 gb3@11 ~ bb2@25 ~@19, ~@94 f2@21 [f3,ab3]@26 ~@19]/5", // Abmaj7 Fm
  B: "~ bb3@9 ~ ab3@21, ~@5 g3@11", C: "[~@15 g3@7 ~@10]/2",
  D: "[~@16 e4@14 ~@18 c5@5 ~@11, ~@15 [eb2,g3]@12 ~@5, ~@15 bb4@8 ~@9, ~@16 [bb3,eb4]@11 ~@5]/2", // Eb Eb5
  E: "[~@19 [g3,bb3]@13 ab3@21 ~@7 f4 ~@11 eb4@13 c4@11, ~@19 eb4@35 ~@6 g4@25 ~@11]/3", // Gm
  F: "[~ c4@11 g3@11 [f2,eb3]@13 [bb2,eb3]@33 ~@27, ~@12 bb3@5 ~@79]/3", G: "~@9 c5@11 ~@12", H: "~@10 f3@7 g3@15",
  I: "[ab2,f3]@17 ~@15", // Db
  J: "[~@7 [f2,g3,a3]@10 ~@11 eb4@13 ~ ab3@8 ~@8 eb4@21 [f3,ab3,f4,c5]@20 ~@29, ~@17 [eb3,ab3]@25 e3@37 [eb4,ab4]@12 ~@37]/4", // F Fm Ab5
  K: "~ db4 ~@2", L: "~@22 eb3@9 ~", M: "~@5 c5@8 eb4@16 ~@3", N: "~ ab3@16 ~@15", O: "~@13 eb2 ~@2",
  P: "~@8 b3@7 ~ ab3@8 ~@8", Q: "[~@24 c5@5 g2@8 ~@3 b3@8 ~@8 [e3,ab3,bb3]@8]/2", R: "[~@30 g2@17 ~@17]/2",
  S: "db2@23 ~@9", T: "~@23 ab3@8 ~", U: "~@10 b3@5 ~@17, ~@9 d4@6 ~@17", V: "~@13 c5@8 ~@11", W: "~@5 d4@3",
  X: "[~@20 e4@17 ~@27]/2",
  Y: "[~@12 f5@19 ~@3 d7@62, ~@5 eb2@32 ~@11, ~@11 d5@64 ~@21, ~@31 [g4,bb4]@64 ~, ~ [c5,f5,c6]@2]/3", // Gm F5
})).s("gm_piano").gain(0.24)

stack(piano, piano_soft)

More by Evans Bill