Strudelify

Yesterday

Clayderman Richard

KeyF majorTempo81 bpm
0:00/0:00
// Yesterday — Clayderman Richard
// 81 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 41 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(81/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.

// other · piano
const piano = note("<~@2 A B C D E F G@2 B H D I J K@4 L@3 M N@2 O@3 P Q@4 R@2 S T U V W ~>".pickRestart({
  A: "~@41 c3@7, f2, ~@18 c3@11 c3@12 ~@7, ~@2 a3!2", B: "e3@23 a2@25", C: "d2@2 d3 c3", D: "bb2 c3",
  E: "f3@23 ~ f3@12 e3@11 ~", F: "d3@3 g2@3 ~ a2, ~@3 g2",
  G: "[bb2@18 ~@17 f3@12 ~@42 c3@7, ~@18 f2@29 f2@48 ~, ~@65 c3@12 c3@12 ~@7, ~@71 a3@12 a3@13]/2",
  H: "d2@23 d3@13 c3@12", I: "f3@23 ~ f3@12 e3@12", J: "d3@18 g2@17 ~@7 a2@6, ~@3 g2",
  K: "[bb2@18 ~@18 f3@11 ~@12 g3@13 ~@11 g3@12 ~@6 a3@6 ~@5 g3@6 ~@12 a2@11 ~@14 g3@13 c3@24, ~@18 f2@29 a2@24 ~ a2@23 d3@12 c3@11 bb2@12 ~@12 g2@26 ~@24, ~@124 f3@17 ~@8 d3@19 ~@24]/4",
  L: "[f2@12 ~@23 c3@12 a2@25 a2@23 d3@6 ~ a3@6 c3@5 ~ g3@6 ~@12 a2@12, ~@12 c3@23 ~@85 bb2@12 ~@12, ~@23 f3@24 ~@78 f3@19]/3",
  M: "~@12 g3@11 ~ c3@23 ~, g2 ~, ~ d3@3 ~@4",
  N: "[[f2,f3]@46 ~ f2@19 c3@6 ~@17 c3@6 ~, ~@72 a3@11 a3@11 ~@2, ~@77 c3@12 ~@7]/2", // F
  O: "[~@6 b2@17 a2@12 ~ a2@11 d2@23 ~ d3@12 ~ c3@11 bb2@24 ~ c3@12 c3@8 ~@4, e3@23 ~@121]/3", P: "f2@2 f2 e2",
  Q: "[d2@18 g2@16 ~@7 a2@6 bb2@18 f2@29 ~ f2@17 ~@2 c3@4 ~@19 c3@6 f3@6 b2@18 a2@12 a2@12 ~, ~@34 g2@13 ~@73 a3@11 a3@11 ~@50, ~@126 c3@11 ~@55]/4",
  R: "[d2@23 ~ d3@12 c3@11 bb2@25 c3@12 c3@12]/2", S: "f2@23 f2@12 e2@13", T: "d2@17 ~ g2@17 ~@6 a2@7, ~@35 g2@13",
  U: "bb2@18 ~@23 e2@6 ~, ~@3 f2@5", V: "~@11 c3@12 b2@25, d2@5 ~@11", W: "bb2@18 ~ [f2,f3]@26 ~@3",
})).s("gm_piano").gain(0.36)

