Strudelify
KeyF majorTempo80 bpm
0:00/0:00
// Romance — Hajime Mizoguchi
// 80 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 13, 4/4 at bar 15, 2/4 at bar 83, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 1 "Piano" named as a piano, played on piano (its clarinet patch is not one); ch 2 "Violin" named as a string part, played on violin (its french horn patch is not one); ch 12 "Double Bass" named as a bass, played on acoustic bass (its contrabass patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/1870776; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 107 bars on a 16-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.

// chords · piano
const piano = note(`<
  ~@6 A@5 B C D E F G H I J K L M N O P Q F R S T U V W X Y Z AA AB AC AD ~@8 AE AF AG AH AI AJ AK AL AM AN AO AP AM AN
  AQ AR G H I J AS L AT AU ~@9 AV@7 ~ AW@5 AX@5 AY AZ@6
>`.pickRestart({
  A: "[~@2 c5@2 c5@2 bb4@4 a4 f4 c5@6 c5@2 c5@2 bb4@4 a4 f4 e5@2 e5@4 f5@2 g5@3 f5]/5", B: "g5@3 f5 f5@3 c5", C: "a4 ~",
  D: "~@2 g4 a4!2 bb4!2 d5", E: "g4@3 f4", F: "c4",
  G: "~ [g3,bb4] ~@2 a3@3 [f3,a3,a4], [f3,a4]@3 [f3,a4]@4 ~, [c4,f4] [g3,bb4]@3, ~ [c4,f4] [c4,f4,c5]@2", // Gm F F5 Gm F5
  H: "[c4,f4] [bb3,d4], [bb2,d3]@15 ~", I: "~@3 d4 ~@2 a4@2, [g2,bb2], bb3 [c3,e3,bb3,d4,bb4], d4@3 ~@5, ~ f4@7",
  J: "[f2,a2,c3,c4]@15 ~", // F
  K: "~ [g3,bb4] ~@2 a3@3 [f3,a3,f5], [f3,a4]@3 a4@5, [c4,f4] [g3,bb4]@3, ~ [c4,f4] [c4,f4,c5]@2, ~@3 f3@4 ~", // Gm F F5 Gm F5
  L: "~ [bb3,d5], [bb2,c5,f5], ~ f3@7, ~ d4@3", // Bb Bbsus2
  M: "~@7 a4, [g2,bb2], [bb3,g4] [c3,bb3,d4,g4], ~@3 a4@9 e4@4, ~@5 bb4@11", N: "[f2,c4,a4]@15 ~",
  O: "a4 bb4!2 a4 c5@3 a4", P: "f4 d4", Q: "d4 f4@2 d4 bb4@2 a4@2", R: "a4 bb4!2 a4 c5@3 f5", S: "f5 d5",
  T: "g4@3 a4@2 bb4@3 g4@6 a4@2", U: "~@7 e4, a4", V: "~@15 a4, ~ d4@7, ~@3 e4@5, ~ f4, ~@7 g4",
  W: "~@3 f4@5, bb4, ~ a4@7", X: "~@13 a4@2 bb4, [bb3,e4]@3 [bb3,e4]@5, ~ d4@7, ~@5 f4@3, ~@3 g4",
  Y: "~@3 e4, bb4, ~ a4@3", Z: "~@15 a4, [c4,e4]@3 [c4,e4]@5, ~ bb3@7, ~ d4@3 [d4,f4]@4, ~@7 g4",
  AA: "~ f4@2 [c4,f4]@5, [g4,bb4], ~ a4@7", AB: "~ f4@2 [d4,f4]@5, [g4,bb4], ~ a4@7", AC: "f4@3 g4 g4@4",
  AD: "[eb4,g4] a4 [g4,bb4] c5", AE: "~@7 eb3, bb4, ~ eb3@2 eb3@2 eb3@2 ~, ~ bb3!2 [bb3,c5]",
  AF: "gb5 d5 ~ gb5 ~ a5 ~ [d3,d6], a4, ~ d3@2 d3 a3 d3 [a3,a5]@2, ~ d5@3, ~ a3 gb5@2", // D A
  AG: "~@7 d3, a4, ~ d3@2 d3@2 d3@2 ~, ~ a3!2 [a3,bb4]", // Bbmaj7
  AH: "e5 c5 ~ e5 ~ g5 ~ [c3,c6], g4, ~ c3@2 c3 g3 c3 [g3,d5,g5]@2, ~ c5@3, ~ g3 e5@2", // C G5
  AI: "~@7 d3, f5@3 ~, ~ d3@2 d3@2 d3@2 ~, ~ bb3!2 [bb3,f5]", // Bb5
  AJ: "~@7 eb3, f5, ~ eb3@2 eb3@2 eb3@2 ~, ~ bb3 eb5@2, ~@2 bb3!2", AK: "d5@11 ~ d5@4, bb3@15 ~", AL: "d5 c5, ab3@15 ~",
  AM: "~@3 [f3,a4] ~ [g3,bb4] ~ [a3,c5], [g3,bb4]@5 ~ [g3,eb4,bb4]@2, eb4 [f3,a4], ~@2 eb4 ~", // F Gm Am Gm Eb F
  AN: "~ [f3,a4] ~ [g3,bb4] [g3,eb4,bb4]@4, [a3,c5], eb4 [f3,a4]@3, ~ eb4 ~@2", // F Gm Eb Am F
  AO: "~@3 [e3,g4] ~ [f3,a4] ~ [d3,f4], [f3,a4]@5 ~ [f3,d4,a4]@2, d4 [e3,g4], ~@2 d4 ~", // Em F Dm F Dm Em
  AP: "~ [e3,g4] ~ [f3,a4] [f3,d4,a4]@4, [d3,f4], d4 [e3,g4]@3, ~ d4 ~@2", AQ: "~@7 c5, f4@3 f4, a4!2, ~@3 g4@2 g4@3",
  AR: "g4 ~ e5 [e5,g5], c5!2, ~ [g4,d5]@3", // Em G5
  AS: "~ [g3,bb4] ~@5 [f3,a3,f5], [f3,a4]@3 a4@3 e5@2, [c4,f4] [g3,bb4]@3, ~ [c4,f4] [c4,f4,c5]@2, ~@3 f3 a3 d5@3", // Gm F F5 Gm F5
  AT: "~@7 f4, [g2,bb2], [bb3,g4] [c3,bb3,d4,g4], ~@3 a4@13, ~@5 bb4@11", AU: "[f2,c4,f4]@15 ~",
  AV: "[a3 g3 f3 e3 ~@7 bb3 ~@7 a3 ~@7 g3 ~@7 f3 ~@7 bb3 ~@7 a3 ~@4, ~@5 bb3@2 bb3@2 bb3@2 ~@2 a3@2 a3@2 a3@2 ~@2 g3@2 g3@2 g3@2 ~@2 f3@2 f3@2 f3@2 ~@3 f4@2 f4@2 f4@2 ~@2 e4@2 e4@2 e4@2 ~@4, ~@6 f4@2 f4@2 f4@2 ~@2 e4@2 e4@2 e4@2 ~@2 d4@2 d4@2 d4@2 ~@2 c4@2 c4@2 c4@2 ~ bb3@2 bb3@2 bb3@2 ~@2 a3@2 a3@2 a3@2 ~@5]/7",
  AW: "[~@4 [eb5,g5] ~@5 eb5 [g3,eb5] [d5,gb5] ~@6 [gb3,d5] [d5,f5] ~@6 [f3,d5] [c5,e5] ~@6 [e3,c5] ~@3 d3, ~@4 c5@4 bb3 bb5@3 ~ d5@4 gb3 [a3,gb5]@2 ~ f3 a3 [f3,a5] d6@4 ~@2 e5@2 g3 g5@3 f5@4, ~@5 eb5@4 g3@2 ~@2 gb3 a3 [gb3,a5] d6@4 ~@2 f5@2 a3 a5@3 ~ c5@4 e3 [g3,d5,e5]@2 ~ d3@2 ~, ~@5 g3 bb3 [g3,bb5] eb6@4 ~@2 gb5@2 a3 a5@3 ~ d5@4 f3 [a3,bb4,eb5,f5]@2 ~ e3 g3 [e3,g5] c6@4 ~@4, ~@3 g5@2 [bb3,c5,g5] a4@4 a4@4 g4@4 ~ bb3]/5", // Eb Cm D Dm C D F Gbm …
  AX: "[~@6 d3@2 ~@14 eb3@2 d5@11 ~ d5@4 d5@8 c5@8 bb4@11 ~ bb4@4 bb4@8, bb3 [bb3,f5] f5@4 ~@14, ~ d3@2 ~@2 eb3@2 eb3@2 eb3@2 ~@29, ~@3 bb3 eb5@2 ~@14, ~@16 bb3@4 bb3@4 g3@15 ~ ab3@15 ~@25]/5", // Bb5
  AY: "ab4 g4",
  AZ: "[bb4@8 bb4@15 ~ [eb3,eb4,eb5]@4 ~@10 eb5@2 g5@2 bb5@2 [bb5,eb6]@12 [g3,bb3,eb4]@15 ~ [eb3,g3,bb3,eb4,bb4]@24, ~@7 eb3@3 ~@14, ~@4 [g3,eb4] ~@7, ~@17 [bb3,g4]@3 ~ g5@7 ~@20, ~@9 bb4 eb5@4 ~@10]/6", // Eb Eb5 Eb Cm Eb
})).s("gm_piano").gain(0.25)

