Strudelify
C'est ma vie cover art

Jusqu'A L'Amour

C'est ma vie

Salvatore Adamo

KeyF majorTempo98 bpm
0:00/0:00
// C'est ma vie — Salvatore Adamo
// 98 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(98/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.

// other · epiano1 · "Remixé"
const epiano1 = note(`<
  ~@9 A B C D E F@2 G A B C D E F@2 G ~@8 A B C D E F@2 G A B C D E F@2 G ~@16 A B C D E F@2 G A B C D E F@2 G ~@26
>`.pickRestart({
  A: "~@2 bb3 [d4,f4] bb3 [d4,f4] bb4 [d5,f5] ~@2 a3 [d4,f4] a3 [d4,f4] a4 [d5,f5]", // Dm
  B: "~@2 ab3 [d4,f4] ab3 [d4,f4] ab4 [d5,f5] ~@2 g3 [b3,d4] g3 [b3,d4] g4 [b4,d5]", // Dm Bm
  C: "~@2 g3 [b3,d4] g3 [b3,d4] g4 [b4,d5] ~@2 g3 [b3,d4] g3 [b3,d4] g4 [b4,d5]", // Bm
  D: "~@2 c4 [eb4,g4] c4 [eb4,g4] c5 [eb5,g5] ~@2 c4 [eb4,g4] c4 [eb4,g4] c5 [eb5,g5]", // Eb
  E: "~@2 c4 [eb4,g4] c4 [eb4,g4] c5 [eb5,g5] ~@2 b3 [eb4,g4] b3 [eb4,g4] b4 [eb5,g5]", // Eb
  F: "~@2 bb3 [eb4,g4] bb3 [eb4,g4] bb4 [eb5,g5] ~@2 bb3 [eb4,g4] bb3 [eb4,g4] bb4 [eb5,g5]", // Eb
  G: "~@2 c4 [f4,a4] c4 [f4,a4] c5 [f5,a5] ~@2 c4 [f4,a4] c4 [f4,a4] c5 [f5,a5]", // F
})).s("gm_epiano1").gain(0.29).pan(0.2)

// bass · electric bass finger · "Remixé"
const bass = note(`<
  ~ A B C D E F C@2 G H I E@3 F C G H I E@3 F C A B C D E F C@2 G H I E@3 F C G H I E@3 F C A B C D E F C@2 A B C D E F
  C@2 G H I E@3 F C G H I E@3 F C A B C D E F C@2 A B C D E F C@2 A B C D E F C J ~@2
>`.pickRestart({
  A: "bb1@3 f2@3 bb2@2 bb1@3 f2@3 bb2@2", B: "d2@3 a2@3 d3@2 d2@3 a2@3 d3@2", C: "f2@3 c3@3 f3@2 f2@3 c3@3 f3@2",
  D: "g2@3 d3@3 g3@2 g2@3 d3@3 g3@2", E: "c2@3 g2@3 c3@2 c2@3 g2@3 c3@2", F: "eb2@3 bb2@3 eb3@2 eb2@3 bb2@3 eb3@2",
  G: "bb1@3 f2@3 bb2@2 d2@3 a2@2 ~ d3@2", H: "f2@3 c3@3 f3@2 g2@3 d3@2 ~ g3@2", I: "g2@3 d3@2 ~ g3@2 g2@3 d3@3 g3 ~",
  J: "f2@3 c3@3 f3@2 f2@3 c3@3 ~@2",
})).s("gm_electric_bass_finger").gain(0.66)

