Strudelify

Bella senz'anima

Riccardo Cocciante

KeyE minorTempo120 bpm
0:00/0:00
// Bella senz'anima — Riccardo Cocciante
// 120 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 112 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · slap bass 2 · "SLAPBASS"
const bass = note(`<
  A B C D A E F E A B A D C G C E H I J K L M N O P Q R S T Q U S U V R Q R Q R Q W X Y Z AA X AB AC AD I J K AE M AF AG
  AH AI AJ I J AK AE M AL@2 P Q R Q T S T Q R Q R Q R S AM S AN AO Y Z AA AP AB AC AQ I J K AR M AF AS AH AI AT I J K AE
  M AF AS AU AV AT AW
>`.pickRestart({
  A: "~ e2@2 ~@7 e2 ~@2 e2 ~@10", B: "~ g2 ~@8 g2 ~@2 a2@2 ~@9", C: "~ e2@2 ~@7 e2 ~@2 e2@2 ~@9",
  D: "~ g2 ~@8 g2 ~@2 a2 ~@10", E: "~ g2@2 ~@7 g2 ~@2 a2@2 ~@9", F: "~ e2 ~@8 e2 ~@2 e2@2 ~@9",
  G: "~ g2@2 ~@7 g2 ~@2 a2 ~@10", H: "~ a2 ~@2 a2 ~@2 b2@4 ~@2 c3@5 ~@4 c3@2", I: "~ d3@4 ~@5 d3@3 e3@4 ~@5 e3@2",
  J: "~ e2@6 d2@5 ~ [c2,c3]@4 ~@5 c3@2", K: "~ d3@3 ~@6 d3@2 ~ g2@6 ~@3 g2@2", L: "~@4 g3@2 ~ f#3@3 d3@3 c3@4 ~@5 c3@2",
  M: "~ d3@4 ~@5 d3@3 e3@6 ~@3 e3@2", N: "~ e2@6 d2@5 ~ c2@5 ~@4 c3@2", O: "~ d3@6 ~@3 d3@3 g2@6 ~@3 g2@2",
  P: "~ f#2@6 ~@6 e2 ~@8 e2 ~", Q: "~ e2 ~@11 g2@2 ~@7 g2 ~", R: "~ a2@2 ~@10 e2@2 ~@7 e2 ~",
  S: "~ e2@2 ~@10 g2@2 ~@7 g2 ~", T: "~ a2 ~@11 e2@2 ~@7 e2 ~", U: "~ a2@2 ~@10 e2 ~@8 e2 ~",
  V: "~ e2 ~@11 g2 ~@8 g2 ~", W: "~ a2@2 ~@10 c3@4 ~@5 c3 ~", X: "~ c3@3 ~@9 b2@4 ~@5 b2@2",
  Y: "~ b2 ~@2 b2@2 ~@7 a2@4 ~@5 a2@2", Z: "~ a2@3 ~@9 b2@4 ~@5 b2 ~", AA: "~ b2 ~@2 b2@3 ~@6 c3@4 ~@5 c3 ~",
  AB: "~ b2 ~@2 b2@2 ~@7 a2@5 ~@4 a2 ~", AC: "~ a2@3 ~@9 b2@5 ~@4 b2 ~",
  AD: "~ b2 ~@2 b2@2 ~ d3@3 b2 ~@2 c3@5 ~@4 c3@2", AE: "~@4 g3@3 f#3@3 d3@3 c3@5 ~@4 c3@2",
  AF: "~ e2@6 d2@5 ~ c3@5 ~@4 c3 ~", AG: "~ c3@4 ~@5 b2@11 ~ b2 ~", AH: "~ b2@7 ~@2 b2 ~@2 a2@5 ~@4 a2 ~",
  AI: "~ a2@4 ~@5 b2@10 ~@2 b2 ~", AJ: "~ b2 b3 ~ b2 ~@2 b2@3 ~@3 c3@4 ~@5 c3@2", AK: "~ d3@3 ~@6 d3@2 ~ g2@5 ~@4 g2@2",
  AL: "[~ e2@6 d2@5 ~ c2@5 ~@4 c3@3 d3@6 ~@3 d3@3 g2@6 ~@3 g2@2]/2", AM: "~ a2 ~@11 e2 ~@8 e2 ~",
  AN: "~ a2@2 ~@10 c3@4 ~@5 c3@2", AO: "~ c3@2 ~@10 b2@3 ~@6 b2@2", AP: "~ c3@3 ~@9 b2@4 ~@5 b2 ~",
  AQ: "~ b2 ~@2 b2 ~@2 d3@3 b2 ~@2 c3@4 ~@5 c3@2", AR: "~@4 g3@3 f#3@3 d3@3 c3@4 ~@5 c3@2",
  AS: "~ c3@4 ~@5 b2@10 ~@2 b2 ~", AT: "~ b2 b3 ~ b2 ~@2 b2@3 ~@3 c3@5 ~@4 c3@2", AU: "~ b2@7 ~@2 b2 ~@2 a2@5 ~@4 a2@2",
  AV: "~ a2@4 ~@5 b2@9 ~@3 b2 ~", AW: "~ d3@4 ~@2 d3@3 e3@3 ~@11",
})).s("gm_slap_bass_2").gain(0.8)