// other · viola
const viola = note(`<
  ~@8 A B@2 C D E F G ~@16 H I J K L M N O P Q R S T U V I W X Y H Z AA AB AC AD ~@6 M AE ~@5 AF ~ G AG AH AI AJ AK AL
  AM AN AO AP@5 AQ AR AS@6 AT AU AV AW@3 AX ~@5
>`.pickRestart({
  A: "~ a3", B: "[c4@2 d4@2 c4@2 d4@4 c4@2 ~ d4 g4 f4]/2", C: "~ d4 g4 f4 ~ c4 f4 c4", D: "[f3,a3] ~", E: "~ d4@2 f4",
  F: "e4", G: "[a3,c4]", H: "[bb3,d4]", I: "g3", J: "e4@8 g3@2 a3@2 bb3 c4 ~ d4", K: "d4 c4@3", L: "[bb3,e4] [bb3,d4]",
  M: "[d4,f4]", N: "[c4,f4]", O: "eb4", P: "c4", Q: "f4@3 g4", R: "c4@2 g3 e4@5", S: "d4@4 g3@2 a3 bb3",
  T: "c4@2 e3@2 f3@2 g3@2 a3 bb3 c4 d4 e4 [f4,g4] [a4,bb4] [c5,d5]", U: "bb3, e5 ~@15", V: "a3", W: "f3", X: "[c4,eb4]",
  Y: "[a3,d4]", Z: "[g3,c4]", AA: "d5@3 bb4!2 d5 d5@2", AB: "d5@3 bb4!2 ab4 ab4@2", AC: "bb3 c4 bb3 c4 bb3@4",
  AD: "[bb3,f4] [ab3,eb4]", AE: "[c4,e4]", AF: "[f3,bb3]", AG: "~@2 d4 e4 f4@2 e4@2", AH: "f4 bb3 a3 g3",
  AI: "a3 e4 d4 a3!2 e4 d4 a3", AJ: "d4 f4 e4 d4!2 f4 e4 d4", AK: "c4@2 bb3 g3", AL: "f3@2 d4 f3 d3 f3 b3 db4",
  AM: "db4 d4 ~@2", AN: "~@4 g4 f4 g4 e4", AO: "e4@2 db4@2 b3 db4 d4 e4",
  AP: "[e4@4 f5@8 e5@8 d5@8 c5@8 bb4@2 d4 f4]/5", AQ: "bb4@2 d5@2 c5 e4 g4 a4", AR: "e4 c4 bb3 a3 d4@2 g3@2",
  AS: "[a3@2 bb3@2 c4@6 bb3 a3 [bb3,eb4]@8 [a3,d4]@8 [a3,d4]@8 [g3,c4]@8 ~@2 d4 f4]/6", AT: "bb4 d5 d5@2 ~@2 bb4 ab4",
  AU: "bb4 ab4 bb4 ab4 ~@2 bb4 g4", AV: "bb4 g4 bb4 g4 ~@2 ab4 bb4", AW: "[ab4 bb4 ab4 bb4 g4@6 eb4@2 eb4@8 bb3@4]/3",
  AX: "eb4!2",
})).s("gm_viola").gain(0.25)

