Strudelify

La scuola dei serpenti

Matia Bazar

KeyF majorTempo162 bpm
0:00/0:00
// La scuola dei serpenti — Matia Bazar
// 162 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 163 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(162/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 · fretless bass
const bass = note(`<
  ~ A@2 B C@3 D@2 A@2 D@2 E@2 F@2 A@2 D@2 E@2 G H I@2 J@2 K L M N O@4 P@2 Q@4 R S@2 T U@2 V W R S@2 T U@2 V W X@4 Y@2
  Z@2 X@4 Y@2 Z@2 AA@5 AB AC AD AA@6 AE@2 R S@2 T U@2 V W R S@2 T U@2 V AF AG AH@2 AI AJ@2 AK AL AG AH@2 AI AJ@2 AK AL
  AA@5 AB AC AD AA@6 AE@2 R S@2 T U@2 V AF R S@2 T U@2 V AM R S@2 T U@2 V AN
>`.pickRestart({
  A: "[f1@29 ~@3]/2", B: "f1 ~ f1@6", C: "[f2@5 f1]/3", D: "[f1 ~ f1@14]/2", E: "[eb2@13 bb2 eb2@2]/2", F: "bb1/2",
  G: "bb1@7 bb1", H: "bb1 bb2@2 bb1 bb1@4", I: "[bb1@4 bb2@8 bb1@7 ~ bb1@4 bb2@8]/2",
  J: "[bb1@3 bb1@3 bb1@4 bb2@4 bb1@2]/2", K: "bb1@3 bb1 bb1@4", L: "bb1@3 bb1 c2@4", M: "f1", N: "g1 a1",
  O: "[bb1 bb1@7]/2", P: "[bb1 bb1@5 c2@2]/2", Q: "c2/2", R: "f1@4 ~@2 f1 ~ f1@4 ~@2 f1 ~",
  S: "f1@3 ~@3 f1 ~ f1@4 ~@2 f1 ~", T: "f1@4 ~@2 f1 ~ f1@5 ~ f1 ~", U: "eb2@4 ~@2 eb2 ~ eb2@4 ~@2 eb2 ~",
  V: "d2@4 ~@2 d2 ~ d2@3 ~@3 d2 ~", W: "d2@4 ~@2 d2 ~ d2@4 eb2@4", X: "f1@4 ~@2 f1 ~ f1@6 ~@2",
  Y: "eb2@4 ~@2 eb2 ~ eb2@6 ~@2", Z: "bb1@4 ~@2 bb1 ~ bb1@6 ~@2", AA: "bb1@5 ~ bb1 ~ bb1@5 ~ bb1 ~",
  AB: "bb1@5 ~ bb1 ~ c2@8", AC: "a1@5 ~ a1 ~ a1@5 ~ a1 ~", AD: "a1 f2@3", AE: "c2@5 ~ c2 ~ c2@5 ~ c2 ~",
  AF: "d2@4 ~@2 d2 ~ d2@4 d2@4", AG: "bb1@4 ~@2 bb1 ~ bb1@4 ~@2 bb1 ~", AH: "bb1@3 ~@3 bb1 ~ bb1@4 ~@2 bb1 ~",
  AI: "bb1@4 ~@2 bb1 ~ bb1@5 ~ bb1 ~", AJ: "ab1@4 ~@2 ab1 ~ ab1@4 ~@2 ab1 ~", AK: "g1@4 ~@2 g1 ~ g1@3 ~@3 g1 ~",
  AL: "g1@4 ~@2 g1 ~ ab1@8", AM: "d2@4 ~@2 d2 ~ d2@4 eb2@3 ~", AN: "d2 ~@3",
})).s("gm_fretless_bass").gain(0.39)

