Strudelify
Amici mai cover art

TuttoVenditti

Amici mai

Antonello Venditti

KeyG majorTempo68 bpm
0:00/0:00
// Amici mai — Antonello Venditti
// 68 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 95 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(68/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.

// bass · fretless bass
const bass = note(`<
  ~@8 A B C B C D C D A B C B C B C B E F G F E F G F H I J I K F L F M F M F N O P O Q O P O H I J I K F L F M F M F R
  O P O Q O Q O N O P O N O P O N O P O N O P O N O P O Q ~@2
>`.pickRestart({
  A: "e2 f2", B: "d2@2 g2 f2", C: "e2 a2", D: "f2@2 g2 f2", E: "c3@5 ~ c3 ~ a2@5 ~ a2 ~",
  F: "d2@5 ~ d2 ~ g2@3 ~ f2@3 ~", G: "e2@5 ~ e2 ~ f2@5 ~ f2 ~", H: "a#2@5 ~ a#2 ~ g#2@7 ~", I: "g2@7 ~ g2@8",
  J: "a2@5 ~ a2 ~ a#2@8", K: "c3@5 ~ e2 ~ f2@8", L: "e2@5 ~ e2 ~ f2@8", M: "e2@5 ~ e2 ~ a2@8", N: "d2@5 ~ a2 ~ b2@8",
  O: "e2@5 ~ e2 ~ a2@3 ~ g2@3 ~", P: "f#2@5 ~ f#2 ~ g2@8", Q: "f#2@5 ~ f#2 ~ b2@8", R: "d3@5 ~ f#2 ~ g2@8",
})).s("gm_fretless_bass").gain(0.33).pan(0.6)

