Strudelify

Vanita di vanita

Angelo Branduardi

KeyE♭ minorTempo90 bpm
0:00/0:00
// Vanita di vanita — Angelo Branduardi
// 90 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 47 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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.

// other · violin
const violin = note(`<
  ~@38
  [~@2 bb4 ab4!2 gb4 eb4@2 eb4 gb4 ab4 bb4 ab4 gb4 eb4@2]
  [~@2 gb4 ab4 bb4 ab4 gb4@2 ~@2 f4 eb4 db4 eb4 f4 ~]
  [gb4 eb4 bb3 ~@6 f4 db4 bb3 db4@2 ~@2]
  [bb4!2 ab4 gb4 ab4 bb4 f4 ab4 gb4 ab4 bb4@2 eb4@2 ~@2]
  ~@5
>`).s("gm_violin").gain(0.28).pan(0.8)

// bass · acoustic bass
const bass = note(`<
  ~@2 A B C A@2 B C A@2 B C A ~@4 A D C A@2 D C A@2 D C A ~@4 A D C A@2 D C A@2 D C E ~
>`.pickRestart({
  A: "eb2@3 ~ bb1@3 ~ eb2@3 ~ bb1@3 ~", B: "eb2@3 ~ eb2@3 ~ bb1@3 ~ bb1@2 ~@2",
  C: "eb2@3 ~ eb2@3 ~ bb1@3 ~ bb1@2 db2 ~", D: "eb2@3 ~ eb2@3 ~ bb1@3 ~ bb1@3 ~", E: "eb2@3 ~ bb1@3 ~ eb2@3 ~@5",
})).s("gm_acoustic_bass").gain(0.72)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@2 B C D E B C D E B C D E F G H I B C D E B C D E J K D E F G H L B C D E J K M E J K M N ~
>`.pickRestart({
  A: "~@7 eb4 ~@6 eb3 eb4, eb2@8 eb2@7 ~, ~ eb3@5 eb3@2 ~@3 eb4@4 ~, ~@2 bb3@3 bb3@3 ~ ab3@6 ~, ~@3 eb4@4 ~@3 bb3@3 bb3@2 ~",
  B: "~ bb3@2 gb4 ~@3 bb4 ~ bb3@2 gb4 ~@3 bb4, eb3@2 bb3@2 eb3@2 ~ gb4, ~@5 eb4@3 ~@4 bb3@4, ~@6 gb4@2 ~@5 eb4@3",
  C: "eb3@2 ~@5 bb4 ~@7 db5, ~@2 eb4@2 eb3@4 ~@3 db5@2 ~ bb4@2, ~@3 gb4@2 bb3@2 ~ bb3@4 bb3@4, ~@6 eb4@3 ~ bb4@2 ~ f4@3",
  D: "~@2 eb5 bb4 ~ bb4 eb5 bb4 ~ f4 db5 f4 ~ f4 db5 f4, eb4!2 bb3!2, ~ bb4@2 ~@13",
  E: "~ bb4 eb5 bb4 ~ f4 d5 f4 ~@2 eb5@6, eb4 bb3 eb4@2, ~@9 bb4@7",
  F: "~@3 bb4 ~@3 bb4 [db4,f4]@2 ~ db5 ~@3 db5, gb3 [gb3,gb4] ~@2, ~ gb4@3 ~@6 ab4@2 ~@2 ab4@2, ~ db4 ~ db4 ~@2 [db4,f4]@2", // Db Gb Db
  G: "~@3 c5 ~@3 c5 ~@5 eb5@3, ab3!2 bb3@2, ~ ab4@3 ~ ab4@3 ~@2 bb4@6, ~@2 eb4@3 ~ eb4@2 ~ eb4@2 g4@5, ~@3 eb4",
  H: "gb3@3 gb4 ~@2 bb3@2 ~@7 ab4, ~@4 gb3@4 f3@3 ab4@2 ~ ab3@2, ~@5 db4@3 ~ db4@3 ~ db4@3, ~@5 ab3 f3@2",
  I: "~@3 bb4 ~@3 bb4 ~@4 g4@4, eb3@4 ~@2 d4@2 ~ eb4@7, ~ bb3@2 ~ bb3@4 eb3@8, ~@2 eb4@2 ~ f4@3 ~@2 bb3@6, ~@11 bb4@5",
  J: "eb3@3 gb4 ~@3 bb4 eb3@3 gb4 ~@3 bb4, ~ bb3 ~ bb3, ~@5 eb4@3 ~@5 eb4@3, ~@3 gb4 ~@3 gb4",
  K: "eb3@3 ~@4 bb4 ~@7 db5, ~@3 gb4@2 bb3@2 ~ bb3@4 bb3@4, ~@4 eb3@4 ~@3 db5@2 ~ bb4@2, ~@6 eb4@3 ~ bb4@2 ~ f4@3",
  L: "~@3 bb4 ~@3 bb4 ~@4 g4@3 ~, eb3@4 ~@2 d4@2 ~ eb4@7, ~ bb3@2 ~ bb3@4 eb3@8, ~@2 eb4@2 ~ f4@3 ~@2 bb3@6, ~@11 bb4@5",
  M: "~@2 eb5 bb4 ~ bb4 eb5 bb4 ~ f4 db5 f4 ~ f4 db5 f4, eb4@3 ~ eb4@4 bb3@4 bb3@4, ~ bb4@2 ~@13",
  N: "~ bb4 eb5 bb4 ~ f4 d5 f4 [eb4,bb4]@8, eb4@2 bb3@2 eb5@3 ~", // Eb5
})).s("gm_acoustic_guitar_steel").gain(0.28).pan(0.1)

// chords · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~@2 A B ~@2 A B ~@2 A B ~@4 C ~ A B ~@2 A B ~@2 D E ~@4 F ~ A B ~@2 D G ~@2 D G ~@3
>`.pickRestart({
  A: "~ eb4 ~@3 eb4 ~@2", B: "~ bb3@2 ~@6 f4@3 ~@4", C: "~@2 bb3@3 ~@2 gb4 ~@8, ~ db4@3 ~@12",
  D: "~ eb4 ~@3 eb4 ~@2, ~ bb3@3 ~@5 bb3@3 ~@4", E: "~@2 eb4@2 ~@5 f4@3 ~@4, ~ bb3@2 ~@13",
  F: "~@2 bb3@2 ~@3 gb4 ~@8, ~ db4@3 ~@12", G: "~@2 eb4@2 ~@5 f4@3 ~@4, ~ bb3@3 ~@12",
})).s("gm_acoustic_guitar_steel").gain(0.17).pan(0.1)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A@2 B C@8 D@4 E F G H I J K L I J K L I M N O E F P H I J K L I M Q L I M R ~
>`.pickRestart({
  A: "~@7 eb4 ~@6 eb3 eb4, eb2@8 eb2@7 ~, ~ eb3@5 eb3@2 ~@3 eb4@4 ~, ~@2 bb3@3 bb3@3 ~ ab3@6 ~, ~@3 eb4@4 ~@3 bb3@3 bb3@2 ~",
  B: "~@7 gb4, eb4!4, ~ bb3@4 bb3@4 bb3@4 bb3@3, ~ gb4@2 gb4@2 gb4@2 ~",
  C: "[~@63 gb4, eb4@4 eb4@10 bb4@10 db4 f4 bb4@2 db4@29 bb3@3 eb4@2 gb4@3 bb3@3 eb4@10 bb4@10 db4 f4 bb4@2 db4@29 bb3@3 eb4@4, ~ bb3@4 bb3@3 bb3@4 bb3@4 eb4@2 gb4@3 bb3@9 bb4@6 bb3@2 bb4@32 ~@4 bb4@3 db4@9 gb4@10 eb4@5 f4@27, ~@2 gb4@4 gb4@11 bb3@3 eb4@9 f4@4 bb3 gb4@6 eb4 bb3 gb4@6 eb4 bb3 gb4@2 eb4 bb3 gb4@2 eb4@2 gb4@3 bb3@3 eb4@2 gb4@4 gb4@11 bb3@3 eb4@9 f4@4 bb3 gb4@6 eb4 bb3 gb4@6 eb4 bb3 gb4@2 eb4 bb3 gb4@2 eb4@2 gb4@3 bb3@3, ~@10 bb4@3 db4@9 gb4@10 eb4@5 f4@32 bb3@3 bb3@4 bb3@4 eb4@2 gb4@3 bb3@9 bb4@6 bb3@2 bb4@26]/8",
  D: "[~@51 bb4 ~@3 bb4 ~@3 db5 ~@3 db5, eb4@4 eb4@10 bb4@10 db4 f4 bb4@2 db4@13 bb3@8 db4 gb4@4 gb4@2 ~ ab4@3 ~ ab4@3, ~ bb3@4 bb3@3 bb3@4 bb3@4 eb4@2 gb4@3 bb3@9 bb4@6 bb3@2 bb4@4 gb4@6 gb3@4 gb3@4 ~@8, ~@2 gb4@4 gb4@11 bb3@3 eb4@9 f4@4 bb3 gb4@6 eb4@12 ~ db4@2 ~ db4@3 ~ db4@4, ~@10 bb4@3 db4@9 gb4@10 eb4@5 f4@15 ~@6 f4@2 ~@2 f4@2]/4",
  E: "~@3 c5 ~@3 c5 ~@5 eb5@3, ab3!2 bb3@2, ~ eb4@3 ~ eb4@3 ~ eb4@2 g4@5, ~@2 ab4@3 ~ ab4@2 ~@2 bb4@6, ~@3 eb4",
  F: "gb3@3 gb4 ~@2 db4@2 ~@7 ab4, ~@4 gb3@4 f3@3 ab4@2 ~ ab3@2, ~@5 bb3@3 ~ db4@3 ~ db4@3, ~@5 ab3 f3@2",
  G: "~@3 bb4 ~@3 bb4 ~@4 g4@4, ~ bb3@2 ~ bb3@4 eb3@8, ~@2 eb4@2 ~ f4@3 ~@2 bb3@6, ~@6 d4@2 ~ eb4@7, ~@11 bb4@5",
  H: "~@2 gb4@2 ~@2 gb4@2 ~@2 gb4 ~@3 gb4 ~, eb4@4 eb4@3 ~ eb4@3 ~ eb4@3 ~, ~ bb3@3 ~ bb3@3 ~ bb3@3 ~ bb3@3",
  I: "~@2 gb4 ~@3 gb4@2 bb3@2 bb4@2 ~@2 bb4@2, eb4@3 ~ eb4@4 ~@5 db4@3, ~ bb3@3 ~ bb3@3 ~@4 bb3@4",
  J: "~@2 gb4 ~@3 gb4@2 ~@2 bb4 ~@3 bb4@2, eb4@3 ~ eb4@4 db4@3 ~ db4@4, ~ bb3@3 ~ bb3@3 ~ f4@3 ~ f4@3",
  K: "~@2 gb4@2 ~@2 bb4@2 eb4 ~ gb4@6, eb4@4 ~ f4@3 ~@8, ~ bb3@3 bb3@4 ~ bb3@7",
  L: "eb4 ~ gb4@2 ~@2 gb4@2 ~@2 gb4 ~@3 gb4 ~, ~ bb3@3 eb4@3 ~ eb4@3 ~ eb4@3 ~, ~@5 bb3@3 ~ bb3@3 ~ bb3@3",
  M: "~@2 gb4 ~@3 gb4@2 db4@2 bb4 ~ db4@4, eb4@3 ~ eb4@4 ~@8, ~ bb3@3 ~ bb3@3 ~@8",
  N: "~ bb3@3 ~@2 bb4@2 ~ bb3@7, eb4 bb3 eb4@2",
  O: "~@3 bb4 ~@3 bb4 ~@3 db5 ~@3 db5, gb3@2 gb3@2 ~ f4 ~ f4, ~ db4@3 ~ db4@2 ~ db4@3 ~ db4@4, ~@2 gb4@4 gb4@2 ~ ab4@3 ~ ab4@3",
  P: "~@3 bb4 ~@3 bb4 ~@4 g4@3 ~, ~ bb3@2 ~ bb3@4 eb3@8, ~@2 eb4@2 ~ f4@3 ~@2 bb3@6, ~@6 d4@2 ~ eb4@7, ~@11 bb4@5",
  Q: "~ bb3@3 ~@2 bb4@2 eb4 bb3@7, eb4 bb3 ~@2", R: "~ bb3@3 ~@2 bb4@2 [bb3,eb4]@8, eb4 bb3 ~@2",
})).s("gm_acoustic_guitar_nylon").gain(0.29).pan(0.8)

// chords · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_2 = note(`<
  ~@3 A ~@3 A ~@3 A ~@4 B C ~ D ~@3 D ~@3 D E F ~@2 G C ~ D ~@3 D E F ~ D E H ~
