Strudelify
KeyC majorTempo80 bpm
0:00/0:00
// Theme of Love — Nobuo Uematsu/Hiroyuki Nakayama
// 80 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/3357511; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 63 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 · violin
const violin = note(`<
  ~@16 A B C D E F G H ~ I J K L M N O ~@5 P Q R S T U V W X Y Z ~@4 AA AB AC AD@2 ~@3 AE AF@2
>`.pickRestart({
  A: "~@3 c4 d4 e4", B: "c5@3 e4 f4@2 c5@2", C: "b4@5 a4 g4 a4", D: "b4@3 d4 e4@2 b4@2", E: "a4@5 d4 c4 d4",
  F: "e4@5 d5 c5 d5", G: "f#5@3 f#5 b4@2 a4@2", H: "b4", I: "~@5 a3 b3 c4", J: "d4@5 b3 c4 d4", K: "e4@5 b3 c4 d4",
  L: "e4@5 e4 f4 g4", M: "a4 g4 f4 e4", N: "f#4@5 d#4!3", O: "b3", P: "~@6 d4 e4", Q: "f4@2 d5 e5 f5 e5 d5 c5",
  R: "b4 e4 g5@6", S: "e5@3 b4 a4 e4", T: "f4 e5 e5@6", U: "~@2 d5 e5 d5 c5 b4 a4", V: "g4 e4 d5@6",
  W: "~@2 c5 d5 c5 b4 a4 d4", X: "e4 c5 c5@6", Y: "~@2 b4 c5 d5 c5 b4 g4", Z: "[d5,e5]", AA: "~@4 e4 d4 c4 d4",
  AB: "a4@5 b4 a4 b4", AC: "a4@2 a4 b4", AD: "c5/2", AE: "~@3 a#4", AF: "e5/2",
})).s("gm_violin").gain(0.39)

// other · violin · soft notes
const violin_soft = note("<~@8 A B C D E F G H I ~@46>".pickRestart({
  A: "~@3 b3 d4 c#4", B: "c4 e4", C: "g4@4 g4 d4 e4 f4", D: "g4 e4 g4@6", E: "e4@4 e4 d4 c4 b3", F: "a3 c4", G: "d4 ~",
  H: "~@2 a3 b3 d4@2 e4 d4", I: "c4 ~",
})).s("gm_violin").gain(0.19)

// other · cello · "Violoncello"
const cello = note(`<
  A B@2 C@2 D@2 E F B@2 G@2 H@2 I@2 J K L M N O P Q R S@2 T U V P ~@5 W X E Y ~@4 Z AA AB ~@4 AC N AD AE AF AG AH AI AJ
  AK@2
>`.pickRestart({
  A: "~ b3 a3 e3", B: "[f3 e4 e4@8 d4 e4 d4 c4 b3 a3]/2", C: "[g3 e3 d4@8 c4 d4 c4 b3 a3 d3]/2",
  D: "[e3 c4 c4@8 b3 c4 d4 c4 b3 a3]/2", E: "g3 e3 b3@6", F: "a3@3 b3 a3 e3", G: "[g3 e3 d4@8 c4 d4 c4 b3 a3 e3]/2",
  H: "[f3 c4 c4@8 b3 c4 d4 c4 b3 g3]/2", I: "[a3@9 a3 b3 c4]/2", J: "e4@3 g3 a3@2 e4@2", K: "d4@5 c4 b3 c4",
  L: "d4@3 f#3 g3@2 d4@2", M: "c4@5 b3 a3 b3", N: "e4@5 b3 a3 b3", O: "c4@3 c4 b3@2 a3@2", P: "b3", Q: "~@5 e3 f3 g3",
  R: "a3@5 a3 g3 a3", S: "b3@5 b3 c4 d4", T: "e4@5 c3 d3 e3", U: "f3 e3 d3 c3", V: "c4@5 c4 b3 a3", W: "~@6 d4 e4",
  X: "f4@2 b3 c4 d4 c4 b3 a3", Y: "a3 ~", Z: "d2 f3 a3 c4 d#2 f#3 a3 c4", AA: "e2 g3 b3 e4 g4 e4 b3 g3", AB: "a3",
  AC: "~@4 e3 d3 c3 d3", AD: "c4 f4", AE: "~ g3 c4@6", AF: "g#3 a#3", AG: "c3 a#2", AH: "g#2 f2", AI: "~ c2 g2 d3",
  AJ: "e3 g3 b3 d#4", AK: "c4/2",
})).s("gm_cello").gain(0.27)