// chords · piano
const piano = note(`<
  A B C D E F G H I@2 J@2 K@2 L M N O P Q R S T U V W X Y V W Z W AA AB AC AD Z AE X AF V W AG AH AI AJ AK AL AI AJ AM
  AJ AA AB AC AD Z AE X AF V W AG AH AM AN AK AO AP AJ AQ AR AI AJ AK AL AI AJ AM AJ AI AJ AK AL AI AJ AM AJ AI AJ AK AL
  AS ~@2
>`.pickRestart({
  A: "c2@2 g2@2 d3@2 e3@2 [f2,a3]@7 g4, [e4,g4] ~, g3@3 ~@5", // F Em
  B: "~ d3 ~ b3, [d2,g4] ~ [g2,f3,g3,c4]@2, ~ a4@3 ~@12, ~ f4@3 ~@4", // G5 Csus4
  C: "~@6 e3@2 [f2,f3,a3,e4]@7 e4, [e2,c4] ~, ~ e3@2 ~@5, ~ g3 ~@2", // Fmaj7 C
  D: "~@3 g3 c4@2 ~ d4, [d2,e4] g2, ~ f4@7 ~@5 c4@3, ~ d4@3 ~@2 b3@2, ~ d3 ~@2", // Dsus2
  E: "~@6 d2@2 ~@4 e3@3 [c4,g4,b4], [c2,g4]@3 ~ [e2,c4]@4, ~ c3@2 ~@5, ~ g3 ~@2", // Cmaj7 C5 C
  F: "~@5 g4 ~@2 f3@4 [e2,e3]@4, b4@3 [c4,g4,a4]@5, [c4,g4]@3 a4 f3@4 ~@8, [f2,f3]@3 f2@9 ~@4, ~ c5@3 ~@4", // E Am7 C5 F
  G: "~@6 d4@2 [d4,f4,a4]@7 c5, d2, a4 ~, ~ d3@7, ~ c4 ~@2", H: "~@3 b4@2 a4 [a4,b4]@9 e4, [g2,g3,c5], ~ d5@7",
  I: "[[c4,e4]@2 [c4,e4]@2 [c4,f4]@2 ~@2 [c4,f4]@2 c4!2 ~@3 g3, g3@4 a3@3 a3@9, ~@3 [c4,f4] ~ f4@3, ~@3 c4, ~@27 b3@5]/2", // C F5
  J: "[[c4,e4]@2 [c4,e4]@2 [c4,e4]@2 ~@2 [c4,f4]@2 c4@2 ~@3 g4, g3@4 a3@3 a3@9, ~@3 [c4,e4] ~ f4@3, ~@3 [c4,c5], ~@27 [d4,b4]@5]/2", // C F5 C G
  K: "[[c4,e4]@2 [c4,e4]@2 [a3,c4]@2 ~@2 [f3,a3,c4]@2 c4@2 ~@3 g3, g3@4 e3@3 e3@9, ~@3 [a3,c4] ~ [f3,a3]@3, ~@3 c4, ~@27 b3@5]/2", // C Am F Am F
  L: "[c4,e4]!2 [a3,c4]!2, g3 e3", M: "[f3,a3,c4]@4 ~@2 c3@2 [f3,c4]@2 ~ [f3,c4] [g3,b3]@4, ~ [f3,a3,c4] ~@2",
  N: "[e3,g3]@2 [e3,g3]@2 [f3,a3]@2 ~ c3, c3@4 c3@3 ~, ~@3 [f3,a3]", O: "[f3,a3]@2 [f3,a3]@2 ~@3 g3, d3 c4, ~@11 b3@5",
  P: "[e3,g3]@2 [e3,g3]@2 [e3,a3]@2 ~ c3, c3@4 c3@3 ~, ~@3 [e3,a3]", // Em A5
  Q: "a3@5 a3@3 ~@6 g4@2, [d3,f3]@4 c4 c4@3, ~@9 b3@7, ~@11 d4@5", // Dm
  R: "[e3,g3]@2 [e3,g3]@2 [e3,a3]@2 ~ c3, c4@4 c3@3 ~, ~@3 [e3,a3]", S: "[f3,a3]!2 g3 [g3,b3], d3 c4",
  T: "[e3,g3]@2 [e3,g3,c4]@2 [e3,a3]@2 ~ c3, d4 b3, ~@3 [e3,a3,c4]", U: "[f3,a3] [f3,a3,d4] [g3,c4] [g3,b3], [d3,e4] ~",
  V: "[c4,e4]!2 [a3,c4,e4]!2, g3 ~", W: "[a3,c4,f4]@4 [a3,c4,f4]@4 [g3,c4,d4]@3 [g3,b3,d4]@3 [g3,a3,d4]@2",
  X: "[g3,c4,e4]!2 [f3,a3,c4]!2", Y: "[a3,c4,f4]@4 ~@2 [e4,c5]@2 [d4,b4]@3 c4@3 [c4,g4]@2, ~@4 [a3,c4,f4]@4 ~@3 a4@5",
  Z: "[c4,e4]!2 [a3,c4,f4]!2, g3 ~", AA: "[a#3,d4,f4] [g#3,c4,d#4]", AB: "[c4,d4,g4] [b3,d4,g4]",
  AC: "[a3,c4,f4] [a#3,d4,e4]", AD: "[c4,e4,g4] [b3,d4,g4]",
  AE: "[a3,c4,f4]@4 a3 c4 f4 c4 [g3,c4]@2 b3 c4@2 d4@3, ~@11 g3@5", // F C5
  AF: "[a3,c4,f4]@4 [a3,c4,f4]@3 [e4,c5] [d4,b4]@3 c4@3 [c4,g4]@2, ~@11 a4@5", AG: "d4 c4 b3 c4", AH: "e4 d4 c4 b3",
  AI: "[d4,f#4]!2 [b3,d4,f#4]!2, a3 ~", AJ: "[b3,d4,g4]@4 [b3,d4,g4]@4 [a3,d4,e4]@3 [a3,c#4,e4]@3 [a3,b3,e4]@2",
  AK: "[a3,d4,f#4]!2 [g3,b3,d4]!2", // D G
  AL: "[b3,d4,g4]@4 ~@2 [f#4,d5]@2 [e4,c#5]@3 d4@3 [d4,a4]@2, ~@4 [b3,d4,g4]@4 ~@3 b4@5", // G D C#m D5 G
  AM: "[d4,f#4]!2 [b3,d4,g4]!2, a3 ~", AN: "[b3,d4,g4]@4 b3 d4 g4 d4 [a3,d4]@2 c#4 d4@2 e4@3, ~@11 a3@5",
  AO: "[b3,d4,g4]!2 [g4,d5] [a4,c#5]", AP: "[d4,f#4]!2 [b3,d4,f#4]!2, [a3,a5] ~", AQ: "e4 d4 c#4 d4",
  AR: "f#4 e4 d4 c#4", AS: "[d4,f#4]!2 [b3,d4,f#4] ~, a3 ~",
})).s("gm_piano").gain(0.45).pan(0.7)