>`.pickRestart({
  A: "~@9 db4@4 ~@3", B: "~@2 db4@3 ~@2 gb4 ~@8, ~ bb3@3 ~@12", C: "eb3 ~@3", D: "~@9 db4@3 ~@4",
  E: "~@9 f4@3 ~@2 bb4@2, ~@13 f4@3", F: "~@2 gb4@2 ~ f4@3 ~@2 gb4@6", G: "~@2 db4@2 ~@3 gb4 ~@8, ~ bb3@3 ~@12",
  H: "~@2 gb4@2 ~ f4@3 gb4@6 ~@2",
})).s("gm_acoustic_guitar_nylon").gain(0.14).pan(0.8)

// bass · contrabass
const bass_2 = note("<~@14 A B A C ~@12 A D E F ~@13>".pickRestart({
  A: "gb2 f2", B: "ab2 g2", C: "eb2@4 bb2@4 eb3@5 ~@3", D: "eb2!2", E: "db2!2", F: "c2@3 bb2@4 ~ eb2@5 ~@3",
})).s("gm_contrabass").gain(0.39)

// other · lead 1 square
const lead_1_square = note("<~@14 A B C D ~@12 A B C D ~@13>".pickRestart({
  A: "db6@6 eb6 [c6,db6] db6@2 ab6@2 db6@4", B: "eb6@2 f6 eb6", C: "eb6@6 db6 c6 db6@2 eb6 ~ eb6@2 db6@2",
  D: "c7@4 d7@4 eb7 db7 bb6 ab6 gb6@2 eb6 ~",
})).s("gm_lead_1_square").gain(0.13)

// other · violin
const violin_2 = note("<~@26 A B C D ~@7 E F G H I A B C J ~>".pickRestart({
  A: "~@2 eb5 ab5 [ab5,bb5] ~ eb5 ~@3 bb5 ab5 [ab5,bb5] ~ eb5 ~", // Absus2
  B: "~ gb5 ab5 bb5 bb5@2 gb5 ~ f5@2 db5 eb5 db5 eb5 db5 ~", C: "~ bb4 eb5 ~ eb5@2 ~@4 db5 eb5 db5 bb4 db5 ~",
  D: "bb5@2 ab5 gb5 ab5 bb5 gb5 ~ gb5 ab5 bb5 ~ eb5@2 ~@2", E: "~@14 bb5 ab5",
  F: "gb5@2 eb5 ~ eb5@2 bb5 ab5 gb5@2 eb5 ~ eb5@2 ~ bb5", G: "eb6@2 eb6 ~ eb6@2 db6 c6 c6@2 bb5 ~ bb5@2 bb5 ab5",
  H: "ab5@2 gb5 ~ gb5 f5 gb5 ab5 gb5@2 f5 ~@3 gb5 f5", I: "eb5@2 ~ f5@3 d5 ~ eb5@3 ~@5",
  J: "bb5@2 ab5 gb5 ab5 bb5 gb5 ~ [gb5,bb5]@2 ~@6", // Gb
})).s("gm_violin").gain(0.45)

// other · violin
const violin_3 = note(`<
  ~@37
  [~@14 gb5 f5]
  [eb5@2 bb4 ~ bb4@2 gb5 f5 eb5@2 bb4 ~ bb4@2 ~ db5]
  [gb5 ~ gb5@3 ~ f5 eb5 eb5@2 db5 ~ db5@2 f5 eb5]
  [eb5 bb4 bb4@3 ab4 bb4 db5 bb4@2 db5@2 ~@2 bb4 ab4]
  [gb4@3 ab4@2 ~ bb4@2 gb4@3 ~ gb4@3 ~]
  ~@5
