Strudelify

Gli spari sopra (intro video)

Rossi Vasco

KeyD majorTempo115 bpm
0:00/0:00
// Gli spari sopra (intro video) — Rossi Vasco
// 115 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30.
setcpm(115/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@14 B C@3 D E B@4 C B F G B@2 F G B C H I J K C@4 B C L M B@3 C B@2 F N B O P Q R S H I J K C B C B F G C O T U T@2 V
  W T X T U T@2 V W Y@2 V W Y@2 V W Z@5
>`.pickRestart({
  A: "d2@2 d2 d2@2 d2!3 d2@2 d2 a1@2 a1 c2 a1", B: "d2@2 ~@2 d2@2 ~@2 d2@3 d2 a1@2 c2@2",
  C: "d2@2 ~@2 d2@2 ~@2 d2@2 ~ d2 a1@2 c2@2", D: "c2@2 ~@2 c2@2 ~@2 c2@3 c2 g1@2 a#1@2",
  E: "c2@2 ~@2 c2@2 ~@2 c2@3 c2 a1@2 c2@2", F: "c2@2 ~@2 c2@2 ~@2 c2@2 ~ c2 g1@2 a1@2",
  G: "g1@2 ~@2 g1@2 ~@2 g1@3 g1 a1@2 c2@2", H: "d2@3 d2@5 d2@8", I: "f#2@3 f#2@5 d2@8", J: "g2@7 b2@3 b2@6",
  K: "a2@3 a2@5 a2@8", L: "c2@2 ~@2 c2@2 ~@2 c2@2 ~ c2 g1@2 a#1@2", M: "c2@2 ~@2 c2@2 ~@2 c2@2 ~ c2 a1@2 c2@2",
  N: "g1@2 ~@2 g1@2 ~@2 g1@2 ~ g1 a1@2 c2@2", O: "d2@2 ~@2 d2@2 ~@2 d2@3 d2 c2@2 d2@2",
  P: "c3@2 ~@2 c3@2 ~ c3 ~ c3 ~ c3 c3@2 c3@2", Q: "g2@2 ~@2 g2@2 ~@2 g2@2 ~ g2 a2@2 g2@2",
  R: "d3@2 ~@2 d3@2 ~@2 d3@3 d3 a2@2 c3@2", S: "d3@2 ~@2 d3@2 ~@2 d3@3 d3 c3@2 d3@2",
  T: "d2@2 d2!2 d2@2 d2!2 d2@2 c2@2 a1@2 c2@2", U: "d2@2 d2!2 d2@2 d2!2 d2@2 c2 ~ a1@2 c2@2",
  V: "c2@2 ~@2 c2@2 ~ c2 c2@2 e2@2 f2@2 g2@2", W: "g1@2 ~@2 g1@2 ~ g1 g1@2 b1@2 c2@2 c#2@2",
  X: "d2@2 d2!2 d2@2 d3!2 d3@2 c3 ~ a2@2 c3@2", Y: "d2@2 ~@2 d2@2 ~ d2 d2@2 c2@2 a1@2 c2@2",
  Z: "[d2@4 c2@4 b1@2 c2@2 ~@2 d2@51 ~@15]/5",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@4 A B C@2 D B E@2 ~@2 F@4 G H F@6 I J F@2 I J F@2 ~@2 K L F@6 G H F@6 I J F@2 I J F@2 ~@2 K L F@4 I J F@6 G M N@2
  F@4 G M F@2 O M F@2 O M ~@5
>`.pickRestart({
  A: "a3@7 a3, [d3,c4,g4]", B: "d4@2 c4@2 b3 c4 b3 d3", C: "[[d3,a3,d4]@11 d4 ~@3 d3, ~@6 e4 a3, ~@13 d4@3]/2",
  D: "a3@7 a3, c4, d3 ~@15", E: "[d3,a3,d4]/2", F: "~@13 [a2,d3] c3 ~", G: "~@13 [g2,c3] a#2 ~",
  H: "~@13 [g2,c3] ~ [a2,d3]", I: "~@13 [g2,c3] a2 ~", J: "~@13 [g2,d3] c3 a2", K: "~@2 a3 ~", L: "~ g3",
  M: "~@13 [g2,d3] ~ a2", N: "~@4 d3 ~@5 c3@2 ~@2 c3@2", O: "[c3,g3]@3 ~@10 [g2,c3] a#2 ~",
})).s("gm_distortion_guitar").gain(0.27).pan(0.7)

