Strudelify

Celui qui a mal tourne

Brassens Georges

KeyD majorTempo162 bpm
0:00/0:00
// Celui qui a mal tourne — Brassens Georges
// 162 bpm, 3/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 161 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(162/3)

// 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 nylon
const acoustic_guitar_nylon = note(`<
  A B C D E F G H A I J K L M@2 N O P Q R S T U V W X Y Z AA AB AC N A B C D E F G H A I J K L M@2 N O P Q R S T U V W X
  Y Z AA AB AC N A B C D E F G H A I J K L M@2 N O P Q R S T U V W X Y Z AA AB AC N A B C D E F G H A I J K L M@2 N O P
  Q R S T U V W X Y Z AA AB AC N A B C D E F G H A I J K L M@2 N O P Q R S T U V W X Y Z AA AB AC AD AE
>`.pickRestart({
  A: "~@5 [d3,f#3]@5 ~ [d3,f#3,d4]@5, b3@11 ~@5", B: "~@5 [f#3,b3]@5 ~ [f#3,b3,d4]@5, f#4@11 ~@5",
  C: "e4@5 [a3,c#4,f#4]@5 ~ [a3,e4,g4]@5", D: "~@5 [a3,d4]@5 ~ [a3,d4]@5, f#4",
  E: "~@5 [b3,d4]@5 ~ [b3,d4,f#4]@5, b4@11 ~@5", F: "d4@5 [e3,g3,c#4]@5 ~ [d3,g3,b3]@5",
  G: "c#4@5 [f3,g#3,b3]@5 ~ [f3,g#3,b3]@5, ~@5 d4@11", H: "~@5 [e3,a#3]@5 ~ [e3,f#3]@5, c#4",
  I: "f#4@5 [f#3,b3,d4]@5 ~ [f#3,b3]@5", J: "~@5 [a3,c#4]@5 ~ [a3,e4,g4]@5, a4@11 ~@5",
  K: "~@5 [a3,d4]@5 ~ b4@2 a4@3, f#4@11 [d4,f#4]@5", L: "g4@5 [d4,f#4,d5]@5 ~ [d4,f#4]@5",
  M: "[~@5 [f3,b3]@5 ~ [f3,b3]@5 ~@5 [e3,a#3]@5 ~ [e3,a#3]@5, d4@21 c#4@11]/2", N: "[d3,f#3,b3]@5 ~@11",
  O: "b3@5 c#4@5 ~ b3@5", P: "~@5 [c#3,e3]@5 ~ [c#3,e3]@5, a3", Q: "e4@5 [a3,c#4,f#4]@5 ~ [g3,c#4,e4]@5",
  R: "~@5 [f#3,a3]@5 ~ [f#3,a3]@5, d4", S: "~@5 [f#3,a3]@5 ~ [f#3,a3,d4]@5, f#4@11 ~@5",
  T: "f#4@5 [f#3,b3,d4]@5 ~ [b3,d4,f#4]@5", U: "~@5 [b3,f4]@5 ~ [b3,f4,g#4]@5, a4@11 ~@5", V: "[a#3,c#4,e4,f#4]@5 ~@11",
  W: "~@5 [b3,d4]@5 ~ [b3,d4]@5, b4@11 ~@5", X: "~@5 [e4,g#4]@5 ~ [e4,g#4,b4]@5, d5@11 ~@5",
  Y: "g4@5 [c#4,g4,a4]@5 ~ [c#4,g4,b4]@5", Z: "~@5 [a3,d4]@5 ~ d5@2 c#5@3, f#4@11 [d4,f#4]@5",
  AA: "b4@5 [d4,f#4,a4]@5 ~ [b3,d4,f#4]@5", AB: "~@5 [f3,b3]@5 ~ [f3,b3]@5, d4", AC: "~@5 [e3,a#3]@5 ~ [e3,a#3]@5, c#4",
  AD: "[d3,f#3,b3]@5 ~@6 [c#3,e3,f#3,a#3]@5", AE: "[b2,d3,f#3,b3]@5 ~@11",
})).s("gm_acoustic_guitar_nylon").gain(0.48).pan(0.8)

// bass · acoustic bass
const bass = note(`<
  A@2 B C A D E F A@2 B C A D G A ~ H@2 C@2 A I G A J B C A D G A@3 B C A D E F A@2 B C A D G A ~ H@2 C@2 A I G A J B C
  A D G A@3 B C A D E F A@2 B C A D G A ~ H@2 C@2 A I G A J B C A D G A@3 B C A D E F A@2 B C A D G A ~ H@2 C@2 A I G A
  J B C A D G A@3 B C A D E F A@2 B C A D G A ~ H@2 C@2 A I G A J B C A D G K A
>`.pickRestart({
  A: "b2@5 ~@11", B: "a2@5 b2@5 ~ c#3@5", C: "d3@5 ~@11", D: "g2@5 ~@11", E: "c#2@5 ~@11", F: "f#2@5 g#2@5 ~ a#2@5",
  G: "f#2@5 ~@11", H: "a2@5 ~@11", I: "c#3@5 ~@11", J: "e2@5 ~@11", K: "b2@5 ~@6 f#2@5",
})).s("gm_acoustic_bass").gain(0.64).pan(0.2)

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

// drums · snare
const snare = s("sd").struct(`<
  A@15 ~@2 A@6 ~ A@7 ~ A@15 ~@2 A@6 ~ A@7 ~ A@15 ~@2 A@6 ~ A@7 ~ A@15 ~@2 A@6 ~ A@7 ~ A@15 ~@2 A@6 ~ A@8 ~
>`.pickRestart({
  A: "x",
})).gain(0.49)

// drums · hihat
const hihat = s("hh").struct(`<
  A@15 ~@2 A@6 ~ A@7 ~ A@15 ~@2 A@6 ~ A@7 ~ A@15 ~@2 A@6 ~ A@7 ~ A@15 ~@2 A@6 ~ A@7 ~ A@15 ~@2 A@6 ~ A@8 ~
>`.pickRestart({
  A: "~@11 x ~@4",
})).gain(0.49)

// drums · low tom
const low_tom = s("lt").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~@2 A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~@2 A ~ A ~ A ~ A@2 ~
>`.pickRestart({
  A: "x",
})).gain(0.49)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@15 ~@2 A@6 ~ A@7 ~ A@15 ~@2 A@6 ~ A@7 ~ A@15 ~@2 A@6 ~ A@7 ~ A@15 ~@2 A@6 ~ A@7 ~ A@15 ~@2 A@6 ~ A@8 ~
>`.pickRestart({
  A: "~@5 x ~@10",
})).gain(0.49)

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

stack(acoustic_guitar_nylon, bass, kick, snare, hihat, low_tom, open_hat, crash)

More by Brassens Georges