Strudelify
Une larme aux nuages cover art

1994 · Ses plus belles chansons

Une larme aux nuages

Salvatore Adamo

KeyE majorTempo140 bpm
0:00/0:00
// Une larme aux nuages — Salvatore Adamo
// 140 bpm, 4/4, key E major. 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: Full arrangement: all 112 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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 · fretless bass · "MIKROTRACK"
const bass = note(`<
  ~@2 A B C@2 D@3 E@2 D C A@7 E F D E@5 A@8 E D G@2 H I J@2 K@2 L@2 M@2 L@2 C N E@6 A@8 E A E@6 A O A@6 E N E@6 A@8 E@2
  A@2 E@2 A@2 P@4
>`.pickRestart({
  A: "e2@4 ~@2 e2 ~ e2@4 ~@4", B: "e2@4 ~@2 e2 ~ e2@4 b1@4", C: "e2@4 ~@2 e2 ~ e2@5 ~@3", D: "a1@4 ~@2 a1 ~ a1@5 ~@3",
  E: "a1@4 ~@2 a1 ~ a1@4 ~@4", F: "e2@4 ~@2 e2 ~ e2@6 ~@2", G: "c#2@4 ~@2 c#2 ~ c#2@6 ~@2",
  H: "f#2@4 ~ f#2 ~@2 f#2@6 ~@2", I: "f#2@5 ~ f#2@3 ~ f#2@2 ~@2 f#2@2", J: "c#2@4 ~@2 c#2 ~ c#2@5 ~@3",
  K: "f#2@4 ~@2 f#2 ~ f#2@4 ~@4", L: "d2@4 ~@2 d2 ~ d2@6 ~@2",
  M: "[c#2@4 ~@2 c#2 ~ c#2@6 ~ c#2@4 ~@3 c#2 ~ c#2@5 ~@3]/2", N: "e2@3 ~ d2@4 c#2@4 b1@3 ~",
  O: "e2@4 ~ e2 ~@2 e2@4 ~@4", P: "[a1@49 ~@15]/4",
})).s("gm_fretless_bass").gain(0.22)

// chords · acoustic guitar steel · "MIKROTRACK" · E A5
const acoustic_guitar_steel = note(`<
  ~
  [~@2 a2 ~ g#2 ~ f#2 ~]
  [[b3,e4,g#4]@5 ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~, e2@3 ~]
  [[b3,e4,g#4]@4 a2@2 [b3,e4,g#4]@2 g#2@2 [b3,e4,g#4]@2 f#2@2 [b3,e4,g#4] ~]
  [[b3,e4,g#4]@5 ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~, e2@3 ~]
  [[b3,e4,g#4]@5 ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~]
  [[a3,e4,a4]@3 ~@5]
  ~@105
>`).s("gm_acoustic_guitar_steel").gain(0.2)

