Strudelify
Cantare e d'amore cover art

L'ascolteranno gli americani

Cantare e d'amore

Amedeo Minghi

KeyB majorTempo90 bpm
0:00/0:00
// Cantare e d'amore — Amedeo Minghi
// 90 bpm, 4/4, key B 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 90 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/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 · electric bass finger · "CANTAREEDA"
const bass = note(`<
  ~ A B C B D E F D@2 E G H I J K L J D M L J N O P Q N O R S T N M S U D E G D@2 E F H I J K S T N M S V W X S Y W X Z
  AA AB O AC AD AE AF AG AH AF@2 AG AI S T N M S T N M S U N O N AJ N@2 AK@2
>`.pickRestart({
  A: "b1@3 b1@2 b1@2 b1", B: "d#2@5 ~ d#2@9 ~", C: "b1@5 ~ b1@4 b1@4 b1@2", D: "b1@3 b1@2 b1@3",
  E: "d#2@3 d#2@2 d#2@2 d#2", F: "e2@6 e2@4 e2@5 ~", G: "e2@3 e2@2 e2@3", H: "b1@3 b1@2 b1@2 a#2",
  I: "g#2@3 g#2@2 g#2@3", J: "f#2@3 f#2@2 f#2@3", K: "e2@3 e2 d#2@3 d#2", L: "c#2@3 c#2@2 c#2@2 c#2",
  M: "e2@6 e2 b1 e2@4 d#2@4", N: "b1@3 b1 ~@2 b1@4 b1@4 b1@2", O: "d#2@3 d#2 ~@2 d#2@4 d#2@4 d#2@2",
  P: "e2@3 e2 ~@2 e2@4 e2@4 e2@2", Q: "b1@3 b1 ~@2 b1@4 b1@6", R: "e2@3 e2 ~@2 e2@4 e2@5 ~",
  S: "c#2@3 c#2 ~@2 c#2@4 c#2@4 c#2@2", T: "f#2@3 f#2 ~@2 f#2@4 f#2@4 f#2@2",
  U: "f#2@3 f#2 ~@2 f#2@4 f#2 ~ f#2@2 f#2@2", V: "f#2@3 f#2 ~@2 f#2@4 f#2@2 f#2@2 f#2@2",
  W: "g#2@3 g#2 ~@2 g#2@4 g#2@4 g#2@2", X: "c2@3 c2 ~@2 c2@4 c2@4 c2@2", Y: "g#2@3 g#2 ~@2 g#2@4 g#2@2 d#2 f2 g#2 a#2",
  Z: "c#2@3 c#2 ~@2 c#2@4 c#2@6", AA: "g#2@6 g#2 d#2 g#2@4 g2@4", AB: "f2@3 f2 ~@2 f2@4 f2@4 f2@2",
  AC: "c#2@3 c#2@3 c#2@2 c2@4 c2@4", AD: "a#1@3 a#1 ~@2 a#1@4 a#1@2 a#1@4", AE: "d#2@3 d#2 ~@2 d#2@2 d#2@4 d#2@4",
  AF: "b1@3 b1 ~@2 b1@4 b1@2 b1@4", AG: "d#2@3 d#2 ~@2 d#2@4 d#2@2 d#2@4", AH: "e2@2 ~ e2 ~@2 e2@4 e2@2 e2@2 f#2@2",
  AI: "e2@3 e2 ~@2 e2@4 e2@2 e2@2 d#2@2", AJ: "d#2@3 d#2 ~@2 d#2@4 d#2@6", AK: "b1/2",
})).s("gm_electric_bass_finger").gain(0.53)