// chords · distortion guitar
const distortion_guitar_2 = note(`<
  ~@10 A@4 B C@3 D E F C G ~@2 H I J K@2 L M K@2 N@2 O P Q@2 ~@3 R S@2 T@2 U V@3 W X@2 Y@2 Z AA@2 N@2 O AB AC AD AE AF
  AG AH AI AJ AK@4 AL AM AN@2 AO AK@3 AL AM AP AK AL AM AP AK AL AQ AR@5
>`.pickRestart({
  A: "[~@3 d4@2 ~ d4 ~ a3@3 d4@2 ~@3 a3@3 [a3,d4]@2 ~@3 a3@3 d4@2 ~@3 a3@3 d4@2 ~@3 a3@3 d4@2 ~@3 a3@3 d4@2 ~@3 a3@3 d4@2 ~ d4!2, ~@3 a3@4 c4@4 a3@4 c4@4 ~@4 c4@4 a3@4 c4@4 a3@4 c4@4 a3@4 c4@4 a3@4 c4@4 a3@5, ~@5 d3@3 ~@5 d3@3 ~@5 d3@6 ~@2 d3@6 ~@2 d3@6 ~@2 d3@6 ~@2 d3@6 ~@2 d3@3, ~@14 d4@3 ~@5 d4@3 ~@5 d4@3 ~@5 d4@3 ~@5 d4@3 ~@5 d4@3 ~@7]/4", // D5
  B: "a3@7 ~ a3@3 [a3,d4]@2 ~@3, d4 ~@15", C: "a3@3 [a3,d4]@3 ~@2 a3@3 [a3,d4]@2 ~@3", D: "[g3,c4]@11 [g3,c4]@2 ~@3",
  E: "g3@3 [g3,c4]@3 ~@2 g3@3 [g3,c4]@2 ~@3", F: "[a3,d4]@7 ~ a3@3 [a3,d4]@2 ~@3", G: "[a3,d4]", H: "~@15 d4",
  I: "[g3,c4]@11 [g3,c4]@2 ~ c4 a3, ~@13 c3@2 ~", J: "[g3,d4]@11 [g3,d4]@2 ~ d4!2, ~@13 c3@3", K: "[[a3,d4]@31 d4]/2",
  L: "[g3,c4]@11 [g3,c4]@2 ~@2 a3, ~@13 c3@2 ~, ~@7 c4", M: "[g3,d4]@11 [g3,d4]@2 ~ d4!2, ~@13 c3@2 ~",
  N: "[a3@3 d4@2 ~@3 a3@3 d4@2 ~@3 a3@3 d4@2 ~@3 a3@3 d4@2 ~ d4!2, ~@3 a3@4 c4@4 a3@4 c4@4 a3@4 c4@4 a3@5, ~@5 d3@6 ~@2 d3@6 ~@2 d3@6 ~@2 d3@3, ~@6 d4@3 ~@5 d4@3 ~@5 d4@3 ~@7]/2",
  O: "g3@3 d4@2 ~@3 g3@3 d4@2 ~@2 b3, ~@3 g3@4 b3@4 g3@5, ~@5 d3@6 ~@2 d3@3, ~@6 d4@3 ~@5 d4@2",
  P: "[e3,a3]@3 [a3,d4]@2 ~@2 a3 a3@3 e4@2 ~ e4!2, ~@5 e3@2 ~@4 a3@5, ~@6 d4@2 ~@5 e3@3", // A5 D5
  Q: "[a3@8 a3@3 d4@2 ~@3 a3@3 d4@2 ~@3 a3@3 d4@2 ~ d4!2, d4@11 a3@4 c4@4 a3@4 c4@4 a3@5, ~@13 d3@6 ~@2 d3@6 ~@2 d3@3, ~@14 d4@3 ~@5 d4@3 ~@7]/2",
  R: "~@3 a5 c6@4", S: "[~ a5@14 ~@3 e4@14, g3@9 ~@7]/2", T: "[d4@15 ~]/2", U: "[a3,d4]@11 d3 a2@2 c3@2",
  V: "d3@3 d3 ~@7 d3 a2@2 c3@2", W: "[g3,c4]@7 ~", X: "[a5@11 ~@2 f5 ~ g5@2 f5 d5@10 ~@4, ~@6 g5 ~@9]/2",
  Y: "[~@3 d5 [a4,c5] d5 c5 a4 ~ c5 a4 ~ c5 a4@2 g4@12 ~@2 a4@3, ~@8 d5@2 ~ d5@2 ~@19]/2", Z: "g4 f4 g4@11 a4@3",
  AA: "[g4 f4 ~ d5@22 ~@6 d4, [a3,d4]]/2", AB: "[e3,a3]@3 [a3,d4]@3 f4@3 [a3,e4]@7", AC: "[d4,a4]!2",
  AD: "a4@2 g4 f4 g4 f4 d4 f4 d4@8", AE: "d5@2 c5 a4 c5 d5 ~ f5@3 d5 c5 a4@4", AF: "a4@2 g4 g#4 a4 g#4 g4 f4 d4@7 ~",
  AG: "a5", AH: "a5@8 c6@4 ~ a5 g5@2", AI: "a5@2 g5 f5 d5@7 d5 f5 ~ g5 a5", AJ: "g5@2 ~ f5 d5@12",
  AK: "d3@2 d3!2 d3@2 d3!2 d3@2 c3@2 a2@2 c3@2", AL: "[g3,c4]@11 [g3,c4]@2 ~ c4 a#3, ~@13 c3@3",
  AM: "[g3,d4]@11 [g3,d4]@2 ~ d4!2, ~@13 d3@3", // G5
  AN: "[~@2 f4 ~@2 f4 ~@2 f4@4 d4@2 c4 d4@3 f4 ~@2 g4 ~@2 g4@3 f4 g4 f4 d4 c4, a3 ~@3, d4@5 ~@27]/2",
  AO: "d4@4 d3@2 d3!2 d3@2 c3@2 a2@2 c3@2", AP: "d3@2 d3!2 d3@2 d3!2 d3@2 c3@2 a2@2 c3@2, a3 ~, d4@5 ~@11",
  AQ: "[g3,d4]@11 [g3,d4]@2 ~ d4@2, ~@13 d3@3", AR: "[d3@3 ~ c3@3 ~ b2@2 c3@2 ~@2 d3@51 ~@15]/5",
})).s("gm_distortion_guitar").gain(0.36).pan(0.4)