// other · church organ
const church_organ = note("<~ A@24 B@7 C@7 ~@4 D@16 A@16 B@7 C@7 ~@2 D@32 B@7 C@7 ~@2 D@8 E@8 F@8>".pickRestart({
  A: "[c7,f7]/8", B: "f7/7", C: "[~@9 f7@4 ~, f6@15 ~]/7", D: "f7/8", E: "[f7@127 ~]/8", F: "[f7@31 ~]/8",
})).s("gm_church_organ").gain(0.06).pan(0.7)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@43 A@4 B@2 C@2 A@4 B@2 C@2 D@4 ~@28 A@4 B@2 C@2 A@4 B@2 C@2 D@4 ~@28 A@4 B@2 C@2 A@4 B@2 E@2 A@4 B@2 F@2
>`.pickRestart({
  A: "[f3,c4,f4]/4", B: "[eb3,bb3,eb4]/2", C: "[[d3,bb3,d4]@3 [eb3,bb3,eb4]]/2", D: "[[f3,c4,f4]@7 ~]/4",
  E: "[[d3,bb3,d4]@24 [eb3,bb3,eb4]@7 ~]/2", F: "[[d3,bb3,d4]@3 ~]/2",
})).s("gm_overdriven_guitar").gain(0.29).pan(0.7)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@9 A@4 B@2 C@2 A@4 B@2 C@2 D@2 E@2 F@2 G ~ D@2 E@2 F@2 H@4 ~ I ~ I ~@5 I ~ I ~@4 A@4 B@2 C@2 A@4 B@2 C@2 D@2 E@2 F@2
  G ~ D@2 E@2 F@2 H@2 ~ I ~ I ~@5 I ~ I ~@4 J@8 K@8 D@2 E@2 F@2 G ~ D@2 E@2 F@2 H@2 ~ I ~ I ~@5 I ~ I ~@4 L I L I ~ M ~
  N
>`.pickRestart({
  A: "f1/4", B: "eb1/2", C: "bb1/2", D: "[bb1@3 ~ bb1@26 ~@2]/2", E: "[bb1@29 ~@3]/2", F: "[bb1 ~ bb1@14]/2",
  G: "f1@15 ~", H: "[c2@31 ~]/2", I: "~@3 f5@4 ~, ~ [a4,c5]@6 ~",
  J: "[d5 ~@5 d5@2 c5@4 bb4@2 c5@4 d5@2 bb4@16 d5@4 c5@4 bb4@2 c5@4 d5@2 f5@75 ~]/8",
  K: "[~@2 b4 ~ d5@4 c5@4 bb4@2 c5@4 d5@2 bb4@16 d5@4 c5@4 bb4@2 c5@4 d5@2 f5@76]/8", L: "~@7 [f4,a4,c5]@6 ~@3",
  M: "[g5,bb5,eb6,g6]@3 ~", N: "[f5,bb5,d6,f6] ~",
})).s("gm_lead_2_sawtooth").gain(0.29).pan(0.6)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~ A B@4 C ~@12 A B D@2 E@3 ~@15 F G@2 H ~@14 I B@4 J ~@4 A B D@2 K@2 ~@10 L M@2 N F G@2 H ~@12 O@2 P@2 Q@2 R@2 S@2 P@2
  Q@2 R@2 S@2 T@4 ~@6 L M@2 N F U ~@8 A B@3 ~@12
