Strudelify

Le stesse cose

Celentano

KeyA minorTempo122 bpm
0:00/0:00
// Le stesse cose — Celentano
// 122 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 174 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(122/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 · synth bass 2
const bass = note(`<
  A@28 B C A@2 B C A@12 D E A@2 D E A@2 D E A@2 D E A@2 D E A@2 D E A@2 D E A@2 D E A@2 D E A@2 D E A@2 D E A@30 F E A@2
  F E A@2 D E A@2 D E A@41 G
>`.pickRestart({
  A: "a1!2 e2 a2 a1!2 e2 a2", B: "d1@2 d1!2 d1@2 d1 e1", C: "f1@2 f1!2 g1@2 g1!2", D: "d1@4 d1@2 e1!2", E: "f1 g1",
  F: "d1@4 d1@3 e1", G: "a1!2 e2 a2 a1!2 e2 ~",
})).s("gm_synth_bass_2").gain(0.36)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@28 A B C D E F G ~@11 H I J@2 H I J@2 K L M@2 N O P@2 Q R S@2 T U V@2 W X J@2 Y Z AA@2 Y Z AA@2 K L V@2 AB AC AD@2
  ~@28 AE I J@2 AE I J@2 AF AG V@2 W X J@2 ~@11 AH AI ~@3 AJ AK AL AM AN AK AJ AO AJ AK AJ AO AJ AK AJ AO AJ AP ~@6
>`.pickRestart({
  A: "[d3,a3]@7 [e3,g3]", B: "[f3,a3] [g3,b3]", C: "[a3,c4] ~@5 [a3,c4] ~@7 [g3,b3]@2", D: "[a3,c4] ~@15",
  E: "[d3,a3,f4]@7 [e3,b3,g4]", F: "[f3,c4,a4] [g3,d4,b4]", G: "[a3,e4,c5] ~@15", H: "d2@3 e2", I: "f2 g2", J: "a2/2",
  K: "[d2,a4]@3 [e2,g4]", L: "[f2,a4] [g2,b4]", M: "[a2, c5 ~@31]/2", N: "[d2,d5]@3 e2, ~@6 c5 ~",
  O: "~@2 a4@3 ~@5 g4@4 ~@2, [f2,c6] [g2,b5]", P: "[c6 ~@23 a5 g5 e5 d5 c5 a4 g4 e4, a2]/2", Q: "[d2,d4]@3 [e2,e4]",
  R: "[f2,c4]@4 c4 b3 c4 g4, ~ g2", S: "[a2, e4 ~@31]/2", T: "[d2,d5]@3 [e2,e5]", U: "[f2,b4,f5] [g2,d4,g4,g5]",
  V: "[[e4,a4,c5] ~@31, a2]/2", W: "d2@6 ~ g5, a5@7 ~, ~@3 e2", X: "f5@4 c5@4 b4@3 [g4,a4] ~@4, f2 g2",
  Y: "[d2,a3]@3 [e2,g3]", Z: "[f2,f3,a3] [g2,g3,b3]", AA: "[[e3,a3,c4] ~@31, a2]/2",
  AB: "[d2,d4,d5]@6 [c4,c5] ~, ~@3 e2", AC: "[f2,c5,c6]@2 b4 g4, ~ [g2,b5]", AD: "[[a4,c5,a5] ~@31, a2]/2",
  AE: "d2@7 e2", AF: "[d2,d5]@3 [e2,g4,e5]", AG: "[f2,a4,f5] [g2,b4,g5]", AH: "~@8 b5 g5 e5 d5 c5 b4 a4 g4",
  AI: "e4 ~@15", AJ: "~@4 e4 ~ e4!2 f4@2 e4@2 d4@2 e4 ~", AK: "~@3 e4 ~@2 e4 ~ f4@2 e4@2 d4@2 e4 ~",
  AL: "~@4 e4 ~ e4 ~ f4@2 e4@2 d4@2 e4 ~", AM: "~@3 e4 ~@2 g4 ~ f4@2 e4@2 d4 ~ e4 ~",
  AN: "~@4 e4 ~ e4!2 f4@2 e4 ~ d4 ~ e4 ~", AO: "~@3 e4 ~@2 g4 ~ f4@2 e4@2 d4@2 e4 ~", AP: "~@3 e4 ~@12",
})).s("gm_string_ensemble_1").gain(0.3)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft = note(`<
  ~@167
  [~@6 e4 ~ f4@2 e4@2 d4@2 e4 ~]
  [~@4 e4 ~ e4!2 f4@2 e4@2 d4@2 e4 ~]
  [~@3 e4 ~@2 g4 ~ f4@2 e4@2 d4@2 e4 ~]
  [~@4 e4 ~ e4!2 f4@2 e4@2 d4@2 e4 ~]
  [~@3 e4 ~@2 e4 ~ f4@2 e4@2 d4@2 e4 ~]
  [~@4 e4 ~ e4!2 f4@2 e4@2 d4@2 e4 ~]
  [~@3 e4 ~@2 g4 ~@9]
