Strudelify

Nata per me

Celentano

KeyG♯ minorTempo87 bpm
0:00/0:00
// Nata per me — Celentano
// 87 bpm, 4/4, key G# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 59 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(87/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.

// chords · piano
const piano = note(`<
  A B C D@2 E F G H E I J K L M N O P Q R S T@2 U@2 T@2 V W X@2 Y Z AA AB AC AD T@2 U@2 T@2 V W X@2 Y Z AA AB AA AE AA
  AE AA AE AA AF
>`.pickRestart({
  A: "~@22 [g#3,b3,d#4] ~@3 [g#3,b3,d#4] ~@3 [g#3,b3,d#4] ~", // G#m
  B: "~@2 [g#3,b3,d#4] ~@3 [g#3,b3,d#4] ~@3 [g#3,b3,d#4] ~@3 [g#3,b3,d#4] ~@3 [g#3,b3,d#4] ~@3 [f#3,a#3,d#4] ~@3 [f#3,a#3,d#4] ~@3 [f#3,a#3,d#4] ~", // G#m D#m
  C: "~@2 [f#3,a#3,d#4] ~@3 [f#3,a#3,d#4] ~@3 [f#3,a#3,d#4] ~@3 [f#3,a#3,d#4] ~@3 [f#3,a#3,d#4] ~@3 [g#3,d#4] ~@3 [g#3,b3,d#4] ~@3 [g#3,b3,d#4] ~, ~@11 b3 ~@4", // D#m G#5 G#m
  D: "[~@2 [g#3,b3,d#4] ~@3 [g#3,b3,d#4] ~@3 [g#3,b3,d#4] ~@3 [g#3,b3,d#4] ~@3 [g#3,b3,d#4]@3 ~ [d#3,d#4]@2 ~@7 c#4@2 ~@7 [b2,b3]@2 ~@7 [a#2,a#3]@2 ~@8 [g#4,b4,d#5] ~@3 [g#4,b4,d#5], ~@31 c#3 ~@32]/2", // G#m D# B A# G#m
  E: "~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5]", // G#m
  F: "~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5]", // G#m B
  G: "~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5]", // B
  H: "~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5]", // B G#m
  I: "~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,c#5] ~@3 [g#4,b4,c#5]", // G#m C#7
  J: "~@3 [g#4,b4,c#5] ~@3 [g#4,b4,c#5] ~@3 [g#4,b4,c#5] ~@3 [g#4,b4,c#5] ~@3 [g#4,b4,c#5] ~@3 [g#4,b4,c#5] ~@3 [g4,a#4,c#5] ~@3 [g4,a#4,c#5]", // C#7 Gdim
  K: "~@3 [g4,a#4,c#5] ~@3 [g4,a#4,c#5] ~@3 [g4,a#4,c#5] ~@3 [g4,a#4,c#5] ~@3 [g4,a#4,c#5] ~@3 [g4,a#4,c#5] ~@3 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~", // Gdim A
  L: "~ [a3,c#4,e4] ~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~", // A
  M: "~ [a3,c#4,e4] ~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~ [g#3,b3,d#4] ~@2 [g#3,b3,d#4] ~", // A G#m
  N: "~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~@2 [g#3,b3,d#4] ~@2 [g#3,b3,d#4] ~ [g#3,b3,d#4] ~@2 [g#3,b3,d#4] ~@2 [g#3,b3,d#4] ~ [g#3,b3,d#4] ~@2 [g#3,b3,d#4] ~@2 [g#3,b3,d#4] ~ [e4,g#4,c#5] ~@2 [e4,g#4,c#5] ~", // G#m C#m
  O: "~ [e4,g#4,c#5] ~ [e4,g#4,c#5] ~@2 [e4,g#4,c#5] ~@2 [e4,g#4,c#5] ~ [a#4,d#5]@2 ~@14 [b4,d#5] ~@3 [g#4,b4,d#5], ~@11 g4 ~@15 g#4@2 ~@3", // C#m D#5 B G#m
  P: "~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4] ~@3 [g#4,b4,d5], ~@27 d5@2 ~@3", // G#m G#dim
  Q: "~@3 [g#4,b4,d5] ~@3 [g#4,b4,d5] ~@3 [g#4,b4,d5] ~@3 [g#4,b4,d5] ~@3 [g#4,b4,d5] ~@3 [g#4,b4,d5] ~@3 [d#4,g#4] ~@3 [d#4,g#4,b4], ~@27 b4@2 ~@3", // G#dim G#5 G#m
  R: "~@3 [d#4,g#4,b4] ~@3 [d#4,g#4,b4] ~@3 [d#4,g#4,b4] ~@3 [d#4,g#4,b4] ~@3 [d#4,g#4,b4] ~@3 [d#4,g#4,b4]@3 ~ [d#4,d#5]@2 ~@3", // G#m D#
  S: "~@4 c#5@2 ~@7 [b3,b4]@2 ~@7 [a#3,a#4]@2 ~@8, ~@4 c#4 ~@27", // B A#
  T: "[g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3", // G#m
  U: "[f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3", // B
  V: "[g#4,b4,c#5] ~@3 [g#4,b4,c#5] ~@3 [g#4,b4,c#5] ~@3 [g#4,b4,c#5] ~@3 [g#4,b4,c#5] ~@3 [g#4,b4,c#5] ~@3 [g#4,b4,c#5] ~@3 [g#4,b4,c#5] ~@3", // C#7
  W: "[g4,a#4,c#5] ~@3 [g4,a#4,c#5] ~@3 [g4,a#4,c#5] ~@3 [g4,a#4,c#5] ~@3 [g4,a#4,c#5] ~@3 [g4,a#4,c#5] ~@3 [g4,a#4,c#5] ~@3 [g4,a#4,c#5] ~@3", // Gdim
  X: "[a3,c#4,e4] ~@2 [a3,c#4,e4] ~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~ [a3,c#4,e4] ~@2", // A
  Y: "[g#3,b3,d#4] ~@2 [g#3,b3,d#4] ~ [g#3,b3,d#4] ~@2 [g#3,b3,d#4] ~@2 [g#3,b3,d#4] ~ [g#3,b3,d#4] ~@2 [g#3,b3,d#4] ~@2 [g#3,b3,d#4] ~ [g#3,b3,d#4] ~@2 [g#3,b3,d#4] ~@2 [g#3,b3,d#4] ~ [g#3,b3,d#4] ~@2", // G#m
  Z: "[e4,g#4,c#5] ~@2 [e4,g#4,c#5] ~ [e4,g#4,c#5] ~@2 [e4,g#4,c#5] ~@2 [e4,g#4,c#5] ~ [e4,g#4,c#5] ~@2 [a#4,d#5]@2 ~@14, ~@16 g4 ~@15", // C#m D#5
  AA: "[b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3, g#4 ~@15", // B G#m
  AB: "[g#4,b4] ~@3 [g#4,b4,d5] ~@3 [g#4,b4,d5] ~@3 [g#4,b4,d5] ~@3 [g#4,b4,d5] ~@3 [g#4,b4,d5] ~@3 [g#4,b4,d5] ~@3 [g#4,b4,d5] ~@3, d5 ~@15", // G#m G#dim
  AC: "[g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [f#4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@3, ~@8 b4 ~@7", // G#m D#m B
  AD: "[e4,g#4,b4,d#5] ~@3 [e4,g#4,b4,d#5] ~@3 [e4,g#4,b4,d#5] ~@3 [e4,g#4,b4,d#5] ~@3 [d#4,a#4,c#5] ~@3 [g4,d#5]@2 ~@2 [d#4,a#4,d#5] ~@3 [g4,a#4,c#5,d#5]@2 ~@2, ~@16 g4@2 ~@2 [d#4,c#5] ~@3 [g4,c#5]@2 ~@2 d#4 ~@3", // Emaj7 D#7 Cm D#5 D#7 Gdim
  AE: "[g#4,b4] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3, d#5 ~@15", // G#m
  AF: "[g#4,b4] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@7, d#5 ~@15", // G#m
})).s("gm_piano").gain(0.22).pan(0.6)

