Strudelify
Straordinariamente cover art

1969 · Le Robe Che Ha Detto Adriano

Straordinariamente

Celentano

KeyG majorTempo78 bpm
0:00/0:00
// Straordinariamente — Celentano
// 78 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 77 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(78/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.

// bass · electric bass finger
const bass = note(`<
  ~ A@2 B A C D E F G H I J K L M N O P Q R S T U L V S E F G H I J K L M N O P Q R S T U W C W X Y V S Z F G H AA AB K
  L M N O P Q R S T U W C W X Y AC AD@2 ~
>`.pickRestart({
  A: "g2@8 ~@2 d3@5 ~ d3 ~ d3@4 ~@2", B: "g2@9 ~ d3@5 ~ d3 ~ d3@4 ~@2", C: "g2@9 ~ d2@2 g1@12",
  D: "g2@6 d2@6 g2@6 d2@5 ~", E: "f#2@9 ~ c#2 ~ f#2@6 c#2@6", F: "f#2@10 c#2@2 f#2@5 ~ f#2@5 ~",
  G: "a2@9 ~ e2 ~ a1@10 e2@2", H: "a2@10 e2 ~ a1@10 c2@2", I: "b1@9 ~ b1@2 e2@9 ~ e2@2",
  J: "b1@9 ~ b1@2 e2@8 b2@2 a#2 ~", K: "a2@4 d2@2 e2@5 ~ a1@8 c2 ~ c#2 ~", L: "d2@9 ~ a1@2 d2@5 ~ d2@4 ~@2",
  M: "g2@10 d2 ~ g1@8 d2 ~ c2@2", N: "b1@9 ~ b1 ~ e2@5 ~ e2@4 ~@2", O: "a2@4 d2 ~ e2@6 a2@5 ~ a2@5 ~",
  P: "a1@8 ~@2 a1 ~ e2@9 ~ e2 ~", Q: "d#2@9 ~ a#1 ~ d#2@5 ~ a#1@5 ~", R: "d#2@9 ~ a#1 ~ d#2@7 ~ f2@2 f#2@2",
  S: "g2@9 ~ d2@2 g2@5 ~ g2@4 ~@2", T: "d2@9 ~ d2 ~ e2@7 ~ b1@2 a#1@2", U: "a2@8 d2@2 e2 ~ a1@10 ~@2",
  V: "g2@9 ~ d2@2 g1@6 d2@5 ~", W: "d#2@9 ~ a#1@2 d#2@5 ~ d#2@5 ~", X: "g2@9 ~ d2 ~ g2@6 d2@6",
  Y: "a2@10 d2@2 a2@5 ~ d2@5 ~", Z: "c#2@4 ~@6 g#1@2 c#2@5 ~ g#1@5 ~", AA: "b1@9 ~ b1@2 f#2@9 ~ f#2@2",
  AB: "e2@9 ~ e2 ~ e2@8 b2@2 a#2 ~", AC: "g2@3 ~ g2 ~ g2@3 ~ c2@4 ~@2 f2@4 ~@4",
  AD: "[g2@3 ~@3 g#2@3 ~ g2@5 ~@3 g#1@3 ~ g1@24 ~@2]/2",
})).s("gm_electric_bass_finger").gain(0.45)

// chords · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~@5 A@2 B C D E F@2 G H I J K L M N A O P Q A@2 B C D E F@2 G H I J K L M N A O R S T U V R W X Y Z G R AA AB G H I J
  K L M N A O R S T U V R ~@4
