Strudelify

Voglio volare

Masini

KeyC minorTempo99 bpm
0:00/0:00
// Voglio volare — Masini
// 99 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 127 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(99/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 · overdriven guitar · "guit ritm"
const overdriven_guitar = note(`<
  ~@42 A@3 ~@2 B C D E F G H I ~@3 J K@2 ~@17 L M@2 ~@26 N O@4 P Q R S T@3 U V Q W X@3 ~
>`.pickRestart({
  A: "[~@8 c5@3 f5@3 d5@29 ~@5]/3",
  B: "~@2 [bb3,d4,f4]!2 ~ [bb3,d4,f4] [bb3,d4,f4]@2 ~@2 [bb3,d4,g4]@2 [bb3,d4,g4]@2 [bb3,d4,g4]@2", // Bb Gm
  C: "~@2 [g3,bb3,eb4] [g3,bb3,eb4]@2 [g3,bb3,eb4] [g3,bb3,eb4]@2 [a3,c4,f4] ~ [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2", // Eb F
  D: "~@2 [bb3,d4,f4]!2 ~ [bb3,d4,f4]!2 ~@3 [bb3,d4,g4]@2 ~ [bb3,d4,g4] [bb3,d4,g4]@2", // Bb Gm
  E: "~@2 [g3,bb3,eb4]!2 ~ [g3,bb3,eb4] [bb3,eb4] ~ [a3,c4,f4] ~ [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2", // Eb Eb5 F
  F: "~@2 [bb3,d4,f4]!2 ~ [bb3,d4,f4] [bb3,d4,f4]@2 ~@2 [bb3,d4,g4]!2 [bb3,d4,g4]@2 [bb3,d4,g4]@2", // Bb Gm
  G: "~@2 [g3,bb3,eb4]!2 ~ [g3,bb3,eb4]!2 ~ [a3,c4,f4] ~ [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2", // Eb F
  H: "~@2 [bb3,d4,f4]!2 ~ [bb3,d4,f4] [bb3,d4,f4]@2 ~ bb3 [bb3,d4,g4] [bb3,d4,g4]@2 [bb3,d4,g4] [bb3,d4,g4]@2", // Bb Gm
  I: "~@2 [bb3,eb4] [g3,bb3,eb4] ~ [g3,bb3,eb4]!2 ~ [a3,c4,f4] ~ [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2", // Eb5 Eb F
  J: "~@11 c5@2 f5@3", K: "[c5@31 ~]/2", L: "~@10 f4@3 bb4@3", M: "[f4@29 ~@3]/2", N: "c5@3 c6@5",
  O: "[bb4@9 ~@3 g4@7 bb4@3 g4@2 bb4@3 db5@2 f4@14 ~ eb4@14 d4@3 ~ eb4@2]/4", P: "bb3@10 eb4@3 f4@3",
  Q: "d4@3 eb4@2 ab4@3 g4@3 ab4@2 eb5@3", R: "c5@3 d5@2 ab5@2 ~ g5@8", S: "c6@14 ~ g5",
  T: "[bb5@9 ~@2 g5@7 c6@2 g5@2 db6@4 gb5@4 f5@6 eb5@2 ab4@6 eb5@4]/3", U: "g4@6 c5@9 ~", V: "~@3 ab4@5, eb4@9 ~@7",
  W: "c5@3 d5@5 eb5@3 ab5@5", X: "[g5@35 ~@13]/3",
})).s("gm_overdriven_guitar").gain(0.02).pan(0.4)

