Strudelify
Ti sposero perche cover art

Musica è

Ti sposero perche

Ramazzotti

KeyA majorTempo65 bpm
0:00/0:00
// Ti sposero perche — Ramazzotti
// 65 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 51, 4/4 at bar 52) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 65 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(65/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 · percussive organ
const percussive_organ = note(`<
  ~@4 A B C D A B E D F G H G I J B K D L M@4 N@2 ~@4 A B C D A B E D O P@3 Q R S T@2 U@2 V@6 W@3 X@5
>`.pickRestart({
  A: "[b5,c#6,e6] ~ [b5,c#6,e6] ~ [b5,c#6,e6] ~ [b5,c#6,e6] ~", // C#m7
  B: "[a5,c#6,e6] ~ [a5,c#6,e6] ~ [a5,c#6,e6] ~ [a5,c#6,e6] ~", // A
  C: "[a5,d6,e6]@2 ~@2 [a5,d6,e6]@2 ~@2 [a5,d6,e6]@2 ~@2 [a5,c#6,e6]@3 ~", // Asus4 A
  D: "[a5,d6,e6] ~ [a5,d6,e6] ~ [a5,d6,e6] ~ [a5,d6,e6] ~", // Asus4
  E: "[a5,d6,e6]@2 ~@2 [a5,d6,e6]@2 ~@2 [a5,d6,e6]@3 ~ [a5,c#6,e6]@2 ~@2", // Asus4 A
  F: "[b5,c#6,e6] ~ [b5,c#6,e6] ~ [a5,c#6,e6] ~ [a5,c#6,e6] ~", G: "[f#5,a5,d6] [e5,a5,c#6]",
  H: "[d5,f#5,a5,b5]@12 [d5,f#5,a5,b5] [e5,a5,c#6]@3", I: "[d5,f#5]@9 e5@7, [a5,b5]",
  J: "[a5,c#6,e6] ~ [a5,c#6,e6] ~ [b5,c#6,e6] ~ [b5,c#6,e6] ~", // A C#m7
  K: "[a5,d6,e6] ~ [a5,d6,e6] ~ [a5,d6,e6] ~ [a5,c#6,e6] ~", // Asus4 A
  L: "[b5,c#6,e6] ~ [b5,c#6,e6] ~ [b5,d6,e6] ~ [a5,c#6,e6] ~", // C#m7 E7 A
  M: "[b6@2 a6@2 ~@4 c#6@4 [d6,f#6]@3 [c#6,e6], f#6@3 e6@3 ~@2, d6@16 [b5,g#6]@16 a5@31 ~]/4", // D C#m E
  N: "[b6@2 a6@2 [b5,g#6]@2 [a5,d6] [b5,e6,g#6], f#6@7 ~, d6 ~]/2", // E D5 E
  O: "[b5,c#6,e6] ~ [b5,c#6,e6] ~ [b5,d6]@2 [a5,c#6]@2, ~ e6", // C#m7 Bm A
  P: "[b5@8 a5@7 ~@17 [c#6,a6]@16, f#6 e6, d6 [b5,g#6] ~]/3", Q: "[d6,f#6]@3 [c#6,e6], a5@15 ~",
  R: "b5@8 a5@7 ~, [d6,f#6]", S: "[b5,f#6,g#6]@2 [a5,d6,f#6] [b5,e6,g#6]",
  T: "[[d6,f#6]@2 [b5,e6]@2 [d6,f#6]@3 [b5,e6,g#6], a5@27 ~@5]/2", U: "[[d6,f#6] [b5,e6] [d6,f#6]@2, a5]/2",
  V: "[~@2 [b5,d#6]@2 [a#5,c#6]@2 [b5,d#6]@3 [a#5,c#6] [e6,g#6]@3 [d#6,f#6] [e6,g#6]@2 c#6@2 d#6@2 [a#5,c#6]@2 [b5,d#6]@2, ~ f#6@4 b5@5 ~@2, ~@2 f#6]/6", // B A#m B A#m E D#m E A#m …
  W: "[~@4 [a#5,c#6]@4 [e6,g#6]@12 d#6@4 e6@15 ~@9, ~@8 b5@31 ~@9, ~@20 f#6@19 ~@9]/3", // A#m E
  X: "[~@9 [g#5,e6]@24 [f#5,d#6]@34 ~@13, ~@9 b5@58 ~@13]/5", // C#m D#m
})).s("gm_percussive_organ").gain(0.15).pan(0.4)