>`.pickRestart({
  A: "[g3,b3,d4,f#4]@5 ~ [b3,d4,f#4] ~@5 [g3,b3,d4,f#4]@5 ~ [b3,d4,f#4] ~@5", // Gmaj7 Bm Gmaj7 Bm
  B: "[f#3,a#3,e4]@5 ~ [f#3,a#3,e4] ~@5 [f#3,b3,e4]@5 ~ [f#3,b3,e4] ~@5", // F#7 Esus2
  C: "[f#3,c4,e4]@5 ~ [f#3,c4,e4] ~@5 [f#3,c#4,e4]@5 ~ [f#3,c#4,e4] ~@5", // F#m7b5 F#7
  D: "[a3,c4,e4]@5 ~ [a3,c4,e4] ~@5 [g#3,c4,e4]@4 ~@2 [g#3,c4,e4] ~@5", // Am G#aug
  E: "[g3,c4,e4]@4 ~@2 [g3,c4,e4] ~@5 [f#3,c4,e4]@5 ~ [f#3,c4,e4] ~@5", // C F#m7b5
  F: "[b3,d4,f#4]@5 ~ [b3,d4,f#4] ~@5 [g#3,b3,e4]@5 ~ [g#3,b3,e4] ~@5", // Bm E
  G: "[a3,c4,e4]@5 ~ [a3,c4,e4] ~@5 [a3,c4,e4]@5 ~ [a3,c4,e4] ~@5", // Am
  H: "[f#3,c4,e4]@5 ~ [f#3,c4,e4] ~@5 [f#3,c4,e4]@5 ~ [f#3,c4,e4] ~@5", // F#m7b5
  I: "[g3,d4,f#4]@5 ~ [g3,d4,f#4] ~@5 [g3,d4,f#4]@5 ~ [g3,d4,f#4] ~@5", // Gmaj7
  J: "[a3,d4,f#4]@5 ~ [a3,d4,f#4] ~@5 [g#3,d4,f#4]@4 ~@2 [g#3,d4,f#4] ~@5", // D G#m7b5
  K: "[a3,c#4,g4]@5 ~ [a3,c#4,g4] ~@5 [a3,c#4,g4]@5 ~ [a3,c#4,g4] ~@5", // A7
  L: "[a3,d4,g4]@5 ~ [a3,d4,g4] ~@5 [a3,c#4,g4]@5 ~ [a3,c#4,g4] ~@5", // Dsus4 A7
  M: "[a#3,d#4,g4]@5 ~ [a#3,d#4,g4] ~@5 [a#3,d#4,g4]@5 ~ [a#3,d#4,g4] ~@5", // D#
  N: "[a#3,d4,g4]@5 ~ [a#3,d4,g4] ~@5 [a#3,c4,g4]@5 ~ [a#3,g4] ~@5", // Gm C7 D#
  O: "[a3,c4,f4]@5 ~ [a3,c4,f4] ~@5 [g#3,b3,e4]@5 ~ [g#3,b3,e4] ~@5", // F E
  P: "[a3,c4,e4,g4]@5 ~ [c4,e4,g4] ~@5 [a3,c4,e4,g4]@6 [c4,e4,g4] ~@5", // Am7 C Am7 C
  Q: "[a3,d4,g4]@5 ~ [a3,d4,g4] ~@5 [a3,d4,f#4]@5 ~ [d4,f#4] ~@5", // Dsus4 D
  R: "[a3,c4,g4]@5 ~ [a3,c4,g4] ~@5 [a3,c4,g4]@5 ~ [a3,c4,g4] ~@5", // Am7
  S: "[a#3,d4,g4]@5 ~ [d4,g4] ~@5 [a#3,d4,g4]@5 ~ [a#3,d4,g4] ~@5", // Gm G5 Gm
  T: "[g3,d4,f#4]@5 ~ f#4 ~@5 [g3,d4,f#4]@5 ~ [g3,d4,f#4] ~@5", // Gmaj7
  U: "[a#3,d4,g4]@5 ~ [a#3,d4,g4] ~@5 [a#3,d4,g4]@5 ~ [a#3,d4,g4] ~@5", // Gm
  V: "[g3,d4,f#4]@5 ~ [d4,f#4] ~@5 [g3,d4,f#4]@4 ~@2 [g3,d4,f#4] ~@5", // Gmaj7 D Gmaj7
  W: "[g3,b3,e4]@5 ~ [g3,b3,e4] ~@5 [g3,b3,e4]@5 ~ [b3,e4] ~@5", // Em E5
  X: "[g3,b3,e4]@5 ~ [g3,b3,e4] ~@5 [g3,b3,e4]@5 ~ [g3,b3,e4] ~@5", // Em
  Y: "[g#3,c#4,f#4]@5 ~ [g#3,c#4,f#4] ~@5 [g#3,c#4,f#4]@5 ~ [g#3,c#4,f#4] ~@5", // C#sus4
  Z: "[a#3,c#4,f#4]@5 ~ [a#3,c#4,f#4] ~@5 [a#3,c#4,f#4]@5 ~ [a#3,c#4,f#4] ~@5", // F#
  AA: "[b3,d4,f#4]@5 ~ [b3,d4,f#4] ~@5 [b3,d4,f#4]@5 ~ [b3,d4,f#4] ~@5", // Bm
  AB: "[b3,e4,g#4]@5 ~ [b3,e4,g#4] ~@5 [b3,e4,g#4]@5 ~ [b3,e4,g#4]@2 ~@4", // E
})).s("gm_electric_guitar_jazz").gain(0.32)

// other · trombone
const trombone = note(`<
  A B@2 C D E F G H I@2 J ~@15 K ~@3 L M ~@2 N O ~ P ~@5 Q R S ~@2 T U V@2 W X Y@2 ~@2 P@2 ~ P ~@5 Q R S ~@2 Z AA@2 ~