// chords · pad choir
const pad_choir = note(`<
  ~@8 A@4 B@4 C@2 A@2 D@2 E@2 C@2 A@2 C@2 A@2 F G H I C@2 A@2 C@2 A@2 J@2 K@2 J@2 K@2 F G H I C@2 A@2 C@2 A@2 J@2 K@2
  J@2 K@2 J@2 K@2 J@2 K@2 J@2 K@2 J@2 K@2 J@2 K@2 L ~@2
>`.pickRestart({
  A: "[g3@2 a3@4 c5 b4, [c4,g4]@3 [b3,d4]]/2", // C5 Bm
  B: "[g3@2 ~@2 a4@2 [b3,d4]@2 g3@2 ~@2 a4@2 c5 b4, c4@3 ~ c4@3 [b3,d4], g4@2 ~ g4@3 ~@2, ~ a3@2 ~@2 a3@2 ~]/4", // Bm
  C: "[g3@2 ~@3 f4 [d4,e4] d4, c4@3 b3, g4@5 ~@3, ~ a3@2 ~]/2", D: "[g3 ~ a4 [b3,d4,f4], c4@3 ~, g4 ~, ~ a3@2 ~]/2",
  E: "[g3@2 ~@2 a4@2 c5 b4, c4@3 [b3,d4], g4 ~, ~ a3@2 ~]/2", F: "[a#3,d4,f4] [g#3,c4,d#4]", G: "[c4,d4,g4] [b3,d4,g4]",
  H: "[a3,c4,f4] [a#3,d4,e4]", I: "[c4,e4] [b3,d4], g4", J: "[a3@2 ~@3 g4 [e4,f#4] e4, d4@3 c#4, a4@5 ~@3, ~ b3@2 ~]/2",
  K: "[a3@2 b3@4 d5 c#5, [d4,a4]@3 [c#4,e4]]/2", L: "a3 b3, [d4,a4]",
})).s("gm_pad_choir").gain(0.2)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@16 A B A C A B A C A B A C A B A C ~@4 A B A C A B A C D E D F D E D F ~@4 A B A C A B A C D E D F D E D F D E D F D
  E D F D E D F D E D F D E D F G ~@2
