Strudelify
Susanna cover art

I Miei Americani Tre Puntini

Susanna

Celentano

KeyA minorTempo94 bpm
0:00/0:00
// Susanna — Celentano
// 94 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 12 "tk12" electric guitar clean (copy of ch 3 "tk3" electric guitar clean, 0.083 beats late)
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(94/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 · "tk2"
const bass = note(`<
  ~@16 A B C D@2 A E A E A E A F G H I@3 A J K L A B K A B A E A E A E A F G M G N A J K O@2 A E A E A E A E A E A E A E
  A E A E A P@2 ~@6 Q R S T@2 R S T@2 R S U@4 V@4 ~
>`.pickRestart({
  A: "a1 ~@3 e1 ~ g1 ~", B: "a1@3 ~@5 e1@2 ~@2 g1@2 ~@2", C: "a1@3 ~@5 d2@2 ~@2 e2@2 ~@2", D: "[a2@15 ~]/2",
  E: "a1 ~@3 e1!2 g1 ~", F: "a1 ~@3 a1!2 ~ a1", G: "d1 ~ e1 ~ f1 ~ a1 ~", H: "g1@4 ~@2 g1@2 g2@2 g1@2 g1@3 ~",
  I: "d1/3", J: "a1@3 ~@5 e1@2 e1@2 g1@2 ~@2", K: "a1@3 ~@5 d1@2 ~@2 e1@2 ~@2", L: "f1@7 ~ g1@2 g1@2 g1@2 g1@2",
  M: "g1@2 g1@2 g1@2 g2 ~ g2@2 g1@2 g1@2 ~@2", N: "g1@2 g1@2 g1@2 g1@2 g1 ~@7", O: "a1/2",
  P: "[a1@2 ~@4 a1@2 a1@15 ~@9]/2", Q: "~@7 a1", R: "~@3 e1 ~ g1 ~ a1", S: "~@3 e1!2 g1 ~ a1",
  T: "[~@6 d1@2 ~@2 e1@2 ~@2 f1@5 ~ f1@2 g1@2 g1@2 g1@2 g1@2 a1@2]/2", U: "[~@3 d1 ~ e1 ~ f1@12 g1@12 ~]/4",
  V: "[~ a1@30 ~]/4",
})).s("gm_electric_bass_finger").gain(0.72)

// chords · electric guitar clean · "tk3"
const electric_guitar_clean = note(`<
  ~@16 A@2 B C ~ D E D E D E D F G H I@3 A@2 J K L@2 M N@2 D E D E D E D O P Q P R A@2 B C ~ D E D E D E D E D E D E D E
  D E D E D S ~@8 T U V@2 T U V@2 T U W@3 ~@6
>`.pickRestart({
  A: "~@3 [a3,e4,a4]@5", B: "~@6 [g3,d4,g4] ~", C: "[a3,e4,a4]@13 ~@3",
  D: "~@4 [a4,c5,e5]@3 [a4,c5,e5] ~@2 [a4,c5,e5] ~@5", // Am
  E: "~@4 [a4,c5,e5]@3 [a4,c5,e5] ~@2 [a4,c5,e5] ~ [g4,b4,d5]@2 ~@2", F: "a5@2 g5 a5 e5@2 d5 c5", G: "d5 ~",
  H: "~@6 a3 d4", I: "[c4@35 ~@13]/3", J: "~@4 [f3,c4,f4] ~ [g3,d4,g4] ~", K: "[a3,e4,a4]@7 ~ [g3,d4,g4]@7 ~",
  L: "~@4 [a4,c5,e5]@3 ~ [g4,b4,d5]!5 ~ [g4,b4,d5] ~", M: "~@4 [a4,c5,e5]@3 ~ [f4,a4,c5]@4 [g4,b4,d5]@4",
  N: "[[a4,c5,e5]@21 ~@11]/2", O: "~@4 g5@2 d5 c5 f5 d5 c5 f5 d5 c5 a#4 g4", P: "d4 e4 f4 a4", Q: "g4@11 ~ b3@2 d4@2",
  R: "g4 ~", S: "~@4 [a4,c5,e5]@3 [a4,c5,e5] ~@8", T: "~@2 [a3,e4,a4]@5 ~", U: "~@4 [a3,e4,a4]@11 ~",
  V: "[~@10 [g3,d4,g4]@2 ~@2 [a3,e4,a4]@13 ~@5]/2", W: "[~@10 [g3,d4,g4]@2 ~@2 [a3,e4,a4]@23 ~@11]/3",
})).s("gm_electric_guitar_clean").gain(0.12).pan(0)

// other · harmonica · "tk6"
const harmonica = note("<~@28 A B ~@16 C D E F G H ~@8 I@3 ~ J@2 K@2 ~@14 L@2 ~@23>".pickRestart({
  A: "a5@2 g5 ~ e5@2 d5 c5", B: "d5 ~", C: "~@4 e5 g5 a5 g5 a5 g5 e5 d#5 d5 c5 c5@2", D: "a4@3 ~@13",
  E: "~@12 [g4,b4] ~@3", F: "[a4,c5]@2 ~ [a4,c5] ~@12", G: "~@4 g5 a5 e5!2 a5 g5 e5 d5 c5 d5 c5@2", H: "f4@3 ~@13",
  I: "[~@4 [d#5,e5] g5 e5 [e5,g5] g5 [e5,g5] e5 g5 [e5,g5] e5 [e5,g5] [f#5,g5] ~@6 [d5,d#5] ~ d5@3 c5@2 ~ c5@2 a4@12 ~@4, ~@15 e5@6 ~@3 d#5 ~@7 g#4 ~@15, ~@4 g5@7 ~]/3", // Emaj7 Em Gmaj7 D#maj7
  J: "[f#5 ~@5 e5!2 e5@2 e5!2 ~@4 a5@2 b5@2 g5@2 a5@2 d#5@3 d5@2 c5@3, b5@15 ~@17, ~ g5@14 ~ g#5 ~@15, ~@12 e5@11 ~ d5 ~@7]/2",
  K: "[b4@3 c5@3 a4@21 ~@5]/2",
  L: "[~@4 g5@4 f5 [f5,g5] d5@2 [c5,c#5] d5@2 ~ c#5 d5 a#4 ~ f4 [f4,g4]!2 d4 [c4,c#4] a#3 b3@3 ~@2 c#4, ~@4 f#5 ~@10 b4@2 ~@2 b4@2 ~@11]/2", // Fsus2 C#maj7 Fsus2 C#maj7
})).s("gm_harmonica").gain(0.48).pan(0.7)

// other · harmonica · "tk6" · soft notes
const harmonica_soft = note("<~@28 A ~@36 B@3 ~@14 C D@3 ~@21>".pickRestart({
  A: "~@3 a5 ~@4", B: "[~@4 a5@17 ~@3]/3", C: "~@15 a#4", D: "[~@8 [d4,f4]@9 ~@7, ~@13 g3@22 ~@13]/3",
})).s("gm_harmonica").gain(0.32).pan(0.7)

// chords · string ensemble 1 · "tk7"
const string_ensemble_1 = note(`<
  A@11 B C D C E A F G H@2 A@7 B C D I ~@2 A F G F A F G A@9 B C D C J A F G A@21 K ~@8 L M N M L M N M L M O ~ P ~ Q
  ~@4
>`.pickRestart({
  A: "~@2 [a3,c4,e4] ~@3 [a3,c4,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~", // Am Em
  B: "~@2 [a3,c4,e4] ~@3 [a3,c4,e4] ~@3 [a3,c4,e4] ~@3 [a3,c4,e4] ~", // Am
  C: "~@2 [a3,c4,f4] ~@3 [f3,a3,c4] ~@3 [f3,a3,c4] ~@3 [f3,a3,c4] ~", // F
  D: "~@2 [g3,b3,d4] ~@3 [g3,b3,d4] ~@3 [g3,b3,d4] ~@3 [g3,b3,d4] ~", E: "~@2 [g3,b3,d4] ~@3 [g3,b3,d4] ~@9",
  F: "~@2 [a3,c4,e4] ~@3 [a3,c4,e4] ~@3 [g3,b3,d4] ~@3 [g3,b3,d4] ~", // Am G
  G: "~@2 [a3,c4,e4] ~@3 [a3,c4,e4] ~@3 [f3,a3,c4] ~@3 [g3,b3,e4] ~", // Am F Em
  H: "~@2 [e4,a4,c5] ~@3 [e4,a4,c5] ~@3 [e4,g4,b4] ~@3 [e4,g4,b4] ~", I: "[d1,f3,a3,c4] ~@15",
  J: "[g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~@7", // G
  K: "~@2 [a3,c4,e4] ~@3 [a3,c4,e4] ~ [a3,c4,e4] ~@7", L: "[a3,c4,e4] ~@3 [a3,c4,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3",
  M: "[a3,c4,e4] ~@3 [a3,c4,e4] ~@3 [g3,b3,d4] ~@3 [g3,b3,d4] ~@3", // Am G
  N: "[a3,c4,e4] ~@3 [a3,c4,e4] ~@3 [f3,a3,c4] ~@3 [g3,b3,e4] ~@3", // Am F Em
  O: "[a3,c4,e4] ~@3 [a3,c4,e4] ~@3 [f3,a3,c4] ~@3 [g3,b3,e4] ~ [f1,f3,a3,c4] ~", P: "~@6 [g3,b3,d4] ~@9",
  Q: "~@2 [a3,c#4,e4] ~@13", // A
})).s("gm_string_ensemble_1").gain(0.72)

// chords · piano · "tk13"
const piano = note(`<
  A B A C D E@3 F G F H I J I K D L M N@2 D E@3 F G F H I J O@3 D L M P D L M D E D E@3 F G F H I J I Q D L M R C D E@3
  D E@3 D E@3 D E@3 F G F S@3 T@3 U V@2 W X Y Z W X Y Z W X AA@8 ~
>`.pickRestart({
  A: "[a1,a2]@2 [e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~@3 [e3,g3,b3,e4] ~@3 [e3,g3,b3,e4] ~", // A Am Em
  B: "~@2 [e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~@3 [e3,g3,b3,e4] ~@3 [e3,g3,b3,e4]@2, ~@14 [g1,g2] ~", // Am Em G
  C: "~@2 [e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~@3 [e3,g3,b3,e4] ~@3 [e3,g3,b3,e4] ~", // Am Em
  D: "a2 ~ [e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~ e2@2 [e3,g3,b3,e4] ~ g2@2 [e3,g3,b3,e4] ~", // Am Em
  E: "a2@2 [e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~ e2@2 [e3,g3,b3,e4] ~ g2@2 [e3,g3,b3,e4] ~", // Am Em
  F: "a2@2 [e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~ e2@2 [e3,g3,b3,e4] ~ g2 ~ [e3,g3,b3,e4] ~", // Am Em
  G: "a2@2 [e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~ e2 ~ [e3,g3,b3,e4] ~ g2@2 [e3,g3,b3,e4] ~", // Am Em
  H: "a2 ~ [e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~ a2@2 [e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~", // Am
  I: "d2@2 [a3,c4,f4] ~ e2@2 [f3,a3,c4] ~ f2@2 [f3,a3,c4] ~ a2@2 [f3,a3,c4] ~", // F
  J: "g2@2 [g3,b3,d4] ~@3 [g3,b3,d4] ~ g2@2 [g3,b3,d4] ~@3 [g3,b3,d4] ~", K: "g2@2 [g3,b3,d4] ~@3 [g3,b3,d4] ~ g2 ~@7",
  L: "a2@2 [e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~ e2@2 [e3,g3,b3,d4] ~ g2@2 [e3,g3,b3,d4] ~", // Am Em7
  M: "a2@2 [e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~ d2@2 [f3,a3,c4] ~ e2@2 [e3,g3,b3,e4] ~", // Am F Em
  N: "[~@2 [e4,a4,c5] ~@3 [e4,a4,c5] ~@3 [e4,g4,b4] ~@3 [e4,g4,b4] ~@3 [e4,a4,c5] ~@3 [e4,a4,c5] ~@3 [e4,g4,b4] ~@3 [e4,g4,b4] ~, a1@31 ~]/2", // Am Em Am Em
  O: "[[d1,f3,a3,c4]@47 ~]/3", P: "f2@2 [a3,c4,e4] ~@3 [a3,c4,e4] ~ g2@2 [g3,b3,d4] ~@3 [g3,b3,d4] ~",
  Q: "[g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~@7, g2!5 ~@3", // G
  R: "a2 ~ [e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~@3 [e3,g3,b3,e4] ~@3 [e3,g3,b3,e4] ~", // Am Em
  S: "[a2 ~ [e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~ [a2,e3,a3,c4,e4]@15 ~ [d2,a3,c4,f4]@5 [e2,g3,c4,e4]@6 [f2,a3,c4,f4]@6 [a2,a3,c4,e4]@6 ~]/3", // Am Dm7 C F Am
  T: "[[g2,g3,b3,d4]@38 ~@5 [d2,c4,f4,a4]@5]/3", U: "~@2 [e2,c4,e4,g4]@7 [f2,a3,c4,f4]@7",
  V: "[~ [a2,a3,c4,e4]@6 [g2,g3,b3,d4]@23 a2 ~]/2", // Am G
  W: "[e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~ e2@2 [e3,g3,b3,e4] ~ g2@2 [e3,g3,b3,e4] ~ a2@2", // Am Em
  X: "[e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~ e2@2 [e3,g3,b3,d4] ~ g2@2 [e3,g3,b3,d4] ~ a2@2", // Am Em7
  Y: "[e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~ d2@2 [f3,a3,c4] ~ e2@2 [e3,g3,b3,e4] ~ f2@2", // Am F Em
  Z: "[a3,c4,e4] ~@3 [a3,c4,e4] ~ g2@2 [g3,b3,d4] ~@3 [g3,b3,d4] ~ a2 ~", // Am G
  AA: "[[e3,a3,c4,e4] ~@3 [e3,a3,c4,e4] ~ d2@2 [f3,a3,c4] ~ e2@2 [e3,g3,b3,e4] ~ [f1,f3,a3,c4]@24 [g1,g3,b3,d4]@28 [a1,a3,c#4,e4]@60 ~@2]/8", // Am F Em F G A
})).s("gm_piano").gain(0.48)

// chords · synth strings 1 · "tk14"
const synth_strings_1 = note("<~@43 A@7 B C D E F G@2 H I@2 ~@8 J K J L M@4 N@2 O@2 ~@7 P@4 Q@7 R@8 ~>".pickRestart({
  A: "[[a3,e4]@107 ~ [g3,d4]@4]/7", B: "[a3,e4]", C: "[d3,f3] [e3,g3] [f3,a3] [a3,c4]", D: "[g3,b3]@13 ~@3",
  E: "[d3,f3] [e3,g3] f3 c4, ~ a3", F: "[g3,b3]@9 ~@7", G: "[a3,e4]@2 e3 [g3,d4]", H: "[a3,e4]@2 d3 e3", I: "[a3,e4]/2",
  J: "a3@4 g3 ~@3", K: "a3@7 ~ g3@2 ~@6", L: "a3@8 g3 ~@7", M: "[[a3,e4]@15 [g3,d4]]/4", N: "[[a3,e4]@7 [g3,d4]]/2",
  O: "[[a3,e4]@25 ~@7]/2", // A5
  P: "[~@14 a3@8 e3@4 [g3,d4]@4 a3@8 e3@4 [g3,d4]@4 [a3,e4]@8 d3@3 ~ e3@4 [f3,c4]@2, ~@7 e4@6 ~@2 e4@6 ~@11]/4", // G5 A5 F5
  Q: "[~@6 [g3,d4]@8 a3@8 e3@4 [g3,d4]@4 a3@8 e3@4 [g3,d4]@4 [a3,e4]@8 d3@3 ~ e3@3 ~ [f3,c4]@8 [g3,d4]@7 ~ a3@8 e3@4 [g3,d4]@4 a3@8 e3@4 [g3,d4]@4 [a3,e4]@2, ~@7 e4@6 ~@2 e4@6 ~@18 e4@6 ~@2 e4@6 ~@3]/7", // G5 A5 F5 G5 A5
  R: "[~@6 d3@4 e3@4 [f3,c4]@24 [g3,d4]@28 ~ [a2,e3,b3,e4,a4]@61]/8", // F5 G5 Asus2
})).s("gm_synth_strings_1").gain(0.24)

// drums · kick
const kick = s("bd").struct("<~@16 A B@2 C ~ D@10 ~@3 D@24 C ~ D@20 ~@7 E F@11 ~@8>".pickRestart({
  A: "x ~ x!2 ~@4", B: "~@2 x!2 ~@4", C: "x", D: "x!2", E: "~@7 x", F: "~@3 x ~@3 x",
})).gain(0.72)

// drums · clap
const clap = s("cp").struct("<A@15 B A@15 ~@3 A@45 B ~@8 C@11 ~@8>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~ x ~@3 x ~@2",
})).gain(0.64)

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

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

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

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