// chords · string ensemble 2 · "Remixé"
const string_ensemble_2 = note(`<
  ~ A@2 B C D@2 E@2 ~@16 A@2 B C D@2 E@2 ~ F@3 ~ G@3 H@2 I@2 J@2 K L A@2 B C D@2 E@2 A@2 B C D@2 E@2 ~@8 M N ~ O P Q ~ R
  A@2 B C D@2 E@2 S@2 T U V@2 W@2 S@2 T X V@2 W@2 ~@2
>`.pickRestart({
  A: "[[bb3,bb4] [a3,a4], [f3,d4]@31 ~]/2", B: "[f3,ab3,c4,ab4]", C: "[g3,b3,d4,g4]",
  D: "[[c4,c5] [bb3,bb4], [eb3,g3]]/2", E: "[f3,a3,c4,a4]/2",
  F: "[~@2 f4@2 g4@2 ab4@4 g4@2 c5@2 b4@10 c5@4 b4@3 g5@15 ~@2]/3",
  G: "[~@10 [eb4,g4]@2 [f4,a4]@2 [g4,bb4]@17 ~ c5@16, ~@31 [f4,a4,f5]@16 ~]/3", H: "[d5@9 eb5 f5 g5 ab5 g5@3]/2",
  I: "[~ g4 ab4 g4 [ab4,c5]@2 b4@2 [c5,eb5]@8, ~@3 g4@5]/2", // Ab Cm
  J: "[eb5 ~ [b4,b5]@2 [bb4,bb5]@4, g4, c5 ~@3, ~@4 eb5@27 ~]/2", K: "[eb5,g5] [bb4,eb5]@2 [g4,bb4]",
  L: "[f4,a4]@3 [g4,bb4]@2 ~ c5@3 [bb4,d5]@3 [c5,eb5]@2 [d5,f5]@2, ~@5 a4@4 ~@7", // F Gm Bb Cm Dm
  M: "[bb4,bb5]@8 [a4,a5]@3 [f4,f5]@2 ~ d4@2, ~@13 d5@3", N: "[c4,c5] [d4,d5] [b3,b4]@2",
  O: "[c4,c5]@2 [d4,d5]@2 [eb4,eb5]@3 [d5,d6]@5 [c5,c6]@4", P: "[g4,g5] [b4,b5]",
  Q: "[bb4,bb5]@3 [g4,g5]@3 [eb4,eb5]@2 [bb3,bb4]@7 ~", R: "~@8 [eb5,g5] [f5,a5] [eb5,g5] [f5,a5]@5",
  S: "[[bb3,bb4,bb5] [a3,a4,a5], [f3,d4]@31 ~]/2", T: "[f3,ab3,c4,ab4,ab5]",
  U: "g5@4 [a4,a5]@4 [b4,b5]@4 ~ d6@3, [g3,b3,d4,g4], ~@3 d5", V: "[[c4,c5,c6] [bb3,bb4,bb5], [eb3,g3]]/2",
  W: "[~@16 [f4,f5]@15 ~, [f3,a3,c4,a4,a5]]/2", X: "g5@4 [a4,a5]@4 [b4,b5]@5 [d5,d6]@3, [g3,b3,d4,g4]",
})).s("gm_string_ensemble_2").gain(0.36).pan(0.4)

// chords · harpsichord · "Remixé"
const harpsichord = note(`<
  ~@7 A@2 ~@16 B C D E F G H@2 ~@16 B C D E F G H@2 B C D E F G H@2 ~@16 B C D E F G H@2 B C D E F G H@2 B C D E F G H@2
  ~@2
>`.pickRestart({
  A: "[~@3 [f4,a4]!2 ~ [g4,bb4] [a4,c5]@3 ~ [a4,c5]!2 [bb4,d5] ~ [c5,eb5]@3 ~ [c5,eb5]!2 [d5,f5] ~ [eb5,g5]@7 ~@2]/2", // F Gm Am Bb Cm Dm Eb
  B: "~ [f4,bb4,d5]!3 ~ [f4,bb4,d5] ~ [f4,bb4,eb5] ~ [f4,bb4,d5] [f4,bb4,d5]@4 ~@2", // Bb Ebsus2 Bb
  C: "~ [f4,a4,d5]!3 ~ [f4,a4,d5] ~ [f4,a4,eb5] ~ [f4,a4,d5] [f4,a4,d5]@3 ~@3", // Dm F7 Dm
  D: "~ [f4,ab4,d5]!3 ~ [f4,ab4,d5] ~ [f4,ab4,eb5] ~ [f4,ab4,d5] [f4,ab4,d5]@3 ~@3", // Ddim Fm7 Ddim
  E: "~ [g4,b4,d5]!3 ~ [g4,b4,d5] ~ [g4,b4,eb5] ~ [g4,b4,d5] [g4,b4,d5]@3 ~@3", // G Gaug G
  F: "~ [g4,c5,eb5]!3 ~ [g4,c5,eb5] ~ [g4,c5,f5] ~ [g4,c5,eb5] [g4,c5,eb5]@3 ~@3", // Cm Csus4 Cm
  G: "~ [g4,bb4,eb5]!3 ~ [g4,bb4,eb5] ~ [g4,bb4,f5] ~ [g4,bb4,eb5] [g4,bb4,eb5]@3 ~@3", // Eb Gm7 Eb
  H: "[~@3 [f4,a4]!2 [g4,bb4] ~ [a4,c5]@3 ~ [a4,c5]!2 [bb4,d5] ~ [c5,eb5]@3 ~ [c5,eb5]!2 [d5,f5] ~ [eb5,g5]@7 ~@2]/2", // F Gm Am Bb Cm Dm Eb
})).s("gm_harpsichord").gain(0.64).pan(0.6)