>`.pickRestart({
  A: "c4!13 d4 a3 c4", B: "c4!12 e4 g4 ~@2", C: "c4!13 d4 c4!2", D: "d4!13 e4 b3 d4", E: "d4!12 f#4 a4 ~@2",
  F: "d4!13 e4 d4!2", G: "d4!12 ~@4",
})).s("gm_electric_guitar_muted").gain(0.15).pan(0.1)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@21 A B C D@2 E F D@2 E F G@2 H I J K L@3 M N O P@2 Q R P@2 Q R G@2 H I J K L@3 M N O S T U@2 V W X Y P@2 Q R P@2 Q R
  P@2 Q R P@2 Q R P@2 Q R Q ~@2
>`.pickRestart({
  A: "a4 ~", B: "g4 e4", C: "a4@8 f4@7 ~", D: "[g5@9 c6 b5 g5@3 a5@2]/2", E: "g5", F: "e6 d6 c6 d6",
  G: "[~ a#4 [d4,f5] [a#3,a#4] ~ g#4 d#5 g#4 c5@4 [b3,b5] [c4,c6] [d4,d6] [g4,g6], ~@2 a#3 ~@7 g#3 ~ c4@11 ~@9]/2", // Dm A# B C D G
  H: "[f4,f6] [e4,e6]", I: "[e4,e6] [d4,d6]", J: "g3 a3", K: "c4@8 c4@2 b3 c4@2 d4@3",
  L: "[g3@8 g4@15 c5 b4@3 a4@3 g4@14 c5@4]/3", M: "a4@3 d5 c5@2 b4@2", N: "d5 c5@3", O: "e5@2 f5 d5@13",
  P: "[a5@9 d6 c#6 a5@3 b5@2]/2", Q: "a5", R: "f#6 e6 d6 e6", S: "a3 b3", T: "d4@2 d5 e5", U: "[a4@6 d5 c#5]/2",
  V: "a5@3 d5", W: "b4@3 e5 d5@2 c#5@2", X: "e5 d5@3", Y: "f#5@2 g5 e5@13",
})).s("gm_string_ensemble_1").gain(0.12).pan(0.9)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@8 A@4 B@2 A@2 C@2 D@2 E F ~@73>".pickRestart({
  A: "[g4@6 c5 b4]/2", B: "[c5@6 b4 g4]/2", C: "[c5@7 b4, g4@3 ~]/2",
  D: "[g4@2 ~@2 f4@2 c5 b4, c5@3 ~, e4 ~, ~ a4@2 [g4,d5]]/2", E: "g4", F: "~ f4",
})).s("gm_string_ensemble_1").gain(0.04).pan(0.9)

// other · synth brass 2
const synth_brass_2 = note(`<
  ~@17 A B C ~@2 D E F A B C ~ A B C G H ~@8 I J ~ K L M ~ K L M G H ~@8 I J ~@6 N O ~ K L M ~ K L M ~ K L M ~ K L M ~ K
  L M ~@3
>`.pickRestart({
  A: "~ f4 e4 d4", B: "g3", C: "~@11 d4@3 g4@2", D: "d4@3 ~ c4@3 ~ b3@3 ~ c4@3 ~", E: "e4@3 ~ d4@3 ~ c4@3 ~ b3@3 ~",
  F: "g3@3 ~@13", G: "f4@5 ~ f4@2 d#4@8", H: "f4@5 ~ f4@2 g4@8", I: "~@2 b4 a4", J: "g4 f4 e4 d4", K: "~ g4 f#4 e4",
  L: "a3", M: "~@11 e4@3 a4@2", N: "~@2 c#5 b4", O: "a4 g4 f#4 e4",
})).s("gm_synth_brass_2").gain(0.4).pan(0.7)

// other · music box
const music_box = note(`<
  ~@22 A B C ~@2 D C ~@2 E F G F ~@7 A B H ~@2 I H ~@2 J F G F ~@7 A B H ~@5 K L H ~@2 I H ~@2 J ~@3 I H ~@2 J ~@3 I H
  ~@2
>`.pickRestart({
  A: "d6 ~@3 c6 ~@3 b5 ~@3 c6 ~@3", B: "e6 ~@3 d6 ~@3 c6 ~@3 b5 ~@3", C: "g5 ~@15", D: "~@10 c6 ~@2 b5 ~@2",
  E: "~@8 c6 ~@3 d6 ~@3", F: "f6 ~@15", G: "~@8 b5 ~ c6 ~ d6 ~ g6 ~", H: "a5 ~@15", I: "~@10 d6 ~@2 c#6 ~@2",
  J: "~@8 d6 ~@3 e6 ~@3", K: "e6 ~@3 d6 ~@3 c#6 ~@3 d6 ~@3", L: "f#6 ~@3 e6 ~@3 d6 ~@3 c#6 ~@3",
})).s("gm_music_box").gain(0.25).pan(0.8)