// chords · piano
const piano_2 = note("<~@2 A B C D E F G H I J K L M N@4 O P Q R S@4 T U V@2 W@3 X Y F Z AA AB ~>".pickRestart({
  A: "~ f4 f4@6, g4", B: "~@18 b4@5 ~@18 f5@7, ~@12 a4@11 [g4,db5]@25, ~@29 d5@19, ~@35 e5@13",
  C: "~@3 d5 [f4,a4]@2 e4@2, e5 d5, ~@3 [f4,a4]@3 ~@3 g4 ~@2", // F
  D: "~@12 d5@12 c5@6 ~@11 g4@7, [d4,f4] e4, ~@5 bb4@3, ~@3 a4", // Dm
  E: "~@17 a4@6 ~ c4@12 [c4,g4]@11 ~, [c4,f4,bb4]@23 a4@13 ~@12", F: "~@12 a4@6 ~@23 d4@6 ~, [d4,f4]@3 [b3,g4]@5",
  G: "[d4,f4]@4 ~@2 a4@3 [c4,a4]@15", H: "~@6 f4@5 ~ f4@36, g4",
  I: "~@17 b4@6 db5@6 ~@12 f5@7, ~@11 a4@12 g4@25, ~@29 d5@19, ~@35 e5@13",
  J: "~@17 d5@6 ~ [f4,a4]@12 [e4,g4]@12, e5@23 d5@25, ~@11 [f4,a4]@12 ~@25", // F Em F
  K: "~@12 d5@11 ~@19 g4@6, [d4,f4]@23 c5@7 bb4@18, ~ e4, ~@3 a4", L: "~@3 a4 [c4,a4]@2 [c4,g4]@2, [c4,f4,bb4] ~",
  M: "~@2 a4 ~@4 d4, [d4,f4]@3 [b3,g4]@5", // Dm Em
  N: "[~@12 a4@6 [c4,a4]@29 [d4,e4,a4]@24 ~ [db4,e4]@23 d5@12 e5@12 ~ f5@11 ~@6 d5@5 ~@22 d5@4 ~@12 d5@12, [d4,f4]@19 ~@52 a4@24 ~@36 e5@10 ~ [g4,bb4]@26 [e4,c5]@24, ~@143 e5@25 ~@24]/4", // F Dsus2 Dbm Dm Gm C
  O: "[c4,a4]@47 ~", P: "~@12 [b3,d4,e4]@12 ~@13 e4@11, a4!2, ~@35 g4@13, ~@3 db4", Q: "d5@2 e5@2 f5@2 ~ d5, ~@3 e5",
  R: "~@18 d5@6 ~@11 e5@12 ~, [g4,bb4,e5]@24 [e4,c5]@23 ~", // Edim C
  S: "[~@35 a6@11 ~@2 [a4,c5]@3 [a4,c5,f5]@4 [a4,c5,f5]@40 ~@18 b4@6 ~@18 f5@6 ~@18 d5@5 ~@7 f4@6 [e4,g4]@12 ~, f5@22 bb5 bb6@11 a5@12 ~ g5@20 ~@41 a4@12 ~@5 d5@18 e5@23 ~ d5@13 ~@12, ~ a4@45 ~@49 [b3,d4]@24 [g4,db5]@12 [g4,db5,e5]@12 ~@12 [f4,a4]@11 ~@26, ~@11 c6@35 ~@146, ~@6 c7@17 ~@73]/4", // Am F Em Bm Gdim Dbdim F
  T: "~@18 d5@6 c5@5 ~ [d4,bb4]@6 a4@6 [bb3,g4]@4 ~@2, ~@11 [d4,f4]@12 ~ e4@12 c4@3 ~@9", // Gm Eb Dm
  U: "~@18 a4@6 [c4,f4,a4]@12 [c4,g4]@11 ~, bb4 ~, ~@12 [c4,f4]@11 ~@25", // F C5 F5
  V: "[~@12 a4@6 ~@23 d4@6 ~@12 a4@6 ~ [c4,f4]@29 ~, [d4,f4]@18 [b3,g4]@29 [d4,f4]@18 a4@30 ~]/2", // F5 Dm Em Dm
  W: "[[a4,c5] ~@3 [a4,c5,f5]@4 [a4,c5,f5]@38 ~ b3@5 ~@13 b4@6 ~@6 d5@6 ~@6 f5@6 ~@18 d5@6 ~@6 f4@6 ~ e4@12, g5@2 ~@45 d4@24 ~@24 e5@24 d5@12 ~@13, ~@59 a4@12 [g4,db5]@12 [g4,db5,e5]@13 ~@11 [f4,a4]@12 ~@12 g4@12 ~]/3", // Am F Gdim Dbdim F
  X: "~@17 d5@7 c5@6 ~@12 bb3@6, ~@11 f4@13 e4@24, ~@2 d4@2 ~ [d4,bb4]@3, ~@35 a4@6 g4@6 ~, ~@3 c4", // Gm
  Y: "~@17 a4@6 [c4,f4,a4]@12 [c4,g4]@13, bb4@23 ~@25, ~@11 [c4,f4]@12 ~@25", // F C5 F5
  Z: "~@11 a4@6 ~ c4@6 ~@5 [c4,f4]@6 [c4,f4]@12 ~, [d4,f4]@17 a4@30 ~, ~@17 f4@6 ~@25", // F5 Dm
  AA: "[f5,f6]@11 ~ a6@11 ~@13 d6@12, ~@11 a5@12 g5@25, ~ g6", AB: "d6@4 ~@8 a6@6 ~ c6@26 ~@3, f6@6 [f6,a6]@9 ~",
})).s("gm_piano").gain(0.5).pan(0.6)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<A@3 B@4 C@2 D E@3 F G@2 H I J K L M@2 N D O@4 G@2 D P@4 G@2 Q R@2>".pickRestart({
  A: "[~@6 [f4,c5]@6 [f4,c5]@6 ~@12 [f4,c5]@6 [c4,f4,c5]@5 ~ c4@5 ~@7 [c4,f4,c5]@6 [f4,c5]@5 ~@13 [f4,c5]@5 ~ [f4,c5]@6 ~@12 [c4,f4,c5]@6 [c4,f4,c5]@6 ~@12 [c4,f4,c5]@5 ~@7 d3@5 ~, f3@18 [f4,c5]@9 c4@9 ~@6 [f4,c5]@11 ~@7 c4@11 ~@4 c4@7 ~@8 [c4,f4,c5]@12 ~@12 [c4,f4,c5]@12 ~@6 [c4,f4,c5]@11 ~, ~@6 c4@18 f3@22 ~@2 f3@22 ~@2 f3@23 ~ f3@23 ~ f3@10 ~@14, ~@11 [f4,c5]@2 ~@11]/3", // F5
  B: "[e3@6 [e3,b3,d4,a4,b4]@6 [b3,d4,a4,b4]@6 [b3,d4,a4,b4]@5 ~@7 [g3,db4,e4,a4]@6 [g3,db4,e4,a4]@6 [g3,db4,e4]@3 c4@3 f4@6 [a3,d4,f4,a4]@6 [d4,f4,a4]@6 [d4,f4,a4]@4 ~@32 [d4,f4,bb4]@5 ~ [d4,f4,bb4]@5 ~ [d4,f4]@6 ~@8 g4@2 ~ [c4,g4,c5]@6 [c4,g4]@4 ~@9 f4@5 ~ [c4,f4]@5 ~ c4@6 ~@6 [c4,f4]@6 ~@6 [c4,g4]@5 ~, ~@24 a2@22 ~@14 a3@10 ~@8 [d4,f4]@10 ~@2 [d4,f4]@11 ~@22 c4@5 ~@21 c4@5 ~@38, ~@30 e3@16 ~@2 d3@23 ~ d3@10 ~@2 c3@11 ~ bb2@21 ~@3 c3@19 ~@4 f3@23 ~@2 f3@10 ~@2 e3@11 ~, ~@42 a4@11 ~@73 e4@5 ~@30 f4@6 ~@25]/4", // Esus4 Bm7 A7 Dbdim Dm Bb Dm C5 …
  C: "[~@18 d4@5 ~@13 b4@6 d3@3 c3@2 ~@13 [f4,bb4]@5 ~ [f3,c4]@5 ~@4 g3@2 ~@7 f4@2 g4@4 a4@3 c5@3, d3@22 ~@2 g3@22 ~ bb2@11 ~@14 f3@24, ~@6 d4@12 ~@11 d4@11 ~@13 d4@11 ~@14 a3@16 ~@2, ~@12 [f4,a4]@10 ~@13 g4@9 ~@22 [f4,a4]@11 ~@4 c4@14 ~]/2", // Bb5 F5 F
  D: "~@6 [c4,f4,c5]@6 [c4,f4,c5]@6 ~@12 [c4,f4,c5]@5 ~@7 d3@5 ~, f3@23 ~ f3@10 ~@14, ~@18 [c4,f4,c5]@12 ~@6 [c4,f4,c5]@11 ~", // F5
  E: "[e3@6 [e3,b3,d4,a4,b4]@5 ~ [b3,d4,a4,b4]@6 [b3,d4,a4,b4]@5 ~@7 [g3,db4,e4,a4]@6 [g3,db4,e4,a4]@6 [g3,db4,e4]@3 c4@3 f4@6 [a3,d4,f4,a4]@6 [d4,f4,a4]@6 [d4,f4,a4]@4 ~@32 [d4,f4,bb4]@5 ~ [d4,f4,bb4]@5 ~ [d4,f4]@6 ~@8 g4@2 ~ [c4,g4,c5]@6 [c4,g4]@4 ~@3, ~@24 a2@22 ~@14 a3@10 ~@8 [d4,f4]@10 ~@2 [d4,f4]@11 ~@22 c4@5 ~@16, ~@30 e3@16 ~@2 d3@23 ~ d3@10 ~@2 c3@11 ~ bb2@21 ~@3 c3@19 ~@5, ~@42 a4@11 ~@73 e4@5 ~@13]/3", // Esus4 Bm7 A7 Dbdim Dm Bb Dm C5 …
  F: "~@6 f4@5 ~ f4@5 ~ c4@6 ~@6 [c4,f4]@6 ~@6 [c4,g4]@5 ~, ~@5 c4@5 ~ c4@5 ~ f4@6 ~ f3@10 ~@2 e3@11 ~", // F5 C5
  G: "[~@18 d4@5 ~@13 b4@6 d3@3 c3@2 ~@13 [f4,bb4]@5 ~ [f3,c4]@5 ~@4 g3@3 ~@6 f4@2 g4@4 a4@3 c5@3, d3@22 ~@2 g3@22 ~ bb2@11 ~@14 f3@24, ~@6 d4@12 ~@11 d4@11 ~@13 d4@11 ~@14 a3@17 ~, ~@12 [f4,a4]@10 ~@13 g4@9 ~@22 [f4,a4]@11 ~@4 c4@14 ~]/2", // Bb5 F5 F
  H: "~@17 d4@6 ~@13 e4@5 ~ g4@4 ~@2, e3@21 ~@3 a2@23 ~, b3@4 ~ b3@16 ~@2 db4@21 ~@4, ~ d5@15 ~@32, ~@11 a4@10 ~@8 a3@17 ~@2",
  I: "[d3,d4,f4]@6 a3@5 ~ [e4,f4]@6 a3@5 ~@19 d4@6, ~@11 c3@10 ~@2 bb2@5 ~@2 bb3@17 ~, ~@11 a3@5 ~@8 d4@16 ~@8, ~@24 [f4,bb4]@10 ~@2 e4@11 ~", // Dm Fmaj7 Bb5
  J: "~@6 [d4,e4,bb4]@5 ~ [d4,e4,bb4]@5 ~ [d4,e4,bb4]@3 ~@9 [g3,c4,g4]@5 ~ [g3,c4,g4]@5 ~ [g3,c4]@5 ~, g3@22 ~@2 c3@18 g4@3 ~@3", // Em7b5 C5
  K: "f3@6 [c4,f4]@5 ~ [c4,f4]@6 ~@11 f4@6 ~ a4@5 ~ f3@3 ~@3, ~@18 [c4,f4,a4]@10 ~ c4@12 c5@4 ~@3, ~@3 f3@2 ~, ~@12 f4@3 ~", // F5 F
  L: "~@6 b3@5 ~ [d4,g4,d5]@6 [d4,g4,d5]@3 ~@9 [a4,e5]@6 [e4,a4,e5]@5 ~ [e4,a4,e5]@2 ~@4, e3@21 ~@3 a2@22 ~@2, ~ d4@5 ~@23 e4@6 ~@13, ~ g4@3 ~@20, ~ d5@2 ~@13", // G5 A5
  M: "[~@6 a4@4 ~@8 a4@6 ~ d5@5 f4@3 ~@3 [g4,e5]@5 [gb4,eb5] [f4,d5]@5 ~ [g4,bb4,e5]@6 [g4,bb4]@5 ~ [g4,bb4]@5 ~ [g4,bb4]@4 ~@3 c5@5 ~ g4@5 [e4,g4,c5]@5 ~@2 g4@5, [d3,d5,f5]@10 ~@2 [c4,e5]@12 bb3@23 g3@21 ~@3 c3@20 ~@5, ~@12 a4@5 ~@7 bb4@8 ~@64, ~@13 f5@11 f4@4 ~@44 [e4,g4]@6 e4@5 ~@7 e4@5 ~]/2", // C Ebm Dm Edim Gm C Dm C …
  N: "~ c5@18 ~@5, f3@11 ~, ~ [c4,f4]@43 ~@4", // F5
  O: "[e3@6 [e3,b3,d4,a4,b4]@6 [b3,d4,a4,b4]@6 [b3,d4,a4,b4]@5 ~@7 [g3,db4,e4,a4]@6 [g3,db4,e4,a4]@6 [g3,db4,e4]@3 c4@3 f4@6 [a3,d4,f4,a4]@6 [d4,f4,a4]@6 [d4,f4,a4]@4 ~@32 [d4,f4,bb4]@5 ~ [d4,f4,bb4]@5 ~ [d4,f4]@6 ~@8 g4@2 ~ [c4,g4,c5]@6 [c4,g4]@4 ~@9 f4@5 ~ f4@5 ~ c4@6 ~@6 [c4,f4]@6 ~@6 [c4,g4]@5 ~, ~@24 a2@22 ~@14 a3@10 ~@8 [d4,f4]@10 ~@2 [d4,f4]@11 ~@22 c4@5 ~@21 c4@5 ~ c4@5 ~@32, ~@30 e3@16 ~@2 d3@23 ~ d3@10 ~@2 c3@11 ~ bb2@21 ~@3 c3@19 ~@4 f3@23 ~@2 f3@10 ~@2 e3@11 ~, ~@42 a4@11 ~@73 e4@5 ~@30 f4@6 ~@25]/4", // Esus4 Bm7 A7 Dbdim Dm Bb Dm C5 …
  P: "[e3@6 [e3,b3,d4,a4,b4]@6 [b3,d4,a4,b4]@6 [b3,d4,a4,b4]@5 ~@7 [g3,db4,e4,a4]@6 [g3,db4,e4,a4]@6 [g3,db4,e4]@3 c4@3 f4@6 [a3,d4,f4,a4]@6 [d4,f4,a4]@6 [d4,f4,a4]@4 ~@32 [d4,f4,bb4]@5 ~ [d4,f4,bb4]@5 ~ [d4,f4]@6 ~@8 g4@2 ~ [c4,g4,c5]@5 ~ [c4,g4]@4 ~@9 f4@5 [c4,f4]@5 ~@2 c4@6 ~@6 [c4,f4]@6 ~@6 [c4,g4]@5 ~, ~@24 a2@22 ~@14 a3@10 ~@8 [d4,f4]@10 ~@2 [d4,f4]@11 ~@22 c4@5 ~@21 c4@5 ~@38, ~@30 e3@16 ~@2 d3@23 ~ d3@10 ~@2 c3@11 ~ bb2@21 ~@3 c3@19 ~@4 f3@23 ~@2 f3@10 ~@2 e3@11 ~, ~@42 a4@11 ~@73 e4@5 ~@30 f4@6 ~@25]/4", // Esus4 Bm7 A7 Dbdim Dm Bb Dm C5 …
  Q: "~@6 [c4,f4,a4]@5 ~ [c4,f4,a4]@6 ~@6 f3@6 [d4,f4,a4]@5 ~@2 d4@3 ~@2 [d4,f4,a4]@5 ~, f3 ~, ~@18 [c4,a4]@10 ~@2 b3@17 ~, ~@19 f4@9 ~@8 [f4,a4]@3 ~@9", // F Dm F
  R: "[[bb3,d4,f4]@10 ~@2 [f3,c4,f4,a4]@5 ~ f3@43 ~@35, ~@17 [c4,f4]@44 ~@35, ~@17 a4@33 ~@46]/2", // Bb F F5
})).s("gm_acoustic_guitar_nylon").gain(0.16).pan(0.3)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@9 A B C D E F G H I J K H I L M A B C D E F G N O P Q R S T U V ~>".pickRestart({
  A: "[c5,f5,a5]", B: "d5 db5, [g5,a5]", C: "a5@2 a4 [c5,e5,f5], [d5,f5]@3 ~", D: "[bb4,d5,f5] [g4,c5,e5]",
  E: "[f4,bb4,d5]@12 [f4,a4,c5]@6 [f4,a4,c5]@18 [g4,c5]@11 ~", F: "c5@2 f5 c5 b4@2 f5 b4, a4@24 g4@23 ~",
  G: "[bb4,c5]@12 [f4,a4,c5]@4 ~@2 [f4,a4,c5]@29 ~, f4 ~@7", H: "[a4,b4,d5] [g4,db5,e5]",
  I: "[a4,d5,f5]@2 [a4,e5,f5]@2 [f4,a4,d5]@2 e5 d5, ~@3 [f4,a4]", J: "[d5,e5]@3 d5 [g4,bb4,c5]@4, [g4,bb4] ~",
  K: "[f4,a4,c5]", L: "[d5,e5]@3 d5 c5@2 e5@2, [g4,bb4]!2", M: "[a4,c5,f5]", N: "f3@17 ~ f3@6, [c5,f5,a5]",
  O: "[e3,d5]@22 b2 bb2 [a2,db5]@24, [g5,a5]", P: "a5@2 a4 [c3,c5,e5,f5], [d3,d5,f5]@3 ~",
  Q: "[bb2,bb4,d5,f5]@22 bb2 b2 [c3,g4,c5,e5]@24", // Bb C
  R: "[f4,bb4,d5]@12 [f4,a4,c5]@6 ~@6 f2@10 ~@2 [e2,g4,c5]@11 ~, f2@11 ~@13, ~@3 [f4,a4,c5]@3 ~@2", // Bb F C F
  S: "c5@12 f5@6 c5@6 b4@12 f5@6 b4@4 ab2 a2, [d2,a4]@24 [g2,g4]@23 ~", // D5 G
  T: "[bb4,c5]@12 [f2,f4,a4,c5]@4 ~@2 [f2,f4,a4,c5]@29 ~, [bb2,f4]@7 ~@41", U: "[f4,c5]@11 ~ [g4,b4]@11 ~",
  V: "[f4,bb4]@10 ~@2 [f3,f4,a4]@5 ~ [f3,a3,f4,a4]@26 ~@4", // Bb5 F
})).s("gm_string_ensemble_2").gain(0.24).pan(0.2)

stack(piano, piano_2, acoustic_guitar_nylon, string_ensemble_2)

More by Clayderman Richard