// bass · slap bass 2 · "SLAPBASS" · soft notes
const bass_soft = note(`<
  A B A B A B A B A C A B A B A B ~@2 D ~ E ~ F ~ G H I H I H I H I H I H I H I H J ~@9 D ~ E ~ D ~@5 D ~ E ~ F ~ G H I
  H I H I H I K I H I H I H J ~@9 D ~ E ~ D ~@5 D ~ E ~ D ~@5
>`.pickRestart({
  A: "~ e3 ~@8 e3 ~@2 e3 ~@10", B: "~ g3 ~@8 g3 ~@2 a3 ~@10", C: "~ g3@2 ~@7 g3 ~@2 a3 ~@10", D: "~@7 d3@3 ~@14",
  E: "~ g3 ~@22", F: "~@7 d3@3 ~@3 c3@3 ~@8", G: "~@7 f#2@3 ~@3 e3 ~@8 e3 ~", H: "~ e3 ~@11 g3 ~@8 g3 ~",
  I: "~ a3 ~@11 e3 ~@8 e3 ~", J: "~ a3 ~@22", K: "~ e3 ~@11 g3@2 ~@7 g3 ~",
})).s("gm_slap_bass_2").gain(0.4)

// chords · orchestral harp · "HARP/A.GTR"
const orchestral_harp = note(`<
  A B C@2 D E F@2 G H I J K L M N ~@8 O P Q R S T U V W X Y Z AA AB AC AD AE AF@2 AG AH AF@2 AG AI ~@17 O P Q R S T AJ R
  AK P Q R S T AJ R AL AF@2 AG AH AF@2 AG AI ~@21
>`.pickRestart({
  A: "~ e4 ~@5 [e4,a4,b4] ~@2 e4 ~@5 [e4,g4,b4] ~@2 e4 ~@2 [e4,f#4,b4] ~", // Esus4 Em Esus2
  B: "~ e4 ~@2 e4 ~@2 [e4,b4] ~@2 e4 ~@2 e4 ~@2 [e4,a4,b4] ~@2 e4 ~@2 [e4,b4] ~", // E5 Esus4 E5
  C: "[~ e4 ~@5 [e4,a4,b4] ~@2 e4 ~@2 e4 ~@2 [e4,g4,b4] ~@5 [d4,g4,b4]@6 e4 ~@2 [d4,e4,g4,b4] ~@5 [c#4,e4,a4] ~@2 [c#4,e4,a4]@3 e4 ~@2 e4@2, ~@22 e4 ~@25]/2", // Esus4 Em G Em7 A
  D: "~ e4 ~@2 e4 ~@2 [e4,a4,b4] ~@2 e4 ~@2 e4 ~@2 [e4,g4,b4] ~@2 e4 ~@2 [e4,f#4,b4] ~", // Esus4 Em Esus2
  E: "~ e4 ~@5 [e4,b4]@2 ~ e4 ~@2 e4 ~@2 [e4,a4,b4] ~@5 e4@2, ~@22 b4 ~", // E5 Esus4
  F: "[~ e4 ~@2 e4 ~@2 [e4,a4,b4] ~@5 e4 ~@2 [e4,g4,b4] ~@5 [d4,g4,b4]@6 e4 ~@2 [d4,e4,g4,b4] ~@5 [c#4,e4,a4] ~@2 [c#4,e4,a4]@4 ~@2 e4 ~, ~@22 e4 ~@25]/2", // Esus4 Em G Em7 A
  G: "~ e4 ~@5 [a4,b4]@2 ~@7 [e4,g4,b4] ~@2 e4 ~@2 [e4,f#4,b4] ~, ~@7 e4 ~@16", // Asus2 Em Esus2
  H: "~ e4 ~@5 [e4,b4] ~@8 [e4,a4,b4] ~@2 e4 ~@2 [e4,b4] ~", // E5 Esus4 E5
  I: "~ e4 ~@5 [e4,b4] ~@2 e4 ~@2 e4 ~@2 [e4,g4,b4] ~@5 [e4,f#4,b4] ~, ~@7 a4@2 ~@15", // E5 Em Esus2
  J: "~@4 e4 ~@2 [e4,b4] ~@5 e4 ~@2 [a4,b4] ~@2 e4 ~@2 e4@2, ~@16 e4@2 ~@4 b4 ~", // E5 Asus2
  K: "~ e4 ~@2 e4 ~@2 [e4,a4,b4] ~@5 e4 ~@2 [e4,g4,b4] ~@2 e4 ~@2 [e4,f#4,b4] ~", // Esus4 Em Esus2
  L: "~ e4 ~@5 [e4,b4] ~@5 e4 ~@2 [e4,a4,b4] ~@5 e4@2, ~@22 b4 ~", // E5 Esus4
  M: "~ e4 ~@5 [e4,a4,b4] ~@8 [g4,b4] ~@5 [f#4,b4] ~, ~@8 e4 ~@2 e4", // Esus4 G B5
  N: "~@4 e4 ~@2 e4@2 ~@4 e4 ~@2 [a4,b4] ~@5 e4@2, ~@7 b4 ~@8 e4@2 ~@4 b4 ~", O: "~@13 e4 ~@5 [e4,a4,b4] ~@2 e4 ~",
  P: "~@4 [e4,g4,b4] ~@2 e4 ~@2 [e4,f#4,b4] ~@2 e4 ~@2 e4 ~@2 [e4,b4] ~@2 e4 ~", // Em Esus2 E5
  Q: "~ e4 ~@2 [e4,a4,b4] ~@2 e4 ~@2 e4@2 ~ e4 ~@5 [e4,a4,b4] ~@2 e4 ~, ~@10 b4 ~@13", // Esus4
  R: "~ e4 ~@2 [e4,g4,b4] ~@5 [d4,g4,b4]@6 e4 ~@2 [d4,e4,g4,b4] ~@4, ~@10 e4 ~@13", // Em G Em7
  S: "~ [c#4,e4,a4] ~@2 [c#4,e4,a4]@3 e4 ~@2 e4 ~@2 e4 ~@2 e4 ~@2 [e4,a4,b4] ~@2 e4 ~", // A Esus4
  T: "~ e4 ~@2 [e4,g4,b4] ~@2 e4 ~@2 [e4,b4] ~@2 e4 ~@5 [e4,b4]@2 ~ e4 ~, ~@5 f#4 ~@6", // Em E5
  U: "~ e4 ~@2 [e4,a4,b4] ~@5 e4@2 ~ e4 ~@2 e4 ~@2 [e4,a4] ~@4, ~@10 b4 ~@8 b4@2 ~@3", // Esus4 A5
  V: "~ e4 ~@2 [g4,b4] ~@5 [d4,g4,b4]@6 e4 ~@2 [d4,e4,g4,b4] ~@4, ~@2 e4 ~@2 e4 ~@6", // G Em7
  W: "~ [c#4,e4,a4] ~@2 [c#4,e4,a4]@4 ~@2 e4 ~@2 e4 ~@5 [e4,a4,b4] ~@4", // A Esus4
  X: "~@4 [e4,g4,b4] ~@2 e4 ~@2 [e4,f#4,b4] ~@2 e4 ~@5 [e4,b4] ~@4", // Em Esus2 E5
  Y: "~@4 [e4,a4,b4] ~@2 e4 ~@2 [e4,b4] ~@2 e4 ~@5 [e4,a4,b4] ~@2 e4 ~", // Esus4 E5 Esus4
  Z: "~ e4 ~@2 [e4,g4,b4] ~@5 [e4,f#4,b4] ~@5 e4 ~@2 [e4,b4] ~@4", // Em Esus2 E5
  AA: "~ e4 ~@2 [a4,b4] ~@2 e4 ~@2 [e4,b4] ~@2 e4 ~@2 e4 ~@2 [e4,a4,b4] ~@4, ~@2 e4 ~@9", // Asus2 E5 Esus4
  AB: "~ e4 ~@2 [e4,g4,b4] ~@2 e4 ~@2 [e4,f#4,b4] ~@2 e4 ~@5 [e4,b4] ~@4", // Em Esus2 E5
  AC: "~ e4 ~@2 [e4,a4,b4] ~@5 [e4,b4] ~@2 e4 ~@5 [e4,a4] ~@4, ~@19 b4@2 ~@3", // Esus4 E5 A5
  AD: "~@4 [g4,b4] ~@5 [e4,f#4,b4] ~@5 e4 ~@2 e4@2 ~@3, ~@4 e4@2 ~@13 b4 ~@4", // G Esus2
  AE: "~ e4 ~@2 [e4,a4,b4] ~@5 e4@2 ~@7 e4 ~@4, ~@10 b4 ~@13", AF: "~@4 e4 ~@5 e4 ~@8 e4 ~@4", AG: "~@4 e4 ~@14 e4 ~@4",
  AH: "~ e4 ~@2 e4 ~@14 e4 ~@4", AI: "~ e4 ~@2 e4 ~@19",
  AJ: "~ e4 ~@2 [e4,a4,b4] ~@5 [e4,b4]@2 ~ e4 ~@2 e4 ~@2 [a4,b4]@2 ~@3, ~@19 e4 ~@4", // Esus4 E5 Asus2
  AK: "~ [c#4,e4,a4] ~@2 [c#4,e4,a4]@4 ~@2 e4 ~@2 e4 ~@5 [a4,b4]@2 ~ e4 ~, ~@19 e4 ~@4", // A Asus2
  AL: "~ [c#4,e4,a4] ~@2 [c#4,e4,a4]@4 ~@2 e4 ~@8 e4 ~@4", // A
})).s("gm_orchestral_harp").gain(0.54)

