Strudelify

Puro amore

Zucchero

KeyG majorTempo80 bpm
0:00/0:00
// Puro amore — Zucchero
// 80 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 12 electric guitar jazz (copy of ch 11 electric guitar jazz, 0.495 beats late)
// note: Full arrangement: all 67 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 · electric guitar clean
const electric_guitar_clean = note("<A B C D A B C D E F G H@2 ~@7 I@4 J@4 K ~@32 L@6>".pickRestart({
  A: "~@4 b3@2 g3@2 b3@3 e4@2 b3 g3@2, e2@15 ~, ~ g3@2 ~@5",
  B: "~@8 f#3@2 ~ g3@3 f#3@2, f#3@2 a3@3 ~@3, ~@2 g3@7 ~@7, ~@3 b3@2 ~@3",
  C: "~@4 g3@6 ~ b3@3 g3@2, e3@9 ~ g3@3 ~@3, ~ b3@4 ~@3", D: "~@4 a3@4 a2@3 b2@3 d3@2, f#3@7 ~@9, ~@2 g3@5 ~@9",
  E: "~@4 b3@2 ~@2 [b3,e4]@3 b3@2 g3@3, e2@15 ~, ~ g3@2 g3@2 ~@3", // E5
  F: "~@8 f#3@3 g3@3 f#3@2, f#3@3 b3@2 ~@3, ~ g3@4 ~@3, ~@4 a3@9 ~@3",
  G: "g3@2 ~@4 g3@2 ~@3 a3@2 g3@3, ~ g3@2 ~ e3@3 ~, ~@4 b3@6 g3@3 ~@3",
  H: "[~@4 a3@3 ~@2 e4@15 ~@8, f#3@7 ~ [c3,g3,c4]@15 ~@9, ~@2 g3@5 ~@25]/2", // C5
  I: "[~@12 b3@2 g3@2 b3@3 e4@2 b3 g3@2 ~@8 f#3@2 ~ g3@3 f#3@2 ~@4 g3@6 ~ b3@3 g3@2 ~@4 a3@4, ~@8 e2@15 ~@3 g3@7 ~@7 e3@9 ~@9 g3@5 ~, ~@10 g3@4 ~@10 f#3@4 a3@6 ~@16 g3@3 ~@3 f#3@7 ~, ~@15 b3@2 ~@4 b3@4 ~@7]/4",
  J: "[a2@3 b2@3 d3@2 ~@4 b3@2 ~@2 [b3,e4]@3 b3@2 g3@3 ~@8 f#3@3 g3@3 f#3@2 g3@2 ~@4 g3@2 ~@3 a3@2 g3@3 ~@4 a3@3 ~, ~@8 e2@15 ~@3 g3@8 ~@8 g3@4 ~@2 e3@6 ~@4 g3@5 ~, ~@5 g3@2 g3@2 ~@3 f#3@3 b3@2 ~@5 b3@3 ~@7, ~@28 a3@9 ~@13 g3@3 ~@3 f#3@7 ~]/4", // E5
  K: "~ e4@15, [c3,g3,c4]@15 ~", // C5
  L: "[~@12 e3@2 ~@2 g3@3 e4@3 g3@2 ~@6 b3@4 ~ b3@3 f#3@2 ~@6 g3 ~ e4@2 ~ b3@3 g3@2 ~@8 f#3@24 ~@8, ~@8 e3@4 ~@2 b3@4 ~@6 a3@4 a3@9 ~@5 g3@4 ~@4 g3@3 ~@3 f#3@8 ~@32, ~@10 g3@6 ~@10 g3@7 ~@7 e3@9 ~@9 g3@24 ~@14, ~@22 b3@3 ~@5 a3@12 ~@6, ~@31 b3@12 ~@5]/6",
})).s("gm_electric_guitar_clean").gain(0.34).pan(0.4)