>`.pickRestart({
  A: "~@3 [c3,f3]@2 [c3,f3]@2 ~ [c3,f3]@2 ~ [c3,f3]@2 [c3,f3]@2 ~", // F5
  B: "[c3,f3]@3 [c3,f3]@2 [c3,f3]@3 [c3,f3]@3 [c3,f3]@2 [c3,f3]@3", C: "[c3,f3]@3 [c3,f3]@2 ~@11", D: "[bb2,eb3,bb3]/2",
  E: "[bb2,f3,bb3]/3", F: "~@3 [g3,c4]@2 [g3,c4]@2 ~ [g3,c4]@2 ~ [g3,c4]@2 [g3,c4]@2 ~",
  G: "[g3,c4]@3 [g3,c4]@2 [g3,c4]@3 [g3,c4]@3 [g3,c4]@2 [g3,c4]@3", H: "[g3,c4]@3 [g3,c4]@2 ~@11",
  I: "[c3,f3]@2 ~ [c3,f3]@2 [c3,f3]@2 ~ [c3,f3]@2 ~ [c3,f3]@2 [c3,f3]@3", J: "[c3,f3]@3 ~@13", K: "[bb2,f3,bb3]/2",
  L: "~@3 [f3,bb3]@2 [f3,bb3]@2 ~ [f3,bb3]@2 ~ [f3,bb3]@2 [f3,bb3]@2 ~", // Bb5
  M: "[f3,bb3]@3 [f3,bb3]@2 [f3,bb3]@3 [f3,bb3]@3 [f3,bb3]@2 [f3,bb3]@3", N: "[f3,bb3]@3 [f3,bb3]@2 ~@11",
  O: "[~ [d2,d3]@7]/2", P: "[bb2!2 bb2 [bb2,eb3,g3,bb3,eb4], [f3,bb3,d4]@3 ~]/2",
  Q: "[bb2!2 bb2 [bb2,f3,bb3,d4], [f3,bb3,d4]@3 ~]/2", R: "[ab2!2 ab2 [ab2,eb3,ab3,c4,eb4], [eb3,ab3,c4,eb4]@3 ~]/2",
  S: "[g2!2 g2 [ab2,eb3,ab3,c4,eb4], [eb3,g3,bb3,eb4]@3 ~]/2", T: "[[bb2,f3,bb3,d4]@7 ~]/4",
  U: "[g3,c4]@3 [g3,c4]@2 [g3,c4]@3 [g3,c4]@3 [g3,c4]@2 [g3,c4]@2 ~", // C5
})).s("gm_distortion_guitar").gain(0.14).pan(0.3)

// chords · distortion guitar · soft notes
const distortion_guitar_soft = note("<~@6 A B@2 ~@35 C ~@19 D ~@23 E ~@3 C ~@43 E ~@26>".pickRestart({
  A: "~@5 [c3,f3]@3 [c3,f3]@3 [c3,f3]@2 [c3,f3]@3", // F5
  B: "[[c3,f3]@3 [c3,f3]@2 [c3,f3]@3 [c3,f3]@3 [c3,f3]@2 [c3,f3]@19]/2", // F5
  C: "~@5 [g3,c4]@3 [g3,c4]@3 [g3,c4]@2 [g3,c4]@3", D: "~@3 [c3,f3]@2 [c3,f3]@3 [c3,f3]@3 [c3,f3]@3 ~@2",
  E: "~@5 [f3,bb3]@3 [f3,bb3]@3 [f3,bb3]@2 [f3,bb3]@3", // Bb5
})).s("gm_distortion_guitar").gain(0.08).pan(0.3)

// chords · pad poly
const pad_poly = note(`<
  ~@43 A B C D E F G H A B C D E F G H ~@32 A B C D E F G H A B C D E F G H ~@32 A B C D E F G H A B C D E F G H A B C D
  E F G I
>`.pickRestart({
  A: "~@4 [a3,c4,f4] ~@3 [a3,c4,f4]@4 ~@2 [a3,c4] ~", B: "~@2 c4 ~ [a3,c4,g4]@8 ~@4",
  C: "~@4 [a3,c4,f4] ~@3 [a3,c4,f4]@3 ~@3 [a3,c4] ~", D: "~@2 c4 ~ f4 ~ [f4,c5,f5]@10",
  E: "~@2 bb3 ~ [bb3,eb4,g4] ~@3 [bb3,eb4,g4]@5 ~ [bb3,eb4] ~", F: "~@2 bb3 ~ [bb3,eb4,g4]@11 ~",
  G: "~@4 [bb3,eb4,f4] ~@3 [bb3,eb4,f4]@5 ~ [eb4,f4,bb4] ~", H: "~@2 [bb3,eb4,f4]@2 [bb4,c5,f5]@9 ~@3",
  I: "~@2 [bb3,eb4,f4] ~@13", // Bbsus4
})).s("gm_pad_poly").gain(0.29).pan(0.4)

// chords · epiano2
const epiano2 = note(`<
  ~@25 A@2 B@2 A@2 C@2 A@2 B@2 A@2 D@4 ~@16 E F@2 G H@3 I E F@2 G H@3 I A@2 B@2 A@2 C@2 A@2 B@2 A@2 D@2 ~@32 A@2 B@2 A@2
  C@2 A@2 B@2 A@2 J@2 ~@24
