Strudelify

o sole mio

PR

KeyE♭ majorTempo120 bpm
0:00/0:00
// o sole mio — P.R
// 120 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5855005; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · tuba · "Flauto"
const tuba = note(`<
  A B@2 C@2 D E F@2 ~@15 A G@6 H@2 I@2 J@2 K@2 L M ~@15 A G@6 H@2 I@2 J@2 K@2 L N O P Q
>`.pickRestart({
  A: "~ eb5!2 d5", B: "[[bb3,bb4]@2 [bb3,bb4]@3 [d4,d5]!2 [c4,c5]]/2", C: "[[ab3,ab4]@5 [bb3,d5]!2 [ab3,c5]]/2",
  D: "[ab3,c5] [g3,bb4]!2 [f3,ab4]", E: "[eb3,g4] [d3,f4]", F: "[[eb3,eb4]@19 ~@13]/2",
  G: "[~ eb4!2 d4 ~ d5!2 c5 ~ d4!2 c4 ~ d5!2 c5 ~ d4!2 c4 ab3 [d4,f4] [eb4,g4] [f4,ab4], bb4@8 bb4@11 ~@13 ab4@19 ~@13 ab4@8 ab4@11 ~@13, ~@4 bb3@2 bb3@3 ~@3 ab3@5 ~@7]/6", // Dm Eb Fm
  H: "[~@2 eb3@2 g3@3 c4 bb3@6 [bb3,bb4]@2, bb4@27 ~@5]/2", // Bb
  I: "[~ eb4@2 eb4 ~ eb4 ~ eb4 ~@3 eb4 ~ eb4 ~ eb4, b4@9 eb4@2 ~@5, ~@5 ab4 eb5 b4]/2",
  J: "[~ eb4@2 eb4 ~ eb4 ~ eb4 ~@3 eb4 ~ eb4!3, bb4@4 bb4@5 eb4@2 ~ f4@2 ~@2, ~@5 g4 ~@2]/2",
  K: "[~ d4@2 d4 ~ d4 ~ d4 ~@3 d4 ~ d4 ~ [d4,eb4], bb4@9 d4@2 ~@5, ~@10 g4@2 f4@3 ~]/2", L: "eb4 eb4@2 eb4 ~ eb4 ~ eb4",
  M: "eb4@3 ~@13", N: "eb4@3 ~ g4@4 f4@4 eb4@4", O: "~ d4@2 d4 ~ d4 ~ d4, bb4@15 ~", P: "[bb3,bb4] [f4,f5]@2 [eb4,eb5]",
  Q: "[eb4,eb5]", // Eb
})).s("gm_tuba").gain(0.4)

// chords · tuba · "Flauto" · soft notes
const tuba_soft = note("<~@9 A B C D E F G@2 A B C D H I J@2 ~@16 A B C D E F G@2 A B C D H I J@2 ~@19>".pickRestart({
  A: "g3", B: "bb3 b3", C: "c4 ab3", D: "c4", E: "bb3 ab3", F: "ab3 bb3 c4@2", G: "[g3@8 g3@11 ~@13]/2", H: "eb4",
  I: "bb3 d4", J: "[eb4@19 ~@13]/2",
})).s("gm_tuba").gain(0.15)

// other · clarinet · "Clarinetto in Sib 1"
const clarinet = note(`<
  A B@2 C@2 D E F@2 G H I@4 J@2 G H K@2 L M N@2 B@2 C@2 O@2 P@2 Q@2 R@2 S@2 F@2 G H I@4 J@2 G H K@2 L M N@2 B@2 C@2 O@2
  P@2 Q@2 R@2 S@2 T U V W X
>`.pickRestart({
  A: "~ eb5!2 d5", B: "[bb4@2 bb4@3 d5!2 c5]/2", C: "[ab4@5 d5!2 c5]/2", D: "c5 bb4!2 ab4", E: "g4 f4",
  F: "[eb4@19 ~ bb4@4 ab4@4 g4@4]/2", G: "f4 eb4", H: "eb4 f4 g4 eb4", I: "[d4@2 c4@3 d4 eb4 f4]/2",
  J: "[c4@8 bb3@11 ~ bb4@4 ab4@4 g4@4]/2", K: "[d4@2 c4@3 ab4 g4 f4]/2", L: "bb4 g4 f4 eb4", M: "f4@3 g4",
  N: "[g4@2 f4@2 eb4@15 ~ eb5@4 eb5@4 d5@4]/2", O: "[ab4@2 ab4@3 f4 g4 ab4]/2", P: "[bb4@7 bb4]/2",
  Q: "[b4@5 ab4 eb5 b4]/2", R: "[bb4@2 bb4@3 g4 f4 eb4]/2", S: "[bb4@10 g4@2 f4@3 eb4]/2", T: "eb4",
  U: "eb4@3 ~ g4@4 f4@4 eb4@4", V: "bb4", W: "bb4 f5@2 eb5", X: "eb5",
})).s("gm_clarinet").gain(0.3)