>`).s("gm_violin").gain(0.22).pan(0.1)

// drums · kick
const kick = s("bd").struct("<~@2 x!12 ~@4 x!12 ~@4 x!12 ~>").gain(0.71)

// drums · clap
const clap = s("cp").struct("<~@2 A@3 B A@3 B A@3 B ~@4 A@3 B A@3 B A@3 B ~@4 A@3 B A@3 B A@3 B ~>".pickRestart({
  A: "~@5 x!2 ~", B: "~@3 x!2 ~@3",
})).gain(0.71)

// drums · low tom
const low_tom = s("lt").struct("<~@2 [~ x ~@2]!12 ~@4 [~ x ~@2]!12 ~@4 [~ x ~@2]!12 ~>").gain(0.71)

// drums · mid tom
const mid_tom = s("mt").struct("<~@2 [~ x ~@2]!12 ~@4 [~ x ~@2]!12 ~@4 [~ x ~@2]!12 ~>").gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@2 x!12 ~@4 x!12 ~@4 x!12 ~>").gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@22 A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~ A ~ A ~@2>".pickRestart({
  A: "x",
})).gain(0.71)

// drums · ride
const ride = s("rd").struct("<~@5 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@5>".pickRestart({
  A: "~@3 x",
})).gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~@2 x!12 ~@4 x!12 ~@4 x!12 ~>").gain(0.64)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@35 [~@3 x ~@4] ~@3 [~@3 x ~@4] ~@3 [~@3 x ~@4] ~@3>").gain(8.39)

// drums · shaker
const shaker = s("sh").struct("<~@2 [x!8]!12 ~@4 [x!8]!12 ~@4 [x!8]!11 [x!5 ~@3] ~>").gain(0.64)

// drums · triangle
const triangle = s("triangles:35").struct("<~@2 [~ x ~@2]!12 ~@4 [~ x ~@2]!12 x ~@3 [~ x ~@2]!12 ~>").gain(6.22)

stack(
  violin, bass, acoustic_guitar_steel, acoustic_guitar_steel_2, acoustic_guitar_nylon, acoustic_guitar_nylon_2, bass_2,
  lead_1_square, violin_2, violin_3, kick, clap, low_tom, mid_tom, high_tom, crash, ride, tambourine, vibraslap, shaker,
  triangle
)

More by Angelo Branduardi