>`.pickRestart({
  A: "[[f3,bb3,d4]@3 [g3,c4,e4]@3 [f3,bb3,d4]@6 [g3,c4,e4]@4]/2", B: "[[f3,bb3,d4]@3 [f3,bb3,d4]@4 ~]/2",
  C: "[[f3,a3,c4]@3 [d3,f3,bb3]@3 [f3,a3,c4]@2]/2", D: "[g3,c4,e4]/2", E: "f3@2 ~@2 c4 eb4@3, ~ f4 ~@2, ~@6 f3@5 ~@5",
  F: "f3@2 ~@2 c4 eb4@3, ~ f4 ~@2, ~@3 f3@2 ~@3", G: "f3@4 ~@2 f3 ~ c4@2 eb4@6, ~ f4 ~@2",
  H: "f3@2 ~ f3 c4 eb4@3, ~ f4 ~@2", I: "f3@2 ~ f3 c4 eb4@2 ~, ~ f4 ~@2", J: "[[g3,c4,e4]@31 ~]/2",
})).s("gm_epiano2").gain(0.34).pan(0.8)

// chords · percussive organ
const percussive_organ = note(`<
  ~@3 A@2 ~@2 B@2 ~@66 C@2 D@2 C@2 E ~ C@2 D@2 F@4 ~@32 G@2 D@2 C@2 E ~ C@2 D@2 C@2 ~@26
>`.pickRestart({
  A: "[f6@6 c6@6 eb6@12 bb5@3 ab5 [db5,eb5,gb5] [ab4,bb4] gb4 eb4]/2", // Ebm7 Absus2
  B: "[[eb6,a6]@6 [a5,c6]@6 [c6,eb6]@14 b5 [g5,a5] [e5,f5] [c5,d5] b4 [g4,a4]]/2", // Ebdim Am Cm Gsus2 Fmaj7 Csus2 Gsus2
  C: "[[f6,bb6,d7]@3 [g6,c7,e7]@3 [f6,bb6,d7]@6 [g6,c7,e7]@4]/2", D: "[[f6,bb6,d7]@3 [f6,bb6,d7]@4 ~]/2",
  E: "[f6,a6,c7]", F: "[[f6,bb6,d7]@3 [g6,c7,e7]@3 [f6,bb6,d7]@6 [g6,c7,e7]@20]/4",
  G: "[[f6,bb6,d7]@3 [c7,e7]@3 [bb6,d7]@6 [g6,c7,e7]@4, ~@3 g6@2 ~ f6@5 ~@5]/2", // Bb C Bb C
})).s("gm_percussive_organ").gain(0.24).pan(0.6)

// chords · rock organ
const rock_organ = note("<~@64 A B@2 C ~@14 D ~@47 D ~@32>".pickRestart({
  A: "~@15 e7", B: "[f7@12 d7 c7 ~@2 d7 c7 bb6 f6 c7 bb6 ~@2 c7 bb6 ~ f6 ~ c6 ~ a5, ~@15 f6@2 ~@6 f6@2 ~@7]/2",
  C: "f5@7 ~", D: "[bb6,d7] [a6,c7], f6",
})).s("gm_rock_organ").gain(0.24).pan(0.3)

// chords · rock organ · soft notes
const rock_organ_soft = note("<~@65 [~@7 bb6] [~@6 a6 ~@3 a6 ~ d6 ~ bb5 ~] ~@96>")
  .s("gm_rock_organ").gain(0.15).pan(0.3)

// other · electric bass finger
const electric_bass_finger = note("<~@4 A@3 ~@156>".pickRestart({
  A: "[~@2 a3@3 c3@15 ~@4]/3",
})).s("gm_electric_bass_finger").gain(0.39).pan(0.4)

// chords · piano · C5
const piano = note("<~@133 [~@15 a4, ~@7 [g4,c5]] [[g4,c5]@5 ~@3 d4@2 c4@6, ~ g4] ~@28>")
  .s("gm_piano").gain(0.39).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~ [x!2]!161 x>").gain(0.69)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~ A@42 B@16 A@32 B@32 A@16 B@9 C B C B C B C B C B C B C B ~>".pickRestart({
  A: "~@3 x ~@4", B: "~@3 x ~@3 x", C: "~@3 x ~ x ~ x",
})).gain(0.35)

// drums · snare
const snare = s("sd").struct(`<
  A B@24 C@18 D@16 ~@17 E ~@3 E ~@3 E ~@3 E ~@2 D@14 ~ D@17 ~ E ~@3 E ~@3 E ~@3 E ~@2 D@7 ~ F@15 G