// bass · acoustic bass
const bass = note(`<
  A B C D@8 E@2 F G H I@4 J K@2 L@2 K@2 M@2 N@2 O P K Q R S K@2 L@2 K@2 M@2 N@2 O P K Q K Q K Q K Q K Q
>`.pickRestart({
  A: "~@11 g#1@4 ~", B: "~@2 d#2@5 ~@3 d#2@4 g#1@6 ~@2 f#1@9 ~", C: "~@2 c#2@5 ~@3 c#2@4 f#1@5 ~@3 e1@9 ~",
  D: "[~@2 b1@5 ~@3 b1@3 ~ e1@6 ~@2 d#2@4 ~@5 c#2@4 ~@5 b1@5 ~@4 a#1@5 ~@5 g#1@8 ~@4 d#2@5 ~@3 d#2@4 g#1@6 ~@2 g#1@8 ~@4 d#2@5 ~@3 d#2@4 g#1@6 ~@2 f#1@8 ~@4 f#2@5 ~@3 f#2@4 f#1@6 ~@2 f#1@8 ~@4 f#2@5 ~@3 f#2@4 f#1@6 ~@2 g#1@8 ~@4 d#2@5 ~@3 d#2@4 g#1@6 ~@2 g#1@8 ~@4 d#2@5 ~@3 d#2@4 g#1@6 ~@2 d#1@5]/8",
  E: "[~@7 a#1@5 ~@3 a#1@4 d#1@6 ~@2 d#1@8 ~@4 a#1@5 ~@3 a#1@4 d#1@6 ~@2 a1@5]/2",
  F: "~@3 e2@4 ~@2 a1@2 e2@10 ~@4 e2@2 a1@5", G: "~@3 e2@4 ~@2 a1@2 e2@10 ~@4 e2@2 g#1@5",
  H: "~@3 d#2@4 ~@2 g#1@2 d#2@10 ~@4 d#2@2 c#2 ~@2 c#2 ~",
  I: "[~ c#2 ~ c#2 ~@2 c#2 ~@2 c#2 ~ d#2@2 ~@14 g#1@8 ~@4 d#2@5 ~@3 d#2@4 g#1@6 ~@2 e2@8 ~@4 b1@5 ~@3 b1@4 e2@6 ~@2 g#1@9 ~@3 b1@5 ~@3 b1@3 ~ g#1@6 ~@2 d#2@4 ~]/4",
  J: "~@4 c#2@4 ~@5 b1@5 ~@4 a#1@5 ~@5", K: "g#1@8 ~@4 d#2@5 ~@3 d#2@4 g#1@6 ~@2",
  L: "f#1@8 ~@4 f#2@5 ~@3 f#2@4 f#1@6 ~@2", M: "d#1@8 ~@4 a#1@5 ~@3 a#1@4 d#1@6 ~@2",
  N: "a1@6 ~@2 e2@4 ~ a1@2 ~ e2@10 ~@3 e2@2 ~", O: "g#1@6 ~@2 d#2@4 ~ g#1@2 ~ d#2@10 ~@3 d#2@2 ~",
  P: "c#2 ~@2 c#2 ~ c#2 ~@2 c#2 ~@2 c#2 ~ c#2 ~@2 d#2@2 ~@14", Q: "e2@8 ~@4 b1@5 ~@3 b1@4 e2@6 ~@2",
  R: "g#1@5 ~ g#1@2 f#1@5 ~ f#1@2", S: "e1@5 ~ e1@2 d#1@5 ~ d#1@2",
})).s("gm_acoustic_bass").gain(0.56)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A@5 B@2 C@2 D@4 ~@3 E F@2 G@2 H I J K H I L@2 ~@3 M N O P Q R@2 S@2 T@2 U@2 ~@3 M N O V@8
>`.pickRestart({
  A: "[~@16 g#4@34 ~@2 g#4@2 d#5@21 ~@3 d#5@2 e5@2 f5 ~ f#5 g5 g#5@25 ~@5 g#5@2 d#6@3 ~@2 d#6@4 c#6@3 ~ c#6@4 ~ b5@3 ~@2 b5@4 a#5@3 ~@2 a#5@5 ~@5]/5",
  B: "[~@15 g#3@4 d#4@4 c#4@4 d#4@32 ~@5]/2",
  C: "[~@15 f#5@4 d#6@4 c#6@4 ~@4 g#3@4 d#4@4 c#4@4 d#4@16 ~@5, ~@27 d#6@24 ~@13]/2",
  D: "[~@15 g#3@4 d#4@4 c#4@4 d#4@32 ~@24 a#4@8 d#5@16 c#5@3 d#5@3 c#5@2 a#4@8 ~@5, ~@59 d#3@64 ~@5]/4",
  E: "~@11 [d#3,d#4,g4,a#4]@3 ~@18", F: "[~@3 [d#3,d#4]@8 [e3,e4]@8 [d#3,d#4]@8 [d3,d4]@30 ~@7]/2",
  G: "[~@3 [a#3,a#4]@4 [c#4,c#5]@4 [d#4,d#5]@4 [g#4,g#5]@4 [a#4,a#5]@4 [c#5,c#6]@4 d#6@3 ~ d#6@4 ~ c#6@3 ~ c#6@4 ~ b5@3 ~ b5@5 a#5@3 ~@2 a#5@5]/2", // A# C# D# G# A# C#
  H: "~@5 g#3 d#4 c#4", I: "d#4", J: "~@5 f#5 d#6 c#6", K: "~ g#3 d#4 c#4 d#4@4, d#6@3 ~",
  L: "[~@24 a#4@8 d#5@16 c#5@3 d#5@2 c#5@3 a#4@8, d#3]/2", M: "~@16 [d#3,d#4,g4,a#4]@3 ~@13",
  N: "~ [d#3,d#4] [e3,e4] [d#3,d#4]", O: "[d3,d4]@15 ~", P: "g#3@3 g#3 d#4@2 c#4 b3",
  Q: "d#5@8 c#5@4 b4@4 a#4 ~@7 [g4,g5] [g#4,g#5] ~ a#5 [c#5,c#6] [d#5,d#6] ~ [g5,g6], g#3@16 ~@11 a#4@5", // G G# C# D# G
  R: "[[g#4,d#5,g#5]@35 ~@5 [b4,g#5,b5]@4 [a#4,f#5,a#5]@4 [g#4,e5,g#5]@8 [f#4,d#5,f#5]@4 [e4,c#5,e5]@4]/2", // G#5 E D#m C#m D#m C#m
  S: "[[d#4,b4,d#5]@25 ~@3 [d#4,b4,d#5]@4]/2", // G#m
  T: "[[g#4,d#5,g#5]@37 ~@3 [b4,g#5,b5]@4 [a#4,f#5,a#5]@4 [g#4,e5,g#5]@8 [f#4,d#5,f#5]@4 [e4,c#5,e5]@4]/2", // G#5 E D#m C#m D#m C#m
  U: "[[d#4,a#4,d#5]@27 ~@5]/2", V: "[~@4 g#5 a#5 b5 c#6 d#6@24]/2",
})).s("gm_string_ensemble_1").gain(0.23).pan(0.6)

// chords · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<A ~@11 B@5 ~@12 C@2 D E ~@3 F ~@8 C@2 D E ~@10>".pickRestart({
  A: "~@14 d#4 ~@17", B: "[~@27 [a3,c#4,e4]@64 [g#3,b3,d#4]@32 [c#3,c#4,e4,g#4]@16 ~@21]/5", C: "[a3,c#4,e4]/2",
  D: "[g#3,b3,d#4]", E: "[c#3,c#4,e4,g#4] ~", F: "~@2 d#3 ~",
})).s("gm_string_ensemble_1").gain(0.13).pan(0.6)

// drums · kick
const kick = s("bd").struct("<A B@2 C D E@8 F@3 G E@3 H I@8 J@3 K I@12 J@3 K I@10>".pickRestart({
  A: "~@11 x ~@4", B: "~ x ~@3 x ~@5 x ~@4", C: "~@2 x ~@7 x ~@11 x ~@8 x", D: "~@8 x ~@8 x ~@9 x ~@4",
  E: "~@7 x ~@7 x ~@11 x ~@4", F: "~@9 x ~@7 x ~@9 x ~@4", G: "~@11 x ~@15 x ~@4", H: "~@4 x ~@8 x ~@8 x ~@9",
  I: "x ~@2 x ~ x ~@2", J: "x ~@12 x ~@7 x ~@10", K: "x!2",
})).gain(0.38)

// drums · rim
const rim = s("rim").struct("<A B@2 C ~ D@11 E D@3 ~ F@11 G F@15 G F@10>".pickRestart({
  A: "~@15 x", B: "~@7 x ~@7 x", C: "~@7 x ~@8", D: "~@3 x ~@15 x ~@12", E: "~@3 x ~@2 x ~@2 x ~@22", F: "~ x ~ x",
  G: "~@8 x ~@2 x ~ x ~@18",
})).gain(0.63)

// drums · rim · soft notes
const rim_soft = s("rim").struct(`<
  ~@15
  [~@27 x ~@2 x ~]
  [~ x ~@30]
  ~@15
  [x ~@2 x ~ x ~@26]
  ~@15
  [x ~@2 x ~ x ~@26]
  ~@10
