Strudelify
Ciao mamma cover art

1990 · Giovani Jovanotti

Ciao mamma

Jovanotti

KeyA majorTempo100 bpm
0:00/0:00
// Ciao mamma — Jovanotti
// 100 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 121 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · piano · "Ac.Piano"
const piano = note(`<
  ~@20 A B C D E F G F E F G F H I J K E F G F L M N O P Q R S P Q R S T U V W T U V W X F Y Z L M N O P Q R S P Q R S
  AA U V W T U V W P Q R S P Q R S P Q R S P Q R S P Q R S P Q R S P Q R S P Q R S P Q R S AB
>`.pickRestart({
  A: "~@6 [e4,a4]@3 c#4 ~ [c#4,e4,a4] ~@2 [c#4,e4,a4] ~@3 c#4 ~@2 [c#4,e4,a4] ~@2, ~@3 c#4 ~@8", // A5 A
  B: "[b3,e4,g#4]@4 ~@2 [b3,e4,g#4]@3 b3 ~ [a3,d4,f#4] ~@2 a3!2 ~@8, ~@7 [d4,f#4] ~@4", // E D
  C: "[c#4,e4,a4]@5 ~ [c#4,e4,a4]@3 c#4 ~ [c#4,e4,a4] ~@2 [c#4,e4] c#4 ~@2 c#4 ~@2 [c#4,e4,a4] ~@2, ~@7 a4 ~@4", // A C#m A
  D: "[b3,e4,g#4]@5 ~ [e4,g#4]@2 ~ b3 ~ [a3,d4,f#4] ~@2 [a3,d4,f#4]@7 [a3,f#4] ~@2, ~@6 b3 ~@17", // E D
  E: "[g#3,b3,e4]@4 ~ [g#3,b3,e4] ~@3 [g#3,b3,e4]@4 ~ [g#3,b3,e4] ~@6 [g#3,b3] ~@2, ~@21 e4@2 ~", // E G#m
  F: "[f#3,a3,d4]@4 ~ [f#3,a3,d4] ~@3 [f#3,a3,d4]@4 ~ [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@2 [f#3,a3,d4] ~@2", // D
  G: "[g#3,b3,e4]@4 ~ [g#3,b3,e4] ~@3 [g#3,b3,e4]@4 ~ [g#3,b3,e4] ~@6 [g#3,b3,e4] ~@2", // E
  H: "[g#3,b3,e4]@4 ~ [g#3,b3,e4] ~@3 [g#3,b3,e4]@4 ~ [g#3,b3,e4] ~@3 [g#3,b3,e4] ~@2 [g#3,b3,e4] ~@2", // E
  I: "[f#3,a3,d4]@4 ~ [f#3,a3,d4] ~@3 [f#3,a3,d4]@4 ~ [f#3,a3,d4]!2 ~@2 [f#3,a3,d4] ~@2 [f#3,a3,d4] ~@2", // D
  J: "[g#3,b3,e4]@4 ~ [g#3,b3,e4] ~@3 [g#3,b3,e4]@4 ~ b3!2 ~@2 [g#3,b3,e4] ~@2 [g#3,b3] ~@2, ~@14 [g#3,e4]@2 ~@5 e4@2 ~", // E G#m C#m
  K: "[f#3,a3,d4]@4 ~ [f#3,a3,d4] ~@3 [f#3,a3,d4]@4 ~ [f#3,a3] ~@3 [f#3,a3] ~@2 [a3,d4]@2 ~, ~@14 d4@2 ~@2 d4@2 ~ f#3 ~@2", // D F#m D5
  L: "[f#3,a3,c#4]@4 [f#3,a3,c#4] ~@4 [f#3,a3,c#4]@4 ~ [f#3,a3,c#4] ~@3 [f#3,a3,c#4] ~@2 [f#3,a3,c#4] ~@2", // F#m
  M: "[f#3,a3,d4]@4 a3 [f#3,d4] ~@3 [e3,g#3,b3,c#4]@10 ~@2 [e3,g#3,b3,c#4] ~@2", // D C#m7
  N: "[f#3,a3,c#4]@4 ~ [f#3,a3,c#4] ~@3 [f#3,a3,c#4]@4 ~ [f#3,a3,c#4] ~@3 [f#3,a3,c#4] ~@2 [f#3,a3,c#4] ~@2", // F#m
  O: "[f#3,a3,d4]@3 ~ [f#3,a3,d4] ~@4 [e3,g#3,b3,c#4]@9 [e3,g#3,b3,c#4]@5 ~", // D C#m7
  P: "[c#4,e4,a4]@3 ~@3 [c#4,e4,a4]@3 c#4 ~ [c#4,e4,a4] ~@2 e4 c#4 ~@2 [c#4,e4,a4] ~@2 [c#4,e4,a4] ~@2, ~@7 a4 ~@4", // A
  Q: "[b3,e4,g#4,b4]@3 b3 ~@2 [b3,e4,g#4,b4]@3 b3 ~ [a3,d4,f#4,a4] ~@2 a3!2 ~@2 [a3,d4,f#4,a4] ~@2 [a3,d4,f#4,a4] ~@2, ~@6 c4 ~@7 [d4,f#4,a4]@2 ~@8", // E D
  R: "[c#4,e4,a4]@3 c#4 ~@2 [c#4,e4,a4]@3 c#4 ~ [c#4,e4,a4] ~@2 c#4!2 ~@2 [c#4,e4,a4] ~@2 [c#4,e4,a4] ~@2, ~@7 [e4,a4] ~@4", // A A5
  S: "[b3,e4,g#4,b4]@3 b3 ~@2 [b3,e4,g#4,b4]@3 b3 ~ [a3,d4,f#4,a4] ~@2 [g3,a3,e4] a3 ~@2 [a3,d4,f#4,a4] ~@2 [a3,d4,f#4,a4]@2 ~, ~@6 f#4 ~@7 [d4,f#4,a4]@2 ~@8", // E D A7 D
  T: "[g#3,b3,e4]@3 ~@3 [g#3,b3,e4]@3 g#3 ~ [g#3,b3,e4] ~ [b3,e4]@2 g#3 ~@2 [g#3,b3] ~@2 [g#3,e4] ~@2, ~@9 e4 ~@2", // E E5 G#m C#m
  U: "[f#3,a3,d4]@3 f#3 ~@2 [f#3,a3,d4]@3 f#3 ~ [f#3,a3,d4] ~@2 [f#3,a3] f#3 ~@2 [f#3,a3,d4] ~@2 [f#3,a3,d4] ~@2, ~@7 d4 ~@4", // D F#m D
  V: "[g#3,c#4,d#4,e4]@3 g#3 ~@2 [g#3,c#4,e4]@3 g#3 ~ [g#3,c#4,d4,d#4,e4] ~@2 [c#4,d#4] g#3 ~@2 [c#4,e4]@3 g#3 ~@2, ~@14 e4@2 ~@2 [g#3,d#4] ~@5", // C#m C#sus2 C#m G#5
  W: "[a3,d4]@3 f#3 ~@2 [f#3,a3,d4]@3 f#3 ~ [f#3,a3,d4] ~@2 [d5,f#5,b5] ~@2 [d5,f#5,b5]@4 [d5,f#5,g#5,a5] ~@2, f#3 ~@11", // D5 D Bm D
  X: "[g#3,b3,e4]@4 [g#3,b3,e4] ~@4 [g#3,b3,e4]@4 ~ [g#3,b3,e4] ~@6 [g#3,b3] ~@2, ~@21 e4@2 ~", // E G#m
  Y: "[g#3,b3,e4]@4 b3 [g#3,e4] ~@3 [g#3,b3,e4]@4 ~ [g#3,b3,e4] ~@6 [g#3,b3,e4] ~@2", // E C#m E
  Z: "[f#3,a3,d4]@4 f#3 [a3,d4] ~@3 [f#3,a3,d4]@4 ~ [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@2 [f#3,a3,d4] ~@2", // D D5 D
  AA: "[g#3,b3,e4]@3 ~@3 [g#3,b3,e4]@3 g#3 ~ [g#3,b3,e4] ~@3 g#3 ~@2 [g#3,b3] ~@2 [g#3,e4] ~@2, ~@7 [b3,e4] ~ e4 ~@2", // E G#m C#m E5
  AB: "[a2,a3,c#4,e4,a4] ~@7", // A
})).s("gm_piano").gain(0.48).pan(0.6)