// chords · piano
const piano = note(`<
  ~ A B C B D B E D C B F G H B I J K C L M N D B E D C B O J K C L M N D B E D C B F G H B I J K C L M N P Q R P S Q T
  U V Q W X Y C B F G C B O J K C L M K C L M N A B C B A@2 Z ~
>`.pickRestart({
  A: "[d#3,f#3,b3]@3 [d#3,f#3,b3]@3 [d#3,f#3,b3]@2, b2", B: "[d#3,f#3,a#3]@3 [d#3,f#3,a#3]@3 [d#3,f#3,a#3]@2, d#2",
  C: "[d#3,f#3,b3]@6 [d#3,f#3,b3]@6 [d#3,f#3,b3]@3 ~, b2@15 ~", // B
  D: "[d#3,f#3,b3]@3 [d#3,f#3,b3]@3 [d#3,f#3,b3]@2, b2@15 ~", E: "[e3,g#3,b3]@6 [e3,g#3,b3]@6 [e3,g#3,b3]@3 ~, e2@15 ~",
  F: "[e3,g#3]@3 [e3,g#3]@3 [e3,g#3,b3]@2, [e2,d#4], ~@3 c#4@5", // E Emaj7
  G: "[d#3,f#3,b3]@6 [d#3,f#3,b3]@6 ~ [d#3,f#3,b3]@3, b2@3 b2", H: "[d#3,g#3,b3]@3 [d#3,g#3,b3]@3 [d#3,g#3,b3]@2, g#2",
  I: "[e2,e3,g#3,b3]@6 [e3,g#3,b3] ~ [d#3,g#3,b3]@4 [d#3,g#3,b3]@4, ~ d#2", // E G#m
  J: "[e3,g#3,c#4]@3 [e3,g#3,c#4]@3 [e3,g#3,c#4]@2, c#3@15 ~", // C#m
  K: "[f#3,a#3,c#4]@6 [f#3,a#3,c#4]@6 [f#3,a#3,c#4]@3 ~, f#2@15 ~", // F#
  L: "[g#3,b3]@2 [g#3,b3] [g#3,b3,d#4], [e2,e3], ~ e4", M: "[e3,g#3,c#4]@3 [e3,g#3,c#4]@3 [e3,g#3,c#4]@2, c#3",
  N: "[f#3,a#3,c#4]@3 [f#3,a#3,c#4]@5, f#2", O: "[e3,g#3,b3]@3 [e3,g#3]@3 [e3,g#3,c#4]@2, e2, ~@3 b3@5",
  P: "[d#3,g#3,c4]@3 [d#3,g#3,c4]@3 [d#3,g#3,c4]@2, g#2@15 ~", Q: "[d#3,g3,c4]@3 [d#3,g3,c4]@3 [d#3,g3,c4]@2, c3",
  R: "[f3,g#3,c#4]@6 [f3,g#3,c#4]@6 [f3,g#3,c#4]@3 ~, c#3@15 ~", // C#
  S: "[d#3,g#3,c4]@6 [d#3,g#3,c4]@6 [d#3,g#3,c4]@3 ~, g#2@15 ~", T: "[f3,g#3,c#4]@3 [f3,g#3,c#4]@3 [f3,g#3,c#4]@2, c#3",
  U: "[d#3,g#3,c4]@6 [d#3,g#3,c4]@6 ~ [d#3,g#3,c4]@3, g#2@3 g#2", V: "[f3,g#3,c4]@3 [f3,g#3,c4]@3 [f3,g#3,c4]@2, f2",
  W: "[c#3,f3,g#3,c#4]@6 [f3,g#3,c#4] ~ [f3,g#3,c4]@4 [f3,g#3,c4]@4, ~ c3", // C# Fm
  X: "[f3,a#3,c#4]@3 [f3,a#3,c#4]@3 [f3,a#3,c#4]@2, a#2@15 ~", // A#m
  Y: "[g3,a#3,d#4]@6 [g3,a#3,d#4]@6 [g3,a#3,d#4]@3 ~, d#3@15 ~", Z: "[b2,d#3,f#3,b3]@15 ~",
})).s("gm_piano").gain(0.17)

// other · pad new age · "FANTASY"
const pad_new_age = note(`<
  ~@13 A B C D@2 E@2 F@2 ~@7 D@2 E@2 F@2 ~@8 A B C D@2 E@2 F@2 ~@8 G H I ~@9 D@2 E@2 D@2 E@2 F@2 ~@8
>`.pickRestart({
  A: "b5", B: "a#5 f#5", C: "g#5", D: "[e6!3 e6@2 g#5@2 a#5@9]/2", E: "[d#6!3 d#6@2 f#5@2 g#5@9]/2",
  F: "[e6!3 e6@2 g#5@2 a#5@5 b5 c#6@3]/2", G: "g#6", H: "g6 d#6", I: "f6",
})).s("gm_pad_new_age").gain(0.17).pan(0.3)

// other · acoustic guitar steel · "A.GUITAR"
const acoustic_guitar_steel = note("<A B A B A B ~@15 A B ~@11 A B ~@45 A B A B A B ~@3>".pickRestart({
  A: "~@12 f#3 g#3 b3 c#4", B: "b3",
})).s("gm_acoustic_guitar_steel").gain(0.32).pan(0.6)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@8 A B@2 C D E@2 F G@2 H@2 I@2 J@3 K L M N G@2 H@2 I@2 O P Q R B@2 C D E@2 F G@2 H@2 I@2 S@3 T U V W K X@2 Y M K J@3
  K L M N G@2 H@2 G@2 H@2 I@2 Z@6 AA@2