>`).gain(0.25)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@15
  [~@15 x]
  [~ x ~ x ~@2 x ~@2 x ~ x ~@20]
  ~@15
  [~@3 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@15]
  ~@15
  [~@3 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@15]
  ~@10
>`).gain(0.51)

// drums · ride
const ride = s("rd").struct("<A B@2 C D E@7 F G@2 H I E@2 F J K@8 L@3 ~ K@12 L@3 ~ K@9 M>".pickRestart({
  A: "~@11 x ~ x ~ x", B: "~ x!3 ~ x ~ x ~ x ~ x ~ x ~ x", C: "~@2 x ~ x ~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@8 x",
  D: "~@8 x ~@8 x ~@9 x ~@3 x", E: "~@3 x ~@3 x ~ x ~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x",
  F: "~@3 x ~@3 x ~ x ~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@4", G: "~ x ~ x ~@2 x ~@2 x ~ x ~@5 x ~ x ~@5 x ~ x ~@4",
  H: "~ x ~ x ~@2 x ~@2 x ~ x ~@5 x ~ x ~@5 x ~@6", I: "~@27 x ~@3 x", J: "~@4 x ~@8 x ~@8 x ~@9",
  K: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", L: "x ~@4 x ~@2 x ~@2 x ~ x ~@2 x ~@4 x ~@2 x ~@4 x ~@2",
  M: "x ~ x ~ x ~ x!3 ~ x ~ x ~@3",
})).gain(0.32)

stack(piano, bass, string_ensemble_1, string_ensemble_1_soft, kick, rim, rim_soft, hihat, ride)

More by Celentano