// other · viola · soft notes
const viola_soft = note("<~@2 A@2 ~ B C@3 ~@60 D ~@32 E@3 F@2>".pickRestart({
  A: "[[d4,f4]@5 [e4,g4]@5 ~@6]/2", B: "~ [bb3,d4]", C: "[[a3,c4] [f3,bb3]@2 [e3,a3]@2 ~]/3", D: "[f3,c4]",
  E: "[d4 eb4@4 ~]/3", F: "[~ [eb4,g4]@3]/2",
})).s("gm_viola").gain(0.15)

// other · cello · "Violoncello"
const cello = note(`<
  ~@8 A B@2 C D E F G ~@16 H@2 I J K H I L G M N O P Q R S T U V K W I X I Y ~@4 Z AA AB J ~@5 H AC AD AE AF AG AH AI AJ
  AK AL AM AN@8 AO@8 AP AQ@4 ~@4
>`.pickRestart({
  A: "~ [g2,bb2]", B: "[f3@2 g3@2 f3@2 g3@4 f3@2 g3@3 f3]/2", C: "g3@3 f3 f3@4", D: "[d3,f3] ~", E: "~ d3@2 f3",
  F: "e3", G: "[a2,c3]", H: "[bb2,d3]", I: "bb2", J: "c3", K: "[d3,f3]", L: "g2", M: "f3 bb3 g4 f4 e4 d4 c4 bb3",
  N: "a3@5 f3 e3 d3", O: "bb2 g3 d4 c4 bb3 a3 g3@2", P: "a3@3 e4 d4@2 c4@2", Q: "a3@2 f3@2 g4@2 f4@4 e4@2 d4 c4 ~ bb3",
  R: "a3@2 c3@2 f4@2 e4@4 d4@2 c4 bb3 ~ a3", S: "g3@2 bb2@2 e4@2 d4@4 c4@2 bb3 a3 ~ g3", T: "f3 a2 g3 a3 bb3 c4 a3 f3",
  U: "[eb3,g3]", V: "[d3,gb3]", W: "[c3,e3]", X: "eb3", Y: "[bb2,d3] [ab2,c3]", Z: "g3@3 f3!2 g3!2 a3",
  AA: "a3 f3!2 g3 g3@4", AB: "a2 bb2", AC: "g3@3 a3@2 bb3@3 g3@6 f3@2", AD: "f3", AE: "~@2 bb3@2 a3 g3 a3@2",
  AF: "g3 a3 bb3 d4 db4@2 a3@2", AG: "a3!2", AH: "d4!2", AI: "f3 e3", AJ: "d3 db3", AK: "d3@2 d4 f4",
  AL: "e4@2 db4@2 e4 d4 e4 db4", AM: "db4 e4", AN: "[a3 d3@2 c3@2 bb2@2 a2@2 d3@2 c3@2 bb2@2 a2]/8",
  AO: "[~ [eb3,g3]@2 [d3,gb3]@2 [d3,f3]@2 [c3,e3]@2 [d3,f3]@2 [eb3,gb3]@2 [d3,g3]@2 [f3,ab3]]/8", AP: "~@6 d3 eb3",
  AQ: "[f3 g3 eb3@2 eb3@8 bb3@8 bb3@8 ~@4]/4",
})).s("gm_cello").gain(0.25)

