Strudelify

Mi piaci perche

Rossi Vasco

KeyA majorTempo140 bpm
0:00/0:00
// Mi piaci perche — Rossi Vasco
// 140 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 8 distortion guitar (copy of ch 6 overdriven guitar)
// note: Full arrangement: all 115 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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.

// bass · electric bass finger
const bass = note(`<
  ~ A@3 ~ B@3 C D E F ~ D E F ~ D E F ~ D E F G H I J@2 I@2 J K D E F ~ D E F ~ D E F ~ D E F G H I J@2 I@2 J K ~@17 H I
  J@2 I@2 J K D E F ~ D E F ~ D E F ~ D E F G D E F ~ D E F G D E F ~ D E F L M
>`.pickRestart({
  A: "[e1@43 ~@5]/3", B: "[e1@43 ~@5, e2@19 ~@5]/3", C: "~@8 b1 ~ c#2 ~ d2 ~ d#2@2",
  D: "e2 ~ e2 ~ a1 ~@3 a1@2 b1 ~ d2 ~ g2@2", E: "~@2 e2@2 a1@2 e2 ~ a1@2 b1@2 d2@2 e2 ~",
  F: "d2 ~ d2 ~ a1 ~ d2 ~ g1@2 a1 ~ c2@2 d2 ~", G: "~@7 a1", H: "b1@2 b1 ~ b1 ~ b1 ~ b1 a#1 ~@6",
  I: "a1@2 b1 ~ b1 ~ b1 ~ b1 a#1 ~@6", J: "g1@2 a1 ~ a1 ~ a1 ~ a1 g#1 ~@6", K: "g1@2 a1 ~ a1 ~ a1 ~@3 c#2@2 d2 ~ d#2@2",
  L: "~@10 c#2@2 d2 ~ d#2@2", M: "e2 d#2 d2 ~@13",
})).s("gm_electric_bass_finger").gain(0.48)

// bass · electric bass finger · soft notes
const bass_soft = note("<~ A@3 ~@21 B@2 C@2 B@2 C ~@17 B@2 C@2 B@2 C ~@18 B@2 C@2 B@2 C ~@33 D>".pickRestart({
  A: "[e2@19 ~@5]/3", B: "~@9 [g#1,a1] [f#1,g1] [d#1,e1,f1] d1 ~@3", C: "~@9 [f#1,g1] [e1,f1] [c#1,d1,d#1] c1 ~@3",
  D: "~@2 c#2 [b1,c2] a#1 ~@11", // Cmaj7
})).s("gm_electric_bass_finger").gain(0.24)

// bass · slap bass 2
const bass_2 = note(`<
  ~ A B@2 C@2 B@2 D ~@3 E ~@3 E ~@3 E ~@3 E F@2 G@2 F@2 G ~@4 E ~@3 E ~@3 E ~@3 E F@2 G@2 F@2 G ~ H I@2 J@2 K@2 L@6 M@4
  F@2 G@2 F@2 G ~@4 E ~@3 E ~@3 E ~@3 E ~@3 E ~@3 E ~@3 E ~@3 N ~
>`.pickRestart({
  A: "~@6 d3 ~", B: "[~@2 e2@11 ~ c3 ~]/2", C: "[~@4 [d2,a2]@23 ~ d3@2 ~@2]/2", D: "~@4 [d2,a2]@5 ~@7",
  E: "~@2 c3 ~@3 c3 ~@3 c3@3 ~@3", F: "~@6 a2 ~", G: "~@6 g2 ~", H: "~@12 d3@2 ~ d3",
  I: "[~@4 e2@2 ~ e2@21 d3@2 ~ d3]/2", J: "[~@4 e2@2 ~ e2@21 ~@3 c3]/2", K: "[~@4 d2@2 ~ d2@21 c3@2 ~ c3]/2",
  L: "[~@7 d2@21 d3@2 ~ d3@2 ~@6 e2@21 d3@2 ~ d3@2 ~@6 e2@21 c3@2 ~ c3]/6", M: "[~@7 d2@21 ~@3 c3@2 ~@6 d2@24 ~]/4",
  N: "~@2 c3 ~@3 c3 ~@9",
})).s("gm_slap_bass_2").gain(0.64)

