Strudelify

When I See You Smile

Bad English

KeyG majorTempo120 bpm
0:00/0:00
// When I See You Smile — Bad English
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 144 bars on a 16-step grid, each part at one level. 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@4 B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE@2 AF AG@2 AB AH AI AJ@2 AK AL@2 AM AN AO AP AQ
  A@3 J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE@2 AF AG@2 AB AH AI AJ@2 AK AL@2 AM AN AR AS AT AU AV AW AX AY AZ
  BA BB BC BD BE BF@2 BG BH@2 BI BJ BK BL BM@2 BN BO@2 BP BQ BR BS@2 BT BU BV BW BX BY BZ@2 CA CB@2 CC@2 CD@2 CE@2 CF@2
  CG@2
>`.pickRestart({
  A: "a5 d5 g5 d6 a5 d5 g5 d5", B: "[b3,d4,g4]@8 d5@3 d5@2 d5@3, ~ [g4,b4]",
  C: "[g4,b4,d5]@2 d5@2 ~@2 g4@2 d5@3 c5@2 b4@3, ~@8 b4@5 ~@3", D: "[e4,g4,b4] c5@2 [e4,g4,c5]@3 a4@2",
  E: "[e4,g4]@2 a4 b4 c5 b4 a4 g4", F: "[c4,e4,a4] b4@2 [c4,e4,b4]@3 a4@2",
  G: "[c4,a4] d4 g4 e4 [c4,e4,b4]@2 a4 g4, a2 ~", H: "[d4,g4,a4]@2 b4 [g4,b4]@2 g4 a4 d4",
  I: "c5 a4 ~ b4 [d4,g4] ~ a4 ~", J: "[b3,d4]@6 g4@2 d5@3 d5@2 d5@3, g2 [g3,g4,b4]",
  K: "[g4,b4,e5]@2 d5 c5 [g4,b4,d5]@2 c5 b4, g2 g3", L: "[e4,g4,b4] c5@2 ~@2 g4 a4@2, c3 c4, ~@3 [e4,g4,c5]@2 ~@3",
  M: "c3@2 ~ g4 c5 b4 a4 g4, [e4,g4]@3 ~ e4@4, ~ c4 c3 b2", // Em
  N: "[c4,e4,a4] b4@2 ~@2 g4 a4@2, a2 a3, ~@3 [c4,e4,b4]@2 ~@3", O: "[c4,a4] d4 e4 g4 c5 b4 a4 g4, a2 [a3,e4]",
  P: "[d4,g4,b4]@3 a4 [g4,a4] g4 a4 d4, d3@4 d4@3 ~", Q: "c5 a4 d4 b4 [d4,g4] d4 a4 d4, d3 ~",
  R: "[g3,c4]@2 c5 ~@2 b4 c5 b4, c2 c3, ~@3 [e4,g4]@5, ~@3 c5@2 ~@3", S: "[e4,g4,d5]@2 [e4,g4,b4]@2 ~@2 [e4,a4] g4",
  T: "[e4,a4,d5]@2 [c4,e4,b4]@2 ~ b4 [c4,a4] g4", U: "[a4,c5,e5]@2 d5 [c4,e4,b4]@3 [d4,a4] g4",
  V: "[g3,c4]@2 ~ b4 c5 b4 c5 b4, ~ [e4,g4]", W: "[e4,g4,d5]@2 [e4,g4,b4]@2 ~@3 g4",
  X: "[f#4,a4,e5]@2 d5 [f#4,a4,d5]@2 [f#4,a4,d5]@2 [f#4,a4,d5]", Y: "[c5,c6] [b4,b5] [f#5,f#6] [b4,b5]",
  Z: "[f#4,a4,e5]@2 [f#4,a4,d5]@2 [a4,d5,g5] [a4,d5,g5]@2 [a4,d5,g5]", AA: "[c5,c6] [b4,b5] [d5,d6] [b4,b5]",
  AB: "[b4,d5,g5]@2 [d4,g4,b4] [g4,b4,d5]", AC: "[b4,d5,g5] [a4,d5,f#5]", AD: "[g4,c5,e5]",
  AE: "[~@2 [g4,c5,e5] d5 [g4,c5,e5]@2 d5 [g4,b4,d5]@5 [g4,b4,d5]@3 b4]/2", // C G
  AF: "[d4,f#4,a4]@8 ~@3 [f#4,a4,d5]@2 [f#4,a4,d5]@3", // D
  AG: "[[e4,g4,e5]@3 [e4,g4,d5]@2 [e4,g4,d5]@3 [e4,g4,e5]@3 g4@2 [c4,e4,g4]@11 [g4,c5,e5]@4 [a4,d5,f#5]@4]/2", // Em Em7 Em C D
  AH: "[b4,d5,g5] [d5,f#5,a5]", AI: "[g4,c5,e5]@2 d5 [e4,g4,c5]@5",
  AJ: "[~ d5 [g4,c5,e5] d5 [g4,c5,e5] d5@2 [g4,b4,d5]@5 [g4,b4,d5]@3 b4]/2", AK: "[d4,f#4,a4]@4 ~ d5 [f#4,a4,d5] d5",
  AL: "[[e4,g4,e5]@3 [e4,g4,d5]@2 [e4,g4,d5]@3 [e4,g4,e5]@2 g4@2 [c4,e4,g4]@16 [c4,e4,g4]@2 g4@2]/2", // Em Em7 Em C
  AM: "a4 b4 d5 b4, [c4,e4] [e4,a4]", AN: "[c4,e4,a4]!2", AO: "c5!3 d5 b4@2 a4 g4, [f#4,a4] f#4",
  AP: "[f#4,b4]@12 b4 a4 g4@2", AQ: "[b3,d4,g4]", AR: "[a4,d5,e5] [b4,d5,f#5] [b4,d5,g5] [d5,f#5,a5]",
  AS: "[d5,f#5,b5] g5@2 [d5,f#5,b5]@2 g5 [a4,d5,g5]@2", AT: "[e4,g4]@2 b4 [e4,g4,c5]@2 b4 a4 g4",
  AU: "[e4,g4,b4] g4@3 ~ [e4,b4] a4 g4", AV: "[c4,e4,b4] g4@3 c4 g4!2 e4", AW: "[c4,e4,g4] g4 [c4,e4]@4 [d4,g4]@2",
  AX: "[c4,e4]@3 g4 [e4,g4,c5] b4 a4 g4", AY: "[b3,e4,g4] e4@3 [e4,g4,b4]@2 g4 d4",
  AZ: "[a3,d4,g4]@2 g4 [a3,d4,g4]@2 g4 [a3,d4,g4]@2", BA: "[f#4,a4,d5] a4 [f#4,a4,d5] a4",
  BB: "[d4,g4,b4]@2 g4 [a3,d4,g4]@2 g4 [a3,d4,g4]@2", BC: "[a3,d4,f#4]@3 d4 b4@2 a4@2, ~ [d4,f#4]", BD: "[e4,g#4,b4]",
  BE: "[e4,g#4,b4] d5 [g#4,b4,e5] b4", BF: "[[d4,f#4,b4]@2 [d4,f#4,a4]@4 [a4,d5,g5] [a4,d5,g5]@7 e5 d5]/2",
  BG: "[f#4,b4,e5] [f#4,b4,e5]@7", BH: "[[d4,f#4,b4]@2 [f#4,b4,d5]@2 ~@2 [g#4,b4,e5]@6 [e5,g#5,b5]@3 a5]/2",
  BI: "[e5,g#5]@2 a5 g#5 [b4,e5]@2 d5@2 [e4,g#4,b4]@2 a4@2 g#4@2 e4@2", BJ: "[c#4,e4,a4]@2 [e4,a4,c#5] [a4,c#5,e5]",
  BK: "[c#5,e5,a5] [b4,e5,g#5]", BL: "[a4,d5,f#5]",
  BM: "[~@2 [a4,d5,f#5] e5 [a4,d5,f#5]@2 e5 [a4,c#5,e5]@5 [a4,c#5,e5]@3 c#5]/2", // D A
  BN: "[e4,g#4,b4]@8 ~@3 [g#4,b4,e5]@2 [g#4,b4,e5]@3", // E
  BO: "[[a4,d5,f#5]@3 [a4,d5,e5]@2 [a4,d5,e5]@3 [a4,d5,f#5]@3 a4@2 [d4,f#4,a4]@11 [a4,d5,f#5]@4 [b4,e5,g#5]@4]/2", // D Asus4 D E
  BP: "[c#5,e5,a5]@2 [e4,a4,c#5] [a4,c#5,e5]", BQ: "[e2,e3,c#5,e5,a5] [e2,e3,e5,g#5,b5]",
  BR: "[d2,d3]@4 [d2,d3]@3 [d2,d3], [a4,d5,f#5]", // D
  BS: "[~ e5 [a4,d5,f#5] e5 [a4,d5,f#5] ~ c#3 b2 [a2,a3]@4 [a4,c#5,e5]@3 c#5, [d2,d3]@2 [d2,d3] ~@3 [a2,a3]@2, ~@5 e5@2 [a4,c#5,e5]@5 ~@4]/2", // D A D A
  BT: "[e2,e3,e4,g#4,b4]@4 ~ e5 [g#4,b4,e5] e5, ~ [e2,e3]", // E
  BU: "[a4,d5,f#5] f#5!2 ~@2 [a4,d5,f#5] [d2,d3,a4,d5,f#5]@2, [d2,d3]@2 [d2,d3] ~, ~@3 [a4,d5,f#5]@2 ~@3", // D
  BV: "[d2,d3]!2 [d2,d3,a4,d5,f#5] [d2,d3,b4,e5,g#5], [d4,f#4,a4] ~", // D E7 D
  BW: "[a2,a3,c#5,e5,a5]@2 [e4,a4,c#5] [a4,c#5,e5], ~ [a2,a3]", BX: "[e2,e3,c#5,e5,a5] [e2,e3,b4,e5,g#5]",
  BY: "[a4,d5,f#5]@3 e5 [d2,d3]@3 [d2,d3], [d2,d3] [f#4,a4,d5]", // D
  BZ: "[~ e5 [a4,d5,f#5] e5 [d2,d3,d5,f#5,a5]@2 [c#3,a5] b2 [a2,a3]@4 [a4,c#5,e5]@3 c#5, [d2,d3]@4 ~@3 [c#5,e5,a5]@5 [a2,a3]@4]/2", // D F#m A D A
  CA: "[e2,e3,e4,g#4,b4]@8 ~@3 [g#4,b4,e5]@2 [g#4,b4,e5]@3, ~ [e2,e3]", // E
  CB: "[[a4,d5,g#5]@3 [a4,d5,f#5]@2 [a4,d5,f#5]@3 [a4,d5,f#5]@3 [a4,d5,e5]@2 ~@7 [d4,f#4,a4]@4 [d2,d3]@4 a4@2 a4@2, [d2,d3]@2 [d2,d3]@2 [d2,d3]@2 ~ a2, ~@13 [d4,f#4,c#5]@7 ~@12]/2", // D Asus4 D Dmaj7
  CC: "[b4@2 c#5@2 e5@2 c#5@2 b4@2 a4@4 ~ c#5, [b1,b2], [d4,f#4]@2 [f#4,b4]@2 [d4,f#4]@3 ~]/2", // B D B5 D
  CD: "[[e4,g#4,b4]@2 [e4,g#4,c#5]@6 d5!3 e5 c#5@2 b4 a4, [e2,e3], ~@2 [e4,g#4]!2]/2", // E C#m E
  CE: "[~@4 [c#4,e4,a4]@3 b4 [e4,a4,c#5]@8, [d3,d4]]/2", // A D
  CF: "[b5 d5 a5 e6 b5 d5 a5 d5 [f#4,a4,d5]@4 c#5 b4 a4@2, [a2,a3]]/2", CG: "[c#4,e4,a4]/2",
})).s("gm_piano").gain(0.31)

stack(piano)