// other · alto sax · "Sassofono contralto 1"
const alto_sax = note(`<
  A B@2 C@2 D E F@2 ~@16 G@2 H@4 G@2 I@2 J@2 K@2 F@2 ~@16 G@2 H@4 G@2 I@2 J@2 K@2 L M N O L
>`.pickRestart({
  A: "~ eb4!2 d4", B: "[bb3@2 bb3@3 d4!2 c4]/2", C: "[ab3@5 bb4!2 ab4]/2", D: "ab4 g4!2 f4", E: "eb4 d4",
  F: "[eb4@19 ~@13]/2", G: "~ eb4@2 eb4 ~ eb4 ~ eb4", H: "~ d4@2 d4 ~ d4 ~ d4", I: "[ab4@5 ab3 eb4 b3]/2",
  J: "[g4@2 g4@3 g4 f4 eb4]/2", K: "[bb4@10 g4@2 f4@3 eb4]/2", L: "eb4", M: "eb4@3 ~ g4@4 f4@4 eb4@4", N: "bb4",
  O: "bb3 f4@2 eb4",
})).s("gm_alto_sax").gain(0.3)

// other · alto sax · "Sassofono contralto 1" · soft notes
const alto_sax_soft = note(`<
  ~@9 A B C D E F G@2 A B C D H I J@2 ~@16 A B C D E F G@2 A B C D H I J@2 ~@19
>`.pickRestart({
  A: "g3", B: "bb3 b3", C: "c4 ab3", D: "c4", E: "bb3 ab3", F: "ab3 bb3 c4@2", G: "[g3@8 g3@11 ~@13]/2", H: "eb4",
  I: "bb3 d4", J: "[eb4@19 ~@13]/2",
})).s("gm_alto_sax").gain(0.15)

// other · alto sax · "Sassofono contralto 2"
const alto_sax_2 = note(`<
  ~ A@2 B@4 A C ~@16 A@2 B@4 A@2 D@2 E@2 F@2 G@2 ~@16 A@2 B@4 A@2 D@2 E@2 F@2 H I J K H
>`.pickRestart({
  A: "~ eb4@2 eb4 ~ eb4 ~ eb4", B: "~ d4@2 d4 ~ d4 ~ d4", C: "eb4@3 ~@13", D: "[b4@5 ab4 eb5 b4]/2",
  E: "[bb4@2 bb4@3 g4 f4 eb4]/2", F: "[bb4@10 g4@2 f4@3 eb4]/2", G: "[eb4@19 ~@13]/2", H: "eb4",
  I: "eb4@3 ~ g4@4 f4@4 eb4@4", J: "bb4", K: "bb4 bb4@2 ab4",
})).s("gm_alto_sax").gain(0.3)

// other · alto sax · "Sassofono contralto 2" · soft notes
const alto_sax_soft_2 = note("<~@9 A@2 B@3 C A D A@2 B@2 A C A D ~@16 A@2 B@3 C A D A@2 B@2 A C A D ~@19>".pickRestart({
  A: "eb3@2 eb3!2", B: "f3@2 f3!2", C: "bb3@2 bb3!2", D: "eb3@3 ~@13",
})).s("gm_alto_sax").gain(0.15)