// chords · piano
const piano = note(`<
  ~ A 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 AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU
  AV AW AX AY AZ BA BB BC@2 BD BE BF@2 BG@2
>`.pickRestart({
  A: "~@13 a6@11, a3, ~ [c4,d4]@23, ~ a5", B: "~@13 b6@11, a3, ~ [b3,d4]@23, ~ g4@11, ~ b5",
  C: "~@13 d7@11, g3, ~ [b3,d4]@23, ~ e4@11, ~ d6", D: "~@13 c7@11, g3, ~ [a3,c4]@23, ~ e4@11, ~ c6",
  E: "~@13 a6@11, f3, ~ [a3,c4]@23, ~ a5", F: "~@13 b6@11, f3, ~ [g3,b3]@23, ~ d4@11, ~ b5",
  G: "~@13 d7@11, e3, ~ [g3,b3]@23, ~ d4@11, ~ d6", // G
  H: "~@7 c#7@5 ~ g3@11, e3 a2, ~ [g3,a3]@11 ~@12, ~ c#4@5 ~@6, ~ c#6 ~@2", I: "d2 a2 e3 f3 a3@2 b3 c4",
  J: "g2@3 d3@3 b3@11 ~ g2@6", K: "e2 b2 g3 a3 b3@2 d4@2", L: "a2 e3 a3 b3 c4 ~@3", M: "d2 a2 c3 f3 d#2 a2 c3 f#3",
  N: "e2 b2 g3 a3 b3 e4 d4 b3", O: "a2 e3 a3 b3 d4@2 e4 d4", P: "a2@3 e3@3 a3@6 [g2,g3]@11 ~, c4@11 ~@13",
  Q: "[f2,f3] [f3,a3,c4,e4]!7", R: "[f2,f3] [g3,b3,d4]!7", S: "[e2,e3] [g3,b3]!7",
  T: "[a2,a3] [g3,a3,c4,e4]!3 [g2,g3] [g3,a3]!3", U: "[f2,f3] [f3,b3] [f3,a3] [f3,b3] ~ b4 a4 b4, ~@12 [f3,a3,c4]@11 ~",
  V: "[d#2,d#3] [d#3,f#3,a3]!2 [d#3,f#3,a3,c5] [d#3,f#3,b3,b4]@2 [d#3,f#3,c4,a4]@2, c5@3 ~@5", // D# D#dim B D#dim
  W: "[e2,e3] [e3,a3,b3,e4]!3 [e3,g#3,b3,e4]!4, [e5,a5]@11 ~ [e5,g#5]@11 ~", // E Esus4 E A5 E
  X: "[g1,g2] [d3,f3,g3,b3]!3 [d3,f3,g3,b3]@2 ~@2, [b4,f5,g5,b5]@7 ~@5", Y: "~@3 c3@3 f3@3 g3@3 f3@11 ~, f2@23 ~",
  Z: "~@3 d3@3 g3@3 a3@3 g3@11 ~, f2@23 ~", AA: "~@3 b2@3 g3@3 a3@3 g3@11 ~, f2@23 ~",
  AB: "~ b2 g3 a3 ~@2 [a1,a2]@2, f2@17 ~@7, ~@12 g3@11 ~", AC: "~ [f3,a3]!3 [a2,f3,a3]!2 [b2,f3,a3]!2, [d2,d3]@23 ~",
  AD: "[c3,d#3] [c3,f#3,a3]!4 [c3,f#3]!3, d#2@23 ~", AE: "[e4,a4] [e3,a3,b3,e4,a4]!3 [e3,g#3,b3,e4,g#4]!4, e2@23 ~",
  AF: "[b1,b2]@3 [d3,f3,g3,b3]@3 g3 a3 b3 c4 d4 e4 f4 g4 [a4,b4] c5 d5 [e5,f5] g5 a5 [b5,c6] d6 e6 [f6,g6], [g4,f5,g5,b5]@6 [d3,f3]@17 ~", // B G7 Asus2 Fmaj7 Cmaj7 Fsus2 G7 Dm
  AG: "d2 a2 d3 [f3,e4] [a3,a4] [d4,e5] [f4,e5] [a4,a5] [d5,e6] [f5,e6] a6 e7, ~@5 a5", // Fmaj7 A Dsus2 Fmaj7 A Dsus2 Fmaj7
  AH: "g2 d3 ~@4 d5 g5 d6!2 g6 d7, d7 ~@3, ~@4 b3@19 ~",
  AI: "c2 ~ g4 [d4,b4] [g4,e5] [b4,g5] [d5,b5] [g5,e6] b6 g6 e6 b5, ~ e4 ~@6 b5@3 ~, ~ g2 ~@6", // G C Em G C
  AJ: "[a2,c6] ~ e5 a5 e5 c5 a4 e4 a4 c5 e5 a5, ~ a5 ~@10, ~@3 e3@20 ~", // Am
  AK: "e6 a5 f5 d6 a5 f5 c6 f5 d5 a5 d5 a4, d2@23 ~", AL: "g2 d3 g3 b3 d4 g4 b4 g4 e4 b3 g3 d3, d4 ~@3",
  AM: "c2 g2 c3 e3 g3 b3 e4 b3 g3 e3 b2 g2",
  AN: "a1@2 e2@2 a2@2 a3 b3 [c#4,d4] e4 f4 [g4,a4] [a2,e3,a3]@4 [a2,e3,b3]@4 [a2,e3,c#4]@4, ~@3 b2 c#3 e3 ~@6", // Dmaj7 Gsus2 A5 Asus2 A
  AO: "[d1,d2]@6 d5 c5 b4 a4 g4 f4 g4 f4 [d4,e4] c4 b3 [g3,a3] f3 e3 [c3,d3] b2 a2 [f2,g2]", // D Dsus2 Gsus2 Csus2 Fsus2
  AP: "[g1,g2]@2 [d4,g4,b4] [e4,a4,c5] [d4,g4,b4] [c4,f4,a4] [b3,e4,g4] [a3,d4,f4]", // G Am G F Em Dm
  AQ: "[c1,c2]@6 ~ c5 b4 a4 g4 f4 g4 f4 [d4,e4] c4 b3 [g3,a3] f3 e3 [c3,d3] b2 a2 [f2,g2]", // C Dsus2 Gsus2 Csus2 Fsus2
  AR: "[c1,c2]@2 [c4,e4,a4] [d4,e4,b4] [c4,e4,a4] [b3,d4,g4] [a3,c4,f4] [f3,a3]", // C Am E7 Am G F
  AS: "[d1,d2] [a2,d3,f3] [d3,f3,a3] [f3,a3,c4] [d#1,d#2] [a2,d3,f#3] [d3,f#3,a3] [d3,f#3,c4], ~@6 [f5,a5]@6 [f#5,a5]@11 ~", // D Dm F D# D D7 F F#m
  AT: "[e1,e2] [b2,e3,g3] [e3,g3,b3] [g3,b3,d4,e4] [b3,d4,e4,g4] [g3,b3,d4,e4] [e3,g3,b3] [b2,e3,g3], [g5,b5] ~@3", // E Em Em7 Em G
  AU: "[a0,a1] [e1,e2] [a1,a2] [b1,b2] [d2,d3] [e2,e3] [a2,a3] [d3,d4]", // A E A B D E A D
  AV: "[a2,e3,c4,a4,c5,e5,a5]@11 ~ a3@4 b3@4 c4@4, ~@12 g2@11 ~", // Am
  AW: "~ c3 ~ g3 a3@2 e4@2, f2@23 ~, e4@3 ~@5, ~@6 f3@17 ~", AX: "~ d3 ~@3 c4 b3 c4, f2@23 ~, d4@7 ~@5, ~@6 g3@17 ~",
  AY: "~ b2 ~ f#3 g3@2 d4@2, f2@23 ~, d4@3 ~@5, ~@6 e3@17 ~", AZ: "~@3 d3@3 b3@3 a3@3 [g2,e3]@11 ~, [a2,c4]@11 ~@13",
  BA: "~@3 c3@3 f3@3 g3@3 a3@11 ~, f2@23 ~", BB: "~ d3 g3 a3 c4@2 d4@2, [g2,c4,f4,a4,c5]@11 ~ [g3,f4]@11 ~",
  BC: "[[c4,f4,g4]@2 [f4,g4]@2 [e4,g4]@2 ~@2 [c4,d#4,g4]@2 [c4,d#4,g4]@2 [c4,d4,f4]@2 ~ g2, c3@20 ~ c3@23 ~@4, ~@3 [e4,g4] ~@3 [c4,d4,f4]]/2", // Csus4 Fsus2 Em Cm Dm7 Em Dm7
  BD: "[g3,c4,d4,e4]!2 [g3,c4,e4]!2, [c2,c3]@12 [a#1,a#2]@11 ~", // C A#
  BE: "[g3,g#3,c4,d#4]!2 [f3,g#3,c4,d4,f4]!2, [g#1,g#2]@12 [d1,f2]@11 ~", // G#maj7 Dm7b5 G# Dm
  BF: "[~ [c1,c2] [g1,g2] [d2,d3] [e2,e3,g3] g2 [b2,b3] [d#3,d#4,g4,a#4,d#5], e4@5 ~, [g3,c4,d4]@23 ~ b3@12 ~@12, ~@30 g3@11 ~@7]/2", // C G D Em B D# Gsus4
  BG: "[c3@3 g3@3 c4@3 e4@3 ~@6 e5@3 ~@3 [c5,c6,g6]@23 ~, c5@15 c5@8 ~@25, g4@6 g4@17 ~, ~@21 g5@26 ~]/2", // C5
})).s("gm_piano").gain(0.3)

stack(violin, violin_soft, cello, piano)