Strudelify
KeyE♭ majorTempo105 bpm
0:00/0:00
// jolene — Nadeeru Gannoruwa
// 105 bpm, 2/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Piccolo" named as a pipe, played on piccolo (its contrabass patch is not one); ch 2 "Flute" named as a pipe, played on flute (its acoustic bass patch is not one); ch 3 "Flute" named as a pipe, played on flute (its tremolo strings patch is not one); ch 4 "Violin" named as a string part, played on violin (its acoustic guitar nylon patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5616950; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(105/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.

// other · piccolo
const piccolo = note(`<
  A B A B C B A B D E@2 F@2 G@2 H D I@2 J ~@23 K L M N@2 O@3 ~@2 P Q R S@2 T@3 ~@8 U@4 ~@7 V@4 ~@2
>`.pickRestart({
  A: "c3", B: "g2", C: "bb2", D: "c2", E: "[d2 eb2@2 d2]/2", F: "[eb2@2 ~@5 f5, ~ d2 c2@2, ~@3 eb5@4 ~]/2",
  G: "[d2@2 ~ bb5 bb5@2 [d2,d6]@2, g5@3 ~@5, ~ eb2@2 ~]/2", H: "c6, eb2 ~", I: "[eb2 eb2@2 d2]/2", J: "eb2 c2",
  K: "~@3 c2", L: "c2@3 d2", M: "eb2", N: "[f2@6 eb2 g2@3 g2@4 f2 g2]/2", O: "[bb2@4 ~@2 bb2@8 bb2 c3@9]/3",
  P: "~@3 [c2,c6]", Q: "[c2,c6]@3 [d2,d6]", R: "[eb2,eb6]",
  S: "[[f2,f6]@6 [eb2,eb6] [g2,g6]@3 [g2,g6]@4 [f2,f6] [g2,g6]]/2", // F Eb G F G
  T: "[[bb2,f6]@4 ~@2 f6 eb6@2 f6@2 d6@3 [bb2,bb5] [c3,c6]@9, ~@3 bb2@4 ~@5]/3", U: "[f2 f2@2 bb2@2 g2@3]/4",
  V: "[f2 f2@2 bb2@2 g2@2 ~]/4",
})).s("gm_piccolo").gain(0.07)

// other · flute
const flute = note(`<
  ~@11 A B C D E@2 F G@3 ~ A B C D H@2 I J@3 ~ A K@2 L M@4 N@2 A O P Q@2 R@3 ~@3 S@4 T@2 ~@3 A B C D U V F W@2 ~@2 A B C
  D H@2 I X@2 ~@3
>`.pickRestart({
  A: "~@3 c5", B: "c5@2 ~ d5", C: "eb5@2 ~ g5", D: "f5 bb5", E: "[bb5 c6 bb5@2 g5@15 ~@5 f5@4 g5@4]/2",
  F: "g5@2 f5 f5@3 f5@2", G: "[f5@4 d5@4 d5@4 bb4@2 c5@6 c5@15 ~@13]/3",
  H: "[bb5 c6@5 bb5@2 c6@2 bb5@2 g5@11 ~@5 f5 g5@3]/2", I: "f5!4", J: "[f5@2 d5@4 d5@6 bb4@2 c5@6 c5@15 ~@13]/3",
  K: "[c5@2 c5 c5@3 d5 eb5@2 eb5@2 eb5@3 ~ eb5]/2", L: "f5 f5@2 f5@3 eb5@2",
  M: "[f5@2 g5@4 g5@6 ab5@2 ab5 g5@5 f5@4 ~@4 f5@2 eb5@4 f5@4 d5@2 d5@4 bb4@2 c5@6 c5@8 ~@4]/4",
  N: "[~@6 bb4 c5@3 c5@4 ~@2]/2", O: "c5@11 ~ d5@4", P: "eb5@15 ~", Q: "[f5@11 ~ eb5@2 g5@6 g5@8 f5@2 g5@2]/2",
  R: "[f5@8 ~@4 f5@2 eb5@4 f5@4 d5@6 bb4@2 c5@17 ~]/3", S: "~ g4", T: "~ f4", U: "bb5 c6 bb5@2 g5@11 ~", V: "~@2 f5 g5",
  W: "[f5@4 d5@4 d5@4 bb4@2 c5@6 c5@11 ~]/2", X: "[f5@2 d5@4 d5@6 bb4@2 c5@6 c5@11 ~]/2",
})).s("gm_flute").gain(0.25)

