Strudelify
J'te l'dis quand meme cover art

1989 · Alors regarde

J'te l'dis quand meme

Patrick Bruel

KeyG majorTempo110 bpm
0:00/0:00
// J'te l'dis quand meme — Patrick Bruel
// 110 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/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.

// chords · piano
const piano = note(`<
  A B C D E F G D H I J@2 K L@2 M N O P D E F G D H I J@2 K L@2 M N O P Q R S T U R V W X Y Z AA AB AC AD@2 D E F G D H
  I J@2 K L@2 M N O P Q R S T U R V W X Y Z AA AB AC AE AF AG AH@2 AI AJ AK AL AM X Y Z AA AB AC AE AF AG AN AO AP AQ AC
  AR@3 ~
>`.pickRestart({
  A: "~@8 [d3,f#3]@7 ~", B: "b3@2 d4 g4 e4 g4 c5 e4, g2@7 ~", C: "[g2,d4,b4]@15 ~",
  D: "~@3 c4@3 ~ g3, e2, g4@3 ~@3 g4@2, ~ g3@2 ~", E: "~@2 c4 ~@4 a3, f#2@7 ~, d4@2 ~ d4@5, ~ a3@5 c4@2",
  F: "~@3 d4@3 ~ b3, g2@7 ~, ~ g3@7, ~ b3@2 g4", G: "~@2 g3@2 b3@2 d4@2 g4@2 f#4@2 g4@3 ~, g2",
  H: "~@2 c4 ~@2 c4 a3@2, f#2@15 ~, d4@4 ~@2 d4@9 ~, ~ a3@2 ~@5", I: "~@5 d4 a3@2, g2@7 ~, ~ g3@2 ~, ~@3 b3@3 ~@2",
  J: "[b3@3 d4 a4 g4 f#4 ~@4 c4@2 g4 g3@2, g2@7 g4@3 g3@3 ~@3, ~@16 e2@13 ~@3]/2",
  K: "~@2 c4 ~@2 c4 a3@2, f#2@13 ~@3, d4@2 ~ d4@4 ~, ~ a3@2 ~@5",
  L: "[c4@4 b3 a3@2 ~@5 e3@4, [d#2,f#4]@15 ~ e2@12 ~@4, a3@5 ~@2 g3@7 ~@2]/2", M: "[a3,c4,e4]@2 d4 b3@2 c4@3, a2",
  N: "g3@2 ~ d3, d2@3 ~, ~ f#3", O: "b3@3 e3 c4 e3 g3@2, g2@7 ~", P: "[g2,b3]",
  Q: "~@3 c4@3 ~ g3, e2@15 ~, g4@3 ~@3 g4@2, ~ g3@2 ~", R: "d4 a3 c4 d4 a4 g4 f#4@2, f#2@7 ~",
  S: "~@2 d4 g4 f#4 b3 d4 g4, g2@7 ~, g4 ~@3, ~ b3@2 ~@5", T: "~ b3 d4 g4 ~ b3 d4 g4, g2@7 ~, ~@2 f#4 ~",
  U: "~@5 g4 g3@2, e2@7 ~, g4 ~, ~ g3@2 ~, ~@3 c4@3 ~@2", V: "~@2 g3 b3@2 d4 g4 b3, g2@7 ~, g4 ~",
  W: "[b3,d4,g4]@2 a3 d4 ~@3 g4, f2@7 ~, ~@2 g4 d4, ~@5 a3@2 ~", // G
  X: "c4@2 ~ c4@2 ~@2 g3, e2@7 ~, g4@3 ~@2 g4@3, ~@2 g3@3 ~ c4@2",
  Y: "~@6 d4@2 a4@2 g4@2 f#4@3 ~, f#2@7 ~, d4 c4 ~@2, ~ a3@2 ~@5",
  Z: "[a3,c4]@2 [f#3,a3] a3 c4 b3 a3@2, d#2@7 ~, f#4@3 ~@5", AA: "~ b3, e2@7 ~, g3@3 ~",
  AB: "[c5,e5] b4 ~ b4@2 c5@3, a3@7 ~, g4@3 ~, ~ d5@2 ~", AC: "[c4,g4]@7 ~ [a3,c4,f#4]@8, d3@7 ~",
  AD: "[~@2 b3 d4 c4 a3 c4 g4 [d3,b3]@4 ~@4, g2@3 ~, d3 e3 ~@2, ~ g3@2 ~@13]/2", // G
  AE: "~@2 b3 d4 c4 a3 c4 g4, g2, d3 e3, ~ g3@2 ~@5", AF: "b3@4 c4@2 b3 d4, d3, g2@7 ~",
  AG: "~@3 c4@3 g4 g3, e2@7 ~, g4@3 ~@5, ~ g3@2 ~",
  AH: "[d4@2 a3 c4 a4 g4 f#4 ~ b3@2 g3 a3 b3 g3 c4 g3, f#2@7 ~ g2@7 ~, a4@3 ~@4 g4@3 ~@6]/2",
  AI: "c4 ~@4 g3 d4 g4, g2@2 a2@2 b2@3 ~, ~ a3@2 b3@2 ~@3", AJ: "g3@2 ~ g3@3 a3 g3, e2@7 ~, ~ c4 ~@2",
  AK: "~@3 d4 a4 g4 f#4 g4, f#2@7 ~, a4@3 ~@5, ~ a3 ~@2", AL: "b3@2 g3 d4 ~ c4 ~ g3, g2@7 ~, ~@2 a3 g4",
  AM: "b3@2 g3 a3@2 c4 d4 g3, g2@7 ~", AN: "d4@2 a3 c4 a4 g4 f#4 g4, f#2@7 ~, a4@3 ~@5",
  AO: "c4@4 ~@2 c4@4 b3@2 a3@3 ~, d#2@7 ~, f#4@3 ~@5, ~@2 a3@3 ~@3", AP: "e2@2 e3 ~, g3@3 ~",
  AQ: "g4 ~@3 d5@2 b4@4 c5@5 ~, a3@7 ~, [c5,e5] ~@3, ~ g4@5 ~@2", // C
  AR: "[~@10 g3 ~@3 b3 ~ [g2,d3,b3,g4]@8, g2@7 ~ g2@7 ~@9, ~ d3@3 e3@3 g4@2 ~@3 a3@3 ~@9, ~@2 g3@2 ~ a3@4 d3@5 ~@10, ~@3 d4@2 ~ c4@3 ~@2 d4@3 ~ d4@9]/3", // G
})).s("gm_piano").gain(0.26)