// other · cello · "Violoncello" · soft notes
const cello_soft = note("<~@2 A@2 ~ B C@3 ~@60 D ~@32 E@3 F@2>".pickRestart({
  A: "[[f3,bb3]@5 [g3,c4]@5 ~@6]/2", B: "~ [d3,f3]", C: "[[c3,f3] [bb2,d3]@2 [a2,c3]@2 ~]/3", D: "[a2,c3]",
  E: "[~ g3@4 ~]/3", F: "[~ [bb2,eb3]@3]/2",
})).s("gm_cello").gain(0.15)

// bass · acoustic bass · "Double Bass"
const bass = note(`<
  ~@8 A@3 B C D E F ~@16 G H I J G H J K J L M N O L M N O P Q R S J T H U ~@13 V ~ W ~ X Y Z AA AB AC AD AE AF AG AH AI
  AJ AG AH AI AK AL AM AN AM AL AO@8 ~ AP@2
>`.pickRestart({
  A: "[~@2 g1@4 a1 d2@2 c2 b1@2]/3", B: "bb1 a1", C: "d2 ~", D: "~ f2 e2 d2", E: "c2", F: "[f1,a1]", G: "bb2", H: "g2",
  I: "c3", J: "f2", K: "eb2", L: "d2 ~@3", M: "c2 ~@3", N: "bb1 ~@3", O: "a1 ~@3", P: "g2 ~@3", Q: "gb2 ~@3",
  R: "f2 ~@3", S: "e2 ~@3", T: "gb2", U: "ab2", V: "bb1", W: "f1", X: "g2 a2 bb2 d3 db3@2 e3@2", Y: "d3 c3",
  Z: "b2 bb2", AA: "a2 g2", AB: "f2 e2", AC: "d2@4 g2 d3 g3@2", AD: "f3 f2 e2@2", AE: "e3 a2", AF: "a2@2 d2 ~",
  AG: "~@2 c2 ~", AH: "~@2 bb1 ~", AI: "~@2 a1 ~", AJ: "~@2 d2 ~", AK: "~@2 g2 ~", AL: "~@2 gb2 ~", AM: "~@2 f2 ~",
  AN: "~@2 e2 ~", AO: "[~ g2@2 ab2@2 bb2@2 b2@2 bb2@2 bb2@2 eb2@3]/8", AP: "[~ eb2@3]/2",
})).s("gm_acoustic_bass").gain(0.25)