// other · tenor sax · "Sassofono tenore"
const tenor_sax = note(`<
  ~ A@2 B@2 C D E@2 ~@16 F A@2 G@2 H I J K@4 L@2 K M ~@16 F A@2 G@2 H I J K@4 L@2 K M L N O
>`.pickRestart({
  A: "[bb3@2 bb3@3 d4!2 c4]/2", B: "[ab3@5 bb3!2 ab3]/2", C: "ab3 g3!2 f3", D: "eb3 d3", E: "[eb3@19 ~@13]/2",
  F: "~ eb4!2 d4", G: "[ab3@5 d4!2 c4]/2", H: "ab3 d4 eb4 f4", I: "~@2 eb3@2 g3@3 c4", J: "bb3@3 bb3",
  K: "~ eb4@2 eb4 ~ eb4 ~ eb4", L: "~ d4@2 d4 ~ d4 ~ d4", M: "eb4@3 ~@13", N: "bb3 f4@2 eb4", O: "eb4",
})).s("gm_tenor_sax").gain(0.4)

// other · tenor sax · "Sassofono tenore" · soft notes
const tenor_sax_soft = note(`<
  ~@9 A B C D E F G@2 A B C D H I J@2 ~@16 A B C D E F G@2 A B C D H I J@2 ~@19
>`.pickRestart({
  A: "g3", B: "bb3 b3", C: "c4 ab3", D: "c4", E: "bb3 ab3", F: "ab3 bb3 c4@2", G: "[g3@8 g3@11 ~@13]/2", H: "eb4",
  I: "bb3 d4", J: "[eb4@19 ~@13]/2",
})).s("gm_tenor_sax").gain(0.15)

// bass · baritone sax · "Sassofono baritono"
const bass = note(`<
  ~ A@2 B@4 A C ~@16 A@2 B@4 A@2 D@2 A@2 B@2 A C ~@16 A@2 B@4 A@2 D@2 A@2 B@2 A C B E F
>`.pickRestart({
  A: "eb2@2 eb2!2", B: "bb2@2 bb2!2", C: "eb2@3 ~@13", D: "ab2@2 ab2!2", E: "bb2 f2@2 eb2", F: "eb2",
})).s("gm_baritone_sax").gain(0.3)

// bass · baritone sax · "Sassofono baritono" · soft notes
const bass_soft = note("<~@9 A@2 B@3 C A D A@2 B@2 A C A D ~@16 A@2 B@3 C A D A@2 B@2 A C A D ~@19>".pickRestart({
  A: "eb2@2 eb2!2", B: "f2@2 f2!2", C: "bb2@2 bb2!2", D: "eb2@3 ~@13",
})).s("gm_baritone_sax").gain(0.15)

// other · trumpet
const trumpet = note(`<
  A B@2 C@2 D E F@2 ~@15 A B@2 C@2 G@2 H@2 I@2 J@2 K@2 F@2 ~@15 A B@2 C@2 G@2 H@2 I@2 J@2 K@2 L M N O P
>`.pickRestart({
  A: "~ eb5!2 d5", B: "[bb4@2 bb4@3 d5!2 c5]/2", C: "[ab4@5 d5!2 c5]/2", D: "c5 bb4!2 ab4", E: "g4 f4",
  F: "[eb4@19 ~@13]/2", G: "[ab4@2 ab4@3 f4 g4 ab4]/2", H: "[bb4@7 bb4]/2", I: "[b4@5 ab4 eb5 b4]/2",
  J: "[bb4@2 bb4@3 g4 f4 eb4]/2", K: "[bb4@10 g4@2 f4@3 eb4]/2", L: "eb4", M: "eb4@3 ~ g4@4 f4@4 eb4@4", N: "bb4",
  O: "bb4 f5@2 eb5", P: "eb5",
})).s("gm_trumpet").gain(0.4)

