Strudelify

Joy To The World

George F. Handel Molly Cline

KeyD majorTempo120 bpm
0:00/0:00
// Joy To The World — George F. Handel Molly Cline
// 120 bpm, 2/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5869145; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/2)

// 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 B C D E F C G A B C H I J K@2 L@2 M@2 N O P Q E F C G ~@4 R S T@2 U V W X U Y Z AA U V AB X A B C AC AD AE AF@2 L@2
  M@2 AG AH P Q E F C G A B C H I J AI@2 AJ AK@2 AL AM AN AO AP E F C G
>`.pickRestart({
  A: "[d3,a3,f#4,d5]@4 [d3,d4,a4,c#5]@3 [d3,d4,g4,b4]", B: "[d3,d4,f#4,a4]@11 ~ [g2,b3,e4,g4]@4",
  C: "[a2,a3,d4,f#4]@2 [a2,a3] g3, ~ [c#4,e4]", D: "d4@11 ~ [d4,f#4]@2 [c#4,e4]@2, [d3,f#3]@15 ~",
  E: "[d3,f#3,d4] [a3,f#4,d5]@2 [d3,d4,g4,b4]", F: "[d4,f#4,a4]@3 [e4,g4] [d4,f#4]@2 [g2,b3,e4,g4]@2, d3@11 ~@5",
  G: "[d3,f#3,d4]@15 ~", H: "[d3,f#3,d4]@11 ~ [f#3,d4,a4]@4", I: "[g3,d4,g4,b4]@11 ~ [g3,d4,g4,b4]@4",
  J: "[a3,e4,c#5]@11 ~ [a3,g4,c#5]@4", K: "[[d3,a3,f#4,d5]@27 ~ [f#4,d5]@4]/2",
  L: "[[f#4,d5]@2 [a4,c#5]@2 [g4,b4]@2 [f#4,a4]@2 [f#4,a4]@3 [e4,g4] [d4,f#4]@2 [f#4,d5]@2, d3@15 ~]/2", // D A G F#m Em D
  M: "[[f#4,d5]@2 [a4,c#5]@2 [g4,b4]@2 [f#4,a4]@2 [f#4,a4]@3 [e4,g4] [d4,f#4]@2 [d4,f#4]@2, d3@15 ~]/2", // D A G F#m Em D
  N: "[d4,f#4]@2 [d4,f#4]@2 [d4,f#4]@2 [d4,f#4] [e4,g4], ~@3 [d3,a3]", // D Em D5
  O: "[d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [e4,g4] [d4,f#4], [f#4,a4]@11 ~ [d3,a3]@4", // D5 Em D F#m D5
  P: "[c#4,e4]@2 [c#4,e4]@2 [c#4,e4]@2 [c#4,e4] [d4,f#4], a3@11 ~ a2@4", // C#m D
  Q: "a2@2 a2@2 a2@2 [d4,f#4] [c#4,e4], [e4,g4]@11 ~ a2@4", R: "[b1,b2,b4] [g1,g2,g4]", S: "[c#3,c#4,c#5] [a2,a3,a4]",
  T: "[[d3,d4,d5]@15 ~]/2", U: "d2 a2 d3 f#3", V: "a3@4 d4@11 ~", W: "d4 a4 d5 f#5", X: "[a5,d6]@15 ~",
  Y: "a3 d4 d3 d2", Z: "a1 a2 c#3 e3", AA: "a3 c#4 a3 e3", AB: "f#4 a4 c#5 e5", AC: "[d3,f#3,d4]@11 ~@5",
  AD: "[b4,b5]!2, d3@15 ~", AE: "[g4,g5]!2, a2@15 ~", AF: "[[f#4,f#5]@27 ~ [f#4,d5]@4, d3@7 ~]/2",
  AG: "[d4,f#4]@2 [d4,f#4]@2 [d4,f#4]@2 [d4,f#4] [e4,g4]", AH: "[f#4,a4]@11 ~ [e4,g4]@2 [d4,f#4]@2",
  AI: "[[d3,a3,f#4,d5]@27 ~ d5@4]/2", AJ: "[d3,f#4] [d3,a4] [d3,g4] [d3,f#4], d5 ~",
  AK: "[[d3,f#4]@2 ~ e4 [d3,d4]@2 [d3,f#4]@2 [d3,f#4]@2 [d3,a4]@2 [d3,g4]@2 [d3,f#4]@2, ~ d3 ~ d5@2 ~@3]/2", // D D5 G5 D
  AL: "[d3,f#4]@2 ~ e4 [d3,d4]@2 [d4,f#4]@2, ~ d3 ~@2", // D
  AM: "[d4,f#4]@2 [d4,f#4]@2 [d4,f#4]@2 [d4,f#4] [e4,g4], [f#2,d3]!2", // D Em D
  AN: "[f#2,d3]@4 ~@2 [e4,g4] [d4,f#4], [f#4,a4]@11 ~@5, ~ [f#2,d3]", // D Em D F#m D
  AO: "[c#4,e4]@2 [c#4,e4]@2 [c#4,e4]@2 [c#4,e4] [d4,f#4], [e2,a2]!2", // C#m D A5
  AP: "a2@2 a2@2 a2@2 [d4,f#4] [c#4,e4], [e4,g4]@11 ~ [a2,a3]@4", // D C#m Em A
})).s("gm_piano").gain(0.3)

// chords · church organ · "Organ"
const church_organ = note(`<
  A B C D E F G B H I C D J K L@2 M@2 N@2 O@2 P Q R S T U V W X Y Z AA AB@2 AC@2 AD@2 AE AF AG AH AI AJ X AK AL AM AN AO
  Z AA AP@2 N@2 AQ@2 AR AS AT Q AU AV AW AX V W X Y Z AA AY@2 AZ BA AZ BB BC BD BE BF E BG BH BI