>`.pickRestart({
  A: "~@16 d3@2 d3@3 ~@3", B: "g2@3 ~@13 d3@2 d3@2 ~@4", C: "g2 ~@7 d3!2 ~@2", D: "g2@2 ~@14 d3 ~ d3@2 ~@4",
  E: "g2 ~@8 d3 ~@2", F: "g2@2 ~@20 c#3 ~", G: "f#2@2 ~@20 c#3 ~", H: "f#2@2 ~@20 e3 ~", I: "a2@2 ~@20 e3 ~",
  J: "b2@2 ~@4 b2@2 ~@2 e2@3 ~@11", K: "f#3@3 ~ f#3 ~ f#3 ~@5 f3@5 ~ f#3 ~@5", L: "~@6 e4 ~@2 e4 ~@2",
  M: "e4@3 ~ e4 ~ e4 ~@3 e4 ~ e4@3 ~ e4 ~@5 e4@2", N: "~@5 [f#3,b3] ~@6", O: "~@5 [e3,b3] ~@6", P: "~@10 [e3,b3] ~@13",
  Q: "~@6 d4 c#4 ~ c4 ~ d4 ~@2 c#4 ~@2 c4@5 ~@2", R: "~@6 f#3 ~ f3 ~ e3@9 ~@5",
  S: "~@6 d4 ~ c#4 ~ c4 ~ d4 ~@2 c#4 ~@2 c4@4 ~@2", T: "~@9 b3 d4 g4", U: "a4@2 c5 b4 a4 g4 f#4 e4",
  V: "[f#4@2 ~ f#4 ~@14 b3@3 ~ a#3@15 ~@5 g#3@6]/2", W: "g3@6 a3 c4", X: "g4@5 ~ g4@5 ~ e4@6 c4@6",
  Y: "[f#4@6 ~@3 d4@2 e4@10 ~@3]/2", Z: "g3@3 ~ g3 ~ g3@3 ~ c3@3 ~@3 f3@2 ~@6",
  AA: "[[d3,g3]@2 ~@16 d#4@3 ~ d4@23 ~@3]/2", // G5
})).s("gm_trombone").gain(0.48)

// other · bagpipe
const bagpipe = note("<~ A@4 ~@20 B ~ C ~@3 D E ~@11 F G H ~@21 F G H ~@2 I J@2 ~>".pickRestart({
  A: "~@3 a5@2 b5@7", B: "~@10 e5 ~@13", C: "f#5@2 ~@2 f#5 ~ f#5 ~@5 f5@5 ~ f#5@2 ~@4", D: "~@6 e6 ~@2 e6 ~@2",
  E: "e6@3 ~ e6 ~ e6@2 ~@2 e6@2 e6@3 ~ e6 ~@5 c6@2", F: "a#5@7 ~", G: "b5@5 ~@3", H: "a#5@11 ~",
  I: "g5@3 ~ a#5 ~ b5@2 ~@2 d6@3 ~@3 c6@3 ~@5", J: "[g6@2 ~@4 a#5@3 ~ a5@3 ~@5 a#6@3 ~ g6@22 ~@4]/2",
})).s("gm_bagpipe").gain(0.61)

// other · baritone sax
const baritone_sax = note("<~ A@4 ~@39 B C B ~ D E F G@2 H I J@2 ~@11 B C B ~@3 K@2 ~>".pickRestart({
  A: "~@3 b2@2 c3@7", B: "d#2", C: "g2@13 ~@11", D: "~@23 e2", E: "e3@9 g3 b3 d4, b2 ~@23", F: "g4 ~@3",
  G: "[c#3@2 ~ c#3 ~@14 e3@3 c#3@14 ~@7 f3@6]/2", H: "e3@6 c3 e3", I: "b3@6 a3@6 c3@6 d3@5 ~",
  J: "[b2@6 ~@3 b2@2 e2@10 ~@3]/2", K: "[~@6 a#3@4 a3@5 ~@3 g#3@3 ~ g3@23 ~@3]/2",
})).s("gm_baritone_sax").gain(0.4).pan(0.3)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@5 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 I J K@2 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 I J L M N M N O ~@2 P@2 ~@2 Q@2 E@2 F@2
  G@2 H@2 I J L M R M R S ~@4
>`.pickRestart({
  A: "[g3,d4,f#4,b4]/2", B: "[a#3@11 ~ b3@12 c4@12 c#4@12, [f#3,f#4]]/2",
  C: "[[a3,a4] [g#3,g#4] g4 e4, c4, e4 [a3,c5]]/2", D: "[[b3,f#4]@2 [e3,g#4]@2 [b3,a4]@2 a#4 b4, d4, ~@3 e3]/2",
  E: "[c4@2 d3 [f#3,f#4], a3, g4@3 ~]/2", F: "[[g3,b3]@2 a3 [g#3,b3], d4@3 ~, ~ f#4]/2",
  G: "[[a3,c#4]@23 ~ d4@12 c#4@12, [g4,b4], ~@23 a3@25]/2", H: "[d#3,a#3,d4,g4,a#4]/2", I: "[g3,d4,g4,b4]",
  J: "[d3,d4,f4,a4] [e3,d4,g#4,b4]", K: "[e4@2 ~ f#4, c5, g4@3 ~, ~@24 d4@23 ~]/2", L: "[e4,g4,c5]",
  M: "[d#4,f4,a#4]@23 ~", N: "[d4,g4,b4]@23 ~", O: "g4 f#4, [d3,d4]", P: "[f#5@15 ~]/2",
  Q: "[[e5,b5]@24 [d#5,a#5]@12 [e5,b5]@11 ~, b4]/2", R: "[d4,f#4,b4]@23 ~", S: "e3 d3, [a3,d4]",
})).s("gm_string_ensemble_1").gain(0.19)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@5 A@3 B A@3 B A B A B A B A B A@3 B A@6 ~@2 A B ~@2 A ~ A B A@2 B ~ A B A C A B A B A B A B A B ~@2 A ~ A B A@2 B ~
  A@3 C ~ D ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@3 x ~@4 x ~@3", D: "~@2 x",
})).gain(0.56)

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

