Strudelify
Pour un Flirt cover art

Album De Duos

Pour un Flirt

Michel Delpech

KeyD majorTempo172 bpm
0:00/0:00
// Pour un Flirt — Michel Delpech
// 172 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 147 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(172/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 · pad new age
const pad_new_age = note("<~@58 A B C D E ~@3 F G ~ F H ~@41 I E J K I C J K I E J K I C J K ~@19>".pickRestart({
  A: "~@4 b6 ~@3", B: "f#6 ~@3 d6 ~@3", C: "e6 ~@7", D: "~@4 a6 ~@3", E: "f#6 ~@7", F: "~@4 f#6 ~ a6 ~", G: "b6 ~@7",
  H: "d6 ~@7", I: "~@4 d6 ~@3", J: "~@4 f#6 ~@3", K: "a6 ~@7",
})).s("gm_pad_new_age").gain(0.25).pan(0.6)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@8 A B C D E F@3 ~@8 G@2 H@2 I@2 J@2 K@8 L@8 A B C D E F@3 ~@8 G@2 H@2 I@2 J@2 K@16 A B C D E F@3 ~@8 G@2 H@2 I@2 J@2
  K@16 A B C D E F@3 A B C D E M@5 ~
>`.pickRestart({
  A: "[d5,f#5] ~@3 [d5,f#5] ~@3 [d5,f#5] ~@3 [d5,f#5] ~@3", // D
  B: "[d5,f#5]@2 ~@2 [d5,f#5] ~@3 [c#5,e5] ~ [d5,f#5]@2 [e5,g5]@2 [d5,f#5]@2", // D C#m D Em D
  C: "~@4 [d5,f#5] ~@3 [d5,f#5] ~@3 [d5,f#5] ~@3", D: "[d5,f#5] ~ [d5,f#5] ~ [c#5,e5] [d5,f#5] [e5,g5] [d5,e5]",
  E: "~@4 [d5,e5] ~@3 [d5,e5] ~@3 [d5,e5] ~@3", // Dsus2
  F: "[[c#5,e5] ~ [c#5,e5] ~ [f#4,d5] [g4,e5] [a4,f#5] [f#4,d5]@15 ~@2]/3", G: "[[d4,d5]@6 [f#4,f#5] [a4,a5]]/2",
  H: "[[b4,b5]@6 [a4,a5] [f#4,f#5]]/2", I: "[[e4,e5]@6 [f#4,f#5] [a4,a5]]/2", J: "[[d4,d5]@15 ~]/2",
  K: "[[d5,f#5]@23 ~ [d5,e5]@2 [d5,f#5]@2 [d5,g5]@2 [d5,f#5]@25 ~ [d5,e5]@2 [d5,f#5]@2 [d5,g5]@2 d5@18 c#5@8 d5@2 e5@2 f#5@2 [f#4,d5]@32 ~@2, ~@62 e5@25 ~@41]/8", // D Dsus2 D G5 D Dsus2 D G5 …
  L: "[[d5,f#5]@23 ~ [d5,e5]@2 [d5,f#5]@2 [d5,g5]@2 [d5,f#5]@25 ~ [d5,e5]@2 [d5,f#5]@2 [d5,g5]@2 d5@18 c#5@8 d5@2 e5@2 f#5@2 [f#4,d5]@31 ~@3, ~@62 e5@25 ~@41]/8", // D Dsus2 D G5 D Dsus2 D G5 …
  M: "[[c#5,e5]@2 ~@2 [c#5,e5]@2 ~@2 [f#4,d5]@2 [g4,e5]@2 [a4,f#5]@2 [f#4,d5]@57 ~@9]/5", // C#m D C D
})).s("gm_string_ensemble_1").gain(0.17).pan(0.7)

// chords · brass section
const brass_section = note(`<
  ~@14 A@2 ~@4 B C A D ~@4 B C A D ~@6 A D ~@6 A D ~@6 A@2 ~@4 B C A D ~@4 B C A D ~@6 A D ~@6 A D ~@6 A@2 ~@4 B C A D
  ~@4 B C A D ~@6 A D ~@6 A D ~@6 A@2 ~@6 A E F G ~