// other · melodic tom
const melodic_tom = note("<~@32 A B A C ~@7 D ~@7 E F ~@2 G ~@4 H@3 I ~@7 J ~@23>".pickRestart({
  A: "~@12 [g2,a3] ~@3", B: "~@12 [g2,a3] ~ [g2,a3] ~", C: "~@9 d5 ~@2 g4 ~ f3 ~", D: "~@14 a3 b2", E: "~@15 a3",
  F: "[d#2,a2] ~@15", G: "~@11 a3!3 c3 f2", H: "~@12 [f2,c3] ~@3", I: "~@12 a4 g3 g#2 d2", J: "~@15 g#2",
})).s("gm_melodic_tom").gain(0.39)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@16 A B A B A B A B A B A B A B A B C@3 D A B A E A B A F A B A E A B A E A B A C A B A E A B A C A B A E A B A E A B
  A E A B A E A B A E A B A E A B A E C ~@2
>`.pickRestart({
  A: "~@4 x ~@2 x ~@4 x ~@3", B: "~@4 x ~@2 x ~@4 x ~ x!2", C: "~@4 x ~@2 x ~@8", D: "~@4 x ~@2 x ~@7 x",
  E: "~@4 x ~@2 x ~@4 x ~@2 x", F: "~@4 x ~@2 x ~@4 x!2 ~@2",
})).gain(0.32)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@16 A B A B A B A B A B A B A B A B C@4 D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D
  E D E D E D E D E D E D E D E D E F ~@2
>`.pickRestart({
  A: "~ x ~ x ~@4", B: "~ x ~ x ~ x ~ x", C: "x!4", D: "x!7 ~ x!2 ~@2 x!2 ~@2", E: "x!7 ~ x!8", F: "x!7 ~ x!2 ~@6",
})).gain(0.12)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@16 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B@4 C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C
  D C D C D C D C D C D C D C D C D E ~@2
>`.pickRestart({
  A: "~@10 x!2 ~@2 x!2", B: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", C: "~@7 x ~@2 x!2 ~@2 x!2", D: "~@7 x ~@8",
  E: "~@7 x ~@2 x!2 ~@4",
})).gain(0.12)

// drums · china
const china = s("cr").struct(`<
  ~@24 A ~@7 A@5 ~@7 A ~@6 B A C A@3 ~@3 B@3 ~ A ~@6 B A ~@6 B A ~@6 B A ~@6
>`.pickRestart({
  A: "x", B: "~@3 x", C: "x ~@6 x",
})).gain(0.16)

// drums · ride
const ride = s("rd").struct("<~@56 [x!8]!4 ~@35>").gain(0.24)

// drums · congas
const congas = s("conga:18").struct(`<
  ~@9 A ~ A ~ A@3 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@6 x!2 ~ x ~@6",
})).gain(1.16)

// drums · congas · soft notes
const congas_soft = s("conga:18").struct("<~@16 [~ x ~ x]!16 [~ x ~@2]!4 ~@59>").gain(0.77)

// drums · shaker
const shaker = s("sh").struct("<~@16 [x!16]!76 [x!12 ~@4] ~@2>").gain(0.12)

// drums · claves
const claves = s("clave:2").struct(`<
  ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@14 x!2",
})).gain(1.57)

stack(
  bass, piano, pad_choir, electric_guitar_muted, string_ensemble_1, string_ensemble_1_soft, synth_brass_2, music_box,
  melodic_tom, kick, snare, pedal_hat, open_hat, china, ride, congas, congas_soft, shaker, claves
)

More by Antonello Venditti