// bass · slap bass 2 · soft notes
const bass_soft_2 = note(`<
  ~ A B C@2 A B C@2 ~@3 D ~@3 D ~@3 D ~@3 D E@2 F@2 E@2 F ~@4 D ~@3 D ~@3 D ~@3 D E@2 F@2 E@2 F ~@5 G ~@2 H ~ I ~ I ~ H
  G H ~ E@2 F@2 E@2 F ~@4 D ~@3 D ~@3 D ~@3 D ~@3 D ~@3 D ~@3 D ~@5
>`.pickRestart({
  A: "~@7 e3", B: "e2 ~@3", C: "[~@7 d3@2 ~@7]/2", D: "~@12 b2@2 a2 ~", E: "~@14 b2 ~", F: "~@14 a2 ~", G: "~@6 c3 ~",
  H: "~@2 d2 ~@5", I: "~@2 e2 ~@5",
})).s("gm_slap_bass_2").gain(0.29)

// other · lead 5 charang
const lead_5_charang = note("<~@98 A@4 B@4 C@4 D@4 ~>".pickRestart({
  A: "[a2 b2@3 d3@2 a2@6 d3@2 g2@6 d3@2 f#2@6 d3@2 a2 b2@5 d3@2 a2@6 d3@2 g2@5 ~ d3 ~ d3@10, ~@53 e3@2 ~@9]/4",
  B: "[b2@4 d3@2 a2@6 d3@2 g2@6 d3@2 f#2@5 ~ f#2 g2 f#2@30 ~@4, a2 ~@63]/4",
  C: "[b2@4 d3@2 a2@6 d3@2 g2@6 d3@2 f#2@6 d3@2 b2@6 d3@2 a2@6 d3@2 g2@5 ~ d3 ~ d3@10, a2 ~@29 a2 ~@13 c3 ~@8 e3@2 ~@9]/4",
  D: "[a2 b2@3 d3@2 a2@6 d3@2 g2@6 d3@2 f#2@5 ~ f#2 g2 f#2@23 ~@11]/4",
})).s("gm_lead_5_charang").gain(0.64).pan(0.4)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  A B@8 ~@16 C D E F G H I J ~@16 C D E F G H I J K@6 ~@3 L M@3 N O P@2 C D E F G H I J ~@31 Q R
>`.pickRestart({
  A: "~@5 c#3 d3 d#3", B: "[~@4 [d4,g4]@24 [b3,e4]@2 a3@38 [d4,g4]@24 [b3,e4]@2 [a3,d4]@33 ~, ~@15 d4@18 ~@31]/8",
  C: "~@2 b2@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3] [a#2,f3] [g#2,a2,d#3,e3] g2 f2 ~@3", // B5 A#5 Emaj7
  D: "~@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3] [a2,a#2,e3,f3] [g#2,d#3] g2 ~@4", // B5 Fmaj7 G#5
  E: "~@2 a2@2 [a2,e3]@2 [a2,e3]@2 [a2,e3] [g#2,d#3] [f#2,g2,d3] ~@5", // A5 G#5 Gmaj7
  F: "~@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3] [g#2,d#3] [f#2,g2,c#3] ~@5", // A5 G#5 F#
  G: "~@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3] [a#2,f3] [g#2,a2,d#3,e3] g2 f2 ~@3", // B5 A#5 Emaj7
  H: "~@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3] [a#2,f3] [g#2,a2,d#3,e3] g2 ~@4", // B5 A#5 Emaj7
  I: "~@2 a2@2 [a2,e3]@2 [a2,e3]@2 [a2,e3] [g#2,d#3] [g2,d3] ~@5", // A5 G#5 G5
  J: "~@2 [a2,e3]@2 [a2,e3]@2 [a2,e3] ~@3 [c#3,g#3]@2 [d3,a3]@2 [d#3,a#3] ~", K: "[~@2 [g3,d4]@39 ~@7]/6",
  L: "~@12 [b3,e4,g4,b4]@3 ~", M: "~@2 [b3,e4,g4,b4] ~@3 [b3,e4,g4,b4] ~",
  N: "~@4 [a3,d4,f#4,a4]@2 ~@6 [a3,d4,f#4,a4]@3 ~", O: "~@4 [a3,d4,f#4,a4]@3 ~@5 [a3,d4,f#4,a4]@2 ~@2",
  P: "~@2 [a3,d4,f#4,a4] ~@3 [a3,d4,f#4,a4] ~", Q: "~@10 [c#3,g#3]@2 [d3,a3]@2 [d#3,a#3] ~",
  R: "[e3,b3] [d#3,a#3] [c#3,d3,g#3,a3] [c3,g3] ~@12", // E5 D#5 Dmaj7 C5
})).s("gm_overdriven_guitar").gain(0.32).pan(0.6)

// chords · overdriven guitar · soft notes
const overdriven_guitar_soft = note("<~@25 A B C D E F G ~@17 A B C D E F G ~@18 A B C D E F G ~@33 H>".pickRestart({
  A: "~@2 f#3@2 ~@7 d3 c3 [e2,b2] ~@2", B: "~@11 [f2,c3,d3] [f#2,c#3] [e2,b2] ~@2",
  C: "~@2 e3@2 ~@6 c#3 [e2,f2,b2,c3] [d#2,a#2] ~@3", D: "~@10 d3 [e2,f2,b2,c3] [d2,e2,a2,b2] ~@3",
  E: "~@11 d3 c3 [e2,b2] ~@2", F: "~@11 [f2,c3,d3] ~ [e2,b2] ~@2",
  G: "~@2 e3@2 ~@7 [f2,f#2,c3,c#3] [d#2,a#2] [e2,b2] ~@2", H: "~@3 [b2,f#3] [a#2,f3] ~@11",
})).s("gm_overdriven_guitar").gain(0.08).pan(0.6)

// other · distortion guitar
const distortion_guitar = note(`<
  A B@8 C D E F G D E F G D E F G D E F ~@8 G D E F G D E F G D E F G D E F ~@33 G D E F G D E F G D E F G D E F G D E F
  G D E F G D E F G D E H ~