// other · string ensemble 2 · "MIKROTRACK"
const string_ensemble_2 = note(`<
  ~@6 A B C@2 D@2 E F@8 G@4 H@2 I@4 J@3 K@2 L@2 M@2 N@2 O@6 P Q@3 R S T@5 U@6 V@5 W@4 X@8 Y@8 Z AA@3 AB@3 AC AD@4 AE@8
  ~@2
>`.pickRestart({
  A: "[a4,a5]@3 [b4,b5]", B: "[c#5,c#6]@11 [d5,d6]@4 ~",
  C: "[[e5,e6]@10 [a5,a6]@5 [d#5,d#6]@4 ~ [e5,e6]@4 [c#5,c#6]@4 [e5,e6]@4]/2", D: "[[a4,a5]@7 ~]/2",
  E: "~@3 [e5,e6]@5 [g#5,g#6]@4 [b5,b6]@4", // E G# B
  F: "[[e6,e7]@8 [d6,d7]@3 [c#6,c#7]@4 [b5,b6]@35 ~@5 [e5,g#5,e6,g#6]@4 [f#5,a5,f#6,a6]@4 [g#5,b5,g#6,b6]@12 [f#5,a5,f#6,a6]@4 [g#5,g#6]@24 ~ [d5,d6]@6 ~ [c#5,e5,c#6,e6]@8 [a5,a6]@3 [d#5,d#6]@2 ~ [e5,e6]@2 ~, ~@79 [e5,e6]@23 ~ [f#5,f#6]@6 ~@19]/8", // E D C# B E F#m G#m F#m …
  G: "[[c5,c6]@2 [c#5,c#6]@2 ~ [e5,e6]@2 ~ [e5,e6]@4 [c#5,c#6]@3 [a4,a5]@40 ~ [a3,a4]@3 [c#4,c#5]@2 [e4,e5]@2 ~]/4", // C C# E C# A C# E
  H: "[[a4,a5]@3 [e4,e5]@2 [a4,a5]@3 [c#5,c#6]@2 [a4,a5]@3 [c#5,c#6]@2 [e5,e6]@16 ~]/2", // A E A C# A C# E
  I: "[[a5,a6]@8 [g#5,g#6]@4 [f#5,f#6]@3 [e5,e6]@28 [f#5,f#6]@4 [g#5,g#6]@12 [a5,a6]@5]/4", // A G# F# E F# G# A
  J: "[[b5,b6]@11 [a5,a6]@4 [g#5,g#6]@28 ~ [f#5,f#6]@4]/3", K: "[e5,e6]/2",
  L: "[[a4,a5]@7 [c#5,c#6]@4 ~ [e5,e6]@3 [a5,a6]@9 ~@8]/2", // A C# E A
  M: "[[c#4,c#5]@4 [f4,f5]@4 [g#4,g#5]@3 [a4,a5]@4 [b4,b5]@4 [d5,d6]@4 ~ [c#5,c#6]@3 [b4,b5]@3 ~@2]/2", // C# F G# A B D C# B
  N: "[[b4,b5]@8 [a4,a5]@21 ~@3]/2", // B A
  O: "[[c#4,c#5]@3 [f4,f5]@4 [g#4,g#5]@4 [a4,a5]@4 [b4,b5]@4 [d5,d6]@4 [c#5,c#6]@4 [b4,b5]@3 ~ [b4,b5]@8 [a4,a5]@20 ~@4 [d4,d5]@3 [f#4,f#5]@2 ~ [a4,a5]@2 ~ [d5,d6]@4 [e5,e6]@3 [f#5,f#6]@8 ~ [e5,e6]@3 [d5,d6]@4 ~]/6", // C# F G# A B D C# B …
  P: "[c#5,c#6]@15 ~", Q: "[[e5,e6]@7 [g#5,g#6]@8 [f#5,f#6]@28 ~@5]/3",
  R: "[e5,e6]@3 [f#5,f#6]@2 [e5,e6]@2 ~ [d5,d6]@2 [e5,e6]@2 ~ [d5,d6]@2 ~", // E F# E D E D
  S: "[c#5,c#6]@2 [d5,d6]@2 [c#5,c#6]@2 ~ [b4,b5]@2 ~ [c#5,c#6]@2 [b4,b5]@3 [a4,a5]", // C# D C# B C# B A
  T: "[a4@11 b4@4 ~ c#6@11 [a4,a5]@4 [e4,e5]@12 [c#4,c#5]@19 ~ [a3,a4]@7 [c#4,c#5]@4 [e4,e5]@4 ~ [a4,a5], ~@15 c#5@12 ~@53]/5", // A E C# A C# E A
  U: "[~@4 [b4,b5]@6 [c#5,c#6]@5 [b4,b5]@12 [a4,a5]@4 [g#4,g#5]@15 ~ [g#4,g#5]@12 [a4,a5]@4 [b4,b5]@8 [g#4,g#5]@4 [f#4,f#5]@4 [e4,e5]@17]/6", // B C# B A G# A B G# …
  V: "[~@7 [e4,g#4,e5,g#5]@4 [f#4,a4,f#5,a5]@4 [g#4,b4,g#5,b5]@12 ~ [a4,c#5,a5,c#6]@3 [d5,d6]@8 [e5,e6]@4 [f#5,f#6]@4 [e5,e6]@8 [c#5,c#6]@19 ~ [c#5,c#6]@5]/5", // E F#m G#m A D E F# E …
  W: "[[a4,a5]@11 [b4,b5]@4 [c#5,c#6]@12 [a4,a5]@4 [e4,e5]@12 ~ [c#4,c#5]@19 ~]/4", // A B C# A E C#
  X: "[[a3,a4]@11 [c#4,c#5]@4 [e4,e5]@6 [a4,a5]@6 [c#5,c#6]@4 [b4,b5]@12 [a4,a5]@4 [g#4,g#5]@15 ~ [e4,g#4,e5,g#5]@12 [f#4,a4,f#5,a5]@4 [g#4,b4,g#5,b5]@12 [a4,c#5,a5,c#6]@4 [b4,d5,b5,d6]@12 [a4,c#5,a5,c#6]@4 [g#4,b4,g#5,b5]@9 [b4,b5]@4 [c#5,c#6]@4]/8", // A C# E A C# B A G# …
  Y: "[[e5,e6]@15 [b4,b5]@12 ~@4 [c#5,c#6]@18 ~@10 [c#5,c#6]@4 [a4,a5]@12 [b4,b5]@4 [c#5,c#6]@12 [a4,a5]@4 [e4,e5]@28 [c#4,c#5]@4 [a4,a5], ~@14 [a4,a5]@11 ~@39]/8", // E B C# A B C# A E …
  Z: "[a4,a5]@10 ~ [b4,b5]@5", AA: "[[c#5,c#6]@5 [d5,d6]@6 [c#5,c#6]@4 [b4,b5]@12 [a4,a5]@4 [g#4,g#5]@15 ~@2]/3",
  AB: "[[g#4,b4,g#5,b5]@12 [a4,c#5,a5,c#6]@3 [b4,d5,b5,d6]@12 [c#5,c#6]@4 [g#4,b4,g#5,b5]@13 [a4,a5]@4, ~@27 [a4,a5]@3 ~@14 [f#4,f#5]@2 ~@2]/3", // G#m A Bm C# G#m A F#
  AC: "[e4,g#4,e5,g#5]@15 ~", // E
  AD: "[[e4,e5]@4 [g#4,g#5]@4 [b4,b5]@3 [d5,d6]@12 [c#5,c#6]@4 [b4,b5]@4 [a4,a5]@19 ~ [b4,b5]@4 [c#5,c#6]@4 [d5,d6]@5]/4", // E G# B D C# B A B …
  AE: "[[e5,e6]@11 [b4,b5]@16 [a4,a5]@3 ~@2 [c#5,c#6]@18 ~@6 [a4,c#5,a5,c#6]@4 [d5,d6]@3 [e5,e6]@12 [b4,b5]@20 [a4,a5]@22 ~@11, ~@31 [a4,a5]@22 ~@75]/8", // E B A C# A D E B …
})).s("gm_string_ensemble_2").gain(0.19)