// other · flute
const flute_2 = note("<~@11 A@2 B C D ~@28 E F G H I@2 ~@3 J K L M@2 N@3 ~@25>".pickRestart({
  A: "[~@12 g4@15 ~ bb4@4]/2", B: "bb4@11 ~ d5@4", C: "c5 f5", D: "eb5@15 ~", E: "c5 eb5", F: "eb5 f5", G: "eb5 g5",
  H: "f5 bb5", I: "f5@15 ~", J: "~@3 g4", K: "g4@11 ~ bb4@4", L: "bb4@15 ~", M: "[c5@11 ~ bb4@2 d5@6 d5@8 c5@2 d5@2]/2",
  N: "[f5@8 ~@4 f5@15 ~ f5@2 g5@17 ~]/3",
})).s("gm_flute").gain(0.2)

// chords · violin
const violin = note(`<
  A B@2 C A D@2 C E@2 F G H@2 I J E@2 F G E@2 K@2 L M N@2 O P Q ~@12 R S T U V W@2 X@2 ~ Y Z AA AB@2 AC@4 ~@2 AD AE AF
  AG@2 AH@4 ~@2 AD AE AF AG@2 AI@4 ~@2
>`.pickRestart({
  A: "~ c4 g3 d4", B: "[~ [g3,c4]@2 d4]/2", C: "eb4@2 d4 bb3", D: "[~ [g3,c4]@2 c4]/2", E: "[c4@3 c4@3 bb3@2]/2",
  F: "c4 bb3", G: "c4 g3", H: "[c4@3 ~@3 bb3@2, c5 g5, ~@3 c4@3 ~@2]/2", I: "c4 bb3, f5", J: "g5, c4 ~",
  K: "[c4@2 ~@2 c4@2 ~ bb4, ~ bb3 ~@2, ~@3 g4@4 ~]/2", L: "bb4@3 d5", M: "c5 f5", N: "eb5/2", O: "g4 f4", P: "f4 f4@3",
  Q: "g4", R: "~@3 c4", S: "~@3 d4, [eb3,g3,c4]", T: "[g3,bb3,eb4]", U: "~@6 eb4 g4, [f3,bb3,f4]",
  V: "g4@2 g4@4 f4 g4, [g3,c4,eb4]", W: "[f4@6 f4 eb4@2 f4@2 d4@3 bb3 c4, bb4, bb3@7 ~, d4@11 ~@5]/2",
  X: "[c3,g3,c4]/2", Y: "~@3 g4", Z: "g4@3 c5, [eb3,g3,c4]", AA: "[g3,bb3,eb4,bb4]",
  AB: "[c5@6 bb4 ~@3 d5@4 c5 d5, [f3,bb3,f4]@7 d5@3 ~@6, ~ [g3,c4,eb4,g4]]/2", // Bb5 Cm
  AC: "[bb4@6 c5 bb4@2 c5@2 bb4@3 f4 ~ [c3,g3,c4]@16, [bb3,d4] ~, f4@14 ~ g4@9 ~@8, c5 ~@7]/4", AD: "c5", AE: "g5",
  AF: "f5", AG: "[g5@3 ~]/2", AH: "[f4 f4@2 bb4@2 g4@3]/4", AI: "[f4 f4@2 bb4@2 g4@2 ~]/4",
})).s("gm_violin").gain(0.2)