// bass · electric bass finger
const bass = note(`<
  ~@4 A B A C A D A E F G H I J G K L@5 M@4 N O P Q R S P T U ~@5 V W ~@2 X H Y Z AA K AB AC G H Y AD AA K AE@7
>`.pickRestart({
  A: "e1@15 ~", B: "d2@15 ~", C: "d2 a1", D: "d2@7 b1", E: "d2 ~", F: "~ e1", G: "g1 g1@3 d2@4",
  H: "a1!2 a1@2 e1@2 e1@2", I: "g1 g1@2 g1 a1@2 a1@2", J: "a1 a2!3 e1@4", K: "a1!2 a1@2 c2@2 c2@2",
  L: "[b1@2 b1@2 b1@2 d2@16 ~@2 e1@15 ~ d2@15 ~ e1@15 ~ d2@8]/5", M: "[a1@6 g1@2 e1@15 ~ d2@15 ~ e1@15 ~ d2@8]/4",
  N: "c2@15 ~", O: "e1@4 g1 g1@3", P: "d2@4 a1!2 a1@2", Q: "e1@2 e1@2 g1 g1@2 g1",
  R: "a1@2 a1@2 a1@2 a1@2 a2@2 a2@2 a2 g2 e2 d2", S: "e2 e1!2 f#1 g1!4", T: "c2@2 c2@2 b1!4", U: "d1!2 d2!2",
  V: "f1 c2", W: "b1@8 a1@7 ~", X: "~ d2", Y: "g1 g1@2 g1 a1!4", Z: "a2@2 a2@2 a2 g2 e2 d2 e2@2 e1@2 e1@2 f#1@2",
  AA: "g1!4 d2@4", AB: "b1!4 d2@2 a2@2", AC: "b2 d3 g3!2 e1@4", AD: "a2@3 a2@3 g2@2 e2@2 e1@2 e1@2 f#1@2",
  AE: "[b1@2 b1@2 b1@2 d1@18 e1@16 d2@14 b1@2 e1@15 ~ d2@30 ~@10]/7",
})).s("gm_electric_bass_finger").gain(0.56)

// chords · synth brass 2
const synth_brass_2 = note(`<
  ~@12 A@2 B@2 C@2 D@3 ~@8 E F E G E F H I@2 J K L M N O P ~ Q R@2 S@2 T@4 R@2 S@2 D@3 ~@5
>`.pickRestart({
  A: "[~ e3 g3 [a3,d4,f#4], ~ [d4,g4]@2 ~]/2", B: "[[a3,c4,e4] e3 g3 [a3,d4,f#4], ~ [d4,g4]@2 ~]/2",
  C: "[[a3,c#4,e4] [d4,g4]@2 [d4,f#4]]/2", D: "[[c4,e4]@4 c4@4 b3@3 [a3,d4,f#4]@9 ~@4, ~@4 g4@7 ~@13]/3", E: "[d4,g4]",
  F: "[d4,f#4] [c4,e4]", G: "[d4,f#4] [c#4,e4]", H: "c4@8 b3@7 ~, g4",
  I: "[~@16 f3@2 c4 ~ f3 ~ c4@2 f3 ~ c4@2 f3 ~ c4@2, [a3,d4,f#4]@9 ~@7]/2", // D
  J: "f3 ~ c4 ~ f3 ~ c4 ~ a3@2 d4@2 a3 ~ d4@2", K: "a3 ~ f#4@2 a3 ~ e4 ~ f3@2 c4 ~ f3 ~ c4@2",
  L: "f3 ~ c4@2 f3 ~ c4@2 f3 ~ c4 ~ f3 ~ c4 ~", M: "a3@2 d4@2 a3 ~ d4@2 a3 ~ d4@2 a3 ~ d4 ~",
  N: "[f3,a3,c4] [g3,c4,e4]", O: "[g3,b3,d4] [a3,d4,f#4]", P: "[g3,b3,d4]@8 [g3,c4,e4] ~ [a3,d4,f#4]@6",
  Q: "~ [d4,f#4]", R: "[[c4,e4] [d4,g4]@2 [d4,f#4]]/2", S: "[[c#4,e4] [d4,g4]@2 [d4,f#4]]/2",
  T: "[[c4,e4] c4 b3 d4@2 g4@2 [d4,f#4], ~@4 g4@8 [a3,f#4]@9 ~@11, ~@20 d4 ~@11]/4", // C D
})).s("gm_synth_brass_2").gain(0.23)

// other · string ensemble 2
const string_ensemble_2 = note("<~@20 A@4 B@5 ~ C D E ~@34>".pickRestart({
  A: "[~ b5@7]/4", B: "[~@8 b5@67 ~@5]/5", C: "~@14 e4 f#4", D: "g4 f#4 e4 d4 b3 a3 g3 b3", E: "a3 ~",
})).s("gm_string_ensemble_2").gain(0.38).pan(0.3)