// bass · acoustic bass · "Double Bass" · soft notes
const bass_soft = note("<~@2 A@2 ~ B C@3 ~@60 D ~@37>".pickRestart({
  A: "[d2@5 e2@5 ~@6]/2", B: "~ d2", C: "[c2 bb1@2 a1@2 ~]/3", D: "f1",
})).s("gm_acoustic_bass").gain(0.15)

// other · orchestral harp · "Harp"
const orchestral_harp = note("<~@31 A B C D E C@3 E@2 F G H I F G H I ~@41 J K L M N O P Q R ~@8>".pickRestart({
  A: "~@12 bb3 [c4,d4] [f4,g4] [a4,bb4]", B: "[c5,d5] ~ d5@2 d6@2 d5@2 ~@2 d5@2 d6@2 d5@2", C: "~ d5 d6 d5 ~ d5 d6 d5",
  D: "~ d5 d6 d5 ~ d5 d6 c5", E: "~ c5 c6 c5 ~ c5 c6 c5", F: "f5 ~@3", G: "e5 ~@3", H: "d5 ~@3", I: "c5 ~@3",
  J: "~@4 g5 eb5 g5 bb5", K: "eb6 bb5 g5 eb5 gb5 d5 gb5 a5", L: "d6 a5 gb5 d5 f5 d5 f5 a5",
  M: "d6 a5 f5 d5 e5 c5 e5 g5", N: "c6 g5 e5 c5 f5 ~@3", O: "~@4 f5 ~@3", P: "eb5 ~@3 d5 ~@3", Q: "~@4 d5 ~@3",
  R: "c5 ~@7",
})).s("gm_orchestral_harp").gain(0.25)

