Strudelify

Poulaillers' song

Alain Souchon

KeyD minorTempo170 bpm
0:00/0:00
// Poulaillers' song — Alain Souchon
// 170 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 5 acoustic guitar steel (copy of ch 1 acoustic guitar steel)
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(170/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 · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A B C D E B C D F G H I@2 J K L M N O P@2 Q R S@2 T U V W X Y Z AA AB AC AD F G H I@2 J K L M N O P@2 Q R S@2 T U V
  W X Y Z AA AB AC AD F G H I@2 J K L M N O P@2 Q R S@2 T U V W X Y Z AE T U V W X Y Z AE T U V W X Y AF AE T U V W X Y
  Z AE T U V W X ~
>`.pickRestart({
  A: "[a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3", // Dm
  B: "[a3,d4,e4] ~@3 [a3,d4,e4] ~@3 [a3,d4,e4] ~@3 [a3,d4,e4] ~@3", // Asus4
  C: "[a3,d4,e4,g4] ~@3 [a3,d4,e4,g4] ~@3 [a3,d4,e4,g4] ~@3 [a3,d4,e4,g4] ~@3", // Asus4
  D: "[a3,db4,e4] ~@3 [a3,db4,e4] ~@3 [a3,db4,e4] ~@3 [a3,db4,e4] ~@2 [a3,db4,e4]", // A
  E: "[d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3", // Dm
  F: "[d3,a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3", // Dm
  G: "[a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4]@2 ~ d3, ~@11 d2@4 ~", // Dm
  H: "[a2,g3,a3,c4,e4] ~@3 [g3,a3,c4,e4] ~@3 [g3,a3,c4,e4] ~@3 [g3,a3,c4,e4] ~@3", // Am7
  I: "[[g3,a3,c4,e4] ~@3 [g3,a3,c4,e4] ~@3 [g3,a3,c4,e4] ~@3 [g3,a3,c4,e4]@3 ~ [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3, ~@11 a2@3 ~ [a2,bb2]@2 ~@15]/2", // Am7 Bb Bbmaj7
  J: "[bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,d4,f4]@2 ~@2, ~@11 bb2@4 ~", // Bb
  K: "[f2,a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~@2 [a3,c4,f4]", // F
  L: "a2@2 ~ [g3,a3,db4,e4] ~@3 [g3,a3,db4,e4]@4 a2 [g3,a3,db4,e4]@3 a2", // A7
  M: "[d2,a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3", // Dm
  N: "[a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4]@2 ~ d3 [a3,d4,f4]@2 ~ d3", // Dm
  O: "[g3,a3,c4,e4] ~@3 [g3,a3,c4,e4] ~@3 [g3,a3,c4,e4] ~@3 [g3,a3,c4,e4] ~@3", // Am7
  P: "[[g3,a3,c4,e4] ~@3 [g3,a3,c4,e4] ~@3 [g3,a3,c4,e4]@2 ~@2 [g3,a3,c4,e4]@3 ~ f4 ~@3 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3, ~@11 a2@3 ~ bb2@3 ~@14]/2", // Am7 Bb
  Q: "[bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,d4]@3 ~, ~@11 bb2@4 ~, ~@12 f4 ~@3", // Bb
  R: "a2@2 ~@2 [a3,d4,e4] ~@3 [a3,d4,e4] ~@3 [a3,d4,e4] ~@2 a3", // Asus4
  S: "[a2 ~@2 [a3,db4,e4] ~@3 [a3,db4,e4]@4 ~ [a3,db4,e4]@2 ~@2 [d2,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4]@2 ~@2 [d4,f4]@3 a3, ~@11 a2@2 ~@2 [a2,a3]@2 ~@11 a3 ~@3]/2", // A Dm A
  T: "[c2,c3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [c4,e4]@3 c3, ~@12 g3 ~@3", // C
  U: "[f3,bb3,d4] ~@3 [f3,bb3,d4] ~@3 [f3,bb3,d4] ~@3 [f3,bb3,d4]@2 ~@2", // Bb
  V: "[e2,g3,c4] ~@3 [e2,e3,g3,bb3] ~@3 a2@2 ~@2 [a2,e3,f3,a3,db4] ~@3", // C Edim A
  W: "d3@2 ~@2 [a3,d4,f4] ~@3 [d3,a3,d4,f4] ~@3 [d3,d4,f4]@3 a3, ~@12 a3 ~@3", // Dm
  X: "[c3,g3,c4,e4] ~@3 [c3,g3,c4,e4] ~@3 [c3,g3,c4,e4] ~@3 [c3,e4]@3 ~, ~@12 [g3,c4] ~@3", // C C5
  Y: "[bb2,bb3,d4,f4] ~@3 [bb2,bb3,d4,f4] ~@3 [bb2,bb3,d4,f4] ~@3 [bb2,bb3,d4,f4] ~@3", // Bb
  Z: "[a2,a3,d4,e4] ~@3 [a2,a3,d4,e4] ~@3 [a2,a3,db4,e4] ~@3 [a2,a3,e4]@3 ~, ~@12 db4 ~@3", // Asus4 A A5
  AA: "[d2,a3,d4,f4] ~@3 [d2,a3,d4,f4] ~@3 [d2,a3,d4,f4] ~@3 [d2,a3,d4,f4]@2 ~ d3", // Dm
  AB: "[a3,d4,e4] ~@3 [a3,d4,e4] ~@3 [a3,d4,e4] ~@3 [a3,d4,e4]@2 ~ [d2,d3]", // Asus4 D
  AC: "[a3,d4,e4,g4] ~@3 [a3,d4,e4,g4] ~@3 [a3,d4,e4,g4] ~@3 [a3,d4,e4,g4]@2 ~ d3", // Asus4
  AD: "[g3,a3,db4,e4] ~@3 [d3,g3,a3,db4,e4] ~@3 [g3,a3,db4,e4]@2 ~@2 [g3,a3,db4,e4]@2 ~ d3, ~@11 d2@2 ~@3", // A7
  AE: "[d2,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4]@2 ~@2 [d4,f4]@3 a3, ~@12 a3 ~@3", // Dm
  AF: "[a2,a3,d4,e4] ~@3 [a2,a3,d4,e4] ~@3 [a2,a3,db4,e4] ~@3 [a2,a3,db4,e4]@2 ~@2", // Asus4 A
})).s("gm_acoustic_guitar_steel").gain(0.36).pan(0)

// bass · electric bass finger
const bass = note(`<
  ~@4 A B C D E F G@2 H I J K L M N@2 O@2 P Q R S T U V W X Y Z AA AB AC AD F G@2 H I J K L M N@2 O@2 P Q R AE T U V W X
  Y Z AA AB AC AD F G@2 H I J K L M N@2 O@2 P Q R S T U V W X Y Z S T U V W X Y Z S T U V W X Y Z S T U V W X Y Z S T U
  V W X ~
>`.pickRestart({
  A: "~@11 a1 c2@4", B: "d2@7 ~ c2@6 ~@2", C: "a1@6 ~@2 f1@3 ~ a1@2 ~@2", D: "g1@6 ~@2 a1@3 ~ f1@3 ~",
  E: "a1@4 ~@2 g1@2 f1@2 ~@2 e1@3 ~", F: "d2@4 ~@4 a1@5 ~@3", G: "[d2@4 ~@3 a1@5 ~@3 a1@5 ~@4 e1@5 ~@3]/2",
  H: "a1@5 ~@3 e1@4 a1@2 ~@2", I: "bb1@4 ~@4 f1@5 ~@3", J: "bb1@5 ~@3 f1@3 bb1@2 c2 ~@2", K: "~ f1@6 ~@2 c2@6 ~",
  L: "~ [g1,a1] ~ a1@2 ~@2 a1 g1@2 ~ f1 e1@3 ~", M: "d1@4 ~@4 d2@5 ~@3",
  N: "[a1@4 ~@4 d2@2 ~ g1@2 ~@2 a1@6 ~@3 e1@5 ~@3]/2",
  O: "[a1@5 ~@2 e1@2 ~@2 c2@4 ~ bb1@5 ~@3 f1@5 ~@3, ~@15 a1@2 ~@15]/2", P: "bb1@5 ~@2 f1@7 ~ bb1",
  Q: "a1@2 ~@2 a1 ~@3 a1 ~@3 a1 ~@3", R: "a1 ~@4 a1 ~@2 a1 ~@2 a1 c2@3 ~", S: "d2@5 ~@3 d1@3 ~ d2@3 ~",
  T: "c2@6 ~@2 g1@3 ~ c2@3 ~", U: "bb1@6 ~@3 f1@2 ~ bb1@3 ~", V: "~ e1@7 ~ a1@7", W: "~ d2@7 ~ a1 ~@2 d2@3 ~",
  X: "~ c2@7 g1@4 c2@3 ~", Y: "~ bb1@4 ~@4 f1@3 bb1@3 ~", Z: "a1 ~@3 a1 ~@3 a1 ~@3 a1@3 ~",
  AA: "d2 ~@3 d2 ~@3 d2 ~@4 d2@2 ~", AB: "a1 ~@3 a1 ~@3 a1 ~@3 a1@2 ~@2", AC: "a1 ~@3 a1 ~@4 a1 ~@3 a1 ~@2",
  AD: "~ a1 ~@3 a1 ~@2 a1 ~@3 a1@3 ~", AE: "d2@5 ~@3 d1@3 ~ d2@4",
})).s("gm_electric_bass_finger").gain(0.36)

// chords · trumpet
const trumpet = note("<~@33 A B C@2 ~@24 A B C@2 ~@24 D ~@3 D ~@3 D ~@3 D ~@3 D ~@3 D ~@3 D ~@3 D ~@2>".pickRestart({
  A: "[a4,d5,f5] ~@3 [a4,d5,f5] ~@2 db5 [a4,d5,f5] ~@3 [d5,f5] ~@3, ~@3 a4", // Dm
  B: "[d5,e5] ~@3 [a4,e5] ~@3 [a4,d5] ~@3 [a4,d5,e5] ~@3, a4 ~ d5 ~ e5 ~ f5 ~", // Dsus2 A5 D5 Asus4
  C: "[[a4,d5,e5,g5] ~@3 [a4,c5,d5,e5,g5] ~@3 [a4,d5,e5,g5] ~@3 [a4,d5,e5,g5] ~@3 [a4,db5,e5]@2 ~@2 [db5,e5] ~@3 [db5,e5] ~@3 [db5,e5]@2 ~@2, ~@6 g4@3 ~ a4@2 a4@2 a4@2]/2", // Asus4 Am7 Asus4 A Dbm
  D: "f5@6 ~ d5 ~@8, e5 ~@15",
})).s("gm_trumpet").gain(0.42)

// drums · kick
const kick = s("bd").struct("<~@5 [x!2]!114 ~>").gain(0.4)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@119>").gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@7 A ~@7 B ~@3 C ~@3 A ~@3 A ~@7 A ~@7 B ~@3 C ~@3 A ~@3 A ~@7 A ~@7 B ~@3 C ~@3 B ~@3 C ~@3 B ~@3 C ~@3 B ~@3
  C ~@3 B ~@3 C ~@2
>`.pickRestart({
  A: "x", B: "~ x ~@2", C: "x!2 ~@2",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 [~ x!3] [x!4]!114 ~>").gain(0.56)

stack(acoustic_guitar_steel, bass, trumpet, kick, rim, crash, tambourine)

More by Alain Souchon