// drums · tambourine
const tambourine = s("tb").struct("<~@16 [~ x ~ x]!15 ~@3 [~ x ~ x]!45 [~ x ~@2] ~@8 [~ x ~@3 x ~@2]!11 ~@8>")
  .gain(0.64)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@16 A@15 ~@3 B A@3 B A@2 B A@12 C A@2 D B A@20 E ~@7 F A@3 G A@4 H@2 I ~@8
>`.pickRestart({
  A: "x!16", B: "~ x!15", C: "x", D: "x!8 ~ x!7", E: "x!8 ~@8", F: "~@15 x", G: "x!14 ~ x", H: "x!2 ~ x!13",
  I: "x!15 ~",
})).gain(1.22)

// drums · triangle
const triangle = s("triangles:30").struct("<[~@2 x!2 ~@2 x!2]!4 [x!8]!11 [x!4 ~@4] ~@91>").gain(4.18)

// drums · shaker
const shaker = s("sh").struct("<~@16 [~ x ~ x ~ x ~ x]!15 ~@3 [~ x ~ x ~ x ~ x]!45 [~ x ~ x ~@4] ~@8 [x!4]!11 ~@8>")
  .gain(0.56)

stack(
  bass, electric_guitar_clean, harmonica, harmonica_soft, string_ensemble_1, piano, synth_strings_1, kick, clap, snare,
  hihat, open_hat, crash, tambourine, cabasa, triangle, shaker
)

More by Celentano