>`.pickRestart({
  A: "~@10 x!3 ~ x ~", B: "x!8", C: "x ~ x!3 ~ x ~", D: "~ x", E: "~@3 x ~@4", F: "~ x ~ x", G: "~ x ~@2",
})).gain(0.48)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@25 A@18 ~@33 B ~@3 B ~@3 B ~@3 B ~@35 B ~@3 B ~@3 B ~@3 B ~@26>".pickRestart({
  A: "~ x ~@3 x ~ x", B: "~ x",
})).gain(0.28)

// drums · clap
const clap = s("cp").struct("<~@43 [~ x]!16 ~@32 [~ x]!48 [~ x ~ x]!23 [~ x ~@2]>").gain(0.48)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@41 A B ~@7 C ~@7 D ~@15 E ~@3 A ~@3 A ~@3 A ~@2 A B ~@7 C ~@7 D ~@7 D ~@7 D ~@3 A ~@3 A ~@3 A ~@2 A B ~@7 F ~@7 E
  ~@8
>`.pickRestart({
  A: "~@3 x", B: "~ x ~@4 x ~", C: "~@6 x!2", D: "~@5 x ~@2", E: "~@7 x", F: "~@12 x!4",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<~@67 [~ x ~@2 x ~@3] ~@95>").gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@41 A B ~@7 C ~@7 D ~@15 E ~@3 F ~@3 F ~@3 F ~@2 A B ~@7 C ~@6 G H ~@7 D ~@7 D ~@3 F ~@3 F ~@3 F ~@2 A B ~@7 I ~@7 F
  ~@8
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@4 x!2 ~@2", C: "~ x ~@2", D: "~@6 x!2", E: "x!2 ~ x!4 ~", F: "~@3 x!2 ~@3",
  G: "~@2 x ~ x ~@2 x", H: "x ~ x ~@3 x!2", I: "~@3 x!9 ~@4",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct("<~@67 [~ x ~@2] ~@95>").gain(0.35)

// drums · crash
const crash = s("cr").struct("<~@43 A ~@7 A ~@23 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7>".pickRestart({
  A: "x",
})).gain(0.35)

// drums · tambourine
const tambourine = s("tb").struct("<~@43 [~ x ~ x]!16 ~@32 [~ x ~ x]!32 ~@16 [~ x ~ x]!23 [~ x ~@2]>").gain(0.41)

// drums · shaker
const shaker = s("sh").struct("<~@25 A@2 B C D A@5 E A D F G H F D A@119 I>".pickRestart({
  A: "x!8", B: "x!3 ~ x ~ x ~", C: "x!5 ~ x!2", D: "x!3 ~ x!4", E: "x ~ x!3 ~ x!2", F: "x!7 ~", G: "x!3 ~ x!3 ~",
  H: "x!5 ~ x ~", I: "x!3 ~@5",
})).gain(0.21)

stack(
  bass, church_organ, overdriven_guitar, lead_2_sawtooth, distortion_guitar, distortion_guitar_soft, pad_poly, epiano2,
  percussive_organ, rock_organ, rock_organ_soft, electric_bass_finger, piano, kick, kick_soft, snare, snare_soft, clap,
  low_tom, hihat, mid_tom, open_hat, crash, tambourine, shaker
)

More by Matia Bazar