Strudelify

Mother and Child Reunion

Paul Simon

KeyG majorTempo138 bpm
0:00/0:00
// Mother and Child Reunion — Simon Paul
// 138 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(138/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 · "Grand & Rhodes Pianos"
const piano = note("<A@2 B@6 C@3 D@2 E@2 F@2 G H I@2 J@2 K L M@2 ~@53>".pickRestart({
  A: "[~@8 [b3,d4,g4]@23 ~]/2", // G
  B: "[g4@3 a4@2 b4@3 [g3,b3,e4]@27 ~ b4@2 d5@2 [g4,c5,e5]@2 [g4,c5,e5]@3 ~ [f#4,a4,d5]@5 ~ a4@2 [g4,b4]@5 ~ [g4,b4,d5]@7 ~ b4@2 d5@2 [g4,c5,e5]@3 ~ e5@2 [f#4,a4,d5]@5 ~ [f#4,a4]@3 ~ b4@2 [b3,d4,g4]@5 ~, [b3,d4]@7 ~@89]/6", // Em C D G C D F#m G …
  C: "[~@4 b4@2 d5@2 [g4,c5,e5]@2 e5@2 d5@2 [f#4,a4,d5]@5 ~ [f#4,a4,d5]@3 ~ [d4,g4,b4]@5 ~ [b3,e4,g4]@5 ~ [e4,g4]@3 ~ [e4,a4,c5]@3 ~ c5@2 d5@2]/3", // C D G Em Am
  D: "[[d4,g4,b4]@2 a4@2 g4@2 g4@4 d4@13 ~@5 [d4,b4]@4]/2", // G
  E: "[a4@2 g4@2 b4@2 g4@2 a4@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@9 ~@7 [g4,d5]@2]/2", // Em G5
  F: "[[g4,d5]@3 ~ d5@2 b4@2 [f#4,d5]@3 ~ [f#4,b4]@2 [f#4,a4]@9 ~@7 d4@2]/2", // G5 D B5 F#m
  G: "[f#4,a4]@2 [f#4,a4]@3 ~ [f#4,b4]@2 [e4,a4]@3 ~ [e4,g4]@3 ~", H: "[g4,b4]@7 ~@7 g4@2",
  I: "[[g4,d5]@2 [g4,d5]@2 [g4,e5]@3 ~ [f#4,d5]@2 [f#4,d5]@2 [f#4,b4]@2 [f#4,a4]@9 ~@7 d4!2]/2", // G5 C D B5 F#m
  J: "[[f#4,a4]@2 [f#4,a4]@3 ~ [f#4,b4]@2 [e4,b4]@2 [e4,a4]@2 [e4,g4]@11 ~@7 g4!2]/2", // F#m B5 E5 A5 Em
  K: "[g4,b4]@3 ~ a4@2 b4@2 [e4,a4]@3 ~ [e4,g4]@3 ~", L: "[e4,g4]@7 ~@9",
  M: "[[e4,c5]@2 [e4,c5]@2 [e4,b4]@3 ~ [f#4,a4]@2 [f#4,a4]@2 [f#4,a4]@2 [d4,f#4]@9 ~@9]/2", // C E5 F#m D
})).s("gm_piano").gain(0.56)