>`.pickRestart({
  A: "~@5 c#3 d3 d#3", B: "[~@4 [d4,g4]@24 [b3,e4]@2 a3@38 [d4,g4]@24 b3@2 [a3,d4]@33 ~, ~@15 d4@18 ~@31]/8",
  C: "[e2,e3] ~ [e2,e3] ~ b3@4 [e2,e3] ~ [e2,e3] ~ [e3,b3]@3 ~", // E E5
  D: "[e2,e3] ~ [e2,e3] ~ [e3,b3,e4]@4 [e2,e3] ~ [e2,e3] ~ [e3,b3,e4]@3 ~", // E E5 E E5
  E: "[d2,d3] ~ [d2,d3] ~ [d3,a3,d4]@4 [d2,d3] ~ [d2,d3] ~ [d3,a3,d4]@3 ~", // D D5 D D5
  F: "[d2,d3] ~ [d2,d3] ~ [d3,a3,d4]@3 ~ [d2,d3] ~ [d2,d3] ~ [d3,a3,d4]@3 ~", // D D5 D D5
  G: "e3 ~ [e2,e3] ~ b3@4 [e2,e3] ~ [e2,e3] ~ [e3,b3]@3 ~", H: "[d2,d3] ~ [d2,d3] ~ [d3,a3,d4]@3 ~ d2 ~@7",
})).s("gm_distortion_guitar").gain(0.51)

// other · distortion guitar · soft notes
const distortion_guitar_soft = note(`<
  ~@6 A ~@2 B ~@3 B ~@3 B ~@3 B ~@11 B ~@3 B ~@3 B ~@3 B ~@36 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@4