// bass · fretless bass · "bass"
const bass = note(`<
  ~@3 A B C D A B C E A B C D A B C E F B F G A B C D A B C D A B C E F B F G A B C D A B C H I J I J I J I J A B C D K
  L M N ~@12 O P Q R O P Q S T U V W T U V W X Y Z AA X Y Z AA X Y Z AA X Y Z AA X Y Z AA X Y Z AA X Y Z AA X Y Z AA X Y
  ~@2
>`.pickRestart({
  A: "g1@13 a1 bb1 g1", B: "eb1", C: "f1", D: "c2", E: "c2@3 bb1", F: "g1", G: "c1@15 ~", H: "c1@5 ~ g1@2 c2@7 ~",
  I: "bb1 g1", J: "eb1 f1", K: "g1@7 ~ f1@7 ~", L: "e1@7 ~ eb1@7 ~", M: "c1@7 ~ d1@8", N: "g1@3 ~",
  O: "c1@2 ~ c1 ~@2 c1@3 ~ c1@2 eb1@2 c1@2", P: "ab1@2 ~ ab1@2 ~ ab1@2 ~@2 ab1@2 c2@2 ab1@2",
  Q: "bb1@2 ~ bb1@2 ~ bb1@2 ~@2 bb1@2 c2@2 ab1 ~", R: "f1@2 ~ f1@2 ~ f1@2 ~@2 f1 eb1 d1@3 ~",
  S: "f1@2 ~ f1@2 ~ f1@8 ~@2", T: "eb2@2 ~ eb2@2 ~ eb2 ~ c2 ~ c2 ~ eb2@2 c2 ~",
  U: "ab1@2 ~ ab1@2 ~ ab1 ~ bb1 ~ bb1 ~ d2@2 bb1 ~", V: "eb2@2 ~ eb2@2 ~ eb2 ~ c2 ~ c2 ~ eb2 ~ c2 ~",
  W: "ab1@2 ~ ab1@2 ~ ab1 ~ bb1 ~ bb1@2 d2 ~ bb1 ~", X: "c1@2 ~ c1@2 ~ c1@2 ~@2 c1@2 eb1@2 c1@2",
  Y: "ab1@2 ~ ab1@2 ~ ab1@2 ~@2 ab1@2 c2@2 ab1 ~", Z: "bb1@2 ~ bb1@2 ~ bb1@2 ~@2 bb1@2 c2@2 bb1@2",
  AA: "f1@2 ~ f1@2 ~ f1@2 ~@2 f1@2 ab1 ~ f1@2",
})).s("gm_fretless_bass").gain(0.4)