// chords · epiano1 · "Grand & Rhodes Pianos"
const epiano1 = note(`<
  ~@27 A@4 B@3 C@2 D@2 E@2 F G H@2 I@2 J K L@2 M@4 B@3 N@2 O@3 P Q@3 R S T U V W@2 U X Y@2 Z AA AB
>`.pickRestart({
  A: "[~@4 b4@2 d5@2 [g4,c5,e5]@2 [g4,c5,e5]@3 ~ [f#4,a4,d5]@5 ~ a4@2 [g4,b4]@5 ~ [g4,b4,d5]@7 ~ b4@2 d5@2 [g4,c5,e5]@3 ~ e5@2 [f#4,a4,d5]@5 ~ [f#4,a4]@3 ~ b4@2 [b3,d4,g4]@5 ~]/4", // C D G C D F#m G
  B: "[~@4 b4@2 d5@2 [g4,c5,e5]@2 e5@2 d5@2 [f#4,a4,d5]@5 ~ [f#4,a4,d5]@3 ~ [d4,g4,b4]@5 ~ [b3,e4,g4]@5 ~ [e4,g4]@3 ~ [e4,a4,c5]@3 ~ c5@2 d5@2]/3", // C D G Em Am
  C: "[[d4,g4,b4]@2 a4@2 g4@2 g4@4 d4@13 ~@5 [d4,b4]@4]/2", // G
  D: "[a4@2 g4@2 b4@2 g4@2 a4@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@9 ~@7 [g4,d5]@2]/2", // Em G5
  E: "[[g4,d5]@3 ~ d5@2 b4@2 [f#4,d5]@3 ~ [f#4,b4]@2 [f#4,a4]@9 ~@7 d4@2]/2", // G5 D B5 F#m
  F: "[f#4,a4]@2 [f#4,a4]@3 ~ [f#4,b4]@2 [e4,a4]@3 ~ [e4,g4]@3 ~", G: "[g4,b4]@7 ~@7 g4@2",
  H: "[[g4,d5]@2 [g4,d5]@2 [g4,e5]@3 ~ [f#4,d5]@2 [f#4,d5]@2 [f#4,b4]@2 [f#4,a4]@9 ~@7 d4!2]/2", // G5 C D B5 F#m
  I: "[[f#4,a4]@2 [f#4,a4]@3 ~ [f#4,b4]@2 [e4,b4]@2 [e4,a4]@2 [e4,g4]@11 ~@7 g4!2]/2", // F#m B5 E5 A5 Em
  J: "[g4,b4]@3 ~ a4@2 b4@2 [e4,a4]@3 ~ [e4,g4]@3 ~", K: "[e4,g4]@7 ~@9",
  L: "[[e4,c5]@2 [e4,c5]@2 [e4,b4]@3 ~ [f#4,a4]@2 [f#4,a4]@2 [f#4,a4]@2 [d4,f#4]@9 ~@9]/2", // C E5 F#m D
  M: "[~@4 b4@2 d5@2 [g4,c5,e5]@2 [g4,c5,e5]@3 ~ [f#4,a4,d5]@5 ~ a4@2 [g4,b4]@5 ~ [g4,b4,d5]@7 ~ b4@2 d5@2 [g4,c5,e5]@3 ~ g5@2 [c5,e5]@5 ~ [f#4,a4,d5]@3 ~ [g4,b4,e5] d5 ~ b4 [g4,b4,d5]@3 ~]/4", // C D G C D Em G
  N: "[[d4,g4,b4]@2 a4@2 g4@2 [d4,f#4,b4]@4 [d4,f#4,a4]@13 ~@5 [d4,f#4,b4]@4]/2", // G Bm D Bm
  O: "[a4@2 g4@2 b4@2 b4@2 [e4,g4,c5]@2 c5@2 a4@2 [f#4,a4,d5]@5 ~ [f#4,a4,d5]@3 ~ [b3,d4,g4]@3 ~ [b3,d4,g4]@7 ~ [b3,d4,g4]@3 ~ [e4,g4,c5]@3 ~ c5@2 c5@2]/3", // C D G C
  P: "[f#4,a4,d5]@2 d5@2 d5@2 b4@4 [b3,d4,g4]@5 ~", // D G
  Q: "[~@4 [d4,g4,b4]@2 b4@2 [e4,g4,c5]@2 c5@2 a4@2 [f#4,a4,d5]@5 ~ [f#4,a4,d5]@3 ~ [d4,g4,b4]@5 ~ [b3,e4,g4]@5 ~ [e4,g4]@3 ~ [e4,a4,c5]@3 ~ c5@2 d5@2]/3", // G C D G Em Am
  R: "[d4,g4,b4]@2 a4@2 g4@2 [d4,f#4,b4]@4 [d4,f#4,a4]@5 ~", // G Bm D
  S: "[d4,f#4,b4]@2 [d4,f#4,a4]@5 ~ [d4,f#4,b4]@2 [d4,f#4,a4]@5 ~", T: "~@2 [d4,f#4,b4]@2 a4 g4 b4!2",
  U: "[e4,g4,c5]@2 c5@2 a4@2 [f#4,a4,d5]@5 ~ [f#4,a4,d5]@3 ~", V: "[b3,d4,g4]@3 ~ [b3,d4,g4]@7 ~ [b3,d4,g4]@3 ~",
  W: "[[e4,g4,c5]@3 ~ c5@2 c5@2 [f#4,a4,d5]@2 d5@2 d5@2 b4@4 [b3,d4,g4]@5 ~@5 [d4,g4,b4]@2 b4@2]/2", // C D G
  X: "[d4,g4,b4]@5 ~ [b3,e4,g4]@5 ~ [e4,g4]@3 ~", // G Em
  Y: "[[e4,a4,c5]@3 ~ c5@2 d5@2 [d4,g4,b4]@2 a4@2 g4@2 [d4,f#4,b4]@4 [d4,f#4,a4]@5 ~ [d4,f#4,b4]@2 [d4,f#4,a4]@5 ~]/2", // Am G Bm D Bm D
  Z: "[d4,f#4,b4]@2 [d4,f#4,a4]@5 ~ [d4,f#4,b4]@2 a4@2 g4@2 a4@2", AA: "[d4,g4,b4]@15 ~",
  AB: "~@4 d4@3 ~ g4@3 ~ b4@3 ~",
})).s("gm_epiano1").gain(0.56)