// chords · acoustic guitar steel · "Remixé"
const acoustic_guitar_steel = note(`<
  ~ A B C D E F G@2 H I J K L M N O H I J K L M N P@2 B C D E F G@2 H I J K L M N O H I J K L M N P@2 B C D E F G@2 A B
  C D E F G@2 H I J K L M N O H I J K L M N P@2 B C D E F G@2 A B C D E F G@2 A B C D E F Q@4
>`.pickRestart({
  A: "~@7 bb3, f4 bb3@2 bb3@2 bb3@2 ~, ~ d4@4 d4@4 d4@4 d4@3, ~@3 f4@5 f4@3 f4@5",
  B: "~@6 a3 ~@7 a3@2, f4 a3@2 ~@2 a3@2 ~, ~ d4@4 d4@2 ~@2 d4@4 d4@3, ~@3 f4@4 ~ f4@3 f4@5",
  C: "~@7 ab3, f4 ab3@2 ab3@2 ab3@2 ~, ~ d4@4 d4@4 d4@4 d4@3, ~@3 f4@5 f4@3 f4@5",
  D: "~@14 g3 ~, d4 g3@2 g3@2 g3@2 ~, ~ b3@4 b3@4 b3@4 b3@2 ~, ~@3 d4@5 d4@3 d4@4 ~",
  E: "~@7 c4, g4 c4@2 c4@2 c4@2 ~, ~ eb4@4 eb4@4 eb4@4 eb4@2 ~, ~@3 g4@5 g4@3 g4@4 ~",
  F: "~@7 bb3, g4 bb3@2 bb3@2 bb3@2 ~, ~ eb4@4 eb4@4 eb4@4 eb4@2 ~, ~@3 g4@5 g4@3 g4@4 ~",
  G: "[~@15 a3, f4 a3@2 a3@2 a3@2 a3@2 a3@2 a3@2 a3@2 ~, ~ c4@4 c4@4 c4@4 c4@4 c4@4 c4@4 c4@4 c4@2 ~, ~@3 f4@5 f4@3 f4@5 f4@3 f4@5 f4@3 f4@4 ~]/2",
  H: "~@3 bb3 ~@3 a3, f4 bb3@2 ~@2 a3@2 ~, ~ d4@4 d4@3 ~ d4@4 d4@3, ~@3 f4@5 f4@3 f4@5",
  I: "~@3 ab3 ~@3 g3, f4@2 ab3@4 ~@3 b3@4 b3@2 ~, ~ d4@4 d4@3 d4@3 d4@4 ~, ~@3 f4@5 ~@2 g3@4 ~@2",
  J: "~@3 g3 ~@3 g3, d4 g3@2 ~@2 g3@2 ~, ~ b3@4 b3@3 ~ b3@4 b3@3, ~@3 d4@5 d4@3 d4@5",
  K: "eb4 ~@2 eb4@2 c4 g3@2 ~@6 g3@2, ~ c4@4 ~@3 eb4@2 g3@4 ~@2, ~@2 g3@3 ~@4 c4@4 c4@2 ~, ~@11 eb4@4 ~",
  L: "~@6 g3@2 ~@6 g3 ~, eb4 g3@2 ~@2 g3@2 ~, ~ c4@4 c4@2 ~@2 b3@4 b3@2 ~, ~@3 eb4@4 ~ eb4@3 eb4@4 ~",
  M: "~@6 g3 ~@7 g3@2, eb4 g3@2 ~@2 g3@2 ~, ~ bb3@4 bb3@2 ~@2 bb3@4 bb3@3, ~@3 eb4@4 ~ eb4@3 eb4@5",
  N: "eb4 ~@5 g3@2 ~@6 g3@2, ~ bb3@4 bb3@3 ~ bb3@4 bb3@2 ~, ~ g3@2 ~@2 g3@2 ~, ~@3 eb4@5 eb4@3 eb4@4 ~",
  O: "~@7 a3, f4 a3@2 a3@2 a3@2 ~, ~ c4@4 c4@4 c4@4 c4@3, ~@3 f4@5 f4@3 f4@5",
  P: "[~@15 bb3, f4 a3@2 a3@2 a3@2 a3@9, ~ c4@4 c4@4 c4@4 c4@19, ~@3 f4@5 f4@3 f4@5 f4@2 bb3@3 d4@3 f4@2 bb3@3 d4@3, ~@17 d4@2 f4@3 bb3@3 d4@2 f4@5]/2",
  Q: "[~@27 f4@32 ~@5, f4 a3@2 a3@2 a3@2 a3@2 a3@2 a3@2 a3@16 ~@3, ~ c4@4 c4@4 c4@4 c4@4 c4@4 c4@4 c4@32 ~@7, ~@3 f4@5 f4@3 f4@5 f4@3 f4@5 f4@3 ~@37]/4",
})).s("gm_acoustic_guitar_steel").gain(0.41).pan(0.8)