// bass · synth bass 2
const bass = note(`<
  ~@4 A B C D A B C D E F G F H A B C D E I J K L I J F M F N A O P Q A R S T U I J K L I J F D F V@2 W X Y Z AA X AB@4
  AC@3
>`.pickRestart({
  A: "a1 g#1", B: "f#1", C: "d1@3 c#2", D: "b1 e1", E: "a1", F: "d2 c#2", G: "b1@11 ~ b1 c#2@3", H: "b1 e2",
  I: "b1@7 b1 a1@8", J: "g#1 e1", K: "a1@6 ~ a1 a1@4 c#2@4", L: "d2@6 ~ d2 d2@4 c#2@4", M: "b1@7 c#2 e2@2 a2@2 b2@3 a2",
  N: "b1@3 b1 e1@4", O: "f#1@7 e2 f#2@6 e2@2", P: "d2@3 c#2", Q: "b1@8 e2@5 ~ e1 f#1", R: "f#1@7 c#2 f#2@6 e2@2",
  S: "d2@11 ~ c#2@4", T: "b1@8 e2@5 f#1 a1 b1", U: "a1@2 b1 c#2", V: "[b1 e1@2 b1]/2", W: "a#1@8 g#1@7 ~",
  X: "g#1@4 f#1@4 e1@7 b1", Y: "e2 d#2 c#2@2", Z: "f#1@5 ~ f#1!2 b1@8", AA: "a#1 g#1",
  AB: "[e2@4 d#2@4 c#2@12 f#2@17 ~@3 e1@24]/4", AC: "[b1@13 ~@3]/3",
})).s("gm_synth_bass_2").gain(0.56)