>`).s("gm_string_ensemble_1").gain(0.1)

// other · percussive organ
const percussive_organ = note(`<
  A@28 B C A@2 B C A@12 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@30 B C A@2
  B C A@2 B C A@2 B C A@41 D
>`.pickRestart({
  A: "a2!2 a3!2 e3!2 a3!2 a2!2 a3!2 e3!2 a3!2", B: "d3!2 a3!2 d3!2 a3!2 d3!2 a3!2 d3!2 a3!2",
  C: "f3!2 a3!2 f3!2 a3!2 g3!2 a3!2 g3!2 a3!2", D: "a2!2 a3!2 ~@12",
})).s("gm_percussive_organ").gain(0.22)

// other · distortion guitar
const distortion_guitar = note(`<
  A B ~@2 A@4 C@2 D ~@4 E F@2 G H ~@8 I J K@2 I J L@2 M ~@4 N ~@3 O P Q R@2 P Q S@2 P Q S@2 P Q S@2 P Q S@2 P Q S@2 P Q
  S@2 P Q S@2 P Q S@2 P Q S@2 P Q S@2 ~@28 T Q R@2 T Q R@2 P Q S@2 P Q S@2 ~@3 E F@2 G H ~@32
>`.pickRestart({
  A: "~ a2@2 ~ a2@2 ~@3 a2@2 ~@5", B: "~ a2@2 ~@6 a2@2 ~@5", C: "a2@2 ~ a2@2 a2@2 ~ a2@2 ~@3 a2@2 ~",
  D: "a2@2 ~ a2@2 a2@2 ~ a2@2 ~@6", E: "~ [a2,e3,a3]", F: "[a2,a3]!16",
  G: "[a2,a3] ~ [a2,a3] ~ [a2,a3] ~ [a2,a3] ~ [a2,a3] ~@7", H: "~@15 [a2,a3]", I: "[d2,d3]!16",
  J: "[f2,f3]!8 [g2,g3]!8", K: "[[a2,e3,a3]@7 ~]/2",
  L: "[~ a4 ~@2 a4 ~ a4@2 ~ a4 ~@2 a4@2 a4 ~@2 a4 ~@2 a4 ~ a4 ~@2 a4 ~@2 a4@2 ~@2, [a2,e3,a3]@7 ~]/2", // A5
  M: "~ a4 ~@2 a4@2 a4 ~@2 a4 ~@2 a4 ~ a4 ~", N: "~@8 [a3,f4]@3 [a3,e4] ~@4",
  O: "a3 ~@2 a3 ~ e4 ~@2 [a3,f4]@3 [a3,e4] ~@4", P: "[d2,a2,d3]@3 [e2,e3]", Q: "[f2,c3,f3] [g2,d3,g3]",
  R: "[[e3,a3]@15 ~, a2 ~@3]/2", S: "[[e3,a3], a2 ~@3]/2", T: "[d2,a2,d3]@7 [e2,e3]",
})).s("gm_distortion_guitar").gain(0.16)

// other · distortion guitar · soft notes
const distortion_guitar_soft = note("<A B ~@2 A@4 C@2 D ~@7 E F ~@120 E F ~@32>".pickRestart({
  A: "~@6 a2 ~", B: "~@2 a2 ~@3 a2 ~", C: "~@11 a2@2 ~@3", D: "~@11 a2@2 a2@2 ~",
  E: "~ [a2,a3] ~ [a2,a3] ~ [a2,a3] ~ [a2,a3] ~ [a2,a3]!7", F: "[a2,a3]!9 ~@7",
})).s("gm_distortion_guitar").gain(0.06)

// chords · pad sweep
const pad_sweep = note(`<
  ~@2 A@3 ~ B@8 C@2 ~@2 D@8 E@2 ~@6 F@2 ~@5 G ~@3 H ~@3 I@3 J ~@30 K@2 H ~@3 H ~@3 L@5 ~@40 M@4 ~@32