>`.pickRestart({
  A: "[a2,d5]@4 [d3,d5]@3 d3", B: "[d3,d5]", C: "[a3,a4]@2 a4 g4, ~ a2", D: "[d3,f#4]", E: "[d3,d5]@3 [e3,e5]",
  F: "[f#3,f#5]@3 [g3,g5]", G: "[a3,a5] [a2,a4]", H: "[a2,d5]@4 [d3,d4]@3 d3", I: "[d3,d4]", J: "g4@3 g4, g3",
  K: "e4@3 a4, a3", L: "[[a2,d3,a3,f#4,d5]@7 ~]/2", M: "d2/2", N: "[d2,d3]/2", O: "[~@3 [d3,a3]@3 [a2,d3,a3]@2]/2",
  P: "[a1,a2]@3 [a1,a2]", Q: "[a1,a2]!2", R: "[d3,d4]@3 [e3,e4]", S: "[f#3,f#4]@3 [g3,g4]", T: "[a3,a4] [a2,a3]",
  U: "[d3,a4]", V: "[d3,a3,f#4,d5]@4 [d3,d4,a4,c#5]@3 [d3,d4,g4,b4]", W: "[d3,d4,f#4,a4]@3 [g2,b3,e4,g4]",
  X: "[a2,a3,d4,f#4]@2 [a2,a3] g3, ~ [c#4,e4]", Y: "[d3,f#3,d4]@3 [f#3,d4,a4]", Z: "[g3,d4,g4,b4]@3 [g3,d4,g4,b4]",
  AA: "[a3,e4,c#5]@3 [a3,g4,c#5]", AB: "[[d3,a3,f#4,d5]@7 [f#4,d5]]/2",
  AC: "[[f#4,d5]@2 [a4,c#5]@2 [g4,b4]@2 [f#4,a4]@2 [f#4,a4]@3 [e4,g4] [d4,f#4]@2 [f#4,d5]@2, d3]/2", // D A G F#m Em D
  AD: "[[f#4,d5]@2 [a4,c#5]@2 [g4,b4]@2 [f#4,a4]@2 [f#4,a4]@3 [e4,g4] [d4,f#4]@2 [d4,f#4]@2, d3]/2", // D A G F#m Em D
  AE: "[d4,f#4]@2 [d4,f#4]@2 [d4,f#4]@2 [d4,f#4] [e4,g4], ~@3 [d3,a3]", // D Em D5
  AF: "[d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [e4,g4] [d4,f#4], [f#4,a4]@3 [d3,a3]", // D5 Em D F#m D5
  AG: "[c#4,e4]@2 [c#4,e4]@2 [c#4,e4]@2 [c#4,e4] [d4,f#4], a3@3 a2", // C#m D
  AH: "a2@2 a2@2 a2@2 [d4,f#4] [c#4,e4], [e4,g4]@3 a2", AI: "[d3,f#3,d4] [a3,f#4,d5]@2 [d3,d4,g4,b4]",
  AJ: "[d4,f#4,a4]@3 [e4,g4] [d4,f#4]@2 [g2,b3,e4,g4]@2, d3@3 ~", AK: "[d3,f#3,d4]", AL: "f#4 a4, [d2,d3]",
  AM: "[d2,d3,f#4] [a2,d4]", AN: "[d2,d4] [e2,e4]", AO: "f#4@3 [f#3,d4,a4]", AP: "[[d3,a3,f#4,d5]@7 ~]/2",
  AQ: "[d2,d3,d4]/2", AR: "~@3 [d3,a3,a4]", AS: "[d3,a3,a4]!2", AT: "[a1,a2]@3 [a1,a2], a3",
  AU: "[f#2,d3,a4] [a2,e3,g4]", AV: "[d3,f#3,f#4] [g3,e4]", AW: "[a3,a4] [a2,e5]", AX: "[d3,f#5]",
  AY: "[[d3,a3,f#4,d5]@7 d5]/2", AZ: "d5 c#5 b4 a4, [d2,d3,d4] [d2,d3]", BA: "[d2,d3,a4]@3 g4 f#4@2 d5@2, ~ [d2,d3]",
  BB: "[d2,d3,a4]@3 g4 f#4@2 [d4,f#4]@2, ~ [d2,d3]", BC: "f#4 d4!3, [d2,d3] [d2,a2]",
  BD: "[d2,a2]@2 ~ g4, [d4,f#4]@3 ~, ~ [d2,a2]", BE: "e4 a3!3, [a2,c#3]!2", BF: "a3!3 ~, [c#3,e3]",
  BG: "f#3 e3 f#3 [g3,g5], f#5@3 ~", BH: "a3 g#3 a3 a2, a5!2", BI: "[a2,d3,a5]",
})).s("gm_church_organ").gain(0.3)

stack(piano, church_organ)