Strudelify

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

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