// chords · orchestral harp · "HARP/A.GTR" · soft notes
const orchestral_harp_soft = note(`<
  A ~ B C ~ B D E F@2 B C G H I E ~@8 J K J L ~ J M L N O P L Q R N S T U@2 V W U@2 V X ~@17 J K J L ~ J M L Y K J L ~ J
  M L T U@2 V W U@2 V X ~@21
>`.pickRestart({
  A: "~@4 e4 ~@8 e4 ~@10", B: "~@4 e4 ~@14 e4 ~@4", C: "~ e4 ~@8 e4 ~@13", D: "~@10 e4 ~@8 e4 ~@4",
  E: "~ e4 ~@8 e4 ~@8 e4 ~@4", F: "~@4 e4 ~@5 e4 ~@2 e4 ~@10", G: "~@10 e4 ~@13", H: "~@4 e4 ~@5 e4 ~@8 e4 ~@4",
  I: "~@4 e4 ~@5 e4 ~@2 e4 ~@5 e4 ~@4", J: "~@16 e4 ~@7", K: "~ e4 ~@22", L: "~@7 e4 ~@5 e4 ~@8 e4 ~",
  M: "~@7 e4 ~@14 e4 ~", N: "~@7 e4 ~@8 e4 ~@5 e4 ~", O: "~ e4 ~@14 e4 ~@5 e4 ~", P: "~ e4 ~@14 e4 ~@7", Q: "~@22 e4 ~",
  R: "~@16 e4 ~@5 e4 ~", S: "~ e4 ~@5 e4 ~@5 e4 ~@8 e4 ~", T: "~@7 e4 ~@5 e4 ~@2 e4 ~@5 e4 ~",
  U: "~ e4 ~@5 e4 ~@5 e4 ~@2 e4 ~@5 e4 ~", V: "~ e4 ~@5 e4 ~@2 e4 ~@5 e4 ~@7",
  W: "~@7 e4 ~@2 e4 ~@2 e4 ~@2 e4 ~@5 e4 ~", X: "~@7 e4 ~@2 e4 ~@13", Y: "~@7 e4 ~@8 e4 ~@7",
})).s("gm_orchestral_harp").gain(0.31)

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