// chords · distortion guitar · soft notes
const distortion_guitar_soft = note("<~@14 A B C B D E A B ~@77>".pickRestart({
  A: "~@6 d4 c4@4 ~@3 d4 c4, ~@13 d3@3", B: "~@6 d4 c4 ~@6 d4 c4, ~@5 d3@6 ~@2 d3@3",
  C: "~@6 d4 c4@4 ~@3 d4 c4, ~@5 d3@6 ~@2 d3@3", D: "~@14 c4 a#3, ~@13 c3@3",
  E: "~@6 c4 a#3 ~@6 c4 a#3, ~@5 c3@6 ~@2 c3@3",
})).s("gm_distortion_guitar").gain(0.21).pan(0.4)

// other · pad halo
const pad_halo = note("<~@12 A@2 ~@16 B C D@2 ~@22 B C D@2 ~@28 B C D@2 B C ~@5>".pickRestart({
  A: "[~@4 f4@3 e4@20 ~@5, ~@4 a3@23 ~@5]/2", B: "c3", C: "g2", D: "d3/2",
})).s("gm_pad_halo").gain(0.46)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@14 A@4 B@2 A@6 B C A@2 B C A@4 C D A@6 B@2 A@6 B C A@2 B C A@4 C D A@4 B C A@2 E A@3 B C A@6 B C A@2 F C A@2 F C G@5
>`.pickRestart({
  A: "[a3,d4]!3 [a3,d4]@2 [a3,d4]!7 [a3,d4]@2 [a3,d4]!2", B: "[g3,c4]!3 [g3,c4]@2 [g3,c4]!7 [g3,c4]@2 [g3,c4]!2",
  C: "[g3,d4]!3 [g3,d4]@2 [g3,d4]!7 [g3,d4]@2 [g3,d4]!2", // G5
  D: "[a3,d4]!3 [a3,d4]@2 [a3,d4]!3 [a3,c#4]!4 [a3,c#4]@2 [a3,c#4]!2", // D5 A
  E: "[g3,a3,c4,d4] [a3,d4]!2 [a3,d4]@2 [a3,d4]!7 [a3,d4]@2 [a3,d4]!2", // Gsus4 D5
  F: "~ [g3,c4]!2 [g3,c4]@2 [g3,c4]!7 [g3,c4]@2 [g3,c4]!2", // C5
  G: "[[a3,d4]@4 [g3,c4]@4 [f#3,b3]@2 [g3,c4] ~@3 [a3,d4]@51 ~@15]/5", // D5 C5 B5 C5 D5
})).s("gm_electric_guitar_clean").gain(0.07).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@10 A@3 B C A C A C A C A C A C A C A C A C A C D E@4 C F C A C A C A C A C A C A C A C A C A C D E@4 C A C A C A C D
  C A C A C A C F C A C A C A C F C A C F C G H ~@4
>`.pickRestart({
  A: "x ~@3 x ~@3 x ~@2 x ~ x ~@2", B: "x ~ x ~ x!4", C: "x ~@3 x ~@3 x ~@2 x!3 ~@2", D: "x ~ x ~ x ~ x!2",
  E: "x ~@3 x ~@2 x ~ x!2 ~ x ~@3", F: "x ~@3 x ~@3 x ~@2 x ~@4", G: "x!4", H: "x ~ x ~ x!2 ~ x",
})).gain(0.43)