// other · flute
const flute = note(`<
  ~@12 A B C D ~@8 E F G H I J K L ~@6 M N O P Q R S P Q R S ~ T ~ U ~@8 V W ~@27 X Y Z AA AB ~@12
>`.pickRestart({
  A: "~@4 g4 a4!2 bb4", B: "bb4 d5 g4 a4!2 bb4!2 d5", C: "g4@11 ~ f4@4", D: "f4@15 ~", E: "a4 bb4!2 a4 c5@3 a4",
  F: "f4 d4", G: "d4 f4@2 d4 bb4@2 a4@2", H: "c4@15 ~", I: "a4 bb4!2 a4 c5@3 f5", J: "f5 d5",
  K: "g4@3 a4@2 bb4@3 g4@6 a4@2", L: "a4@15 ~", M: "bb5@2 a5@4 f5@9 ~", N: "f5@3 g5 g5@4", O: "g5 a5 bb5 c6",
  P: "f6@15 ~", Q: "e6@15 ~", R: "d6@15 ~", S: "c6@15 ~", T: "gb5 d5!2 gb5!2 a5!2 d6", U: "e5 c5!2 e5!2 g5!2 c6",
  V: "bb4@3 a4!2 bb4!2 c5", W: "c5 a4!2 bb4 bb4@4", X: "~@4 g5 eb5 g5 bb5", Y: "eb6 bb5 g5 eb5 gb5 d5 gb5 a5",
  Z: "d6 a5 gb5 d5 f5 d5 f5 a5", AA: "d6 a5 f5 d5 e5 c5 e5 g5", AB: "c6 g5 e5 c5 ~@4",
})).s("gm_flute").gain(0.34)

// other · flute · soft notes
const flute_soft = note("<~@32 A B C D E F ~@67 G@2>".pickRestart({
  A: "e5@15 ~", B: "d5@15 ~", C: "e5@8 e5@2 f5@2 g5 a5 ~ bb5", D: "bb5 a5@2 e5", E: "e5@2 d5@4 e5@2 f5@6 g5 a5",
  F: "bb5@2 a5@4 f5@9 ~", G: "[~@8 g4@23 ~]/2",
})).s("gm_flute").gain(0.23)

// other · trombone
const trombone = note(`<
  ~@6 A@3 ~@3 B C D@2 ~@8 E F G H E F I H F J F K L F H M H ~@8 N O P Q ~@10 R S ~@42
>`.pickRestart({
  A: "[~@2 f3 g3@3 g3@3 f3@3]/3", B: "~@2 bb3 a3", C: "g3 f3 e3 d3", D: "c3", E: "f3 g3!2 f3 a3@3 f3", F: "bb2",
  G: "g2 c3", H: "f2", I: "bb2 c3", J: "g2", K: "f2 g2 c3@6", L: "d3", M: "eb2", N: "g3", O: "gb3", P: "f3", Q: "e3",
  R: "a3 bb3", S: "c4",
})).s("gm_trombone").gain(0.05)

stack(piano, viola, viola_soft, cello, cello_soft, bass, bass_soft, orchestral_harp, flute, flute_soft, trombone)