// other · electric guitar jazz
const electric_guitar_jazz = note("<A B C D A B C E A B C E ~@8 F G H I J@2 K L@2 ~@32 F G H I ~@2>".pickRestart({
  A: "~@4 g4@4 f#4 g4@2 a4@2 g4@3, e2@15 ~", B: "f#4@7 ~ f#4@2 ~ g4 ~ f#4@2 f#4",
  C: "~@4 b4@4 g4@2 ~ a4 ~ g4@3, e4@3 ~@5", D: "f#4@4 b4@2 ~@2 e4@5 ~@3", E: "f#4@4 b4 ~ e4@5 ~@5", F: "~@3 g4",
  G: "f#4 g4@2 a4@2 g4@3 f#4@7 ~", H: "f#4@2 ~ g4 ~ f#4@2 ~@5 b4@4, ~@4 e4@3 ~", I: "g4@2 ~ a4 ~ g4@3 f#4@5 ~@3",
  J: "[~@12 g4@4 f#4 g4@2 a4@2 g4@3 f#4@7 ~, ~@8 e2@15 ~@9]/2", K: "f#4@2 ~ g4 ~ f#4@2 f#4 ~@4 b4@4, ~@4 e4@3 ~",
  L: "[g4@2 ~ a4 ~ g4@3 f#4@4 b4 ~ e4@5 ~@13]/2",
})).s("gm_electric_guitar_jazz").gain(0.25)

// other · electric guitar jazz · soft notes
const electric_guitar_jazz_2 = note("<A ~ B C A ~ B D A ~ B D ~@10 E F G ~ H I ~@35 E F ~@2>".pickRestart({
  A: "~ g3@3 ~@4", B: "f4 ~@15", C: "~@6 [f4,g4,a4] e4 ~@8", D: "~@5 [g4,a4] f4 ~@9", E: "~@7 f#4 f4 ~@7",
  F: "~@13 [c4,d4,e4] [f#3,g3,a3,b3] ~", G: "~@5 g3@3", H: "~@8 f4 ~@7", I: "~@13 [g4,a4] f4 ~",
})).s("gm_electric_guitar_jazz").gain(0.17)

// other · piano
const piano = note("<~@13 A ~@2 B C ~@11 D@2 ~ E F ~@12 G ~@2 B H ~@2 I J ~@2 B C ~@8>".pickRestart({
  A: "~ d5@7", B: "~@6 g5 a5 b5@2 a5@2 g5 ~ f#5@2", C: "d5 ~@15", D: "[~@5 d5@7 ~@4]/2", E: "~@14 g5 a5",
  F: "b5@2 a5@2 g5 ~ f#5@2 d5 ~@7", G: "~@8 d5@7 ~", H: "d5", I: "~@6 g4 a4 b4@2 a4@2 g4@2 f#4@2", J: "d4",
})).s("gm_piano").gain(0.05)

// other · pad new age
const pad_new_age = note(`<
  ~@13 A B ~@2 A B ~@2 C@3 D@4 E ~ F ~@3 F ~@11 A B ~@2 A B ~@2 A B ~@2 A ~@5 G@3
>`.pickRestart({
  A: "~@8 d5 ~ a4 ~ d5 ~ a4 ~", B: "a4 c5@4 ~@11", C: "[~@6 d5@4 ~@5 e5@4 ~@5, ~@10 a4@5 ~@13 b4@8 ~@12]/3",
  D: "[~@12 b4@11 ~ [f#4,d5]@14 ~@2 e4@13 ~@3 f#4@7 ~, ~@10 a4@11 ~@43]/4", E: "e4@3 ~",
  F: "d5 ~ a4 ~ d5 ~ a4 ~ a4 c5@4 ~@3", G: "[~ d5@2 ~]/3",
})).s("gm_pad_new_age").gain(0.34)