>`.pickRestart({
  A: "[c#5,f5]@2 [d5,f#5] ~ [d5,f#5] ~ [d5,f#5] ~ [c#5,f5]@2 [d5,f#5] ~ [d5,f#5] ~ [d5,f#5] ~", // C# D C# D
  B: "[a#4,d#5]@2 [b4,e5] ~ [b4,e5] ~ [b4,e5] ~ [a#4,d#5]@2 [b4,e5] ~ [b4,e5] ~ [b4,e5] ~", // D#5 E5 D#5 E5
  C: "[c5,d#5]@2 [c#5,e5] ~ [c#5,e5] ~ [c#5,e5] ~@9", D: "[c#5,f5]@2 [d5,f#5] ~ [d5,f#5] ~ [d5,f#5] ~@9",
  E: "[c#5,f5]@2 [d5,f#5] ~ [d5,f#5] ~ [d5,f#5] ~@3 [f#5,a5] ~@5", // C# D F#m
  F: "[e4,c#5]@2 [f#4,d5] ~ [f#4,d5] ~ d5@2 [f4,c#5]@2 [f#4,d5] ~ [f#4,d5] ~ f#4@2, ~@6 f#4 ~@7 d5 ~", // C#m D C# D
  G: "[c#5,c#6]@2 [d5,d6] ~ [d5,d6] ~ [d5,d6] ~@9", // C# D
})).s("gm_brass_section").gain(0.31).pan(0.4)

// chords · piano
const piano = note(`<
  A B@2 C@2 D@2 E A B@2 C@2 D@2 E ~@16 A B@2 C@2 D@2 E A B@2 C@2 D@2 E A B@2 C@2 D@2 E ~@16 A B@2 C@2 D@2 E A B@2 C@2
  D@2 E A B@2 C@2 D@2 E ~@16 A B@2 C@2 D@2 E A B@2 C@2 D@2 E A B@2 C@2 D@2 E A B@2 C@2 D@2 E@2 F ~
>`.pickRestart({
  A: "[a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~", // D
  B: "[[a4,d5,f#5]@2 ~@2 [a4,d5,f#5]@2 ~@2 [a4,d5,e5] ~ [a4,d5,f#5] ~ [a4,d5,g5] ~ [a4,d5,f#5]@5 ~ [a4,d5,f#5]@2 ~@2 [a4,d5,f#5]@2 ~@2 [a4,d5,f#5]@2 ~@2]/2", // D Asus4 D Dsus4 D
  C: "[[a4,d5,f#5]@2 ~@2 [a4,d5,f#5]@2 ~@2 [a4,d5,e5] ~ [a4,d5,f#5] ~ [a4,d5,g5] ~ [a4,d5,e5]@5 ~ [a4,d5,e5]@2 ~@2 [a4,d5,e5]@2 ~@2 [a4,d5,e5]@2 ~@2]/2", // D Asus4 D Dsus4 Asus4
  D: "[[a4,c#5,e5]@2 ~@2 [a4,c#5,e5]@2 ~@2 [a4,d5] ~ [a4,e5] ~ [a4,d5,f#5] ~ [f#4,a4,d5]@5 ~ [f#4,a4,d5]@2 ~@2 [f#4,a4,d5]@2 ~@2 [f#4,a4,d5]@2 ~@2]/2", // A D5 A5 D
  E: "[f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~", F: "[f#4,a4,d5] ~ [f#4,a4,d5]!2 ~@4",
})).s("gm_piano").gain(0.28)

// chords · epiano2
const epiano2 = note(`<
  ~@8 A@8 B@2 C@2 D E@3 F G H@2 D I J@2 A@24 B@2 C@2 D E@3 F G H@2 D I J@2 A@24 B@2 C@2 D E@3 F G H@2 D I J@2 A@32 K L ~