>`.pickRestart({
  A: "~@6 e4 ~", B: "~@4 [e3,e4]@4 ~@4 e4@3 ~",
})).s("gm_distortion_guitar").gain(0.3)

// bass · slap bass 2
const bass_3 = note("<~@57 A B@8 C@6 D@3 ~@40>".pickRestart({
  A: "~@15 d3",
  B: "[~ d3@2 ~ d3 ~@2 e2@2 e2@3 ~@19 d3@2 d3@2 ~ d3 ~@2 e2@2 e2@3 ~@19 c3@2 c3@2 ~ c3 ~@2 d2@2 d2@3 ~@19 c3@2 c3@2 ~ c3 ~@2 d2@2 d2@3 d2@19 d3, ~@12 e2@21 ~@11 e2@21 ~@11 d2@21 ~@31]/8",
  C: "[~ d3@2 ~ d3@2 ~@3 e2@3 ~@19 d3@2 d3@2 ~ d3@2 ~@3 e2@3 ~@19 c3@2 c3@2 ~ c3 ~@4 d2@3 d2@19 c3, ~@12 e2@21 ~@11 e2@21 ~@31]/6",
  D: "[~ c3@2 ~ c3@2 ~@3 d2@3 d2@24 ~@12]/3",
})).s("gm_slap_bass_2").gain(0.16).pan(0.7)

// bass · slap bass 2 · soft notes
const bass_soft_3 = note("<~@66 A ~ A ~ B ~ B ~@42>".pickRestart({
  A: "~@7 e2@2 ~@7", B: "~@7 d2@2 ~@7",
})).s("gm_slap_bass_2").gain(0.05).pan(0.7)

// bass · lead 5 charang
const bass_4 = note("<~@2 A@3 ~ B@3 ~@48 C@3 D@2 E@8 F@4 ~@41>".pickRestart({
  A: "[~ [e1,e2]@8 [d1,d2]@3]/3", B: "[~@4 [e1,e2]@29 ~@3 [d1,d2]@8 ~@4]/3", C: "e1/3", D: "[~@7 [e1,e2]@25]/2",
  E: "[~ [d1,d2]@16 [e1,e2]@15]/8", F: "[~@4 [d1,d2]@59 ~]/4",
})).s("gm_lead_5_charang").gain(0.48)

// other · lead 1 square
const lead_1_square = note(`<
  ~@9 A B C D A B C D A B C D A B C D ~@8 A B C D A B C D A B C D A B C D ~@33 A B C D A B C D A B C D A B C D A B E D A
  B E D A B E D A B E D ~
>`.pickRestart({
  A: "~@2 a4 g#4 a4 g#4 ~@2", B: "~@4 a4@2 g#4@2 a4@2 b4@2 a4@2 g#4 ~", C: "a4 ~ g4 f#4 g4 f#4 g4 f#4",
  D: "g4@2 f#4 ~@13", E: "~@2 g4 f#4 g4 f#4 g4 f#4",
})).s("gm_lead_1_square").gain(0.22)

// other · lead 1 square · soft notes
const lead_1_square_soft = note(`<
  ~@9 A B C D A B C D A B C D A B C D ~@8 A B C D A B C D A B C D A B C D ~@33 A B C D A B C D A B C D A B C D A B E D A
  B E D A B E D A B E D ~
>`.pickRestart({
  A: "~@6 a4 g#4", B: "~@5 g#4 ~ b4", C: "~@2 g#4 ~@13", D: "~@4 g4@2 f#4 ~@9", E: "a4@2 g#4 ~@13",
})).s("gm_lead_1_square").gain(0.12)

// chords · recorder
const recorder = note(`<
  ~@11 A B ~@2 A B ~@2 A B ~@2 A B ~@8 C@8 D@3 B E@4 ~@33 C@8 D@3 B E@4 ~@2 A B ~@2 A B ~@2 A B ~@2 A F ~