// other · viola
const viola = note(`<
  ~@12 A B C A ~ D@3 ~@3 E F G H@2 I J A ~@12 K L M N@2 O@3 ~@3 P@2 Q@2 R Q S ~@3 A B C T@2 U@4 ~@2 A B C T@2 V@4 ~@2
>`.pickRestart({
  A: "g4", B: "eb4", C: "f4", D: "[bb3 bb3@2 d4@2 c4]/3", E: "c5 d5", F: "eb5 f5", G: "d5!2", H: "c5/2", I: "g4 bb4",
  J: "bb4 bb4@3", K: "~@3 g4", L: "g4@3 bb4", M: "bb4", N: "[c5@6 bb4 d5@3 d5@4 c5 d5]/2",
  O: "[f5@4 ~@2 f5@8 f5 c5@9]/3", P: "~ c4", Q: "~ bb3", R: "~ d4", S: "c4", T: "[g4@3 ~]/2",
  U: "[bb4 bb4@2 d5@2 c5@3]/4", V: "[bb4 bb4@2 d5@2 c5@2 ~]/4",
})).s("gm_viola").gain(0.13)

// other · cello · "Violoncello"
const cello = note(`<
  ~@17 A@2 B ~@2 C@2 D E F@2 G@2 H ~@12 I J K L@2 M@3 ~@2 N O P Q@2 R@3 ~@3 S T H U@2 V@4 ~@2 S T H U@2 W@4 ~@2
>`.pickRestart({
  A: "[bb2 bb2@2 d3]/2", B: "eb3 c3", C: "[~@3 c3@4 d3]/2", D: "eb3@3 g3", E: "f3 bb3", F: "g3/2",
  G: "[c4 bb3@2 bb3]/2", H: "c4", I: "~@3 c3", J: "c3@3 d3", K: "eb3", L: "[f3@6 eb3 g3@3 g3@4 f3 g3]/2",
  M: "[f3@4 ~@2 f3 eb3@2 f3@2 d3@3 bb2 c3@9]/3", N: "~@3 c4", O: "c4@3 d4", P: "eb4", Q: "[f4@6 eb4 g4@3 g4@4 f4 g4]/2",
  R: "[f4@4 ~@2 f4 eb4@2 f4@2 d4@3 bb3 c4@7 ~@2]/3", S: "g3", T: "bb3", U: "[g3@3 ~]/2", V: "[bb2 bb2@2 d3@2 eb3@3]/4",
  W: "[bb2 bb2@2 d3@2 eb3@2 ~]/4",
})).s("gm_cello").gain(0.17)

// other · cello · "Violoncello" · soft notes
const cello_soft = note("<~@12 g3 bb3 c4 g3 ~@70>").s("gm_cello").gain(0.1)