// other · trumpet · "Remixé"
const trumpet = note("<~@68 A B ~@2 C D ~@5 E@2 ~@26>".pickRestart({
  A: "~@7 eb5 g5 ~ f5 eb5 d5 ~ c5 ~", B: "g4@7 ~", C: "~@7 d5 eb5 ~ d5!2 g5 ~ f5 ~", D: "eb5@3 d5@10 ~@3",
  E: "[~@3 g4 c5 d5 eb5 d5 eb5 ~ f4 ~ g4@8 ~@12]/2",
})).s("gm_trumpet").gain(0.71).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  ~
  [x ~@2 x!2 ~@3 x ~@2 x!2 ~@3]!24
  [x ~@2 x ~@4 x ~@2 x ~@4]!8
  [x ~@2 x!2 ~@3 x ~@2 x!2 ~@3]!16
  [x ~@2 x ~@4 x ~@2 x ~@4]!16
  [x ~@2 x!2 ~@3 x ~@2 x!2 ~@3]!16
  [x ~@2 x ~@4 x ~@2 x ~@4]!24
  ~@2
>`).gain(0.66)

// drums · snare
const snare = s("sd").struct("<~@25 [~ x ~ x]!8 ~@16 [~ x ~ x]!16 ~@16 [~ x ~ x]!23 [~ x ~@2] ~@2>").gain(0.66)

// drums · hihat
const hihat = s("hh").struct("<~ [x!7 ~ x!7 ~]!103 [x!7 ~ x!4 ~@4] ~@2>").gain(0.52)

// drums · open hat
const open_hat = s("oh").struct("<~ [~@7 x ~@7 x]!103 [~@7 x ~@8] ~@2>").gain(0.52)

stack(epiano1, bass, string_ensemble_2, harpsichord, acoustic_guitar_steel, trumpet, kick, snare, hihat, open_hat)

More by Salvatore Adamo