// drums · snare
const snare = s("sd").struct("<A@16 B A@31 C A@9 C A@31 C A@9 C A@9 C D>".pickRestart({
  A: "~@7 x ~@11 x ~@4", B: "~@4 x ~@2 x ~@2 x!2 ~@7 x ~@4", C: "~@2 x ~@4 x ~@2 x!2 ~@7 x ~@4", D: "~@7 x ~@2 x ~@13",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@111 [~ x ~@22]>").gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  A@3 B A@3 B A@3 B A@3 B C A@3 D A@3 D A@3 D A@3 D A@3 D A@3 D A@3 D A@3 D A@3 D A@3 D A D A@3 D A@3 D A@3 D A@3 D A@3
  D A@3 D A@3 D A@3 D A@3 D A@3 D A D A@3 D A@3 D A D E
>`.pickRestart({
  A: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", B: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~@4",
  C: "~@13 x ~@2 x ~@2 x ~@2 x ~", D: "~ x ~@5 x ~@5 x ~@2 x ~@2 x ~@2 x ~", E: "~ x ~@5 x ~@2 x ~@13",
})).gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<~@111 x>").gain(0.72)

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

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct(`<
  ~@3 A ~@7 A ~@8 B ~@7 B ~@7 B ~@7 B ~@7 B ~@9 B ~@7 B ~@7 B ~@7 B ~@7 B ~@9 B ~@7
>`.pickRestart({
  A: "~@2 x", B: "~ x ~@4",
})).gain(0.24)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~@2 B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~ B ~@3 B ~@3 B ~ B ~@3 B ~
  B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~ B ~@3 B ~@3 B ~ B ~@3 B ~ C ~
>`.pickRestart({
  A: "~@19 x ~@4", B: "~@7 x ~@16", C: "~@23 x",
})).gain(0.56)

// drums · crash
const crash = s("cr").struct("<~@8 [~ x ~@22] ~@23 [~@13 x ~@10] ~@79>").gain(0.48)

// drums · ride
const ride = s("rd").struct(`<
  ~@16 A ~@3 A ~@19 A ~@7 A ~@3 A ~@5 A ~@3 A ~@19 A ~@7 A ~@3 A ~@5 A ~@3 A ~@5 A B
>`.pickRestart({
  A: "~@13 x ~@10", B: "~@7 x ~@2 x ~@13",
})).gain(0.48)

stack(
  bass, bass_soft, orchestral_harp, orchestral_harp_soft, kick, snare, low_tom, hihat, mid_tom, open_hat, open_hat_soft,
  high_tom, crash, ride
)

More by Riccardo Cocciante