Strudelify
Ragazzo mio cover art

1984 · Savoir Faire

Ragazzo mio

Berte

KeyA majorTempo107 bpm
0:00/0:00
// Ragazzo mio — Berte
// 107 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 112 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(107/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, A@4 for four bars: edit a riff to change every repeat.

// chords · rock organ
const rock_organ = note(`<
  A@8 B C D@4 E@2 F G H@2 I J@3 F G H@2 I G K@4 B C D@4 E@2 F G H@2 I J@3 F G H@2 I G L@3 M N@2 O@2 P@2 Q@2 R S T@2 U
  V@3 W S T@2 U S Q@2 W S T@2 U S X@6 Y@14 Z@2
>`.pickRestart({
  A: "[~@4 a5@24 b5@2 a5@26 ~ f5 d5@2 e5@2 d5@2 f#5@2 [d5,a5]@18 b4@2 d5@6 e5!2 ~@8 g#5 ~@6 a#5 b5@8 a5@10, ~@2 d6@26 ~@2 a5@3 ~@13 f5 d5@17, ~@4 g#5 ~@23 a#5 ~@27 [e5,a5]@3 ~@5 f5 ~@19 a#4 ~@17 a5@8 ~@18, ~@106 d6@21 ~]/8", // D5 A5
  B: "[d4,a4]", C: "[d4,g4] [e4,a4]", D: "[[d4,a4]@2 [d4,g4] [e4,a4], a5]/2", E: "[[d4,a4,a5] [d4,a4,a5], d6]/2",
  F: "[g3,b4,a5]", G: "[a3,e5,a5]", H: "[[d3,d5]@3 [c#3,c#5] [b2,d5]@4, a5]/2", I: "[g3,d5,b5]",
  J: "[[a3,e5] d5 c5, a5, ~ d3@2]/3", K: "[~@2 a5@12 b5 a5@17, ~ d6@15, ~@4 g#5 ~@23 a#5 ~@35]/4",
  L: "[a5@12 b5@2 b5 a5@9, d6, ~@24 a#5 ~@23]/3", M: "[g5,d6] [f#5,d6], f#5 ~@15",
  N: "[[e4,e5]@2 [e4,a4,b5] [f#4,b4,c#6], e6, d#6 ~@31]/2", O: "[[e4,b4]@2 [e4,a4] [f#4,b4,a5], e6, b5@3 ~]/2",
  P: "[[e4,b4]@2 [e4,a4] [f#4,b4], [b5,e6]]/2", Q: "[[e4,b4,b5]@16 b5@7 ~ b5@8, e6, ~ [e4,b4]]/2", R: "[a4,e5,b5]",
  S: "[b3,f#5,b5]", T: "[[e3,e5]@3 [d#3,d#5] [c#3,e5]@4, b5]/2", U: "[a3,e5,c#6]", V: "[[b3,f#5] e5 d5, b5, ~ e3@2]/3",
  W: "[a3,c#5,b5]", X: "[b5@12 c#6@2 c#6 b5, e6, ~@24 c6 ~@7]/2", Y: "[b5@24 c#6@4 c#6@2 b5 ~, e6, ~@24 c6 ~@7]/2",
  Z: "[[b5,e6]@12 c#6@2 c#6 ~, ~@24 c6 ~@7]/2", // E5
})).s("gm_rock_organ").gain(0.43)