// bass · acoustic bass
const bass = note(`<
  ~@19 A B C@2 D B C@2 D B E F G H C@2 A I J K A I C L A I E A M N C O A B C@2 D B C@2 D B E F G H C@2 A I J K A I C L A
  I E A M N C ~@9 A I E A M N C ~@11
>`.pickRestart({
  A: "e2", B: "f#2@13 ~ f#2@2", C: "g2", D: "e2@13 ~ e2@2", E: "d#2", F: "e2 e3", G: "a2", H: "d2@7 d3", I: "f#2",
  J: "g2 g3", K: "g2@5 ~ d3@2 g3@8", L: "f2", M: "a2@13 ~ a2@2", N: "d2@13 ~ d2@2", O: "g2@3 ~",
})).s("gm_acoustic_bass").gain(0.31)

// other · string ensemble 2
const string_ensemble_2 = note("<~@67 A B C@2 D E F G H I J K L M N O ~@8 H I J K L M N O ~@10>".pickRestart({
  A: "[c4,e5]@6 g5 e5", B: "[d4,f#5]@7 a4", C: "[~@8 g4@17 ~@7, g5@25 ~@7, g3@5 ~@3]/2", D: "[c4,e5]@3 c5",
  E: "[d4,d5]@2 a4 f#5", F: "[g3,g5]", G: "[f3,f5]", H: "g4", I: "a4@4 d5@3 a4", J: "d#5", K: "e5@15 ~",
  L: "[g4,c5,e5]@15 ~", M: "[f#4,d5]", N: "[g3,g4]@3 b4@3 c5@2", O: "[g3,b4] ~",
})).s("gm_string_ensemble_2").gain(0.1)

// drums · kick
const kick = s("bd").struct(`<
  ~@19 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A ~@27
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "~@3 x ~@4",
})).gain(0.31)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@19 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A ~@27
>`.pickRestart({
  A: "~@7 x", B: "x ~@6 x",
})).gain(0.31)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@19 [~ x ~ x]!63 ~@27>").gain(0.31)

stack(piano, bass, string_ensemble_2, kick, low_tom, pedal_hat)