Strudelify

Be My Love

LANZA

KeyF minorTempo56 bpm
0:00/0:00
// Be My Love — LANZA
// 56 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 47 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(56/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 · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@2 A B@2 C@2 D E@2 F@2 G@5 H I J K@2 L@2 M@2 N O P Q@2 ~ R@3 S@2 T U@2 V@2 W@2 X@3
>`.pickRestart({
  A: "eb4@2 e4@2 d5@2 c5@2 b4@2 c5@2 a5@2 g5@2 ab5@2 e5@2 b4@2 d5 c5 ab4 a4 b4 [c5,d5] [e5,gb5] [g5,a5] b5 [c6,d6]", // Csus2 Esus2 Gsus2 Csus2
  B: "[[c6,eb6]@9 [ab5,c6]@3 [g5,bb5]@3 [f5,ab5]@3 [eb5,g5]@3 [c5,eb5]@3 ~ d5@3 g5@3 g4@4 a4@5 bb4@19 a5@5]/2", // Cm Ab Gm Fm Eb Cm
  C: "[c6@4 c5@5 d5@7 e5@36 ~@12]/2", D: "~ g4",
  E: "[~@2 f5@5 e5@4 d5@4 g4@5 ~@2 a4@4 g5@4 f5@4 e5@9 d5@11 ~@3 c5@4 b4@3]/2",
  F: "[~ a4@4 d5@4 c5@4 e4@8 f4@8 c5@8 d5@8 [db5,e5]@8 ~@3 a4@4 g5@3 ~]/2", // Dbm
  G: "[f5@4 e5@3 d5@2 c5@2 ~ b4@9 c5@4 a5@3 g5@7 g4@3 a4@3 ~ b4@3 c5@2 d5@2 ~ e5@2 d6@3 ~ c6@3 e5@14 g5@5 a4@6 b4@2 c5@3 d5@22 gb4@7 g4@7 a4@11 ~ g4@4 f5@3 e5@4 g4@9 ~@3]/5",
  H: "~@7 a4@4 e5@2 f5@2 [g5,bb5]@2 [f5,ab5]@2 ~ [e5,g5]@4 ~ f5@5 ~@2, ~@24 d5@5 ~@3", // Gm Fm Em
  I: "~@2 e5@4 [b5,d6]@3 ~ a5@5 ~@2 b4@3 c5@2 [ab5,b5]@5 [gb5,a5]@5, ~@9 c6@5 ~@18", // Bm Abm Gbm
  J: "~@3 a4@2 c5@2 eb5@5 a5@4 g5@5 bb5@4 [bb4,db5]@7", // Bbm
  K: "[~@8 f4@2 [f4,a4]@2 ~@2 d5 ~ f5@13 ~ [gb5,b5]@3 ~ d6@7 [g5,c6]@3 ~ d6@3 [c6,e6]@3 ~ b5@3 [a5,c6]@4 ~@5, ~@7 e4@2 ~@3 [a4,d5]@2 ~@50, ~@13 f5@2 [d5,a5]@14 ~@4 a5@8 ~@3 f6@4 ~@3 d6@4 ~@9]/2", // F B5 C5 C Am D5
  L: "[~@15 e5@4 ~ f5@3 f6@3 e6@3 ~ g5@20 ~@4 a5@5 bb5@3 a6@2]/2",
  M: "[~@2 g6@3 e6@9 d6@2 c6@2 a5@2 ~ f5@2 e5@29 ~@12]/2",
  N: "~@8 f4@2 ~ ab4@2 gb4@2 c5 bb4 ~ f5 eb5 ~ bb5 ab5 ~ [g5,b5]@8", // G
  O: "[ab5,c6]@7 [eb6,gb6]@10 [db6,f6]@4 [c6,eb6]@4 [bb5,db6]@3 [a5,c6]@4", // Ab Ebm Db Cm Bbm Am
  P: "[bb5,db6]@3 [bb5,f6]@11 [gb5,eb6]@3 db6@7 ~ c6@7, ~@17 a5@15", // Bbm Bb5 Ebm
  Q: "[~@3 f5@4 [c6,eb6]@3 [bb5,db6]@4 [a5,c6]@3 [f5,bb5]@4 [f5,a5]@4 [f5,bb5]@3 [bb5,db6]@11 [a5,c6]@3 eb5@8 ~ d5@4 ~@9, ~@42 f5@13 ~@9]/2", // Cm Bbm Am Bb5 F Bb5 Bbm Am
  R: "[~@10 [gb5,ab5]@4 [gb5,bb5]@3 [gb5,c6]@4 [bb5,db6]@3 [c6,eb6]@4 [db6,f6]@11 [db6,f6]@4 [c6,eb6]@3 [bb5,db6]@4 [db6,f6]@6 ~ [c6,eb6]@13 ~@26, ~@28 [gb5,bb5] ~@19]/3", // Gbsus2 Gb Gbdim Bbm Cm Db Cm Bbm …
  S: "[ab4@3 gb5@3 ~ f5@4 ab4@7 ~ bb4@8 ~@3 bb4@4 f5@2 eb5@2 ab5@2 gb5@2 b5@2 a5@2 f6@2 eb6@2 f5@7 c6@4 bb5@3, ~@27 gb4@5 ~@32]/2",
  T: "~ eb6@3 ~ db6@4 db5@7 ~@4 eb5@2 db5 ~ gb5@2 e5@2 a5@2 g5@2",
  U: "[bb5@3 ab5@4 b4@8 ~@12 bb4@3 f5@4 eb5@4 d5@2 ~ gb5@2 bb5@2 c6@4 a5@2 bb5@2 eb6@4 db6@3 ~ [a5,eb6,gb6]@3, ~@20 eb5 ~@11]/2", // Ebdim
  V: "[~ [bb5,db6,f6]@3 ~ eb6@3 [bb5,db6]@3 ~@9 bb4@4 db5@4 d5@3 eb5@4 ~ f5@2 eb5@2 d5@2 eb5@2 ab4@8 b4@6 eb5@6, ~ c6 ~@14]/2", // Bbm
  W: "[~ e5@5 f5@5 ~ gb5@3 f5@3 e5@2 f5@3 ab5@34 ~@7]/2",
  X: "[~@17 [g4,g5]@2 ~@2 [ab4,ab5]@2 ~@3 [gb5,gb6]@2 ~@3 [f5,f6]@3 ~@4 [ab5,ab6]@44 ~@14]/3", // G Ab Gb F Ab
})).s("gm_string_ensemble_2").gain(0.38).pan(0.3)

// bass · contrabass
const bass = note("<A@2 B C@4 D@2 E@2 F@2 G@7 H@7 ~@5 I J ~@2 K L M@2 N@2 O@2 ~ P@2>".pickRestart({
  A: "[~@30 c2@25 b1@9]/2", B: "a1 g1 gb1@2", C: "[f2@24 e2@15 ~ a1@19 d2@21 g1@36 ~@12]/4", D: "[~@8 c2@17 b1@7]/2",
  E: "[~@2 e2@19 ~ a2@15 g2@8 gb2@8 b1@11]/2", F: "[~@5 bb1@8 a1@8 d2@29 eb2@7 e2@7]/2",
  G: "[~@7 d2@3 d3@3 ~ c3@3 b2@3 a2@3 ~ g2@3 gb2@19 g2@32 ~ ab2@7 g2@7 c2@15 ~ c2@14 b1@15 ~ e2@18 a2@17 g2@8 ~ gb2@8 b1@17 bb1@8 ~ a1@7]/7",
  H: "[~ d2@21 ~ d2@7 eb2@7 e2@7 d3@4 c3@3 ~ b2@3 a2@3 ~ d2@17 g2@17 e2@20 a1@21 ~@4 d2@13 g1@14 g1@14 c2@18 ~ ab2@17 ~@9]/7",
  I: "~@21 db3@3 ~ c3@3 bb2@4", J: "ab2@3 ~ g2@7 ~@21", K: "~@9 bb2@7", L: "~ ab2@7 ~ g2@7 c2@15 ~",
  M: "[b1@7 bb1@7 ~ eb2@22 ~ eb2@4 eb2@3 e2@8 f2@8 eb2@3]/2", N: "[~ db2@4 c2@3 bb1@4 eb2@15 ~ ab1@16 f2@20]/2",
  O: "[~ bb1@23 ~@5 eb2@5 eb2@11 ~ ab1@11 ~@7]/2", P: "[~@3 db2@22 ~@7]/2",
})).s("gm_contrabass").gain(0.33)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2_2 = note("<A@3 B@4 C@4 D@2 E@7 ~ F@6 G H I@2 ~ J@3 K L@2 M@2 N@2 O@2 ~ P@2>".pickRestart({
  A: "[~@5 [e4,a4], ~@5 c4@11]/3", // A5
  B: "[[c4,eb4,ab4]@24 [b3,d4,g4]@16 [g3,db4,gb4]@19 [a3,c4,f4]@21 [f3,b3,e4]@36 ~@12]/4", // Ab G Gb F E
  C: "[~@17 [g3,c4,e4]@33 ~@16 [ab3,e4]@20 a3@15 g3@8 gb3@8 [a3,eb4,f4]@11, ~@25 [f3,a3]@8 ~@31, ~@51 d4@35 c4@31 ~@11]/4", // C Dbm F7 F
  D: "[~@5 d4@8 db4@8 [g3,bb3,e4]@7 [f3,a3,f4]@22 ~@7 [g3,e4,g4]@7, ~@5 [g3,e4]@16 d4@29 [a3,eb4,gb4]@7 ~@7, ~@51 c4@13]/2", // Edim F C Ebdim
  E: "[~@7 [f3,d4,f4]@7 ~@54 b3@11 [e3,bb3,eb4]@7 [f3,b3,e4]@7 [c4,e4,g4]@30 a4@15 ab4@19 [b3,c4,e4]@25 ~ b3@4 [c4,a4]@4 [a3,eb4,f4]@17 d4@8 ~ db4@7, ~@14 c4@54 ~@114 ab4@5 ~@37, ~@14 e4@43 d4@22 ~@44 [d4,f4]@34 ~@25 e4@8 ~@34, ~@27 a3@52 ~@129 [g3,e4]@16, ~@23 f3@16 ~@73]/7", // Dm Eb E C Cmaj7 F F7 Dm …
  F: "[~@27 c4@17 db4@8 d4@9 [b3,d4]@20 eb4@10 e4@10 ~ c4@32 b3@14 [g3,c4,e4]@18 db4@9 c4@9 [b4,e5]@8, ~@27 [a3,f4]@34 g4@40 ~@91, ~@81 [bb3,db4]@20 ~ [a3,e4]@46 ~@18 [gb3,eb4]@19 ~@7]/6", // Bm C E5 Dm Bbm A5 Ebm
  G: "[c5,f5]@7 [gb5,ab5]@10 [f5,ab5]@4 [eb5,ab5]@3 ~ [db5,f5]@3 [c5,f5]@4", // F5 Gbsus2 Fm Ab5 Db F5
  H: "[db5,f5]@3 [f5,bb5]@11 [eb5,gb5]@3 [db5,f5]@7 ~ [c5,eb5]@7", // Db Bb5 Ebm Db Cm
  I: "[~@3 [f4,bb4]@4 [eb5,f5]@3 [db5,f5]@4 [c5,f5]@3 ~ f5@3 [a4,f5]@3 ~ [bb4,f5]@3 gb5@7 ~@4 c5@3 b4@8 bb4@6 ~@8, ~@17 bb4@3 ~@8 db5@11 ~@3 f4@14 ~@8, ~@35 g5@7 ~@22]/2", // Bb5 Ebsus2 Db F5 Dm Bb5
  J: "[~@10 ab4@3 bb4@4 c5@4 [db5,f5]@4 [eb5,gb5]@3 [f5,ab5]@9 ~@2 [f5,ab5]@4 [f5,g5]@3 [db5,f5]@4 [gb5,bb5]@5 ~ eb5 [eb5,gb5]@12 ~@27, ~@28 bb4 ~@19]/3", // Db Ebm Fm Fsus2 Db Gb Ebm
  K: "~@11 eb4@4 db4@4 [gb3,bb3,c4]@13", L: "[~@2 [a3,c4,eb4,gb4]@15 ~ [bb3,db4,f4]@30 [e3,bb3,eb4,gb4,bb4]@15 ~]/2",
  M: "[[ab3,eb4]@8 [ab3,d4]@7 [gb3,b3,d4]@8 [gb3,bb3,eb4]@23 [g3,c4,e4]@7 [ab3,db4,f4]@8 [a3,eb5]@3, b3@15 ~@49]/2", // Ab5 Abdim Bm Ebm C Db Adim
  N: "[~ [bb3,db5]@3 ~ a3@3 [bb3,bb4]@4 [gb3,bb3,db4,gb4]@15 ~ [gb3,bb3]@16 [ab3,b3,eb4,ab4]@20, ~ c5 ~@14]/2", // Bbm Bb Gb Abm
  O: "[~ [ab3,b3,d4,f4]@21 ~@2 db4@21 ~ [gb3,c4,f4]@11 ~@7, ~@23 [gb3,bb3,gb4]@21 ~@20]/2", // Abdim F Gb
  P: "[~@3 [ab3,db4,f4,ab4]@22 ~@7]/2", // Db
})).s("gm_string_ensemble_2").gain(0.38).pan(0.7)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<A@2 B C@4 D@3 E@2 ~@3 F@3 ~@3 G@5 H I ~@19>".pickRestart({
  A: "[~@30 c3@25 e3@9]/2", B: "a3", C: "[ab3@24 g3@34 ~ f3@48 ~@21]/4",
  D: "[~@16 g3@34 ~ f3@15 ab3@20 ~@4 e3@3 d4@3]/3", E: "[~ c4@4 b3@4 a3@4 b3@4 c4@4 a3@16 g3@8 bb3@8 ~@11]/2",
  F: "[~@30 g3@29 a3@16 ab3@18 ~@3]/3", G: "[~@27 d3@17 g2@17 e3@20 a2@20 f3@47 ~@12]/5", H: "~@3 g3", I: "ab3@7 ~@25",
})).s("gm_string_ensemble_1").gain(0.33).pan(0.9)

// bass · acoustic bass · "ACOU BASS"
const bass_2 = note("<~@27 A B C D E@2 F G H I J ~@9>".pickRestart({
  A: "~@7 db2@6 ~ ab1@6 ~ db2@6 ~ db2@4", B: "~@3 c2@6 ~ c2@6 ~ f2@6 ~@2 f2@6 ~",
  C: "bb2@6 ~ bb2@6 ~ ab2@6 ~ g2@6 ~ c2@4", D: "~@3 c2@6 ~ b1@7 ~ bb1@7 ~@2 eb2@5",
  E: "[~@2 bb1@6 ~ eb2@6 ~ eb2@6 ~@2 e2@6 ~ f2@7 eb2@6 ~ eb2@7 ~ db3@3 ~ c3@3 bb2@3 ~]/2",
  F: "ab2@3 ~ g2@7 eb2@7 ab2@6 ~@2 eb2@6", G: "~ ab2@3 ~ ab1@6 ~@10 db2@6 ~ ab1@4",
  H: "~@4 db2@7 db2@6 ~@2 c2@6 ~@2 c2@5", I: "~@2 f2@7 ~ f2@7 ~ bb2@7 bb2@7", J: "~ ab2@7 ~ g2@7 ~@16",
})).s("gm_acoustic_bass").gain(0.22)

// other · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note("<~@20 [~ d2@2 ~@2 a2 ~@2 d3 ~@23] ~@26>").s("gm_pizzicato_strings").gain(0.38).pan(0.3)

// chords · orchestral harp · "HARP"
const orchestral_harp = note("<~@5 A@2 ~@14 B@3 ~@9 C ~@7 D ~@5>".pickRestart({
  A: "[~@16 f3@3 ab3@3 b3@2 e4@3 ~ f4@3 ab4@4 b4@4 ~@25]/2",
  B: "[~@33 c5@2 ~@31 d5@2 ~@28, ~@27 d3@2 a3@2 f4@2 ~@28 e3@2 [b3,d4]@2 b4@2 ~@29, ~@14 f3 [c4,d4] a4 ~@14 g3 [e4,g4] ~@15]/3", // Bm Csus2 Em
  C: "~@7 [eb3,g3] ~@2 g5 ~ f6@2 ~@18, ~@3 bb2 eb4 [db5,eb5] ~@10, ~@7 bb3@2 [g4,bb4]@2 [bb5,db6]@2 ~@19", // Eb Dbsus2 Gm Bbm
  D: "~@14 gb3 ~@3 [b4,eb5]@2 ~@12, ~@7 [f3,ab3]@2 ~@7, ~@15 b3@2 ab4@2 ~@13, ~@8 [eb4,f4] ~@7", // B Fm Ebsus2
})).s("gm_orchestral_harp").gain(0.33).pan(0.4)

// chords · flute
const flute = note("<~@4 A@2 ~@24 B C@2 ~@14>".pickRestart({
  A: "[~@8 [db4,gb4]@4 [gb4,bb4]@5 [bb4,db5]@3 [db5,gb5]@3 [db5,gb5,bb5]@3 ~ [c5,f5,a5]@20 ~@17]/2", // Gb5 Gb Bbm Gb5 Gb F
  B: "~@27 [d4,f4,b4]@5", // Bdim
  C: "[~@2 [gb4,bb4,eb5]@2 [bb4,eb5,gb5]@2 [gb5,bb5] [gb5,bb5,eb6] ~ [ab5,c6,f6]@4 [gb5,bb5,eb6] ~ [bb4,eb5,gb5]@2 [f5,ab5,c6]@3 [eb5,gb5,bb5]@2 ~@9 [gb5,eb6]@2 [f5,db6]@2 ~@3 [c5,gb5,ab5]@9 ~@17, ~@6 eb5@2 ~@18 [bb4,e5]@2 e5@2 db5@2 ~@3 [ab4,f5]@2 db5@2 ~@25, ~@27 c6@2 bb5@2 ~@5 bb5@2 ~@26]/2", // Ebm Gb Ebm Fm Ebm Fm Ebm Db …
})).s("gm_flute").gain(0.27)

// other · french horn · "FR.HORN"
const french_horn = note("<A@3 B ~@4 C@2 D E@5 F@2 ~ G H@2 I J@2 K@2 ~ L M@2 N@3 O P ~@2 Q@2 R S T@2 U@3>".pickRestart({
  A: "[~@30 gb3@4 g3@4 f4@4 e4@4 ~ b3@4 c4@4 a4@4 ~@5 c4@7 ~ e4@8 ab4@8 a4@8, ~@15 g4@5 ~@4]/3", B: "c5@11 ~@21",
  C: "[~@2 b3@4 c4@4 d4@4 ~ e4@3 e4@12 f4@4 gb4@9 ~ ab4@9 ~@11]/2", D: "~@25 a4@4 g4@3",
  E: "[~ f4@4 [g3,d4]@8 [bb3,db4]@8 ~@3 bb3@4 [f3,a3]@22 gb3@7 g3@13 f3@7 ~ c4@3 d4@3 e4@3 ~ g4@3 ab4@8 ~ a4@10 e4@11 ~@11 b3@11 ~@17, ~@5 e4@16 ~@100 d4@22 ~@17]/5", // G5 Bbm F
  F: "[~@2 g3@3 f4@7 ~ b3@3 c4@4 d4@4 e4@3 ~ e4@7 f4@6 ~ f4@18 ~@4]/2", G: "~@3 a3@4 g4@6 f4@3 d4@8 db4@8, ~ [g3,e4]",
  H: "[~ [bb3,db4,e4]@7 [a3,d4,f4]@3 ~ [a3,d4,f4]@10 ~ d4@7 [b3,eb4,gb4]@7 [c4,e4,g4]@7 [f4,ab4]@4 [e4,a4]@4 [d4,b4]@3 [c4,c5]@4 ~@5, ~@22 [a3,f4]@7 ~@35]/2", // Bbdim Dm B C Fm A5 G C …
  I: "~@3 c4@9 db4@8 d4@9 ~@3", J: "[~@7 d4@10 eb4@10 e4@9 ~ e4@17 ~@10]/2",
  K: "[~@20 eb3@2 e3@2 a3@2 ~ g3@2 [eb3,gb3]@2 [e3,g3]@2 [b3,f4]@2 ~ c4@2 db4@9 c4@9 ~@8, ~@35 e4@2 ~ eb4@18 ~@8]/2", // Ebm Em Bdim
  L: "~@7 f3@3 gb3@3 ~ bb3@3 f4@4 eb4@3 ab4@4 gb4@4", M: "[f4@13 ~ db4@7 f4@7 gb4@7 g4@7 ab4@9 ~@4 f3@4 f3@5]/2",
  N: "[ab3@2 gb3@10 ~ gb3@3 gb3@3 ~ gb3@3 ~ g3@5 bb3@2 ab3@8 ~@3 ab3@4 bb3@3 c4@4 db4@4 eb4@3 f4@11 f4@4 eb4@3 db4@3 ~ f4@7 bb3@4 db4@3]/3",
  O: "~ c4@8 [db4,e4,g4]@5 ~ c4@5 ~ bb4@11, ~@14 [f4,ab4]@6 db4@11 ~", P: "[db4,ab4]@2 [db4,ab4]@7 ~@7",
  Q: "[eb4@7 d4@7 ~ [b3,f4]@8 [bb3,gb4]@14 ~ [bb3,gb4]@3 ~ [bb3,gb4]@4 [c4,g4]@7 [db4,ab4]@8 a4@3]/2", // Bdim Ebm C5 Db5
  R: "~ bb4@3 c5@4 ~ db5@4 ~@19", S: "~@12 ab4@9 b3@5 eb4@6",
  T: "[~ e4@5 f4@6 gb4@6 ab4@5 ~@6 bb4@5 ab4@10 ~@2 ab4@11 ~@7]/2",
  U: "[~@17 g3@4 ab3@4 ~ bb3@5 ab3@6 ~ ab4@45 ~@13]/3",
})).s("gm_french_horn").gain(0.33).pan(0.6)

// chords · trombone
const trombone = note("<~@2 A B ~@24 C D@2 ~ E@2 F@2 ~@8 G@3>".pickRestart({
  A: "~ a3, [c4,e4]@31 ~", B: "[ab3,c4,eb4,f4]@3 ~", C: "~@28 [eb3,f3,a3]@3 ~",
  D: "[[db3,f3,bb3]@14 [f3,bb3,db4]@7 [bb3,db4,f4]@7 [bb3,db4,e4]@12 ~@2 eb4@8 ~ d4@7 ~@6, ~@42 [f3,ab3]@15 ~@7]/2", // Bbm Bbdim Fm
  E: "[~@10 [gb3,ab3,c4]@4 [gb3,ab3,c4]@3 [gb3,ab3,c4]@3 ~ [f3,ab3,db4]@3 ~ [gb3,ab3,eb4]@3 ~ ab3@9 ~ db4@3 ~ c4@3 ~ bb3@3 ~@14, ~@28 [db4,f4]@9 ~@27]/2", // Ab7 Db Ab7 Db
  F: "[~@9 e3@5 [ab2,gb3]@6 ~ [db3,f3]@23 ~@20]/2", // Ab7 Db
  G: "[~@17 [g3,g4]@3 ~ [ab3,ab4]@2 ~@3 [bb3,eb4,gb4,gb5]@4 ~ [ab3,db4,f4]@5 ~@2 [ab3,db4,f4]@44 ~@14, ~@31 f5@3 ~@4 ab5@29 ~@29]/3", // G Ab Ebm Db
})).s("gm_trombone").gain(0.38).pan(0.7)

// other · timpani
const timpani = note("<~@2 [~@16 gb2!16] [f2 ~@31] ~@41 [~@6 db3!26] [db3!19 ~@13]>")
  .s("gm_timpani").gain(0.28).pan(0.4)

stack(
  string_ensemble_2, bass, string_ensemble_2_2, string_ensemble_1, bass_2, pizzicato_strings, orchestral_harp, flute,
  french_horn, trombone, timpani
)