// bass · electric bass finger · "bass"
const bass_2 = note("<~@63 A B C D A B C D A E F G ~@52>".pickRestart({
  A: "c1@2 ~ c1@2 ~ c1@3 ~ c1@2 eb1@2 c1 ~", B: "ab1@2 ~ ab1@2 ~ ab1@3 ~ ab1@2 c2@3 ~",
  C: "bb1@2 ~ bb1@2 ~ bb1@3 ~ bb1@2 c2@2 ab1@2", D: "f1@2 ~ f1@2 ~ f1@3 ~ f1@2 eb1@4",
  E: "ab1@2 ~ ab1@2 ~ ab1@3 ~ ab1@2 bb1@2 g1@2", F: "c1@2 ~ c1@2 ~ c1@3 ~ c1@2 eb1@2 g1@2",
  G: "f1 ~@2 f1 ~@2 f1@2 ~@2 f1@2 eb1@2 d1@2",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · pad warm · "synt 1"
const pad_warm = note(`<
  ~@3 A@2 B@2 A@2 B C D@8 E@4 A@2 B@2 F@8 G@4 A@2 B@2 A@2 B@2 ~@8 H A B@2 A@2 C I J@8 K@3 L M@2 N@2 ~@48
>`.pickRestart({
  A: "[bb3,g4]", B: "[c4,g4]", C: "g4",
  D: "[[bb3,d4]@2 a3 eb4 [bb3,d4]@2 a3 eb4, g4@127 ~, c5@17 ~@15 c4@32 ~@32 c4@32]/8", // Bb
  E: "[[bb3,d4]@47 ~ [c4,eb4]@15 ~, g4@63 ~]/4", F: "[[bb3,d4]@2 a3 eb4 [bb3,d4]@2 a3 eb4, g4@127 ~, ~ c4 ~ c4]/8",
  G: "[[bb3,d4]@47 ~ [a3,eb4]@15 ~, g4@63 ~]/4", H: "[bb3,g4,a5]", I: "[g3,d4]",
  J: "[g4@3 ab4 g4@4 f4@8 eb4@8 d4@4 ab4@4, c5]/8", K: "[g4@47 ~]/3", L: "[d4,ab4]", M: "[g4@7 ab4]/2", N: "c5/2",
})).s("gm_pad_warm").gain(0.11)

// chords · rock organ · "synt 2"
const rock_organ = note("<~@47 A@8 B@2 ~@70>".pickRestart({
  A: "[f4 ~ eb5 [a4,c5] ~@2 eb5 [a4,c5,f5], bb4@3 ~ bb4@3 ~, d5 ~ d5 ~, ~ g4@2 f4@2 g4@2 ~]/4", B: "[g4,d5]/2",
})).s("gm_rock_organ").gain(0.16).pan(0.4)

// chords · pad poly · "synt 2"
const pad_poly = note(`<
  ~@63 A B C D A B C D A B A E A B C D A B C D F G F H F G F H I J K D I J K D L J K D L J K D L J K D L J K D L J K D L
  J K D L J ~@2
>`.pickRestart({
  A: "[g3,c4,eb4]", B: "[ab3,c4,eb4]", C: "[f3,bb3,d4]", D: "[f3,ab3,c4,eb4]", E: "[f3,ab3,d4]",
  F: "[bb3,eb4,g4] [c4,eb4,g4]", G: "[c4,eb4,ab4] [bb3,d4,f4]", H: "[c4,eb4,ab4] [d4,f4,bb4]", I: "g4@3 ab4, [c4,eb4]",
  J: "[ab3,c4,eb4,g4]", K: "[f3,bb3,d4,f4]", L: "[g3,c4,eb4,g4]",
})).s("gm_pad_poly").gain(0.22).pan(0.4)

// other · orchestral harp · "interventi"
const orchestral_harp = note("<~ A@10 ~@12 A@4 ~@12 A@8 ~@8 A@8 ~@8 B@4 ~@52>".pickRestart({
  A: "g3 ~ g3 ~ g3 ~@4 a3 ~ a3!2 bb3 c4 d4", B: "c4 ~ c4 ~ c4 ~@4 d4 ~ d4!2 eb4 f4 g4",
})).s("gm_orchestral_harp").gain(0.14)

// other · electric guitar muted · "interventi"
const electric_guitar_muted = note(`<
  ~@4 A ~ A ~ B ~@2 C D E D F G H I C D J D ~@4 C D K D F G H L C D J D ~@88
>`.pickRestart({
  A: "~@6 g3@2 bb3 ~ f3 g3 bb3 a3 bb3 a3", B: "~@6 g3@2 bb3 ~ f3 g3 bb3 a3 c4 d4",
  C: "~@6 g3 ~ bb3 ~ f3 g3 bb3 a3 bb3 a3", D: "~@2 f3 g3 ~ f3 g3 ~ bb3 ~@2 f3 g3 bb3 ~@2",
  E: "~@2 f3 a3 ~@2 g3 ~ bb3 ~ f3 g3 bb3 a3 bb3 a3", F: "~@2 g3 bb3 ~ f3 g3 ~ bb3 ~ f3 g3 ~ bb3 f3@2",
  G: "~@2 f3 g3 ~ bb3 g3@2 bb3 g3 ~ f3 ~ g3 bb3 ~", H: "~@2 g3 c4 ~ f3 f3@2 ~ f3 ~ g3 ~ bb3 a3 g3",
  I: "~ f3 ~ f3 ~ g3 g3@2 bb3 ~@7", J: "~@2 f3 bb3 ~@2 g3 ~ bb3 ~ f3 g3 bb3 a3 bb3 a3",
  K: "~@2 f3 a3 ~@2 g3 ~ bb3 ~ f3 g3 bb3 a3 bb3 c4", L: "~ f3 ~ f3 ~ g3 g3@2 bb3 ~@2 g3 f3@2 ab3 ~",
})).s("gm_electric_guitar_muted").gain(0.1).pan(0.7)

// chords · electric guitar jazz · "interventi" · Cm Bb
const electric_guitar_jazz = note("<~@10 [~@3 [c4,eb4]] [[bb3,d4]@13 ~@3] ~@115>")
  .s("gm_electric_guitar_jazz").gain(0.11).pan(0.4)

// other · pad bowed · "interventi"
const pad_bowed = note("<~@19 A B@2 ~@13 A B@2 ~@89>".pickRestart({
  A: "d5", B: "[g5@31 ~]/2",
})).s("gm_pad_bowed").gain(0.09).pan(0.6)

// other · reed organ · "interventi"
const reed_organ = note("<~@23 A@3 B@8 ~@5 C@5 ~@6 D E ~@75>".pickRestart({
  A: "g4@3 bb4@3 c5@2 d5@3 c5@3 bb4@2, ~@8 db5 ~@7", B: "[g4@2 ~ bb4@3 c5@2 d5@120]/8",
  C: "[g4@3 bb4@3 c5@2 db5 ~@2 c5@3 bb4@2 ~@48 g4@3 bb4@3 c5@2 db5 ~@2 c5@3 bb4@2, ~@8 d5@67 ~@5]/5",
  D: "~@8 a4@3 bb4@3 c5@2", E: "bb4",
})).s("gm_reed_organ").gain(0.04).pan(0.4)

// chords · pad new age · "interventi"
const pad_new_age = note("<~@26 A@2 ~@4 B@3 ~@92>".pickRestart({
  A: "[~@10 a5 [c6,f6]@20 ~]/2", B: "[~@5 d5@13 ~@6]/3",
})).s("gm_pad_new_age").gain(0.1).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~ A@62 B@15 C B@3 D B@3 C B@3 E B@3 C B@3 F B@3 C B@7 C B@7 C B@6 ~@2>".pickRestart({
  A: "x", B: "x ~@2 x ~@2 x ~@9", C: "x ~@2 x ~@2 x ~@3 x!2 ~@4", D: "x ~@2 x ~@2 x ~@3 x ~@2 x ~ x",
  E: "x ~@2 x ~@2 x ~@3 x ~@5", F: "x ~@2 x ~@2 x ~@3 x!2 ~ x ~@2",
})).gain(0.37)