>`.pickRestart({
  A: "[~ [c4,e4]@9 ~@2]/3", B: "[~@14 g5@14 a4@10 b4@25 ~, ~ b5@6 ~@9]/8", C: "a1/2",
  D: "[~@11 e4@7 d4@9 a4@8 d4@29, a2@9 ~@23]/8", E: "[~ a3@2 [e4,a4]]/2", F: "[~ [c5,e5]@2 ~]/2", G: "e5", H: "[c5,e5]",
  I: "[a4@5 b4]/3", J: "a4", K: "[~@4 [c5,e5]@11 ~]/2", L: "[c5,e5]/5", M: "e4/4",
})).s("gm_pad_sweep").gain(0.32)

// chords · pad warm
const pad_warm = note(`<
  A@2 B@8 C@4 D@5 E@5 F@4 ~@2 G ~@3 H@5 I@6 G ~@43 J@7 A@2 ~@36 A@2 K@6 ~@6 L@2 ~@24
>`.pickRestart({
  A: "a2/2", B: "[[a3,c4]@5 ~@3 a2@8, a2 ~, ~@5 e6@5 ~@6]/8", C: "a2/4", D: "[a2@31 a2@49]/5",
  E: "[~@10 d4@9 a4@8 d4@8 ~@5, ~@3 e4@7 ~@30, ~@3 a2@17]/5", F: "[~@7 e4, a2, ~@5 a3@3, ~@55 a4@4 ~@5]/4", G: "a2",
  H: "[~@11 a4@14 g4@11 ~@4, a2]/5", I: "a2/3", J: "[a2@17 a2@11]/7", K: "[a2@31 ~@55 e4@10, ~@31 a2@65]/6", L: "g4/2",
})).s("gm_pad_warm").gain(0.32)

// other · overdriven guitar
const overdriven_guitar = note(`<
  A@5 ~@32 B@2 ~@59 C D@5 E F G H I@2 J K L@2 M N O P Q R@2 S T U V@2 ~@6 W X Y@2 Z@2 ~@4 AA D@2 AB D@3 AB AA AC@2 AD AE
  AF AE AG AH AI AJ AK AL AM AN AO AP@2 ~@6