// other · pad new age · soft notes
const pad_new_age_soft = note("<~@22 A@2 ~@38 B@3 ~@2>".pickRestart({
  A: "[~@5 g4@5 ~@6]/2", B: "[~@3 d5@2 ~@2 b4@2 ~@3, ~@10 a4@5 ~@11 e5@10 ~@12]/3",
})).s("gm_pad_new_age").gain(0.17)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note("<~@41 A@4 ~@22>".pickRestart({
  A: "[~@16 [f3,a3,c4,f4]@7 ~ [e3,c4,e4]@7 ~ [g3,b3,d4,g4]@7 ~ [a3,d4,f#4]@7 ~ [g3,b3,d4,g4]@8 [e3,g3,c4,e4] ~ [f#3,a3,d4,f#4]@6, ~@15 [f2,c3]@8 [c3,g3]@8 d3@7 ~@9 d3@8 ~@9]/4", // F C G D G C D F5 …
})).s("gm_acoustic_guitar_steel").gain(0.26).pan(0.6)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@12 A B C D E B F G@2 ~@8 H I H J H K L M ~@6 N@2 O P C D E B F Q@2 B C D E B F R@2 ~@5
>`.pickRestart({
  A: "~@2 [b3,e4]!2", B: "[d4,g4]!2 [d4,f#4]!2", C: "[c4,e4]!2 [b3,e4]!2, g3@7 ~@9", D: "[d4,g4]!2 [d4,f#4]@2",
  E: "[a3,c#4,e4]!2 [b3,e4]!2", F: "[c4,e4]!4, g3 ~", G: "[~@2 g4 [a3,f#4]@9 ~@4, b3@3 ~@13, ~ d4@2 ~@13]/2",
  H: "[b3,e4]!2 [d4,g4]!2", I: "[d4,f#4]!2 [c4,e4]!2, ~@8 g3@7 ~", J: "[d4,f#4]@2 [a3,c#4,e4]!2",
  K: "[d4,f#4]!2 [c4,e4]!2, ~ g3", L: "[c4,e4]@2 [c4,e4]@2 b3 a3 g3@2", M: "[a3,f#4]", N: "g#6!8", O: "g#6!7 ~",
  P: "~@2 [d4,f#4]!2", Q: "[b3 a3 g3@2 [a3,f#4]@8 [b3,e4]@2 [b3,e4]@2]/2", R: "[b3 a3 g3 [a3,f#4]@8 ~@5]/2",
})).s("gm_distortion_guitar").gain(0.25).pan(0.7)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@12 A B C D E B F G@2 ~@8 H I H J H I K L M ~@8 N C D E B F O P B C D E B F Q@2 ~@5
>`.pickRestart({
  A: "~ [e2,b2,e3]", B: "[g2,d3,g3] [d3,a3]", C: "[a2,e3,a3] [e2,b2,e3]", D: "[g2,d3,g3] [a3,d4]",
  E: "[e3,a3,c#4] [e2,b2,e3]", F: "[a2,e3,a3] [c3,g3]", G: "[[d3,g3,d4]@3 [d3,a3]@8 ~@5]/2", H: "[e2,b2,e3] [g2,d3,g3]",
  I: "[d3,a3] [a2,e3,a3]", J: "[a3,d4] [e3,a3,c#4]", K: "[c3,g3] [b2,d3,g3]",
  L: "[d3,a3]@4 [d3,a3]@4 [d3,a3]@4 a3@3 [c2,d2,e2,f2,g2,a2], ~@6 d3 ~", M: "b1 ~@15", N: "~ [d3,a3]",
  O: "[b2,d3,g3]@2 [d3,a3]!2", P: "[d3,a3]@4 a3@3 [c2,d2,e2,f2,g2,a2] [e2,b2,e3]@8, ~@4 d3@2 ~@2 b1 ~@7",
  Q: "[[b2,d3,g3]@3 [d3,a3]@9 ~@4]/2", // G D5
})).s("gm_overdriven_guitar").gain(0.32)

// chords · overdriven guitar · soft notes · Em Am Bm
const overdriven_guitar_soft = note(`<
  ~@20
  [~@6 [e3,f3,g3] [a2,b2,c3] ~@8]
  ~@15
  [~@14 [b2,c3,d3] ~]
  [a1 ~@15]
  ~@15
  [~@6 [b2,c3,d3] ~ a1 ~@7]
  ~@13
>`).s("gm_overdriven_guitar").gain(0.16)