>`.pickRestart({
  A: "[[a3,d4,f#4]@22 ~@4 f#4@2 g4@2 [a3,d4,f#4]@25 ~ e4@2 f#4@2 g4 ~ d4@17 ~ c#4@5 ~@3 d4@2 e4@2 f#4@2 [f#3,a3,d4]@32 ~@2, ~@24 [a3,d4,e4]@5 ~@27 [a3,d4]@5 ~ a3@25 ~@41, ~@62 e4@23 ~@43]/8", // D Asus4 D5
  B: "[[a3,d4,f#4]@23 ~@5 a4@4, ~@3 [d4,f#4]]/2", C: "[[d4,f#4,b4]@7 ~]/2", D: "[b3,e4,g4]@15 ~",
  E: "[a4@6 ~@2 [d4,f#4]@15 ~, e4 ~@2, c#4@7 ~@17, ~@6 a3@17 ~]/3", F: "[a3,d4,f#4]", G: "~@3 a3, a4, ~ f#4@3, ~ d4",
  H: "[f#4@4 ~@3 b3, b3@3 d4, d4@5 f#4@3, ~ b4]/2", I: "e4@8 ~@4 e4@3 ~, [a3,c#4]@15 ~, ~@8 a4@7 ~",
  J: "[[a3,d4,f#4]@29 ~@3]/2", K: "[a3,d4,f#4]@7 ~", L: "[f4,g#4]@2 [f#4,a4] ~ [f#4,a4] ~ a4@2 ~@8, ~@6 f#4 ~@9",
})).s("gm_epiano2").gain(0.22).pan(0.6)

// chords · pad poly
const pad_poly = note(`<
  ~@32 A@4 B@2 C@2 A@4 D@2 C@2 ~@24 A@4 E@2 C@2 A@4 E@2 C@2 ~@24 A@4 E@2 C@2 A@4 E@2 C@2 ~@19
>`.pickRestart({
  A: "[[a3,d4,f#4]@15 ~]/2", B: "[d4@8 c#4@7 ~, [a3,e4]@29 ~@3]/2", C: "[[a3,d4,f#4]@31 ~]/2",
  D: "[d4@4 c#4@3 ~, [a3,e4]@29 ~@3]/2", E: "[d4@16 c#4@15 ~, [a3,e4]@29 ~@3]/2",
})).s("gm_pad_poly").gain(0.26)

// chords · synth bass 1
const synth_bass_1 = note(`<
  ~@16 A@2 B@2 C D E A@3 B@2 C D E A ~@24 A@2 B@2 C D E A@3 B@2 C D E A ~@24 A@2 B@2 C D E A@3 B@2 C D E A ~@35
>`.pickRestart({
  A: "~@4 [f#4,a4,d5] ~@7 [f#4,a4,d5] ~@3", B: "~@4 [f#4,b4,d5] ~@7 [f#4,b4,d5] ~@3",
  C: "~@4 [e4,g4,b4] ~@7 [e4,g4,b4] ~@3", D: "~@4 [e4,a4,c#5] ~@7 [e4,a4,c#5] ~@3",
  E: "~@4 [f#4,a4,d5] ~@6 a4 [f#4,d5] ~@3", // D
})).s("gm_synth_bass_1").gain(0.25).pan(0.9)

// other · trombone
const trombone = note(`<
  ~@20 A B C D ~@4 A B C D ~@28 A B C D ~@4 A B C D ~@28 A B C D ~@4 A B C D ~@6 C D ~@6 C D ~@6 C@2 ~@6 C E C D ~
>`.pickRestart({
  A: "a#3@2 b3 ~ b3 ~ b3 ~ a#3@2 b3 ~ b3 ~ b3@2", B: "c4@2 c#4 ~ c#4 ~ c#4 ~@9",
  C: "c#4@2 d4 ~ d4 ~ d4 ~ c#4@2 d4 ~ d4 ~ d4 ~", D: "c#4@2 d4 ~ d4 ~ d4 ~@9", E: "c#4@2 d4 ~ d4 ~ d4 ~@3 d4 ~@5",
})).s("gm_trombone").gain(0.44).pan(0.6)

// chords · synth strings 1
const synth_strings_1 = note(`<
  A@8 B@8 C@2 D@2 E F C@4 D@2 E F C@2 B@8 A@16 C@2 D@2 E F C@4 D@2 E F C@2 A@24 C@2 D@2 E F C@4 D@2 E F G@2 A@32 H@2 ~