>`.pickRestart({
  A: "[~@7 a4@33]/5", B: "a4/2", C: "~@4 e4 ~ e4 ~ f4@3 e4 ~@4", D: "~@4 e4 ~ e4 ~ f4@3 e4 f4@2 e4 ~",
  E: "~@4 e4 ~ e4!2 f4@3 e4 f4@2 e4 ~", F: "~@4 e4 ~ g4 ~ f4@3 e4 f4@2 a4@2", G: "e5@2 e5!2 e5@4",
  H: "e5@8 d5@3 e5@3 f5@2", I: "[e5@3 a4@13]/2", J: "~@2 [e4,e5]@3 [f4,f5]@3 [g4,g5]@4 [a4,a5]@4",
  K: "[e4,e5]@8 [d4,d5]@3 [c4,c5]@3 [b3,b4]@2", L: "[[e3,e4]@22 [d3,d4]@5 [a3,a4]@3 [e4,e5]@2]/2",
  M: "[e4,e5]@3 [e4,e5]@3 [f4,f5]@2 [e4,e5] [f4,f5] [e4,e5] [d4,d5] [e4,e5] [f4,f5] [e4,e5] [f4,g#4,f5,g#5]", // E F E F E D E F …
  N: "[e4,f4,e5,f5] [d4,g#4,d5,g#5] [e4,f4,e5,f5]!2 [d4,e4,d5,e5] [f4,g#4,f5,g#5] [e4,e5] [d4,e4,d5,e5] [e4,f4,e5,f5] [d4,g#4,d5,g#5] [e4,f4,e5,f5] [d4,g#4,d5,g#5] [e4,f4,e5,f5] [d4,g#4,d5,g#5] [e4,f4,e5,f5] [d4,g#4,d5,g#5]", // Fmaj7 Ddim Fmaj7 Dsus2 Fm E Dsus2 Fmaj7 …
  O: "[d4,f4,d5,f5]@2 [e4,e5]@9 e5 c6 a5 e5 c6", P: "a5 e5 c6 a5 e5 c6 a5 e5 c6 a5 e5 c6 a5 e5 c6 a5",
  Q: "f5 c6 a5 f5 b5 f5 b5 c6 b5 f5 c6 a5 f5 c6 a5 f5",
  R: "[c6 a5 e5 c6 a5 e5 c6 a5 f5 c6 a5 f5 c6@6 c6 b5 a5 b5 a5 g5 a5 g5@5 g5 e5]/2",
  S: "g5 e5 d5 e5 c5 d5 e5 d#5@2 d5 c5 a4@5", T: "d4", U: "f4 d4", V: "[d4@3 g4]/2", W: "~@6 a4 ~ g4 ~@2 g4 ~@4",
  X: "~@8 g4@3 g4 ~@4", Y: "[a3@3 g3]/2", Z: "e3/2", AA: "~@4 e4 ~ e4 ~ f4@3 e4 ~@2 e4 ~",
  AB: "~@4 e4 ~ g4 ~ f4@3 e4 f4@2 e4 f4", AC: "~@4 e4 ~ e4 ~ f4@3 e4 d4@2 e4 ~", AD: "~@4 e4 ~ g4 ~ f4@3 e4 d4@2 e4 ~",
  AE: "~@4 e4 ~ e4!2 f4@3 e4 d4@2 e4 ~", AF: "~@3 e4!2 ~ e4 ~ f4@3 e4 d4@2 e4 ~",
  AG: "~ g#5@2 a5 g5@2 a5 g5@2 a5 g5@2 a5 g5@2 a5", AH: "g5@2 a5 g5@2 a5 g5@2 a5 g5@2 a5@2 g5 e5 d#5",
  AI: "~ d5!2 c5 d5 c5 a4 g4 f4 a4 g4 e4 d4@2 e4 d4", AJ: "c4@3 e4 g4@8 ~@4", AK: "c5!2", AL: "a4!2", AM: "g4 f4",
  AN: "e4 d4", AO: "c4 b3", AP: "a3@2 a3 a3@2 a3 a3@2",
})).s("gm_overdriven_guitar").gain(0.28)

// other · overdriven guitar · soft notes
const overdriven_guitar_soft = note(`<
  ~@98 A ~ B C D ~@2 B ~@38 B@2 D ~ B@2 ~@2 B@2 D ~ B ~@11 E F G H ~@2