// bass · synth bass 1 · "Bass"
const bass = note(`<
  ~@4 A B C D A E F G H I H I J K L M J K L M A B C D A E F G A E F G A B C D H I H I J K L M J K L M A B C D A B C D A
  B C D H I H I J K L M J K L M A B C D A B C D J K L M J K L M J K L M J K L M J K L M J K L M J K L M J K L M J K L M
  N
>`.pickRestart({
  A: "e1@7 ~@2 e1@6 a1 ~@2 b1 ~@2 c#2 ~@2", B: "d2@9 d2@5 ~ d2@5 ~ d2@2 ~", C: "c#2@8 ~ c#2@6 c#2@4 ~@2 c#2@2 ~",
  D: "d2@8 ~ d2@6 c#2 ~@2 d2 ~@2 e2@3", E: "d2@8 ~ d2@5 ~ d2@5 ~ d2@2 ~", F: "c#2@8 ~ c#2@5 ~ c#2@4 ~@2 c#2@2 ~",
  G: "d2@4 ~ d2 c#2 ~ c#2 ~@2 b1 ~@2 b1 a1@2 ~ b1@2 ~ c#2@2 ~", H: "f#1@6 ~@3 f#1@4 ~ f#1 a1@2 ~ b1@3 a1 ~@2",
  I: "d2@8 ~ c#2@5 ~ c#2 ~@2 b1 ~@2 c#2 ~@2", J: "a1@6 ~@3 a1@4 ~@2 b1 ~@2 c#2 ~@2 d2 ~@2, ~@7 a1 ~@4",
  K: "e2@7 ~@2 d2@5 ~ d2 ~@2 c#2@3 d2 ~@2", L: "a1@6 ~@3 a1@4 ~ a1 b1 ~@2 g#1 ~@2 e2 ~@2",
  M: "c#2@4 ~ c#2 ~@3 d2@4 ~@2 c#2 ~@2 d2 ~@2 e2@2 ~, ~@7 d2 ~@4", N: "a1 ~@5",
})).s("gm_synth_bass_1").gain(0.72)