>`.pickRestart({
  A: "[[a3,f#4]@61 ~@19 c#4@14 [a3,d4,f#4]@32 ~@2, d4@5 ~@3, ~@31 [a3,e4]@16 ~@17]/8", // D A5
  B: "[[a3,f#4]@61 ~@19 c#4@14 [f#3,a3,d4]@32 ~@2, d4@5 ~@3, ~@31 [a3,e4]@16 ~@17]/8", C: "[a3,d4,f#4]/2",
  D: "[b3,d4,f#4]/2", E: "[b3,e4,g4]", F: "[a3,c#4,e4]", G: "[f#3,d4,f#4]/2", H: "[[a3,d4,f#4]@23 ~@9]/2",
})).s("gm_synth_strings_1").gain(0.14)

// chords · synth bass 1
const synth_bass_1_2 = note(`<
  ~@8 A B A B C D A B E@2 F@2 G H E@4 F@2 G H E@2 A B A B C D A B A B A B C D A B A B A B C D A B E@2 F@2 G H E@4 F@2 G
  H E@2 A B A B C D A B A B A B C D A B A B A B C D A B E@2 F@2 G H E@4 F@2 G H E@2 A B A B C D A B A B A B C D A B A B
  A B C D A B A B A B C D A B A I ~
>`.pickRestart({
  A: "~@4 [a3,d4,f#4] ~@7 [a3,d4,f#4] ~@3", B: "~@4 [a3,d4,f#4] ~@7 [a3,d4,f#4] ~ [a3,d4,f#4] ~",
  C: "~@4 [a3,d4,e4] ~@7 [a3,d4,e4] ~@3", D: "~@4 [a3,c#4,e4] ~@7 [a3,c#4,e4] ~ [a3,c#4,e4] ~",
  E: "~@4 [f#3,a3,d4] ~ [f#3,a3,d4] ~@5 [f#3,a3,d4] ~@3", F: "~@4 [f#3,b3,d4] ~ [f#3,b3,d4] ~@5 [f#3,b3,d4] ~@3",
  G: "~@4 [g3,b3,e4] ~ [g3,b3,e4] ~@5 [g3,b3,e4] ~@3", H: "~@4 [e3,a3,c#4] ~ [e3,a3,c#4] ~@5 [e3,a3,c#4] ~@3",
  I: "~@4 [a3,d4,f#4] ~@11", // D
})).s("gm_synth_bass_1").gain(0.17).pan(0.2)

// chords · clavinet
const clavinet = note(`<
  ~@8 A B A B C D A E ~@32 A B A B C D A E ~@6 A E ~@6 A F ~@16 A B A B C D A E ~@14 A E ~@16 A B A B C D A B A B A B C
  D A B A G ~