// bass · electric bass finger
const bass = note(`<
  A B A C A B A D A B A C A B A E F G H I F G J K F G H I L M A B A C A B A C A B A E F G H I F G J K F G H I L M A B A
  N O P O Q O P O R G S T U G S V W G S T U X Y O R G S T U X Y Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA
>`.pickRestart({
  A: "~@10 a2@3 c3 ~@2, d2", B: "g2@2 a1 d2", C: "g2@8 a1 ~ a1 ~ d2@4", D: "g2@8 g4@2 a4@2 b4@3 d2",
  E: "d2!3 b1 a1!2 b1 d2", F: "g1@5 ~ g1 ~ g1@7 ~", G: "a1@5 ~ a1 ~ a1@7 ~", H: "d2@5 ~ d2 ~ d2@2 a1@2 c#2@4",
  I: "b1@5 ~ b1 ~ b1@4 a1@4", J: "d2@5 ~ d2 ~ d2@6 a1@2", K: "d2!7 a1", L: "g1@5 ~ g1 ~ g1@5 ~ g1@2",
  M: "a1@5 ~ a1 ~ a1@3 ~ a1@2 b1@2", N: "d2 b1 e2@2 d2@2 b1@2 a1@2 b1@2 d2@2 b1@2", O: "~@10 b2@3 d3 ~@2, e1",
  P: "a1@2 b1 e2", Q: "a1@8 b1 ~ b1 ~ e2@4", R: "e2!3 c#2 b1!2 c#2 e2", S: "b1@5 ~ b1 ~ b1@8",
  T: "e2@5 ~ e2 ~ e2@2 b1@2 d#2@4", U: "c#2@5 ~ c#2 ~ c#2@4 b1@4", V: "e2@5 ~ e2 ~ e2@6 b1@2",
  W: "e2 ~ e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 b1@2", X: "a1@5 ~ a1 ~ a1@4 ~@2 a1@2", Y: "b1@5 ~ b1 ~ b1@3 ~ b1@2 c#2@2",
  Z: "e1@2 e1@2 e1@2 e1@2 ~@2 b2@3 d3 ~ a1, ~@8 e1@7 ~", AA: "a1!4 b1!4",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  A B@2 C@6 D E@2 ~ E ~ F G H I J K L M N G H O J K L P Q@2 R@2 D E@2 ~ E ~ F G H O J K L M N G H O J K L S@3 T@2 U V@2
  ~ V ~ W H X Y Z AA AB AC AD@2 X Y Z AA AE ~ W H X Y Z AA AB AF@2 AG AH@2 AI@2 AJ@6 AK@2 AL@2 AM@2 AN@2 AO
>`.pickRestart({
  A: "~@3 a3, d3, ~ a3@2 a3@3 ~@2, ~@4 d4@4 d4@7 ~",
  B: "[~@3 a2 ~@2 d4 ~@7 a3@2, g2@3 ~ a2@4 d3@8, ~ a3@4 a3@3 ~@2 d4@2 d4@3 ~, ~@2 d4@3 ~@2 e4@4 a3@3 ~@2]/2",
  C: "[~@3 a2 ~@2 d4 ~@7 a3@2 ~@3 a2 ~@2 d4 ~@7 a3@2 ~@3 a2 ~@2 d4 ~ [a3,d4]@8, g2@3 ~ a2@4 d3@8 g2@3 ~ a2@4 d3@8 g2@3 ~ a2@4 ~@8, ~@2 a3@8 a3@6 ~@6 a3@6 ~@6 a3@8 a3@6 ~@6 a3@6 ~@6 a3@7 ~ a3@5 d3@16 ~, ~@4 d4@8 ~@2 e4@6 d4@4 d4@11 ~ d4@6 ~@4 e4@6 d4@4 d4@11 ~ d4@6 ~@4 e4@18]/6", // D5
  D: "~@4 [g3,d4,e4]@3 ~@9", E: "~@2 [d3,a3,d4] ~@2 [d3,a3,d4] ~@2", F: "~@2 [d3,a3,d4] ~@2 [d3,a3,d4]@3",
  G: "~@2 [g3,a3,d4] ~@2 [g3,a3,d4]!2 ~", H: "~@2 [a3,b3,e4] ~@2 [a3,b3,e4]!2 ~",
  I: "~@4 [d3,a3,d4]@2 ~@4 [d3,a3,d4]@2 [c#3,c#4]@3 ~", J: "~@2 [b2,d4,a4] ~@2 [b2,d4,a4]!2 ~",
  K: "~@2 [g2,a3,d4] ~@2 [g2,a3,d4]!2 ~", L: "~@2 [a2,a3,e4] ~@2 [a2,a3,e4]!2 ~",
  M: "~@2 [d3,a3,d4] ~@2 [d3,a3,d4]!2 ~", N: "~@7 a3, c4 d3 a3 c4, ~@2 a3@4 c4@4 d3@5 ~",
  O: "~@2 [d3,a3,d4] ~@2 [d3,a3,d4] [c#3,c#4]@2", P: "~@12 a3@3 ~, d3@3 ~@5, ~ a3@2 a3@3 ~@2, ~@4 d4@4 d4@7 ~",
  Q: "[~@3 a2 ~@2 d4 ~@7 a3@2, g2@3 ~ a2@4 d3@5 ~@3, ~@2 a3@8 a3@6 ~@4 d4@4 d4@7 ~, ~@2 d4@3 ~@2 e4@4 a3@3 ~@2]/2",
  R: "[~@3 a2 ~@2 d4 ~ [a3,d4]@8, g2@3 ~ a2@4 ~@8, ~@2 a3@8 a3@4 ~ d3@16 ~, ~@2 d4@3 ~@2 e4@9]/2", // D5
  S: "[~@2 d4 ~@8 a2 ~@2 d4 ~@7 a3@2, d3@6 ~@2 d4@8 g2@6 ~@2 a2@8 d3@7 ~@9, ~@2 a3@4 a3@6 a3@6 a3@5 ~@3 a3@6 ~@4 d4@4 d4@8, ~@20 d4@6 ~@4 e4@7 ~ a3@6 ~@4]/3",
  T: "[~@3 a2 ~@2 d4 ~ [b3,e4]@8, g2@3 ~ a2@4 ~@8, ~@2 a3@8 a3@5 e3@16 ~, ~@2 d4@4 ~ f#4@9]/2", // E5
  U: "~@4 [a3,e4,f#4]@3 ~@9", V: "~@2 [e3,b3,e4] ~@2 [e3,b3,e4] ~@2", W: "~@2 [e3,b3,e4] ~@2 [e3,b3,e4]@3",
  X: "~@2 [b3,c#4,f#4] ~@2 [b3,c#4,f#4]!2 ~", Y: "~@2 [e3,b3,e4] ~@2 [e3,b3,e4] [d#3,d#4]@2",
  Z: "~@2 [c#3,e4,b4] ~@2 [c#3,e4,b4]!2 ~", AA: "~@2 [a2,b3,e4] ~@2 [a2,b3,e4]!2 ~",
  AB: "~@2 [b2,b3,f#4] ~@2 [b2,b3,f#4]!2 ~", AC: "~@2 [e3,b3,e4] ~@2 [e3,b3,e4]!2 ~",
  AD: "[~@7 b3@2 ~ [a3,b3,e4] ~@2 [a3,b3,e4]!2 ~, d4@4 e3@4 b3@4 d4@5 ~@15, ~@2 b3@4 d4@4 e3@5 ~@17]/2", // Asus2
  AE: "~@2 [b2,b3,f#4] ~@2 [b2,b3,f#4] [b2,b3,f#4]@2", // B5
  AF: "[~@11 b2 ~@2 e4@2, e3@2 e4@2 e4@3 ~ a2@3 ~ b2@4, ~@2 b3@4 b3@6 b3@6 b3@5 ~@3 b3@6, ~@5 e4@2 ~]/2",
  AG: "~@3 b3, e3 ~, ~ b3@2 b3@3 ~@2, ~@4 e4@4 e4@7 ~",
  AH: "[~@3 b2 ~@2 e4 ~@7 b3@2, a2@3 ~ b2@3 ~ e3@4 ~@4, ~@2 b3@5 ~@3 b3@6 ~@2 b3@4 b3@6 ~@4, ~@4 e4@8 ~@2 f#4@6 e4@4 e4@7 ~]/2",
  AI: "[~@3 b2 ~@2 e4 ~@7 b3@2, a2@3 ~ b2@4 e3@4 ~@4, ~ b3@4 b3@3 ~ b3@2 b3@3 ~@2, ~@4 e4@8 ~@2 f#4@6 e4@4 e4@7 ~]/2",
  AJ: "[~@3 b2 ~@2 e4 ~@12 b2 ~@2 e4 ~@12 b2 ~@2 e4 ~@7 b3@2, a2@6 ~@2 b2@8 e3@9 ~@7 a2@6 ~@2 b2@8 e3@10 ~@6 a2@6 ~@2 b2@8 e3@9 ~@7, ~ b3@4 b3@3 ~ b3@2 b3@3 b3@3 b3@4 b3@3 ~ b3@2 b3@3 b3@3 b3@4 b3@3 ~ b3@2 b3@3 ~@2, ~@4 e4@8 ~@2 f#4@6 e4@4 e4@7 ~@5 e4@8 ~@2 f#4@8 ~@24 f#4@9 ~@9, ~@52 e4@4 e4@8 ~@4 e4@8 ~@8 e4@4 e4@7 ~]/6",
  AK: "[~@6 b2@2 ~@4 e4@2 ~@14 b3@3 ~, a2@6 ~@2 b2@8 e3@11 ~@5, ~ b3@4 b3@3 ~ b3@2 b3@3 ~@2, ~@4 e4@8 ~@2 f#4@6 e4@4 e4@7 ~]/2",
  AL: "[~@3 b2 ~@2 e4 ~@7 b3@2, a2@6 ~@2 b2@8 e3@9 ~@7, ~ b3@4 b3@3 ~ b3@2 b3@3 ~@2, ~@4 e4@8 ~@2 f#4@9 ~@9, ~@20 e4@4 e4@7 ~]/2",
  AM: "[~@6 b2@2 ~@4 e4@2 ~@14 b3@3 ~, a2@3 ~ b2@4 e3@5 ~@3, ~ b3@4 b3@3 ~ b3@2 b3@3 ~@2, ~@4 e4@8 ~@2 f#4@9 ~@9, ~@5 e4 e4@2]/2",
  AN: "[~@3 b2 ~@2 e4 ~@7 b3@2, a2@3 ~ b2@4 e3@4 ~@4, ~ b3@4 b3@3 ~ b3@2 b3@3 ~@2, ~@4 e4@8 ~@2 f#4@4 ~@2 e4@4 e4@7 ~]/2",
  AO: "~@3 b2 ~ b3 ~@2, a2@3 ~ b2@2 ~@2, ~ b3@3 ~@4, ~@2 e4@3 ~@3",
})).s("gm_electric_guitar_clean").gain(0.32).pan(0.2)

// chords · distortion guitar
const distortion_guitar = note(`<
  A B A B C B C B ~@7 D ~@14 C B C B E F E F E F E D G H I J G K L M N K O P N Q C R@3 S T S T S T S U K V W X K P Y Z K
  P AA AB K AC AD@2 K P AA AB K J ~@2 AE AF AG@2 AH AI AJ AK@5 ~@8
>`.pickRestart({
  A: "[d3,a3]@7 ~", B: "[g2,d3,a3] [a2,e3,a3]", C: "[d3,a3]", D: "~@4 e6@2 d6 ~@3 e6@2 d6@2 ~@2",
  E: "[d3,a3] ~@2 [d3,a3] ~@4", F: "[g2,d3] ~@2 [a2,e3] ~@4", G: "[g2,d3]@3 ~@3 [g2,d3]@5 ~@5",
  H: "[a2,e3]@2 ~@4 [a2,e3]@5 ~@5", I: "[d3,a3] ~@2 [d3,a3]@2 ~ [c#3,a3]@2", J: "[b2,f#3] ~@2 [b2,f#3]@3 ~@2",
  K: "[a2,e3]@3 ~@3 [a2,e3]@4 ~@6", L: "[d3,a3]@2 ~@4 [d3,a3]@5 ~@5", M: "[d3,a3] ~@2 [d3,a3]@3 ~@2",
  N: "[g2,d3]@3 ~@3 [g2,d3]@4 ~@6", O: "[d3,a3]@3 ~@3 [d3,a3]@6 [c#3,a3]@4", P: "[b2,f#3]@3 ~@3 [b2,f#3]@4 ~@6",
  Q: "[a2,e3]@3 ~@3 [a2,e3]@7 ~@3", R: "[[g2,d3,a3]@8 ~@8 [d3,a3]@31 ~, ~@8 [a2,e3,a3]@7 d4@32 ~, ~@14 e4@33 ~]/3",
  S: "[e3,b3] ~@2 [e3,b3] ~@4", T: "[a2,e3] ~@2 [b2,f#3] ~@4", U: "~@4 f#6@2 e6 ~@3 f#6@2 e6@2 ~@2",
  V: "[b2,f#3]@2 ~@4 [b2,f#3]@5 ~@5", W: "[e3,b3] ~@2 [e3,b3]@2 ~ [d#3,b3]@2", X: "[c#3,g#3] ~@2 [c#3,g#3]@3 ~@2",
  Y: "[e3,b3]@2 ~@4 [e3,b3]@5 ~@5", Z: "[e3,b3] ~@2 [e3,b3]@3 ~@2", AA: "[e3,b3]@3 ~@3 [e3,b3]@6 [d#3,b3]@4",
  AB: "[c#3,g#3]@3 ~@3 [c#3,g#3]@4 ~@6", AC: "[b2,f#3]@3 ~@3 [b2,f#3]@10",
  AD: "[[e3,b3]@2 ~@18 f#6@2 e6 ~@3 f#6@2 e6@2 ~@2, ~@3 [e3,b3]@13]/2", // E5
  AE: "b4@2 a4 g#4 a4 g#4 f#4 e4 f#4@2 g#4 e4@3 b3 c#4", AF: "b3@8 c#4@2 e4@2 f#4@2 e4 ~",
  AG: "[g#4@9 ~ a4@2 b4@2 b4@4 c#5@2 e5@7 ~ f#5@3 ~]/2", AH: "g#5@7 ~ f#5@3 e5@5",
  AI: "b4@2 c#5@2 e5@2 c#5@4 b4@4 c#5 b4", AJ: "f#5@4 e5@2 g#5@7 a5 ~ a#5",
  AK: "[b5@5 ~ [b5,c#6]@2 e6@4 c#6@2 b5@6 g#5@2 b5@2 f#5@4 e5@6 b4@2 c#5@2 e5@2 f#5@4 e5 c#5 e5@28 ~@6]/5", // Bsus2
})).s("gm_distortion_guitar").gain(0.35).pan(0.6)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  ~@8 A B A B A B A@2 C D E F C D A G C D E F C D ~@4 A B A B A B A@2 C D E F C D A G C D E F C D ~@4 H I H I H I H@2 D
  J K L D J H M D J K L D J H@2 D J K L D J H N H N H N H N H N H N H N H N H N H N H N
>`.pickRestart({
  A: "[d3,a3]!8", B: "[g2,d3,a3]!4 [a2,e3,a3]!4", C: "[g2,d3]!8", D: "[a2,e3]!8",
  E: "[d3,a3]!3 [d3,a3]@2 [d3,a3] [c#3,a3]@2", F: "[b2,f#3]!3 [b2,f#3]@2 [b2,f#3] [a2,f#3]@2", G: "[c3,a3]!8",
  H: "[e3,b3]!8", I: "[a2,e3,b3]!4 [b2,f#3,b3]!4", J: "[b2,f#3]!8", K: "[e3,b3]!3 [e3,b3]@2 [e3,b3] [d#3,b3]@2",
  L: "[c#3,g#3]!3 [c#3,g#3]@2 [c#3,g#3] [b2,g#3]@2", M: "[d3,b3]!8", N: "[a2,e3]!4 [b2,f#3]!4",
})).s("gm_electric_guitar_muted").gain(0.4)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@23 A ~@5 B ~@19 A ~@5 B ~@3 C ~@15 A ~@5 B ~@7 B ~@22>".pickRestart({
  A: "~@5 x ~@2", B: "~@7 x", C: "~@10 x!2 ~@4",
})).gain(0.57)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ C ~@2 A ~ A@2 ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ C ~@2 A ~ A@2 ~ A ~
  B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ C ~@2 A ~ A@2 ~ B ~@2 A ~ A@2 ~ A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@7 x", B: "x!7 ~", C: "x!2 ~ x!2 ~ x ~",
})).gain(0.44)

// drums · crash
const crash = s("cr").struct(`<
  A ~@6 B A ~@7 A ~@6 C A ~@5 A ~@2 B A ~@7 A ~@6 C A ~@5 A B A B A ~@7 A ~@6 C A ~@5 D ~ A ~@5 A B A E A E A B A B A ~
  A ~ A ~ A B A ~ A ~
>`.pickRestart({
  A: "x", B: "~@15 x", C: "~ x ~@2", D: "x ~@5 x ~@6 x ~@2", E: "~@7 x",
})).gain(0.38)

// drums · tambourine
const tambourine = s("tb").struct("<~@56 A@11 B A@7 C A@5 D A C A@5 C A@22>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@3 x ~@3 x ~ x!2", C: "~ x!3", D: "~@2 x ~@2 x!2 ~",
})).gain(0.57)

stack(
  rock_organ, bass, electric_guitar_clean, distortion_guitar, electric_guitar_muted, kick, snare, low_tom, hihat,
  open_hat, crash, tambourine
)

More by Berte