>`.pickRestart({
  A: "~@14 e4 ~", B: "~ e4 ~@14", C: "~ e4 ~@13 f4", D: "e4 ~ e4 ~@13",
  E: "~@2 e3 f3 e3 d3 e3 f3 e3 d3 e3 d3 e3 f3 e3 d3", F: "e3 f3 e3 d3 e3 f3 e3 d3 e3 f3 e3 d3 e3 f3 e3 d3",
  G: "e3 f3 e3 d3 e3@12", H: "[a2,e3,a3]@3 ~",
})).s("gm_overdriven_guitar").gain(0.16)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@38 A@8 B C A@2 B C A@2 B C A@2 B C A@2 B C D E B C F E B C A@2 B C A@2 B C A@2 B C A@2 B C A@30 B C A@2 B C A@2 B C
  F E B C A@2 ~@8 A@31 G
>`.pickRestart({
  A: "a2!12 [a2,d4] a2 [a2,a4] [a2,d4]", B: "d3!16", C: "f2!8 g2!8",
  D: "a2!8 [a2,g4] a2 [a2,c5] [a2,g4] a2!2 [a2,g4] [a2,d4]", // A7 Am A7 D5
  E: "a2 [a2,g4] [a2,d4] a2!5 [a2,g4] a2!2 [a2,g4] [a2,d4] a2 [a2,g4] [a2,d4]", // A7 D5 A7 D5 A7 D5
  F: "a2!8 [a2,g4] a2!2 [a2,g4] [a2,d4] a2 [a2,g4] [a2,d4]", G: "a2!3 ~ a2 ~ a2 ~ a2 ~@3 a2 ~@3",
})).s("gm_electric_guitar_muted").gain(0.3)

// other · lead 8 bass lead
const lead_8_bass_lead = note(`<
  ~@48
  [a3@2 ~ a3 ~@2 a3 ~ a3 ~@2 a3 ~@4]
  ~@3
  [~@4 a3@2 ~ a3 ~@2 a3 ~ a3@2 ~ a3]
  [~@2 a3 ~ a3@2 ~ a3 ~@2 a3 ~ a3 ~@2 a3]
  ~@2
  [~@2 a3 ~ a3@2 ~ a3 ~@2 a3 ~ a3@2 ~ a3]!2
  ~@116
>`).s("gm_lead_8_bass_lead").gain(0.28)

// other · guitar harmonics
const guitar_harmonics = note(`<
  ~@14 A@3 ~@4 B@2 ~ C@2 ~@5 D ~@14 E@2 ~@2 E@2 ~@3 F@3 ~@2 G@2 ~@2 H@2 ~@3 I ~@2 J@2 ~@3 K@2 ~@2 I ~@92
>`.pickRestart({
  A: "[~ b3@3]/3", B: "[~@3 a3@13]/2", C: "[~@3 d4@5]/2", D: "c4", E: "[d4@3 ~]/2", F: "[~ c4@5]/3", G: "[~@3 e3@5]/2",
  H: "[~@3 b3@5]/2", I: "a3", J: "[~ a3@7]/2", K: "[~ d4@6 ~]/2",
})).s("gm_guitar_harmonics").gain(0.32)

// drums · kick
const kick = s("bd").struct("<~@38 [x!4]!96 x ~@7 [x!4]!31 [x!3 ~]>").gain(0.44)

// drums · snare
const snare = s("sd").struct("<~@38 [~ x ~ x]!96 ~@7 [~@8 x!8] [~ x ~ x]!31 [~ x ~@2]>").gain(0.38)

// drums · clap
const clap = s("cp").struct("<~@38 [~ x ~ x]!96 ~@8 [~ x ~ x]!31 [~ x ~@2]>").gain(0.33)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@38
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!96
  ~@8
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!30
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x ~@3]
  x
>`).gain(0.22)

// drums · open hat
const open_hat = s("oh").struct("<~@38 [~ x ~ x ~ x ~ x]!96 ~@8 [~ x ~ x ~ x ~ x]!31 ~>").gain(0.27)

// drums · tambourine
const tambourine = s("tb").struct("<~@38 [x!16]!96 ~@8 [x!16]!29 [x!5 ~ x!7 ~ x ~] [x!4 ~ x ~ x] [~ x ~@6]>").gain(0.16)

stack(
  bass, string_ensemble_1, string_ensemble_1_soft, percussive_organ, distortion_guitar, distortion_guitar_soft,
  pad_sweep, pad_warm, overdriven_guitar, overdriven_guitar_soft, electric_guitar_muted, lead_8_bass_lead,
  guitar_harmonics, kick, snare, clap, hihat, open_hat, tambourine
)

More by Celentano