// chords · piano
const piano = note(`<
  A@8 B@4 C D E B@2 F@2 B@4 C D E B@2 F@2 B@2 G@2 C D E C H@2 B@4 I J K L M@2 B@4 N O P N Q@2 B@4 C D R S@2 T@2 B@4 U V
  E S@2 T@2 B@2 W@2
>`.pickRestart({
  A: "[c3@3 ~@7 d4@2 ~@2 c4@2 c3@3 ~@7 d4@2 ~@2 c4@2 c3@3 ~@7 d4@2 ~@2 c4@2 c3@3 ~@3 [eb4,g4]@2 ~@6 [g3,d4]@2, c4@7 ~ c4@7 ~ c4@7 ~ c4@5 f4@3, ~@3 d4@7 ~@3 d4@6 d4@7 ~@3 d4@6 d4@7 ~@3 d4@6 d4@6 eb4 d4@4 ~@2, ~ c3 c3!2 ~ c3 c3!2 ~ c3 c3!2 ~ c3 c3 [c3,c4,eb4], ~@6 eb4@6 eb4@10 eb4@6 eb4@10 eb4@6 eb4@10 ~@3 g4@7]/8", // Eb G5 Cm
  B: "[~@5 [bb3,d4] ~ [g3,c4], c2, c4@5 g3@3 c3@4 [c3,eb4]@4, c3@3 [bb3,d4]@6 g3@4 [bb3,d4]@3, ~ g3 c3 [c4,eb4]@3 c4 ~]/2", // Bb C5 Cm Bb Cm
  C: "[c4,eb4]@2 ~ [c4,eb4]@2 ~ [c3,c4,eb4]@2, c2, ~@2 [c3,g3]@3 g3@3", // Cm C5
  D: "[bb3,eb4]@2 ~ [bb3,eb4]@2 ~ [eb3,bb3,eb4]@2, eb2, ~@2 [eb3,g3]@3 g3@3", // Eb5 Eb
  E: "[bb3,d4]@2 ~ [bb3,d4]@2 ~ [bb2,bb3,d4]@2, bb1, ~@2 [bb2,f3]@3 f3@3", // Bb Bb5
  F: "[~@5 c4 ~ bb3, bb1, bb3@5 f3 d4@3 f3@3 ~ c4@3, bb2@3 c4@5 bb2@4 [bb2,f3,d4]@4, ~ f3 bb2 bb3@4 ~]/2", // Bb
  G: "[~@5 [bb3,d4] ~ [g3,c4], c2@3 [c4,eb4]@3 c4 ~, c4@5 g3@3 c3@4 [c3,eb4]@4, c3@3 [bb3,d4]@5 ~ g3@4 [bb3,d4]@3, ~ g3 c3@2 c2@4]/2", // Bb C5 Cm Bb
  H: "[[bb3,d4]@2 ~ [bb3,d4]@2 ~ [bb3,d4]@2 [bb3,d4]@2 ~ [bb3,d4]@2 ~ [bb2,bb3,d4]@2, bb1, ~@2 [bb2,f3]@3 f3@5 ~@3 f3@3, ~@3 bb2@2 [bb2,f3]@2 ~]/2", // Bb Bb5
  I: "[c3,g3,c4,eb4,g4,c5]", J: "[eb3,bb3,eb4,g4,bb4,eb5]", K: "[bb2,f3,bb3,f4,bb4,f5]", L: "[c3,g3,c4,g4,c5,eb5,g5]",
  M: "[[bb2,f3,bb3,bb4,d5,f5,bb5]@15 ~]/2", N: "[c2,c3,g3,c4,eb4]@15 ~", O: "[eb2,eb3,g3,bb3,eb4]@15 ~",
  P: "[bb1,bb2,f3,bb3,d4]@15 ~", Q: "[[bb1,bb2,f3,bb3,d4]@15 ~]/2",
  R: "[bb3,d4]@2 f3 [bb3,d4]@2 f3 [bb2,bb3,d4]@2, bb1@15 ~, ~ bb2@2 ~", // Bb
  S: "[c4@2 g3 ~@2 g3 [c4,eb4]@2 ~ g3 [bb3,d4]@2 [c4,eb4] [bb3,d4] [g3,c4]@2, c2@15 ~, c3@3 [bb3,d4]@2 ~@11, ~ c3 c3!2]/2", // Cm Bb Cm Bb C5 Bb
  T: "[bb3@2 f3 ~@2 f3 [bb3,d4]@2 ~ f3 c4@2 d4 c4 bb3@2, bb1@15 ~, bb2@3 c4@2 ~@11, ~ bb2 bb2 [bb2,f3]]/2", // Bb Bb5
  U: "[c4,eb4]@2 g3 [c4,eb4]@2 g3 [c3,c4,eb4]@2, c2@15 ~, ~ c3@2 ~", // Cm
  V: "[bb3,eb4]@2 g3 [bb3,eb4]@2 g3 [eb3,bb3,eb4]@2, eb2@15 ~, ~ eb3@2 ~", W: "[[c2,c3,c4,d4,eb4,g4]@31 ~]/2",
})).s("gm_piano").gain(0.2)

// bass · choir aahs · "Bass"
const bass = note("<~@44 A@2 B@4 ~@4 A@2 B@4 ~@15 C D E C ~ F@2 G@2 ~@2>".pickRestart({
  A: "~ g3", B: "~ f3", C: "c3", D: "eb3", E: "f3", F: "bb2", G: "c3/2",
})).s("gm_synth_bass_1").gain(0.13)

stack(piccolo, flute, flute_2, violin, viola, cello, cello_soft, piano, bass)