// other · brass section · "Brass"
const brass_section = note(`<
  ~@73 A ~ B ~@5 A ~@11 A ~ B ~ A ~ B ~ A ~ B ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~ E F
>`.pickRestart({
  A: "~ [e4,e5] ~@6", B: "~ [c#5,c#6] ~@3 [c#5,c#6] ~@2", C: "~ [c#5,c#6] ~@6",
  D: "~@3 [c#5,c#6]@2 ~@10 [c#5,c#6]@3 ~@6", E: "~@17 [b4,b5] [a4,a5] [b4,b5] [d5,d6] [e5,e6] [d5,d6] [e5,e6]",
  F: "[a5,a6] ~@7", // A
})).s("gm_brass_section").gain(0.52).pan(0.6)

// other · brass section · "Brass" · soft notes · E A
const brass_section_soft = note("<~@119 [~@15 [e4,e5] [a4,a5] ~@7] ~>").s("gm_brass_section").gain(0.3).pan(0.6)

// other · flute
const flute = note("<A B C D ~@8 E F G H ~@4 I J I J ~@28 E F G H E F G H ~@16 E F G H E F G H ~@37>".pickRestart({
  A: "~@2 a4 a5@2 b5 a4 ~@2 f#6 ~ a4 a5@2 b5 a4 ~@2 f#6 ~ a4 a5@2 b5, ~@8 e6@2 ~@7 e6@2 ~@5",
  B: "a4 ~ e6 f#6@2 a4 a5@2 b5 a4 ~ e6 f#6@2 a4 a5@2 b5 a4 ~ e6 f#6 ~ a4",
  C: "a5 ~ b5 a4 ~ e6 f#6 ~ a4 a5 ~ b5 a4 ~ e6 f#6 ~ a4 a5 ~ b5 a4@2 e6",
  D: "f#6 ~ a4 a5@2 b5 a4 ~ e6 f#6 ~ a4 a5 ~ b5 a4@2 e6 f#6 ~ a4 a5 ~ b5",
  E: "a4@2 a5 b5 ~ a4 e6@2 f#6 a4 ~ a5 b5 ~ a4 e6 ~ f#6 ~ a4 a5 b5 ~ a4",
  F: "e6@2 f#6 a4 ~ a5 b5 ~ a4 e6 ~ f#6 ~ a4 a5 b5 ~ a4 e6 ~ f#6 a4 ~ a5",
  G: "b5 ~ a4 e6@2 f#6 a4 ~ a5 b5 ~ a4 e6 ~ f#6 a4 ~ a5 b5 ~ a4 e6 ~ f#6",
  H: "a4 ~ a5 b5 a4 ~ e6 ~ f#6 a4 ~ a5 b5 ~@2 e6@2 f#6 a4 ~ a5 b5 ~@2, ~@7 a4 ~@4",
  I: "a5 ~ c#6 e6 ~ a5 c#6 ~ e6 a5 ~ c#6 e6 ~ a5 c#6 ~ e6 a5 ~@2 e6@2 a5, ~@10 c#6 ~",
  J: "e5 ~ g#5 b5 ~ e5 g#5 ~ b5 e5 ~ g#5 d5 ~ f#5 a5 ~ d5 f#5 ~ a5 d5 ~ f#5",
})).s("gm_flute").gain(0.19).pan(0.4)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@12 A B C D E F G H ~@12 A B C D ~@4 E F G H ~@8 A B C D A B C D ~@4 E F G H ~@8 A B C D A B C D ~@37
>`.pickRestart({
  A: "e5@3 f#5", B: "a4 b4", C: "c#5@3 e5", D: "a4@23 ~",
  E: "~@3 [c#5,c#6] ~@2 a5@2 ~ b4@2 ~ [f#4,f#5]@2 ~@10, ~@2 [b4,b5]@2 ~@2 a4 ~@2 b5 ~@14", // C# F# B
  F: "~@3 c#5@2 ~ [a4,a5]@2 ~ [b4,b5]@2 ~ [f#4,f#5]@2 ~@10, ~ [b4,b5] ~@10, ~@3 c#6 ~@20", // A B F# B
  G: "~@3 [c#5,c#6] ~@2 [a4,a5]@2 ~ [b4,b5]@2 ~ [f#4,f#5]@2 ~@10, ~ [b4,b5] ~@10", // C# A B F# B
  H: "~@3 c#5@2 ~ a4@2 ~ [b4,b5] ~@2 [f#4,f#5]@12, ~ [b4,b5] ~@10, ~@3 c#6 ~@2 a5 ~@17", // B F# B
})).s("gm_string_ensemble_1").gain(0.26).pan(0.4)

// chords · epiano2 · "El.Piano"
const epiano2 = note("<~@4 A B C D A B C D E B E B F G F G ~@101>".pickRestart({
  A: "[e3,g#3,b3,e4]@7 ~", B: "[d3,f#3,a3,d4]@5 ~", C: "[c#3,e3,g#3,c#4]@7 ~", D: "[d3,f#3,a3,d4]@23 ~",
  E: "[f#3,a3,c#4]@7 ~", F: "[e3,a3,c#4,e4]@5 ~", G: "[e3,g#3,b3,e4]@3 ~ [d3,f#3,a3,d4]@4",
})).s("gm_epiano2").gain(0.47).pan(0.3)

// other · electric guitar muted · "RhythmGu"
const electric_guitar_muted = note(`<
  ~@4 A B C D C B E F G H@2 I ~@8 A B C D C B E F G H@2 I ~@16 G H@2 I G H@2 I ~@16 G H@2 I G H@2 I ~@37