// other · string ensemble 1
const string_ensemble_1 = note("<~@37 A B C D E F G H@2 I J I ~@18>".pickRestart({
  A: "f3@2 c4 ~ f3 ~ c4@2 f3 ~ c4@2 f3 ~ c4@2", B: "f3 ~ c4 ~ f3 ~ c4 ~ a3@2 d4@2 a3 ~ d4@2",
  C: "a3 ~ f#4@2 a3 ~ e4 ~ f3@2 c4 ~ f3 ~ c4@2", D: "f3 ~ c4@2 f3 ~ c4@2 f3 ~ c4 ~ f3 ~ c4 ~",
  E: "a3@2 d4@2 a3 ~ d4@2 a3 ~ d4@2 a3 ~ d4 ~", F: "~ e4, c4", G: "d4@8 f#4@7 ~",
  H: "[d4@7 ~ [c3,c4,e4] ~ [d3,f#4]@10 ~@2 e4 f#4 g4@2 f#4@2 e4@2 d4@2]/2", I: "b3 a3 g3 b3 a3@4",
  J: "~@6 e4 f#4 g4@2 f#4@2 e4@2 d4@2",
})).s("gm_string_ensemble_1").gain(0.37)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@43 A B@2 ~@15 C@6>".pickRestart({
  A: "b3 a3", B: "[b3@7 ~@3 d4@10 ~@12]/2", C: "[~@8 b5@79 ~@9]/6",
})).s("gm_string_ensemble_1").gain(0.18)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@8 B C@3 D C E F G@8 ~ H@3 D H@3 I J K L ~@2 M@2 N ~ B C@2 O C@3 P C@3 O C@2 F G@4 ~@2
>`.pickRestart({
  A: "~ x ~@2", B: "~ x", C: "x!2 ~ x!2 ~@3", D: "x!2", E: "x!2 ~ x!2 ~@2 x", F: "~@3 x ~@4", G: "~@2 x!2",
  H: "x ~@3 x!2 ~ x", I: "x", J: "x ~@4 x ~@2", K: "~ x ~@2 x!2 ~@2", L: "~ x ~@6", M: "x ~@3 x ~@2 x",
  N: "x ~@3 x!2 ~@2", O: "x!2 ~@2 x ~@3", P: "x!3 ~ x ~@3",
})).gain(0.69)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@4 x!8 ~@30 [~ x ~@3 x ~@2]!2 [~ x ~@6] ~@14 [~@7 x] ~@7>").gain(0.46)

// drums · rim
const rim = s("rim").struct("<~@20 A B C B C B C B ~@39>".pickRestart({
  A: "~@12 x ~@2 x", B: "~ x ~ x", C: "~@4 x ~@7 x ~@2 x",
})).gain(0.53)

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

// drums · low tom
const low_tom = s("lt").struct("<~@19 [~@4 x!2 ~@10] ~@16 [~@13 x!2 ~] ~@23 [~@4 x!2 ~@10] ~@6>").gain(0.53)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@12 A B C B D B E ~ F B@3 G B G B ~ H B H C H B H I J K@4 H B L ~ A C B D B C@2 M B C B N B C O ~@6
>`.pickRestart({
  A: "~@5 x!3", B: "x!8", C: "x!4 ~ x!3", D: "~ x!3 ~ x!3", E: "x!4 ~ x!2 ~", F: "~@4 x!4", G: "x!3 ~ x!4", H: "~ x!7",
  I: "~ x!6 ~", J: "~ x!3", K: "x!4", L: "~ x!3 ~@4", M: "x!3 ~@2 x!3", N: "~@2 x!2 ~ x!3", O: "x!2 ~@6",
})).gain(0.46)

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 A ~@16 B ~@20 C ~@2 A ~@6>".pickRestart({
  A: "~@2 x!2 ~@12", B: "~@4 x ~ x ~@2 x ~@6", C: "~@3 x ~@4",
})).gain(0.61)

// drums · open hat
const open_hat = s("oh").struct("<~@24 [~@3 x ~@4] ~ [~@3 x ~@4] ~@40>").gain(0.31)

// drums · crash
const crash = s("cr").struct(`<
  ~@12 A ~ A ~ B ~ C D ~@9 E ~ E A E ~ E@2 F@7 G ~ A@2 ~ B ~ A@2 H ~ A ~ I ~ C D ~@6
>`.pickRestart({
  A: "~ x", B: "x!2", C: "~@4 x ~@2 x", D: "~@3 x ~@4", E: "x", F: "x!4", G: "x ~ x ~ x!2 ~@2", H: "x!2 ~@2 x ~@3",
// … 22 more lines

More by Zucchero