Strudelify

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: edit a riff to change every repeat.

// bass · fretless bass · "MIKROTRACK"
const bass = note(`<
  ~@2 A B C@2 D E@2 D F E C A@2 G@2 H G A F I E F D F@3 H G@7 F D J K L M N@2 O@2 P Q R@2 S P T U F@4 V F G W G@6 F G F
  V F@4 G W G@6 D X F@6 G@8 F@2 G@2 F@2 G@2 Y@4
>`.pickRestart({
  A: "e2@4 ~@2 e2 ~ e2@5 ~@3", B: "e2@4 ~@2 e2 ~ e2@4 b1@4", C: "e2@4 ~@2 e2 ~ e2@6 ~@2", D: "a1@4 ~@2 a1 ~ a1@5 ~@3",
  E: "a1@4 ~@2 a1 ~ a1@6 ~@2", F: "a1@4 ~@2 a1 ~ a1@4 ~@4", G: "e2@4 ~@2 e2 ~ e2@4 ~@4", H: "e2@5 ~ e2 ~ e2@4 ~@4",
  I: "e2@4 ~@2 e2 ~ e2@7 ~", J: "c#2@4 ~@2 c#2 ~ c#2@6 ~@2", K: "c#2@5 ~ c#2 ~ c#2@6 ~@2",
  L: "f#2@4 ~ f#2 ~@2 f#2@6 ~@2", M: "f#2@5 ~ f#2@3 ~ f#2@2 ~@2 f#2@2", N: "c#2@4 ~@2 c#2 ~ c#2@5 ~@3",
  O: "f#2@4 ~@2 f#2 ~ f#2@4 ~@4", P: "d2@4 ~@2 d2 ~ d2@6 ~@2", Q: "d2@4 ~@2 d2 ~ d2@7 ~",
  R: "[c#2@4 ~@2 c#2 ~ c#2@6 ~ c#2@4 ~@3 c#2 ~ c#2@5 ~@3]/2", S: "d2@5 ~ d2 ~ d2@6 ~@2", T: "e2@5 ~ e2 ~ e2@6 ~@2",
  U: "e2@3 ~ d2@4 c#2@4 b1@3 ~", V: "a1@4 ~ a1 ~@2 a1@4 ~@4", W: "e2@4 ~ e2 ~@2 e2@4 ~@4",
  X: "e2@4 d2@3 ~ c#2@3 ~ b1@3 ~", Y: "[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]@2 ~@2 [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@2 B@2 C@2 D E@8 F@4 G@2 H@4 I@3 J@2 K@2 L@2 M@2 N@6 O@4 P Q R@5 S@6 T@5 U@4 V@8 W@8 X Y@3 Z@4 AA@4 AB@8 ~@2
>`.pickRestart({
  A: "[[a4,a5]@12 [b4,b5]@3 [c#5,c#6]@12 [d5,d6]@4 ~]/2", // A B C# D
  B: "[[e5,e6]@10 [a5,a6]@5 [d#5,d#6]@4 [e5,e6]@4 ~ [c#5,c#6]@4 [e5,e6]@4]/2", C: "[[a4,a5]@7 ~]/2",
  D: "~@3 [e5,e6]@5 [g#5,g#6]@4 [b5,b6]@4", // E G# B
  E: "[[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,f#5,d6,f#6]@6 ~@2 [c#5,e5,c#6,e6]@8 [a5,a6]@3 [d#5,d#6]@2 ~ [e5,e6]@2 ~, ~@79 [e5,e6]@23 ~@26]/8", // E D C# B E F#m G#m F#m …
  F: "[[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
  G: "[[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
  H: "[[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
  I: "[[b5,b6]@11 [a5,a6]@4 [g#5,g#6]@28 ~ [f#5,f#6]@4]/3", J: "[e5,e6]/2",
  K: "[[a4,a5]@7 [c#5,c#6]@4 ~ [e5,e6]@3 [a5,a6]@9 ~@8]/2", // A C# E A
  L: "[[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]@4 [b4,b5]@3 ~@2]/2", // C# F G# A B D C# B
  M: "[[b4,b5]@8 [a4,a5]@21 ~@3]/2", // B A
  N: "[[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 …
  O: "[[c#5,c#6]@15 [e5,e6]@8 [g#5,g#6]@8 [f#5,f#6]@28 ~@5]/4", // C# E G# F#
  P: "[e5,e6]@3 [f#5,f#6]@2 [e5,e6]@2 ~ [d5,d6]@2 [e5,e6]@2 ~ [d5,d6]@2 [c#5,c#6]", // E F# E D E D C#
  Q: "~@2 [d5,d6]@2 [c#5,c#6]@2 ~ [b4,b5]@2 ~ [c#5,c#6]@2 [b4,b5]@3 [a4,a5]", // D C# B C# B A
  R: "[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
  S: "[~@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# …
  T: "[~@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 …
  U: "[[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#
  V: "[[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# …
  W: "[[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 …
  X: "[a4,a5]@10 ~ [b4,b5]@5", Y: "[[c#5,c#6]@5 [d5,d6]@6 [c#5,c#6]@4 [b4,b5]@12 [a4,a5]@4 [g#4,g#5]@14 ~@3]/3",
  Z: "[[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]@3 ~ [g#4,g#5]@15 ~, ~@27 [a4,a5]@3 ~@14 [f#4,f#5]@2 ~ [e4,e5]@14 ~@3]/4", // G#m A Bm C# G#m A G# A …
  AA: "[[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 …
  AB: "[[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