>`.pickRestart({
  A: "e3@3 ~@2 e3@2 ~@2 e3@3 ~@2 e3!2 ~@2 e3 ~@2 e3 ~@2", B: "e3@3 ~@2 e3@3 ~ e3@4 ~ e3!2 ~@2 e3 ~@2 e3 ~@2",
  C: "e3@3 ~@2 e3@3 ~ e3@3 ~@2 e3!2 ~@2 e3 ~@2 e3 ~@2", D: "e3@3 ~@2 e3@3 ~ e3@3 ~@2 e3!2 ~ e3!2 ~@2 e3@2 ~",
  E: "e3@3 ~ e3@3 ~@2 e3@4 ~ e3!2 ~@2 e3 ~@2 e3 ~@2", F: "e3@3 ~ e3 ~ e3 ~@2 e3@4 ~ e3!2 ~@2 e3 ~@2 e3 ~@2",
  G: "e3@4 ~ e3 ~@3 e3@4 ~ e3!2 ~@2 e3 ~@2 e3 ~@2", H: "e3@4 ~ e3@4 e3@4 ~ e3!2 ~@2 e3 ~@2 e3 ~@2",
  I: "e3@4 ~ e3@2 ~@2 e3@4 ~ e3@3 ~ e3 ~@2 e3@2 ~",
})).s("gm_electric_guitar_muted").gain(0.46).pan(1)

// chords · rock organ · "Organ"
const rock_organ = note(`<
  ~@20 A B C D ~@20 E F G H E F G H ~@16 E F G H E F G H ~@8 E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F
  G H E F G H I