// drums · clap · soft notes
const clap_soft = s("cp").struct(`<
  ~@3 A@2 ~@3 B ~@3 B ~ B ~ B ~@3 B ~@3 B ~@5 C D B ~ B ~ B ~@3 B ~@17 B ~ B ~@3 B ~@10 E ~
>`.pickRestart({
  A: "~ x ~@4", B: "~@2 x", C: "~@11 x", D: "~@5 x ~@18", E: "~@2 x ~@8 x ~@12",
})).gain(0.24)

// drums · low tom
const low_tom = s("lt").struct("<~@18 A ~@27 A ~@20 B ~@6 C A ~>".pickRestart({
  A: "~@3 x", B: "~@11 x", C: "~ x ~@2",
})).gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<~@68 [~@5 x] ~@5 [~@3 x!3 ~@18] [~@17 x ~@6] ~>").gain(0.48)

// drums · crash
const crash = s("cr").struct("<~ A ~ A ~@21 B ~@5 C D ~@10 B ~ A@2 ~@21 A@3 ~@2 E F G ~>".pickRestart({
  A: "x", B: "~@5 x ~@6", C: "~@2 x!2", D: "x ~@2 x ~@5 x ~ x", E: "x ~@4 x ~@2 x ~@3", F: "x ~@2 x ~ x ~@3 x ~ x",
  G: "~@5 x",
})).gain(0.56)

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

// drums · ride · soft notes
const ride_soft = s("rd").struct(`<
  ~@2 A B@3 C@2 ~ B C@2 ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ B C@2 ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ B C@2 ~ B C@2 ~ C ~ C
  ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~@3
>`.pickRestart({
  A: "~@2 x ~@8 x", B: "~@2 x", C: "~@11 x",
})).gain(0.24)

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

stack(
  bass, electric_guitar_jazz, trombone, bagpipe, baritone_sax, string_ensemble_1, kick, snare, clap, clap_soft, low_tom,
  mid_tom, crash, ride, ride_soft, tambourine
)

More by Celentano