// drums · snare
const snare = s("sd").struct(`<
  ~@9 A B@3 C B@7 C B@7 D B@3 E B@5 F B@7 C B@7 D B@3 E B@11 E B@7 F B@7 F B@3 F B C G ~@4
>`.pickRestart({
  A: "~@12 x!4", B: "~ x ~ x ~ x ~ x", C: "~@2 x ~@3 x ~ x!8", D: "~@2 x ~@3 x ~@3 x ~@3 x!2", E: "~ x!3 ~ x!3 ~ x!7",
  F: "~@2 x ~@3 x ~@3 x ~ x!4", G: "~@2 x!2 ~@2 x!2 ~@6 x ~",
})).gain(0.43)

// drums · hihat
const hihat = s("hh").struct("<~@2 [x!12 ~ x!3]!6 [x!2 ~ x!3 ~ x!3 ~@6] ~@90>").gain(0.19)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@2 [~@3 x]!6 ~ [~@14 x!2] [x!2 ~@14] ~@88>").gain(0.1)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A B C D@2 E C D@6 E C D@6 F C D@2 G C D@4 F C D@6 E C D@6 F C D@2 G C D@3 C D@6 G C D@6 F C D@3 C D@2 F C D@2 F C
  E ~@5
>`.pickRestart({
  A: "~@2 x ~@3 x ~@3 x!3 ~ x!2", B: "x!13 ~@3", C: "~ x!7", D: "x!8", E: "x!5 ~@3", F: "x!7 ~", G: "x!3 ~",
})).gain(0.29)

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

stack(
  bass, distortion_guitar, distortion_guitar_2, distortion_guitar_soft, pad_halo, electric_guitar_clean, kick, snare,
  hihat, hihat_soft, open_hat, crash
)

More by Rossi Vasco