>`.pickRestart({
  A: "~@6 b4 c#5", B: "d#5/2", C: "d#5@4 c#5@3 b4", D: "d#5", E: "[b5@2 a#5 f#5, d#4]/2", F: "e4 d#4, g#5",
  G: "[[e4,e6]@5 [g#3,g#5]@2 [a#3,a#5]@8 ~]/2", H: "[[d#4,d#6]@5 [f#3,f#5]@2 [g#3,g#5]@8 ~]/2",
  I: "[[e4,e6]@10 [g#3,g#5]@4 [a#3,a#5]@9 ~ [b3,b5]@2 [c#4,c#6]@6]/2", J: "[[d#4,d#6]@20 [c#4,c#6]@3 [b3,b5]]/3",
  K: "[d#4,d#6]", L: "[b3,b5]", M: "[a#3,a#5]", N: "[g#3,g#5]", O: "[b3,b5]@6 c#4 d#4", P: "a#3@6 g#3 f#3",
  Q: "g#3@6 a#3 b3", R: "f#3@6 b4 c#5", S: "[g#3@6 a#3 c4 g3@6 f3 d#3 f3@6 g3 g#3, [d#4,d#6]@11 [c#4,c#6]]/3",
  T: "[d#3,c4,c6]@15 ~", U: "[g#4,g#6]", V: "[g4,g6]", W: "[f4,f6]", X: "[g#5@2 g5 d#5, c4]/2", Y: "c#4 c4, f5",
  Z: "[f#4,d#6]/2", AA: "[[f#4,d#6]@31 ~]/2",
})).s("gm_string_ensemble_1").gain(0.15)

// chords · string ensemble 2 · "PAD"
const string_ensemble_2 = note(`<
  ~ A@6 B@2 C@3 D E@2 F G@6 H@3 D I@3 G@6 A@2 B@2 C@3 D E@2 F G@6 J@2 K@2 J@2 K@2 L@2 M N@2 C@3 D I@3 O@4 P@6 A@4 Q@4
>`.pickRestart({
  A: "[b3 a#3, [f#3,d#4]]/2", B: "[[g#3,e4] [f#3,d#4], b3]/2",
  C: "[b3@8 a#3@8 b3@3 [e3,c#4]@5, d#4@19 ~@5, f#3@2 g#3]/3", D: "[f#3,b3,d#4]", E: "[[g#3,b3] [f#3,a#3], d#4]/2",
  F: "e4 d#4, [g#3,b3]", G: "[[g#3,e4]@4 a#3@4 d#4@4 e4@3 d#4 e4@4 [a#3,f#4]@4, c#4 b3 c#4, ~ f#3@2 g#3@2 ~]/6",
  H: "[b3@8 a#3@8 b3@3 [c#4,e4]@5, d#4@19 ~@5, f#3@2 g#3]/3", I: "[b3@2 a#3@2 ~ e4, d#4@5 ~, f#3@2 [g#3,b3]]/3",
  J: "[g#3 g3, [c4,d#4]]/2", K: "[[c#4,f4] [c4,d#4], g#3]/2", L: "[[g#3,f4] [g3,d#4], c4]/2", M: "c#4 c4, [g#3,f4]",
  N: "[[c#4,f4] [d#4,g4], a#3]/2", O: "[[g#3,e4]@4 a#3@4 d#4@4 e4@3 d#4, c#4 b3, ~ f#3@2 g#3]/4",
  P: "[[g#3,e4]@4 a#3@4 d#4@4 e4@3 d#4 e4@4 [f#3,a#3]@4, c#4 b3 c#4, ~ f#3@2 g#3@2 ~]/6", Q: "[f#3,b3,d#4]/2",
})).s("gm_string_ensemble_2").gain(0.15)

// other · melodic tom · "TOMS"
const melodic_tom = note("<~@15 A ~@16 A ~@12 A ~@5 B ~@10 A ~ B ~@6 C ~@3 A ~@3 A ~@10>".pickRestart({
  A: "~@6 c4!2 a3 ~ a3!2 f3 ~@3", B: "~@10 c4!2 a3 ~ a3!2", C: "~@8 a3 ~ a3!2 f3 ~@3",
})).s("gm_melodic_tom").gain(0.54).pan(0.4)

// other · pad poly · "SYNTH 1"
const pad_poly = note(`<
  ~ A B A B A C D A@2 C D A D B D@2 B A D@2 B A C D A@2 C D@2 B A D@2 B A C D A@2 C D A D B D@2 B A D@2 B E F G E@2 F G
  E G H G I J A C D A@2 C D@2 B A D@2 B A D@2 B A B A B A@2 ~@2