// drums · snare
const snare = s("sd").struct("<A B@61 C D@7 E D@11 F D@7 E D@7 G D@7 H D@7 H D@7 H D@2 ~@2>".pickRestart({
  A: "~@7 x", B: "~ x", C: "~@3 x!2 ~@3 x ~@7", D: "~ x ~ x", E: "~@4 x ~@7 x!2 ~@2", F: "~@2 x ~ x ~@2 x",
  G: "~@4 x ~@3 x!2 ~@4 x ~", H: "~@4 x ~@3 x!2 ~@2 x!2 ~@2",
})).gain(0.37)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<A@10 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@3 ~@9 A@3 ~ A@3 ~@65>".pickRestart({
  A: "~@7 x",
})).gain(0.16)

// drums · low tom
const low_tom = s("lt").struct("<~@18 A ~@15 A ~@11 B ~@15 C ~@7 D ~@11 E ~@15 F ~@7 G ~@7 G ~@7 G ~@4>".pickRestart({
  A: "~@11 x ~@2 x ~", B: "~@15 x", C: "~@7 x ~@8", D: "~@14 x!2", E: "~@11 x ~@4", F: "~@9 x!3 ~@2 x ~",
  G: "~@11 x ~@2 x!2",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B A@7 C A@3 D B@2 A@5 E A B A F A@3 D B@2 A@5 E A B A F A B A G H I@7 A B A F A B A J K L@7 M L N O P N@2 Q P N@2
  R P N@2 Q P N@2 S P N@2 Q P N@2 T M N@2 Q P N@2 T M N@2 Q P N@2 T M N@2 Q P N@2 T M N ~@2
>`.pickRestart({
  A: "~@2 x ~@3 x ~@3 x!2 ~@2 x ~", B: "x ~ x ~@3 x ~@3 x!2 ~@2 x ~", C: "~@2 x ~@3 x ~@3 x!2 ~ x!2 ~",
  D: "~@2 x ~@3 x ~@3 x!2 ~@2 x!2", E: "~@2 x ~@3 x ~@3 x ~ x!2 ~@2", F: "~@2 x ~@3 x ~@4 x!2 ~ x!2",
  G: "~ x ~ x ~@2 x ~", H: "~ x!3 ~@2 x!2", I: "x!4 ~ x!3", J: "~ x ~@6", K: "~ x!2 ~@2 x!3", L: "x!8", M: "~ x!7",
  N: "x!5 ~ x!2", O: "x!5 ~ x ~", P: "~ x!4 ~ x!2", Q: "x!5 ~@2 x", R: "x!2 ~ x ~@3 x", S: "x!2 ~ x!2 ~@3",
  T: "x!2 ~ x ~@4",
})).gain(0.11)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A@2 B@7 C B@3 D B@2 E F B@3 G B@2 E H B@3 D B@2 E F B@3 G B@2 E H B@2 E H I J@7 B@2 E H B@2 E K L ~@63
>`.pickRestart({
  A: "~@3 x ~@3 x!2 ~@6 x", B: "~@3 x!2 ~@2 x!2 ~@3 x ~@2 x", C: "~@3 x!2 ~@2 x ~@4 x ~@3",
  D: "~@3 x!2 ~@2 x!2 ~@3 x ~@3", E: "x ~@2 x!2 ~@2 x!2 ~@3 x ~@2 x", F: "x ~@2 x!2 ~@2 x!2 ~@7",
  G: "~@3 x!2 ~@2 x!2 ~@2 x ~@4", H: "x ~@2 x!2 ~@2 x!2 ~ x ~@5", I: "~ x ~ x ~ x ~ x ~ x!3 ~ x ~ x",
  J: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", K: "~@3 x!2 ~@2 x!2 ~@7", L: "~@3 x!2 ~@3",
})).gain(0.05)

// drums · mid tom
const mid_tom = s("mt").struct("<~@18 A ~@15 A ~@11 B ~@15 C ~@11 B ~@15 D ~@15 E ~@7 F ~@7 F ~@4>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "x ~@4 x!2 ~@9", D: "~@14 x!2", E: "~@5 x ~@2", F: "~@5 x ~ x",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@10 A ~@11 B ~@3 C ~@11 B ~@3 C ~@15 C ~@14 D@9 E D@7 E D@7 F ~ D@6 F ~ D@6 F ~ D@6 F ~ D ~@2
>`.pickRestart({
  A: "~@15 x", B: "~@7 x", C: "~@3 x", D: "~@5 x ~@2", E: "~@2 x ~@2 x ~@2", F: "~ x ~@2",
})).gain(0.16)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@9 A ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@2 B A ~@3 A ~@2 B A ~@3 A ~@2 B A
  ~@3 A ~@2 B A ~@3 A ~@2 B A ~@3 A ~@2 B A ~@3 A ~ A ~
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.16)

// drums · tambourine
const tambourine = s("tb").struct("<~@47 [~ x]!8 ~@72>").gain(0.21)

stack(
  overdriven_guitar, bass, bass_2, pad_warm, rock_organ, pad_poly, orchestral_harp, electric_guitar_muted,
  electric_guitar_jazz, pad_bowed, reed_organ, pad_new_age, kick, snare, snare_soft, low_tom, hihat, hihat_soft,
  mid_tom, open_hat, crash, tambourine
)

More by Masini