>`.pickRestart({
  A: "d2@2 f#3 ~ [a3,d4]@2 f#3 ~ [d3,a3]@2 d4@2 a2 ~ f#3 ~, ~@8 c#4 ~ a3 ~@5", // D5
  B: "~@2 f#3 ~ [a3,c#4] ~ d4@2 d3@2 f#3 ~ a3@2 b3 ~, [d2,a3,d4]@4 ~@2 a3 ~@5 a2 ~@3", // A D5
  C: "a1@2 g#3 ~ [a3,d4]@2 e3 ~ [a3,c#4] ~ [a3,d4] ~@3 e3 ~, ~@4 a2 ~@3", // D5 A D5
  D: "[a1,a3,c#4]@2 e3 ~ [g#3,c4] ~ [a3,c#4]@2 a2@2 e3 ~ f#3@2 e3 ~, ~@12 a1 ~@3", // A G# A
  E: "~@2 f#3 ~ [a3,c#4] ~ d4@2 ~@8, [d2,a3,d4]@4 ~@2 a3 ~@9", F: "~@2 f#3 ~ [a3,c#4] ~ [a3,d4] ~@9, [d2,a3,d4] ~@3",
  G: "~@2 f#3 ~ [a3,c#4] ~ [a3,d4]@2 ~@8, [d2,a3,d4] ~@3", // A D5
})).s("gm_clavinet").gain(0.27).pan(0.4)

// bass · electric bass finger
const bass = note(`<
  A B A B C D A B E F G F H D E I J K L M N D O P J K L M N D O P E F G F H D E I E F G F H D E Q E F G F H D E I J K L
  M N D O P J K L M N D O P E F G F H D E I E F G F H D E Q E F G F H D E I J K L M N D O P J K L M N D O P E F G F H D
  E I E F G F H D E I E F G F H D E I E F G F H D E I R S ~
>`.pickRestart({
  A: "d2@7 ~ a1@7 ~", B: "d2@5 ~ d2 ~ a1@4 b1@4", C: "a1@7 ~ e1@7 ~", D: "a1@5 ~ a1@2 b1@4 c#2@4",
  E: "d2@5 ~ d2@2 a1@7 ~", F: "d2@5 ~ d2@2 a1@4 b1@4", G: "d2@5 ~ d2@2 a1@8", H: "a1@5 ~ a1@2 e1@8",
  I: "d2@2 c#2@3 ~ b1@3 ~ a1@2 b1@2 c#2@2", J: "d2@5 ~ d2@2 a1@6 ~@2", K: "d2@5 ~ d2@2 a1@4 a#1@4",
  L: "b1@5 ~ b1@2 f#1@7 ~", M: "b1@5 ~ b1@2 f#1@4 f1@4", N: "e1@5 ~ e1@2 b1@8", O: "d2@5 ~ d2@2 a1@5 ~ a1@2",
  P: "d2 ~ c#2@3 ~ b1@3 ~ a1@2 b1@2 c#2@2", Q: "d2@2 c#2@2 ~@2 b1@3 ~ b1@2 a1@3 ~", R: "d2@8 a1@5 ~ a1@2",
  S: "d2@3 ~ d2@2 d2@2 ~@8",
})).s("gm_electric_bass_finger").gain(0.48)

// drums · kick
const kick = s("bd").struct("<A@8 B@7 A B@39 A B@31 A B@57 C ~>".pickRestart({
  A: "x!2", B: "x ~@2 x!2 ~@3", C: "x ~@2 x ~@4",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@8 A@7 B A@39 B A@31 B A@55 C A D ~>".pickRestart({
  A: "~ x ~ x", B: "~@2 x!2 ~@2 x ~", C: "~@2 x!2 ~ x ~ x", D: "~@2 x!2 ~@4",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct("<[~ x]!8 ~@139>").gain(0.4)

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

// drums · low tom
const low_tom = s("lt").struct("<~@7 [~@3 x] ~@63 [~@3 x] ~@75>").gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 [~@3 x!2 ~@3] ~@63 [~@3 x!2 ~@3] ~@75>").gain(0.3)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@7 A ~@15 A ~@7 A ~@7 A ~@23 A ~@7 A ~@7 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~@8 B ~
>`.pickRestart({
  A: "x", B: "~@3 x ~@4",
})).gain(0.35)

// drums · tambourine
const tambourine = s("tb").struct("<[~ x]!8 [x!8]!137 [x!4 ~@4] ~>").gain(0.2)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!8]!8 [x!2 ~ x ~ x ~ x]!137 [x!2 ~@6] ~>").gain(0.5)

stack(
  pad_new_age, string_ensemble_1, brass_section, piano, epiano2, pad_poly, synth_bass_1, trombone, synth_strings_1,
  synth_bass_1_2, clavinet, bass, kick, snare, clap, hihat, low_tom, mid_tom, crash, tambourine, cabasa
)