// bass · piano · "Gr~Piano/Fretless Bass"
const bass = note("<A B C D E F G F G F H I J K D L J K D L J K D M N O J P ~@52>".pickRestart({
  A: "~@4 g2 b2 c3 d3", B: "g2@3 ~@5 g2@2 b2@2 c3@2 d3@2", C: "g2@3 ~@5 e2@2 b1@2 e2@2 b1@2",
  D: "e2@3 ~@5 e2@2 b1@2 e2@2 b1@2", E: "e2@3 ~@5 c2@3 ~@5", F: "d2@3 ~@5 g2@2 b2@2 c3@2 d3@2", G: "g2@3 ~@5 c2@3 ~@5",
  H: "e2@3 ~@5 a2@3 ~@5", I: "g2@3 ~@5 d3@2 b2@2 a2@2 d3@2", J: "d2@3 ~@5 d3@2 b2@2 a2@2 d3@2",
  K: "d2@3 ~@5 e2@2 b1@2 e2@2 b1@2", L: "e2@3 ~@5 d3@2 b2@2 a2@2 d3@2", M: "e2@3 ~@5 c3@2 a2@2 g2@2 c3@2",
  N: "c2@3 ~@5 c3@2 a2@2 g2@2 c3@2", O: "c2@3 ~@5 d3@2 b2@2 a2@2 d3@2", P: "d2@3 ~@13",
})).s("gm_piano").gain(0.48)

// bass · fretless bass · "Gr~Piano/Fretless Bass"
const bass_2 = note(`<
  ~@27 A B C B C B D E F G H I F G H I F G H J K L F M B C B C B N E F M B C B C B D E I O P Q P Q P R S T O U V
>`.pickRestart({
  A: "~@8 c2@3 ~@5", B: "d2@3 ~@5 g2@2 b2@2 c3@2 d3@2", C: "g2@3 ~@5 c2@3 ~@5", D: "e2@3 ~@5 a2@3 ~@5",
  E: "g2@3 ~@5 d3@2 b2@2 a2@2 d3@2", F: "d2@3 ~@5 d3@2 b2@2 a2@2 d3@2", G: "d2@3 ~@5 e2@2 b1@2 e2@2 b1@2",
  H: "e2@3 ~@5 e2@2 b1@2 e2@2 b1@2", I: "e2@3 ~@5 d3@2 b2@2 a2@2 d3@2", J: "e2@3 ~@5 c3@2 a2@2 g2@2 c3@2",
  K: "c2@3 ~@5 c3@2 a2@2 g2@2 c3@2", L: "c2@3 ~@5 d3@2 b2@2 a2@2 d3@2", M: "d2@3 ~@5 c2@3 ~@5", N: "g2@3 ~@5 a2@3 ~@5",
  O: "d3@2 b2@2 a2@2 d3@2 d2@3 ~@5", P: "c2@3 ~@5 d2@3 ~@5", Q: "g2@2 b2@2 c3@2 d3@2 g2@3 ~@5",
  R: "g2@2 b2@2 c3@2 d3@2 e2@3 ~@5", S: "a2@3 ~@5 g2@3 ~@5", T: "d3@2 b2@2 a2@2 d3@2 e2@3 ~@5",
  U: "g2@5 ~ d3@2 a3@2 d3@2 e3@2 d3@2", V: "g2@5 ~ d3@2 g2@7 ~",
})).s("gm_fretless_bass").gain(0.48)

stack(piano, epiano1, bass, bass_2)

More by Paul Simon