Strudelify

Honestly Love You

Black Rose

KeyD majorTempo120 bpm
0:00/0:00
// Honestly Love You — Black Rose
// 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 91 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
const piano = note("<A@5 B@8 C@3 D@3 E@8 F@6 G H@4 I@5 J@8 K@6 L@6 M@7 N@7 O@3 P@6 Q@5>".pickRestart({
  A: "[~@17 a4@6 ~@18 a4@35 ~ c#3@3 ~@3 a4@7 ~@13 a4@31 ~@3 g4@7 ~@14 a4@2, ~@6 d2@9 g4@62 c#2@6 ~@14 b4@39 e4@7 ~ g4@11 g4@5, ~@8 [a2,d3]@12 ~@3 a4@18 ~@39 g4@55 ~ c3@13 c3@11, ~@9 d4@22 ~@2 b4@44 ~@13 a4@13 ~@31 c2@26, ~@11 f#4@18 f#4@47 ~ f#4@58 c4@25]/5", // D5
  B: "[~@26 d2@2 ~@14 d3@20 ~@14 a2@5 ~@14 d4@5 ~@30 d#3@2 ~@13 b2@7 ~ d4@5 d4@19 ~@6 f#4@2 ~ g4@7 ~@8 g4@3 [d4,g4]@5 [d4,g4,b4]@4 [d4,g4,b4]@4 ~@11 e3@3 ~@12 [c#4,a4]@13, ~ c2@22 e4@5 d4@40 [g2,a3]@7 g3@6 d2@25 f#3@7 f#4@20 f#4@4 ~@4 [g#3,e4]@9 ~@8 [g#3,b3]@27 g2@35 b3@3 d5@8 [a2,e4,b4]@15 ~@10, ~@2 [c4,b4]@26 b3@6 ~@8 b3@41 ~@4 a2@26 d4@10 a3@3 d4@3 e4@3 ~ d4@9 ~@16 e4@22 e4@6 ~@7 g4@8 ~@8 b3@8 [d4,g4,b4]@14 c#4@12 ~@13, ~@2 e4@18 f#4@9 g1@54 ~@11 [a3,f#4,a4]@6 f#4@3 b4@29 ~@26 e3@14 ~@5 d4@9 d4@15 ~@3 g3@28 ~@11 a3@6 ~@7, ~@7 a4@22 ~@13 g3@20 d3@20 [a3,d4,f#4]@12 d3@38 ~@2 e2@12 ~@7 b2@33 ~@12 d3@34 ~@6 e3@18]/8", // G5 G F#m Gsus2 C#m G#m Asus2 Cmaj7 …
  C: "[~@91 d3@5, [b2,d4]@24 f#4@13 d3@18 a3@6 f#3@23 e3 c#4@5 e4@6, ~@6 a3@13 a3@10 ~@2 a3@12 f#3@2 f#4@4 [b3,b4]@17 f#4@30, ~@13 e4@12 [d2,d4]@47 a2@24, ~@22 a2@9 a2@23 a4@18 e4@7 a3@17]/3", // Bm B D
  D: "[~ b3@10 ~@2 g4@3 g4@3 g4@3 g4@3 ~@9 d4@3 ~@13 d3@12 ~@2 a3@10 [a1,c#4]@3 ~@15 a1@4, d4@11 b3@11 a3@9 a3@6 a3@19 ~@6 d3@13 ~@21, ~ g2@24 d2@13 ~@36 a3@6 a3@9 a3@7, ~@11 d4@11 a2@16 ~@5 a2@31 a2@12 a2@10, ~@22 d4@12 ~@3 [d4,f#4]@37 e4@22]/3", // A D
  E: "[~@3 g3@6 ~@10 a1@3 ~ a1@2 ~@7 a4@5 ~@30 a4@3 [a3,a4]@3 a3@6 a4@3 ~@9 e3@3 ~@3 a3@12 ~@9 g2@3 g4@7 g4@5 ~@31 d2@2 [g1,g3,b3,d4]@12 ~@6 g2@6 g2@5 ~@14 a2@2 ~@6 a4@6 ~@28 [d#2,d#3,d4]@2 ~ e4@2, ~@2 [g1,b3]@22 ~@2 d1@48 ~@14 b4@9 a4@25 ~@13 g4@9 [c4,e4]@12 g2@2 [c4,e4]@3 g2@5 ~@12 [d3,g3,b3]@13 ~@4 g2@5 g2@5 ~ g2@5 d2@29 [a3,d4,f#4,a4]@6 d2@3 a3@5 ~@2, ~@2 d4@3 ~@4 g3@8 g3@8 f#4@17 a2@7 d3@6 [a3,d4,f#4,a4]@6 f#3@12 [c#2,c#4,e4]@24 e4@15 c#4@3 e4@6 c4@3 ~@15 a4@9 a4@18 ~@24 d4@8 a3@13 [a3,d4]@12 [a3,d4,a4]@8 b4@22 ~@3, ~@3 g2@11 g2@11 ~ [d2,a3,d4]@11 [a3,d4,a4]@6 f#4@3 b4@27 c#3@12 c#3@12 c#4@12 a3@12 [c2,e4]@23 [c2,b4]@22 ~@32 d4@5 [g3,d4]@8 ~@12 a2@31 ~@2, ~@38 d2@36 ~@8 a4@12 e3@28 ~@11 g2@12 ~@8 [d4,f#4]@13 ~@24 b3@21 f#4@17 f#4@7 d3@19 ~@2]/8", // A G D#maj7 G C G D C#m …
  F: "[~@24 e3@12 ~@6 e4@5 g4@7 ~@8 g4@4 ~@3 a2@2 ~ [d4,g4,b4]@7 ~@11 e2@4 ~@44 a3@5 ~@43 d4@6, ~ e2@12 ~@6 d4@17 e3@11 g2@21 g2@3 b2@13 b2@11 ~ [a1,e4]@24 ~@12 [c#2,e4]@11 ~ d2@24 d4@6 [a3,a4]@6 [f#3,f#4]@12, ~ [d4,f#4]@9 ~@2 b2@7 b2@28 d4@18 ~ [d4,g4]@6 ~@7 [d4,g4,b4]@16 ~@12 [c#4,a4]@13 ~@11 c#3@12 ~ d4@12 d3@36, ~@7 b3@16 ~ e4@15 d4@8 b3@25 ~@15 d5@8 b4@24 [b1,b2,d4]@24 ~ f#4@6 a2@42, ~@7 [g#3,e4]@8 [g#3,e4]@8 ~ [g#3,b3]@24 ~@6 g4@5 d3@13 ~@41 a3@13 a3@12 ~@6 a3@18 f#3@3 f#4@3 [b3,b4]@24]/6", // G A5 C#m A F# D G5 G …
  G: "~@3 a3@3 ~@4 e4@2 [g3,d4]@3 b3, e4@5 ~@3, c#4@17 c#4@7 ~@8, a2@11 ~ a2@13 ~@7, ~@7 a3@5 [g2,b3]@2 ~@2", // G5 G
  H: "[~@4 [b3,g4]@3 g4@2 g4@3 ~@10 a3@6 a3@6 ~@12 d3@6 ~@11 a3@6 a3@9 ~@3 d3@5 ~ d2@5 ~@11 f#2@7 ~@3 g4@3 [d4,g4,b4]@6 [d3,d4,g4,b4]@5 b4, ~ d4@11 a2@2 ~@2 d2@14 ~@10 d3@6 ~@6 d3@6 d3@18 ~@2 a3@8 f#4@24 d4@6 ~@12, ~@4 g2@9 [d4,g4]@17 ~@4 a3@9 a3@12 a3@8 [d2,d4,e4]@23 d4@3 ~@3 d2@18 ~@18, ~@7 b3@6 a3@9 ~@6 [a2,d4,f#4]@36 ~@22 a3@12 [e2,a3,c4]@12 g2@18]/4", // Em G G5 Dsus2 D Am
  I: "[~@2 e3@3 [e4,a4,c#5]@6 ~@10 [g2,g3]@5 ~ f#2@3 ~ a4@7 ~@18 b3@6 ~@8 [b2,f#4]@3 [b3,e4,g4]@6 g4@3 [b3,g4]@3 ~@7 g#2@2 ~@6 a4@5 ~@12 a2@2 ~@7 a3@6 d3@5 ~@6 c#3@6 c#3@6 [c#2,c#3,b4]@5, g3@5 a2@21 ~@18 a3@6 a3@23 ~@13 e4@5 g2@5 a2@13 a2@8 ~@2 a3@7 ~@6 [a3,d4]@11 [a3,c#4]@17, ~@11 e5@16 ~@20 b2@18 b3@8 ~@12 b3@9 b4@17 b4@8 d4@4 ~@14 d3@9 ~@14, ~@13 [a4,c#5]@3 a3@10 ~@12 [f#3,a4]@12 f#4@17 d4@6 ~@12 g4@5 g4@4 e4@11 [e4,a4]@15 d2@23 c#2@12 ~@5, ~@14 e4@5 [e4,a4,c#5]@8 [f#4,b4]@23 b3 d4@11 f#3@11 e2@21 d4@6 ~@5 d4@8 ~ d4@5 f#4@23 ~@18]/5", // A G B5 Em C#7 D5 A F#m …
  J: "[~ [c#2,c#3]@2 ~@3 [b1,f#4,d5]@6 [f#4,d5]@6 b2@6 [b2,c#5]@5 ~ [a4,c#5]@5 d5@3 ~@4 a2@5 a2@4 ~@8 b4@5 ~@47 a4@4 ~ b4@7 ~@26 g4@7 ~@23 e4@4 ~@27 [a2,g3]@12 a2@6 ~@6 [g3,c#4]@12 ~ g3@7 e2@2, c#5@2 ~@4 b4@23 ~ a2@12 ~@9 d4@8 ~@5 b4@14 b3@30 g4@7 d4@42 f#4@26 ~ d4@20 d4@5 e4@19 a2@18 a2@10, ~@6 b2@12 [f#4,d5]@11 ~ [a1,e4,e5]@23 [g1,c#5]@62 ~@8 b4@9 b4@25 ~@33 e4@10 ~ e4@5 a1@28 a1@22, ~@38 d5@14 g4@19 d3@44 g3@13 g3@29 ~@19 d4@7 ~ [b3,f#4]@25 b3@13 g3@12 ~@22, ~@53 g2@14 g2@7 g3@41 g4@34 ~@7 a4@26 ~@2 e3@13 e3@13 d4@24 ~@22]/8", // C# Bm D Bsus2 A A7 Gdim D …
  K: "[~@2 [d2,a3]@6 ~@15 d4@3 ~@17 d4@6 ~@18 e4@6 ~@16 g4@2 g4@3 ~@21 d2@6 ~@6 a3@9 a3@8 ~@2 a3@15 a3@9 ~@19 a1@3, ~@2 f#4@12 d4@5 f#3@18 f#4@12 a1@24 [g1,g3]@21 a3@9 ~ a3@23 ~@18 c#4@26 g2@11 g2 b3@9, ~@2 d4@12 d3@36 e4@12 a2@11 ~ g2@11 g4 g2@8 d4@6 ~@9 [d4,f#4]@37 e4@26 ~@5 g3@15, ~@8 a2@18 d4@6 a4@18 [a2,c#4]@11 c#4@11 ~ b3@10 b3@14 [d1,d2]@14 ~@33 a1@27 g1@21, ~@8 a3@14 f#4@4 b4@25 ~@5 a3@17 d4@4 ~@7 d4@10 g4@15 ~@61 d4@22]/6", // D5 G D A D
  L: "[~@9 a5@6 d5@6 ~@11 a4@6 ~@8 a5@3 [a4,c#5]@6 ~@38 g2@2 [g4,c5,e5,g5]@5 ~@2 [g4,g5]@6 ~@2 a5@4 ~@19 [e4,e5]@6 d3@2 ~@18 d4@6 d4@6 d4@2 ~@9 a2@3 a2@2 [d2,a4,d5,f#5]@5, ~ [d2,a4]@14 d2@12 d3@13 a4@3 d5@6 c#2@43 f#2@3 c2@36 g3@5 ~@5 d5@24 g4@8 [f#4,a4]@3 g2@3 [d4,g4]@8 ~@5, ~@3 d1@29 [d5,a5]@6 f#3@11 e5@14 [a4,c#5,a5]@3 [b4,b5]@6 a4 a3@23 ~@4 c3@8 c3@6 e3@27 g2@24 [b3,b4]@23 ~@4, ~@3 f#5@17 ~ [a2,f#5]@28 c#3@11 [c#3,e3]@19 c#4@5 e4@6 a4@6 ~@6 e5@8 [g4,g5]@4 [a4,a5]@5 [g3,b4,b5]@4 [a4,a5]@18 [g4,b4]@12 g3@34 ~@5, ~@4 d5@11 a5@9 [b4,b5]@26 ~@5 [a4,c#5,a5]@6 a3@11 [c#5,e5,a5]@24 ~@6 c5@26 [f#4,f#5]@14 ~@5 d3@41 ~@4]/6", // A C G E D D5 F#m G5 …
  M: "[~ a5@5 ~@31 e5@2 ~@7 [g#4,e5]@6 ~@11 e4@6 ~@15 f#5@2 g5@6 ~@9 g5@3 g5@5 ~ g5@6 [g5,b5]@3 ~@8 e3@3 ~@56 a5@6 ~@28 d5@3 a5, ~ a2@38 ~ e2@29 g#3@6 b3@5 [g#3,d5]@2 e5@4 g2@15 d5@3 b3@5 [d5,b5] d4@9 [g5,b5]@2 d4@3 d6@8 [g5,b5]@25 [c#4,d5]@24 f#5@11 [a4,d5,a5]@5 f#3@6 a3@6 [a4,d5,f#5,a5]@5 d2@3 a4@7, ~@6 d3@9 d5@3 a3@5 [a4,d5,f#5,a5]@6 d2@3 a4@7 ~@7 b4@6 e3@34 [b4,d5]@12 g3@34 ~@7 e3@29 e4@8 a2@4 d5@6 a2@38, ~@7 [a4,a5]@5 f#5@3 [b4,b5]@19 [d#2,d#3] d5@4 ~ f#5@14 [e4,g#4,e5]@3 [g#3,d5]@5 g#4 [b3,b4,e5]@6 e4@18 ~@6 g5@8 b4@32 ~@11 [c#5,a5]@34 a4@13 ~ d3@32, ~@7 d5@5 f#3@27 ~@7 b2@41 ~@5 d3@40 a2@12 a4@2 a3@35 d2@16 f#5@3 b5@24]/7", // C#m G G#dim G Dmaj7 D5 D Bm …
  N: "[~@2 [a4,a5]@6 [a4,a5]@3 ~@10 e3@3 ~@20 g2@3 [g4,c5,e5,g5]@6 [g4,c5,e5,g5]@6 ~@27 d3@2 d3@3 ~@14 d4@4 ~@25 g4@2 f#4@2 ~@13 [a4,d5]@3 d5@3 ~@5 [d5,f#5,b5]@5 ~@11 [b2,e5]@3 f#5@3 ~@2 e3@6 e4@3 ~@9 e4@6 ~@12 e5@2, ~ c#5@2 ~@5 c#5@5 [e3,a3]@3 [b4,b5]@8 [c#5,e5]@9 c#4@15 ~@13 g5 e3@2 [a4,g5,a5]@2 g3@4 [b4,b5]@3 [a4,a5]@5 [f#4,f#5]@3 g3@3 [e4,e5]@7 g2@18 g4@2 d4@3 b3@11 g2@3 [d4,b4]@3 a4@2 a2@2 ~ d3@13 d3@27 d5@5 d5 ~@10 e3@9 b3@9 e4@5 b3@5 d5@4, ~@2 [c#2,d#5,e5]@22 a4@6 a3@6 e4@12 ~@13 [g4,c5]@30 d5@45 ~@10 f#5@8 f#5@3 d5@2 f#3@8 [a3,d5,f#5] [a5,b5]@13 ~@11 [g#4,e5]@3 d5@5 [g#4,b4,e5]@24, ~@2 c#3@9 [a4,a5]@8 a3@6 ~@2 e3@11 a4@3 c#5@2 e5@3 ~ c3@12 c3@32 b4@12 g3@33 d2 ~@9 [a4,d5]@5 a5@6 [a4,a5]@5 b4@6 a4@3 a3@10 [e2,a4]@43, ~@13 c#3@11 [c#3,a5]@23 c2@44 [d4,g4]@5 d3@18 [g4,b4]@3 d4@3 [g4,b4]@2 [d4,a4] f#4@13 d4@37 a4@8 b4@16 g#3@27]/7", // A C D5 Bm E5 A5 B C#m …
  O: "[f#5@2 ~@7 g5@6 ~@2 g5@3 g5@6 [d5,g5,b5]@6 b5@3 ~@6 [d5,d6]@7 ~@36 c#4@12, ~@2 b4@18 b3@6 d4@9 [g5,b5]@13 a2@25 [c#4,d5]@6 a4@12 ~@5, ~@2 d5@13 g3@34 b5@47, ~@2 g5@6 d3@41 e5@11 [a3,c#5,a5]@36, ~@3 g2@47 ~@5 e3@41]/3", // G D G Dmaj7 A
  P: "[~@44 a3@6 ~@6 e3@6 e3@6 e3@5 ~@10 b4@3 [b4,d5,g5]@3 [d5,g5]@3 g5@3 ~@45 d4@6 ~@20 a3@7 b3@15 b3@4, ~ [d2,d5]@37 d3@12 a2@23 ~ [g2,b3,d4]@21 d5@15 d3@19 d4@5 [f#3,a3]@12 c#4@13 c#4@14 ~@19, ~ f#5@18 f#3@3 f#5@29 ~@5 [c#4,e4]@17 ~@13 g3@9 a4@9 a2@7 a4@36 [a2,e4]@27 ~@18, ~@7 a2@19 a3@5 f#3 a5@19 ~@11 a3@11 ~@7 d3@18 d2@18 [d5,f#5]@32 ~@44, ~@14 d3@12 b5@25 ~@44 g5@27 f#3@7 f#4@19 ~@5 a3@13 ~@7 [g2,d4]@19]/6", // G G5 D G F#m C#m A5 D …
  Q: "[~ e4@5 e4@6 e4@17 ~@61 a7@56 ~@14, ~@29 e4@39 d5@12 f#6@64 ~@16, ~@57 a3@13 f#5@15 a6@61 ~@14, ~@63 f#4@10 a5@64 ~@23, ~@66 a4@11 d6@64 ~@19]/5",
})).s("gm_piano").gain(0.26)