// other · trumpet
const trumpet_2 = note(`<
  A B@2 C@2 D E F@2 ~@16 B@2 C@2 G@2 H@2 I@2 J@2 K@2 F@2 ~@16 B@2 C@2 G@2 H@2 I@2 J@2 K@2 L M N O L
>`.pickRestart({
  A: "~ eb4!2 d4", B: "[bb3@2 bb3@3 d4!2 c4]/2", C: "[ab3@5 d4!2 c4]/2", D: "c4 bb3!2 ab3", E: "g4 f4",
  F: "[eb4@19 ~@13]/2", G: "[ab3@2 ab3@3 d4 eb4 f4]/2", H: "[g4@7 g4]/2", I: "[ab4@5 ab4 eb4 b3]/2",
  J: "[g4@2 g4@3 g4 f4 eb4]/2", K: "[bb4@10 g4@2 f4@3 eb4]/2", L: "eb4", M: "eb4@3 ~ g4@4 f4@4 eb4@4", N: "bb4",
  O: "bb3 f4@2 eb4",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · soft notes
const trumpet_soft = note("<~@17 A@2 B@2 A C A D ~@24 A@2 B@2 A C A D ~@19>".pickRestart({
  A: "~ eb4@2 eb4 ~ eb4 ~ eb4", B: "~ f4@2 f4 ~ f4 ~ f4", C: "~ d4@2 d4 ~ d4 ~ d4", D: "eb4@3 ~@13",
})).s("gm_trumpet").gain(0.15)

// bass · tuba
const bass_2 = note(`<
  ~ A@2 B@4 A C ~@16 A@2 B@4 A@2 D@2 A@2 B@2 A C ~@16 A@2 B@4 A@2 D@2 A@2 B@2 A C B E F
>`.pickRestart({
  A: "eb3@2 eb3!2", B: "bb2@2 bb2!2", C: "eb3@3 ~@13", D: "ab2@2 ab2!2", E: "bb2 f3@2 eb3", F: "eb3",
})).s("gm_tuba").gain(0.3)

// bass · tuba · soft notes
const bass_soft_2 = note("<~@9 A@2 B@3 C A D A@2 B@2 A C A D ~@16 A@2 B@3 C A D A@2 B@2 A C A D ~@19>".pickRestart({
  A: "eb3@2 eb3!2", B: "f2@2 f2!2", C: "bb2@2 bb2!2", D: "eb3@3 ~@13",
})).s("gm_tuba").gain(0.15)

// drums · kick
const kick = s("bd").struct("<~ A@7 B ~@16 A@15 B ~@16 A@15 B A B C>".pickRestart({
  A: "x ~ x!2", B: "x", C: "x!16",
})).gain(0.4)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@9 A@7 B A@7 B ~@16 A@7 B A@7 B ~@19>".pickRestart({
  A: "x ~ x!2", B: "x",
})).gain(0.15)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@7 ~@17 A@15 B ~@16 A@15 B A C D>".pickRestart({
  A: "x!8", B: "x", C: "x!5 ~@11", D: "x!16",
})).gain(0.4)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@17 [x!8]!7 ~@25 [x!8]!7 ~@20>").gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@40 x ~@31 x ~@2 [x!16]>").gain(0.4)

// drums · bongos
const bongos = s("bongo:4").struct("<~ A@7 B ~@7 B ~@7 B A@15 ~@8 B ~@7 B A@15 ~ A B ~>".pickRestart({
  A: "~@2 x!3 ~ x ~@3 x ~@3 x ~", B: "x",
})).gain(0.78)

// drums · bongos · soft notes
const bongos_soft = s("bongo:4").struct("<~@9 A@7 ~ A@7 ~@17 A@7 ~ A@7 ~@20>".pickRestart({
  A: "~@2 x!3 ~ x ~@3 x ~@3 x ~",
})).gain(0.52)

// drums · whistle
const whistle = s("ballwhistle:0").struct(`<
  ~ A ~ A ~@2 B A ~@21 B A@2 ~@5 B A@3 ~@20 B A@2 ~@5 B A@4 ~@2
>`.pickRestart({
  A: "x", B: "x!2",
})).gain(0.52)

stack(
  tuba, tuba_soft, clarinet, alto_sax, alto_sax_soft, alto_sax_2, alto_sax_soft_2, tenor_sax, tenor_sax_soft, bass,
  bass_soft, trumpet, trumpet_2, trumpet_soft, bass_2, bass_soft_2, kick, kick_soft, tambourine, tambourine_soft, crash,
  bongos, bongos_soft, whistle
)

More by PR