// chords · pad halo
const pad_halo = note("<~@4 A B C D A B E D F ~@4 G B H D I ~@10 A B C D A B E D J ~@24>".pickRestart({
  A: "[b3,c#4,e4] ~ [b3,c#4,e4] ~ [b3,c#4,e4] ~ [b3,c#4,e4] ~", // C#m7
  B: "[a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~", // A
  C: "[a3,d4,e4]@2 ~@2 [a3,d4,e4]@2 ~@2 [a3,d4,e4]@2 ~@2 [a3,c#4,e4]@3 ~", // Asus4 A
  D: "[a3,d4,e4] ~ [a3,d4,e4] ~ [a3,d4,e4] ~ [a3,d4,e4] ~", // Asus4
  E: "[a3,d4,e4]@2 ~@2 [a3,d4,e4]@2 ~@2 [a3,d4,e4]@3 ~ [a3,c#4,e4]@2 ~@2", // Asus4 A
  F: "[b3,c#4,e4] ~ [b3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~", // C#m7 A
  G: "[a3,c#4,e4] ~ [a3,c#4,e4] ~ [b3,c#4,e4] ~ [b3,c#4,e4] ~", // A C#m7
  H: "[a3,d4,e4] ~ [a3,d4,e4] ~ [a3,d4,e4] ~ [a3,c#4,e4] ~", // Asus4 A
  I: "[b3,c#4,e4] ~ [b3,c#4,e4] ~ [b3,d4,e4] ~ [a3,c#4,e4] ~", // C#m7 E7 A
  J: "[b3,c#4,e4] ~ [b3,c#4,e4] ~ [b3,d4]@2 [a3,c#4]@2, ~ e4", // C#m7 Bm A
})).s("gm_pad_halo").gain(0.22)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@41
  [b3 f#3 b3 f#3 b3 f#3 b3 f#3 b3 f#3 b3 f#3 b3 f#3 b3 f#3]
  [e4 b3 e4 b3 e4 b3 e4 b3 e4 b3 e4 b3!2 e4 b3 e3]
  [a3 e3 a3 e3 a3 e3 a3 e3 a3 e3 a3 e3 c#4 e4 c#4 a3]
  [d4 a3 d4 a3 d4 a3 d4 a3 d4 a3 d4 a3 b3 e4!2 e3]
  [b3 f#3 b3 f#3 b3 f#3 b3 f#3 b3 f#3 b3 f#3 b3 f#3 b3 f#3]
  [e4 b3 e4 b3 e4 b3 e4 b4 f#4!2 d4 f#4 g#4!2 e4 g#4]
  ~@18
>`).s("gm_string_ensemble_1").gain(0.72).pan(0.4)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@55 A@5 ~@5>".pickRestart({
  A: "[~@10 d#6@2 e6@2 f#6@8 a#5@2 b5@4 c#6@2 d#6@4 a#5 b5 d#6 f#6 a#6 b6 g#6@6 f#6@10 e6@13 ~@11]/5",
})).s("gm_string_ensemble_1").gain(0.4).pan(0.4)

// chords · string ensemble 1
const string_ensemble_1_2 = note("<A@4 ~@13 B@5 ~@6 C@2 D@2 E@8 F ~@5 G H@2 I J K@6 L@3 M@5>".pickRestart({
  A: "[[a2,a3]@2 [g#2,b3]@2 f#2@4 [d2,d4]@3 [c#2,b3] [b1,d4]@2 [e2,b3]@2, e4, c#4 ~, ~ a3@3]/4", // A G#m D C#7 Bm E5
  B: "[[a2,a3]@2 [g#2,b3]@2 f#2@4 [d2,d4]@3 [c#2,c#4] b1@2 e2@2 [a2,c#4]@2 [b2,b3,d4] [c#3,c#4], e4, c#4@2 ~ d4 ~, ~@2 a3@7 ~]/5", // A G#m D C# A Bm C#
  C: "[[f#3,d4]@2 [b3,e4]@2 [d4,f#4]@3 [g#3,b3,e4], a3@7 ~]/2", D: "[[f#3,d4]@2 [b3,e4]@2 [d4,f#4]@3 [b3,e4], a3]/2",
  E: "[b3@4 ~@4 d4@3 b3 d4@4 b3@4 ~@4 d4@3 b3 d4@4, e4, c#4 ~ c#4 ~, a3 ~ a3@6 ~@2 a3@6]/8",
  F: "c#4@2 [b3,d4] [a3,c#4]", G: "~@10 d6 ~@2 d6 e6 [f#6,g#6], ~@6 c#6 ~", H: "[a6@7 g#6]/2", I: "a6@2 b6 c#7",
  J: "d7",
  K: "[~@2 [b3,d#4]@2 [a#3,c#4]@2 [b3,d#4]@3 [a#3,c#4] [e4,g#4]@3 [d#4,f#4] [g#3,e4]@4 d#4@2 [a#3,c#4]@2 [b3,d#4]@2, ~ f#4@4 b3@5 ~@2, ~@3 f#4]/6", // B A#m B A#m E D#m C#m A#m …
  L: "[~@2 [a#3,c#4]@2 [e4,g#4]@6 d#4@2 e4@9 ~@3, ~@4 b3@17 ~@3, ~@10 f#4@11 ~@3]/3", // A#m E
  M: "[~@6 e4@25 [f#3,d#4]@38 ~@11, ~@6 b3@63 ~@11, ~@6 g#3@23 ~@51]/5", // D#m
})).s("gm_string_ensemble_1").gain(0.3).pan(0.6)

// other · alto sax
const alto_sax = note("<~@51 A@2 B@4 ~ C@2 ~@5>".pickRestart({
  A: "[~@12 f#5@2 f#5 f#5@3 g#5 f#5@3 e5 d#5@9]/2",
  B: "[~ [d#4,f#4] g#4 b4 c#5 b4 c#5 d#5 b4 b4@11 ~@3 f#4 g#5@2 f#5!2 d#5 f#5@10 g#5 g#5@4 f#5@19 ~, ~@9 g#4 ~@54]/4", // D#m
  C: "[e5@2 f#5 c#5@3 b4 g#4 f#4@15 ~@9]/2",
})).s("gm_alto_sax").gain(0.72).pan(0.6)

// other · overdriven guitar
const overdriven_guitar = note("<~@25 A B C D ~@4 E F G H ~@3 I ~@2 J K@2 L ~@18>".pickRestart({
  A: "~@5 d4 e4 a4 e4 d4@2 e3 a3@2 e4 a4", B: "d4@7 ~", C: "e4@5 ~ e4 g#4 a4 f#4@2 b4@5", D: "a4",
  E: "~@3 b2@2 e3 a3 e3 f#3@7 ~", F: "~@7 e3 f#3 a3 b3 a3 c#4 e4 c#4 b3", G: "a3@7 c#3 e3@6 a3 b3, ~@8 d3 ~@7",
  H: "c#4@11 ~@5", I: "~@6 a3 c#4 d4@4 e4@4", J: "~@10 a4 e4!2 e5 b4 e4", K: "[a3@9 a4 e4 f#4 b3@11 ~@9]/2",
  L: "~@6 e4 g#4 a4@3 b4@5",
})).s("gm_overdriven_guitar").gain(0.26).pan(0.4)

// chords · percussive organ
const percussive_organ_2 = note("<~@21 A B@4 C@2 D ~@11 A E@4 F@2 ~@18>".pickRestart({
  A: "~@2 [b4,d5] [c#5,e5]", // Bm C#m
  B: "[b5@8 a5@8 ~@27 f#5 g#5 ~@3 [d5,f#5]@12 [c#5,e5]@4, f#5@24 e5@19 ~@2 a5@19, d5 [g#5,b5] [a4,c#5] ~]/4", // D C#m G#m A
  C: "[b5@2 a5@2 [g#5,b5]@2 [d5,a5] [b4,e5,g#5], f#5@7 ~, d5 ~]/2", D: "[a4,d5,f#5]@9 ~@7",
  E: "[b5@8 a5@8 ~@16 c#5@15 ~ [d5,f#5]@12 [c#5,e5]@4, f#5@3 e5@3 ~@2, d5 [b4,g#5] a5@2]/4", // D C#m E
  F: "[b5@8 a5@8 [g#5,b5]@7 ~@9, f#5@23 ~@9, d5 ~]/2", // G#m
})).s("gm_percussive_organ").gain(0.17).pan(0.1)

// other · distortion guitar
const distortion_guitar = note("<~@13 A B A C ~@34 D E@2 F G E@2 H@2 ~@5>".pickRestart({
  A: "d3 c#3", B: "b2@12 b2 c#3@3", C: "b2 e2", D: "~@5 f#3 f#3@2 b2@8", E: "[a#2@2 g#2@3 f#2 e2@2]/2",
  F: "e3 d#3 c#3@2", G: "f#2 b2", H: "[e3 d#3 c#3@4 ~@2]/2",
})).s("gm_distortion_guitar").gain(0.45)

// drums · kick
const kick = s("bd").struct(`<
  ~@13 A B A C@2 ~@4 D@3 E D E C@4 D@3 E D E D@2 F D@3 E D E D@3 F G H@3 I H I A ~@6
>`.pickRestart({
  A: "x!2", B: "x ~@8 x ~@3 x ~@2", C: "x", D: "x ~@6 x!2 ~@7", E: "x ~@6 x!2 ~@2 x ~@4", F: "x ~@6 x!2 ~@6 x",
  G: "~@8 x ~@6 x", H: "x ~@7 x ~@6 x", I: "x ~@2 x ~@4 x ~@6 x",
})).gain(0.64)

// drums · rim
const rim = s("rim").struct("<~@17 [~ x ~@2]!5 ~@6 [~ x ~ x]!4 ~@33>").gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@14 A ~@7 B@6 ~@4 B@18 C D B@6 C ~@6>".pickRestart({
  A: "~@3 x!2 ~@5 x ~@5", B: "~ x ~ x", C: "~ x ~@2", D: "~@3 x",
})).gain(0.72)

// drums · low tom
const low_tom = s("lt").struct("<~@14 A ~@25 B ~@10 C ~@3 D ~@2 C ~@6>".pickRestart({
  A: "~@11 x!2 ~@3", B: "~@7 x", C: "~@3 x ~@4", D: "~@6 x!2 ~@8",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@22 A B C D E F G B H I J K L M N M O P Q R S@2 T U V W X Y Z AA U@2 AB AC AD AE AF ~@6
>`.pickRestart({
  A: "~ x!2 ~ x!3 ~ x!8", B: "x ~ x!14", C: "x!5 ~ x ~ x ~ x ~ x ~ x!2", D: "x!5 ~ x!8 ~@2", E: "x!9 ~ x!3 ~ x!2",
  F: "x!3 ~ x!12", G: "x!7 ~ x!3 ~ x!4", H: "x!5 ~ x!5 ~ x!4", I: "x!3 ~ x!3 ~ x!2 ~@6", J: "x!5 ~ x ~ x!7 ~",
  K: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", L: "x!9 ~ x ~ x ~ x ~", M: "x!8", N: "x ~ x!11 ~ x!2", O: "x!3 ~ x ~ x!7 ~ x ~",
  P: "x!3 ~ x ~ x ~ x!8", Q: "x ~ x!9 ~ x!4", R: "~ x!2 ~ x!5 ~ x!6", S: "x!15 ~", T: "x!12 ~@4", U: "x!16",
  V: "x!9 ~ x!6", W: "~ x!15", X: "x!14 ~@2", Y: "x ~ x ~ x!3 ~ x!8", Z: "x!5 ~ x!2 ~@8", AA: "~@9 x!7",
  AB: "x!3 ~ x!5 ~ x!5 ~", AC: "x!8 ~ x!6 ~", AD: "x!7 ~ x!8", AE: "x!6 ~@2 x!7 ~", AF: "x!8 ~@8",
})).gain(0.48)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@22 A B C D E F G B H I J K L M N M O P Q R S@2 ~@2 T ~@2 U D ~@3 V S W S ~@7
>`.pickRestart({
  A: "~@3 x ~@3 x ~@8", B: "~ x ~@14", C: "~@5 x ~ x ~ x ~ x ~ x ~@2", D: "~@5 x ~@10", E: "~@9 x ~@3 x ~@2",
  F: "~@3 x ~@12", G: "~@7 x ~@3 x ~@4", H: "~@5 x ~@5 x ~@4", I: "~@3 x ~@3 x ~@2 x!2 ~@4", J: "~@5 x ~ x ~@7 x",
  K: "~ x ~ x ~ x ~@3 x ~ x ~ x ~ x", L: "~@9 x ~ x ~ x ~ x", M: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", N: "~ x ~@11 x ~@2",
  O: "~@3 x ~ x ~@7 x ~ x", P: "~@3 x ~ x ~ x ~@8", Q: "~ x ~@9 x ~@4", R: "~@3 x ~@5 x ~@6", S: "~@15 x",
  T: "~@9 x ~@6", U: "~ x ~ x ~@3 x ~@8", V: "~@3 x ~@5 x ~@5 x", W: "~@7 x ~@8",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@14 A ~ B ~@14 C ~@8 D ~@10 E ~@6 F ~@6>".pickRestart({
  A: "~@7 x ~@8", B: "~@13 x!2 ~", C: "~@11 x!2 ~@3", D: "~@13 x ~@2", E: "~@3 x ~@12", F: "~@5 x ~@10",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@25 A ~@5 A ~@12 A ~@3 A ~@8 B ~@7>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@4",
})).gain(0.56)

// drums · high tom
const high_tom = s("ht").struct("<~@51 x ~@13>").gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@13 A B A C ~@5 C ~@18 C ~@2 D ~@2 C ~@2 E@2 ~@3 E ~@2 E ~@6>".pickRestart({
  A: "x!2", B: "x ~@12 x ~@2", C: "x", D: "~@3 x", E: "~ x",
})).gain(0.48)

stack(
  percussive_organ, bass, pad_halo, string_ensemble_1, string_ensemble_1_soft, string_ensemble_1_2, alto_sax,
  overdriven_guitar, percussive_organ_2, distortion_guitar, kick, rim, snare, low_tom, hihat, hihat_soft, mid_tom,
  open_hat, high_tom, crash
)

More by Ramazzotti