// chords · piano · soft notes
const piano_soft = note(`<
  ~@4 A ~ B@2 C@2 D E F@2 ~ G H I J ~@2 K ~@8 L ~ M@2 ~@2 N ~ O ~ P ~@3 Q ~@2 R@2 S@4 T U@3 V ~@3 W X ~@3 Y@3 ~@2 Z@2 ~
  AA AB AC AD AE AF ~@2 AG ~@2 AH@2 AI@3 ~
>`.pickRestart({
  A: "~@15 e4@17", B: "[~@23 g2@13 ~@21 a4@5 ~@2]/2",
  C: "[~@4 d4@13 ~@7 d2@12 ~@18 e4@8 ~@2, ~@17 a4@20 ~@16 g#3@9 ~@2, ~@17 a3@10 ~@19 b3@16 ~@2]/2", D: "~@12 e3@13 ~@7",
  E: "~@9 d4@3 ~@20", F: "[~@2 e3@2 ~@21 a3@13 ~@6 c#3@13 ~@7]/2", G: "~@8 c#4@13 ~@11", H: "~ g3@24 ~@7", I: "~@3 a3",
  J: "~@3 e2@7 ~@22", K: "~@9 a3@7", L: "~@7 a3@10 ~@15", M: "[~@29 a3@9 ~@26]/2", N: "~@12 d3@5 ~@15",
  O: "~@11 a4@2 ~@19", P: "~@18 e4@4 f2@9 ~", Q: "~@3 a4@17 ~@12", R: "[~@14 c#4@13 ~@5, ~@27 f#3@27 ~@10]/2",
  S: "[~@59 f#2@7 ~@30 a3@19 ~@13, ~@30 b3@36 ~@24 b3@25 ~@13, ~@55 c#4@12 ~@61, ~@58 g2@9 ~@61]/4", T: "~@4 d2@5 ~@23",
  U: "[~@25 d2@12 d2@13 ~@5 a2@8 a2@6 ~@6 b3@12 ~@9, ~@23 a2@3 ~@6, ~@25 g3@2 ~@5]/3", V: "~@23 d5@9, ~@15 a4@17",
  W: "~@8 g3@5 d4@17 ~@2", X: "~@13 d4@6 ~@13", Y: "[~@23 d5@11 e3@2 ~@18 a4@13 ~@6 e5@11 ~@12, ~@67 a4@15 ~@14]/3",
  Z: "[~@29 e5@22 ~@13]/2", AA: "~@13 a4 ~@2", AB: "~@26 e5@5 ~", AC: "~@3 e4@9 ~@20", AD: "~@21 d5@5 ~@6",
  AE: "[d5,g5]@3 ~@2 g4@12 ~@15, ~@3 d5@6 ~@23", AF: "~@3 a4@12 ~@12 a4@5, ~@21 e5@11", AG: "~@28 d5@3 ~, ~@25 b4@7",
  AH: "[~@13 g3@23 ~@28]/2", AI: "[~@7 d4@16 ~, ~ d1@32 ~@15, ~@13 d2@64 ~@19, ~@9 a2@32 ~@7, ~@11 d3@32 ~@5]/3",
})).s("gm_piano").gain(0.15)

stack(piano, piano_soft)