>`.pickRestart({
  A: "[c#5,e5,a5]@4 ~ [e5,a5]@2 ~@14 [c#5,e5,a5] ~@2, ~@5 c#5 ~@18", // A A5 A
  B: "[b4,e5,g#5]@4 [e5,g#5] b4 ~@6 f#5@5 f#4@4 [b4,e5,f#5] ~@2, ~@21 g#5@2 ~", // E Bsus4
  C: "[c#5,e5,a5]@4 ~ [c#5,a5]@2 ~@14 [e5,a5] ~@2, ~@5 e5 ~@18", // A F#m A5
  D: "[e5,g#5,c#6]@4 ~ [e5,g#5,c#6]@2 ~@8 [a4,d5] ~@5 [a4,f#5]@2 ~, ~@15 f#5@2 ~@4 d5 ~@2", // C#m D5 D
  E: "[c#5,e5,a5]@4 e5 a5@2 ~@14 [c#5,e5,a5] ~@2, ~@5 c#5 ~@18", // A
  F: "[e5,g#5,b5]@4 ~ [e5,g#5,b5] ~@3 [d5,f#5,a5]@10 ~ [d5,f#5,a5] ~@3", // E D
  G: "[c#5,e5,a5]@4 ~ [c#5,e5,a5] ~@15 [c#5,e5,a5] ~@2", // A
  H: "[e5,g#5,b5]@4 [g#5,b5]@2 ~@9 [d5,f#5,a5]@2 ~@4 [d5,f#5,a5]@3, ~@4 e5 ~@19", I: "[c#5,e5,a5] ~@7",
})).s("gm_rock_organ").gain(0.23).pan(0.4)

// other · clavinet
const clavinet = note("<~@16 A B A B ~@20 A B A B ~@20 A B A B ~@53>".pickRestart({
  A: "~@11 e2 f#2 ~ e2 a2 ~@2 b2 ~@2 a2 ~ e2", B: "~@11 e2 c#3 ~ e2 a2 ~@2 b2 ~@2 a2 ~@2",
})).s("gm_clavinet").gain(0.66).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@4 [x ~@4 x ~@3 x ~@5 x ~@8]!116 x>").gain(0.72)

// drums · clap
const clap = s("cp").struct("<~@20 A@4 ~@8 A@4 ~@8 A@16 ~@8 A@52 ~>".pickRestart({
  A: "~ x ~ x",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@4 A@27 B A@27 B A@23 B A@7 B A@7 B A@3 B A@16 ~>".pickRestart({
  A: "~ x ~ x", B: "~@6 x ~@7 x!2 ~@2 x ~ x ~@3",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  [x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]!3
  [x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!4 ~@6]
  [~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x ~@3]!39
  [~@2 x!2 ~ x ~@2 x ~@5 x ~@5 x ~@3]
  [~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x ~@3]!23
  [~@2 x!2 ~ x ~@2 x ~@5 x ~@5 x ~@3]
  [~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x ~@3]!52
  ~
>`).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@31 A ~@19 B ~@7 A ~@15 B ~@7 A ~@7 A ~@7 A ~@3 A ~@7 B ~@7 B ~>".pickRestart({
  A: "~@7 x", B: "~@15 x ~@4 x ~@3",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@3 [~@3 x] [~@7 x]!39 [~@3 x ~ x ~ x] [~@7 x]!23 [~@3 x ~ x ~ x] [~@7 x]!52 ~>")
  .gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@51 A ~@23 A ~@35 A ~@7 A ~>".pickRestart({
  A: "~@9 x ~ x ~@2 x ~@3 x ~@5",
})).gain(0.64)

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

// drums · claves
const claves = s("clave:2").struct(`<
  ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  ~
>`.pickRestart({
  A: "~@9 x ~ x ~@12", B: "~ x ~",
})).gain(1.96)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  ~
>`.pickRestart({
  A: "~ x ~", B: "~@9 x ~ x ~@12",
})).gain(0.32)

stack(
  piano, bass, brass_section, brass_section_soft, flute, string_ensemble_1, epiano2, electric_guitar_muted, rock_organ,
  clavinet, kick, clap, snare, hihat, low_tom, open_hat, mid_tom, crash, claves, shaker
// … 1 more lines

More by Jovanotti