// drums · kick
const kick = s("bd").struct("<~@2 [x ~@2 x!2 ~@3]!51 [x!6 ~@2] [x ~@2 x!2 ~@3]!54 x ~@3>").gain(0.4)

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

// drums · low tom
const low_tom = s("lt").struct("<~@37 [~@5 x!2 ~] ~@67 [~@6 x!3 ~ x ~@5] ~@6>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<[x!4]!2 [x ~ x!5 ~]!51 [x!4] [x ~ x!5 ~]!54 ~@4>").gain(0.3)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@2 [~@7 x]!51 ~ [~@7 x]!54 ~@4>").gain(0.05)

// drums · mid tom
const mid_tom = s("mt").struct("<~@105 [~ x!2 ~@5] ~@6>").gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<~@53 [x ~@2 x ~@4] ~@51 x ~@6>").gain(0.45)

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

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@2 [~ x ~@3 x ~ x]!106 ~@4>").gain(0.05)

// drums · crash
const crash = s("cr").struct(`<
  ~@6 A ~@14 A@2 ~@15 A ~@7 A ~@6 A@2 ~@14 A@2 ~@7 A ~@7 A ~@13 A B A ~@3 A ~ A ~@3
>`.pickRestart({
  A: "x", B: "~ x ~@6",
})).gain(0.25)

// drums · ride
const ride = s("rd").struct("<~@2 [x!4]!106 ~@4>").gain(0.2)

stack(
  bass, acoustic_guitar_steel, string_ensemble_2, kick, snare, low_tom, hihat, hihat_soft, mid_tom, high_tom,
  tambourine, tambourine_soft, crash, ride
)

More by Salvatore Adamo