>`.pickRestart({
  A: "~@8 a4@3 ~@5", B: "a4@3 ~@5 a4@3 ~ b4@2 a4@2",
  C: "[e3@40 a4@3 ~@5 a4@3 ~@5 a4@3 ~ b4@2 a4@2 [e3,b3]@40 a4@3 ~@5 a4@3 ~@5 a4@3 ~ b4@2 a4@2, ~@40 [d3,a3]@25 ~@39 [d3,a3]@24]/8", // E5 D5
  D: "[b3@40 a4@3 ~@5]/3", E: "[[e3,b3]@40 a4@3 ~@5 a4@3 ~@5 a4@3 ~ b4@2 a4@2, ~@5 a3@3]/4", F: "a4@3 ~@13",
})).s("gm_recorder").gain(0.26).pan(0.1)

// chords · recorder · soft notes
const recorder_soft = note(`<
  ~@9 A@3 ~ A@3 ~ A@3 ~ A@3 ~@9 B@3 ~ A@3 ~ C@8 ~@33 B@3 ~ A@3 ~ C@8 A@3 ~ A@3 ~ A@3 ~ A@3 ~@2
>`.pickRestart({
  A: "[e4@5 ~]/3", B: "[[b3,e4]@5 ~]/3", C: "[[e3,e4]@5 [d3,a3]@3 e4@5 d3@3]/8",
})).s("gm_recorder").gain(0.13).pan(0.1)

// chords · synth strings 2
const synth_strings_2 = note("<~@66 A B C D E@2 F G ~@41>".pickRestart({
  A: "e3 ~ e4 ~", B: "[b4,e5] ~ [b4,e5,b5] ~", C: "[e3,b3,e4] ~ [b3,e4,b4] ~", D: "[e4,b4,e5]@5 ~@3 [b4,e5,b5]@3 ~@5",
  E: "[[d3,a3,d4]@5 ~@3 [a3,d4]@5 ~@2 [d4,a4,d5]@5 ~@4 [a4,d5,a5]@4 ~@4, ~@7 a4@5 ~@20]/2", // D5
  F: "[d3,a3,d4]@5 ~@2 [a3,d4,a4]@6 ~@3", G: "[d4,a4,d5]@3 ~ [a4,d5,a5]@3 ~",
})).s("gm_synth_strings_2").gain(0.56)

// chords · synth strings 2 · soft notes · E5 B
const synth_strings_2_soft = note("<~@66 [[b3,e4] ~ [b3,b4] ~] [e4 ~@3] ~@3 [~@6 a5 ~@9] ~@43>")
  .s("gm_synth_strings_2").gain(0.32)

// drums · kick
const kick = s("bd").struct("<~ [x!4]!113 x>").gain(0.71)

// drums · rim
const rim = s("rim").struct("<~@113 [~@5 x!3] ~>").gain(0.57)

// drums · snare
const snare = s("sd").struct(`<
  A ~@9 B ~ B ~ B ~ B C@15 D ~ B ~ B ~ B ~ B C@15 D ~@16 A C@7 D ~ B ~ B ~ B ~ B C@23 D E
>`.pickRestart({
  A: "~@5 x!3", B: "~@7 x", C: "~ x ~ x", D: "~@2 x ~@2 x!3", E: "x",
})).gain(0.71)

// drums · low tom
const low_tom = s("lt").struct("<~@48 [~@12 x!4] ~@47 [~@8 x!3 ~@5] [~@12 x!4] ~@17>").gain(0.71)

// drums · hihat
const hihat = s("hh").struct("<[~@5 x!3] [x!8]!113 ~>").gain(0.57)

// drums · mid tom
const mid_tom = s("mt").struct("<~@48 [~@4 x!8 ~@4] ~@47 [~@4 x!3 ~@5 x!3 ~] [~@4 x!8 ~@4] ~@17>").gain(0.71)

// drums · high tom
const high_tom = s("ht").struct("<~@48 [x!4 ~@12] ~@47 [x!3 ~@13] [x!4 ~@12] ~@17>").gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@7 A ~@7 A ~@3 A ~@3 B ~ B ~ B ~ B ~ A ~@7 A ~@3 A ~@3 B ~ B ~ B ~ B ~ A ~@15 C B ~ B ~ B ~ B ~ A ~@7 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A
>`.pickRestart({
  A: "x", B: "x ~@2 x", C: "~@5 x!2 ~",
})).gain(0.64)
// … 21 more lines

More by Rossi Vasco