>`.pickRestart({
  A: "f#3 b3 ~@2 f#3 b3 ~@2 f#3 b3 ~@2 f#3 b3 ~@2", B: "f#3 a#3 ~@2 f#3 a#3 ~@2 f#3 a#3 ~@2 f#3 a#3 ~@2",
  C: "a#3 c#4 ~@2 a#3 c#4 ~@2 a#3 c#4 ~@2 a#3 c#4 ~@2", D: "g#3 b3 ~@2 g#3 b3 ~@2 g#3 b3 ~@2 g#3 b3 ~@2",
  E: "d#4 g#4 ~@2 d#4 g#4 ~@2 d#4 g#4 ~@2 d#4 g#4 ~@2", F: "g4 a#4 ~@2 g4 a#4 ~@2 g4 a#4 ~@2 g4 a#4 ~@2",
  G: "f4 g#4 ~@2 f4 g#4 ~@2 f4 g#4 ~@2 f4 g#4 ~@2", H: "d#4 g4 ~@2 d#4 g4 ~@2 d#4 g4 ~@2 d#4 g4 ~@2",
  I: "f3 g#3 ~@2 f3 g#3 ~@2 f3 g#3 ~@2 f3 g#3 ~@2", J: "d#3 g3 ~@2 d#3 g3 ~@2 d#3 g3 ~@2 d#3 g3 ~@2",
})).s("gm_pad_poly").gain(0.16).pan(0.1)

// other · pad poly · "SYNTH 2"
const pad_poly_2 = note(`<
  ~ A B A B A C D A@2 C D A D B D@2 B A D@2 B A C D A@2 C D@2 B A D@2 B A C D A@2 C D A D B D@2 B A D@2 B E F G E@2 F G
  E G H G I J A C D A@2 C D@2 B A D@2 B A D@2 B A B A B A@2 ~@2
>`.pickRestart({
  A: "~@2 f#3 b3 ~@2 f#3 b3 ~@2 f#3 b3 ~@2 f#3 b3", B: "~@2 f#3 a#3 ~@2 f#3 a#3 ~@2 f#3 a#3 ~@2 f#3 a#3",
  C: "~@2 a#3 c#4 ~@2 a#3 c#4 ~@2 a#3 c#4 ~@2 a#3 c#4", D: "~@2 g#3 b3 ~@2 g#3 b3 ~@2 g#3 b3 ~@2 g#3 b3",
  E: "~@2 d#4 g#4 ~@2 d#4 g#4 ~@2 d#4 g#4 ~@2 d#4 g#4", F: "~@2 g4 a#4 ~@2 g4 a#4 ~@2 g4 a#4 ~@2 g4 a#4",
  G: "~@2 f4 g#4 ~@2 f4 g#4 ~@2 f4 g#4 ~@2 f4 g#4", H: "~@2 d#4 g4 ~@2 d#4 g4 ~@2 d#4 g4 ~@2 d#4 g4",
  I: "~@2 f3 g#3 ~@2 f3 g#3 ~@2 f3 g#3 ~@2 f3 g#3", J: "~@2 d#3 g3 ~@2 d#3 g3 ~@2 d#3 g3 ~@2 d#3 g3",
})).s("gm_pad_poly").gain(0.12).pan(0.9)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x ~ x ~@2]!87 x ~>").gain(0.53)

// drums · snare
const snare = s("sd").struct("<~ [~ x ~ x]!87 ~@2>").gain(0.53)

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

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

// drums · tambourine
const tambourine = s("tb").struct("<~ [~@3 x]!87 ~@2>").gain(0.33)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ [x!16]!87 x ~>").gain(0.68)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@22 [~ x ~@2]!13 ~@17 [~ x ~@2]!30 ~@8>").gain(1.15)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@12 [~@11 x!3 ~@2] ~@29 [~@11 x!3 ~@2] ~@47>").gain(2.39)

stack(
  bass, piano, pad_new_age, acoustic_guitar_steel, string_ensemble_1, string_ensemble_2, melodic_tom, pad_poly,
  pad_poly_2, kick, snare, hihat, crash, tambourine, cabasa, jingle_bells, bell_tree
)

More by Amedeo Minghi