Strudelify

Je Suis un Voyou

Brassens Georges

KeyC majorTempo95 bpm
0:00/0:00
// Je Suis un Voyou — Brassens Georges
// 95 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 75 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(95/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 nylon
const acoustic_guitar_nylon = note(`<
  A B C D E D E D E F G H I J K L M N O P@3 Q R S T U H I J K L M N O P@3 Q R S T U H I J K L M N O P@3 Q R S T U H I J
  K L M N O P@3 Q R S T V
>`.pickRestart({
  A: "~@4 e4@2 f4@2 [c3,c4,e4,g4]@2 e4 ~ [c#3,a#3,a4]@2 e4 ~", // C F#
  B: "[d3,g4]@2 f4@2 g4@2 f4 ~ [g2,g3,c4,e4]@2 ~@2 [g2,g3,b3,d4]@2 ~@2", // G5 C G
  C: "[c2,g3,a#3,c4]@2 ~@3 [d4,f4,a#4] ~ [c4,e4,g4]", D: "~ [c4,f4,a4] ~ [c4,f4,a4] ~ [d4,g4,b4] ~ [d4,g4,b4]",
  E: "~ [e4,g4,c5] ~ [e4,g4,c5] ~ [d4,f4,a#4] ~ [c4,e4,g4]", // C A# C
  F: "~@2 [c4,f4,a4]@2 ~@2 [b3,d4,g4]@4 [a3,c4,f4]@2 [g3,b3,e4]@2 [f3,a3,d4] ~", // F G F Em Dm
  G: "[e3,g3]!2 ~ [e3,g3] ~ [e3,g3] [c4,e4] [d4,f4], c4@5 ~@3", // Em C Dm
  H: "c3 [g3,c4,e4] g2 [c3,g3,c4,e4] d3 [a3,d4,f4] a2 [d3,a3,d4,f4]", // C Dm
  I: "g3 [b3,d4,g4] d3 [b3,d4,g4] c3 [c4,e4,g4] a#2 [a#3,d4,f4]", // G C A#
  J: "a2 [a3,c#4,e4,g4] a2 [a3,c#4,e4,g4] d3 [a3,d4,f4] c3 [a3,d4,f4]", // A7 Dm
  K: "d3 [a3,d4,f4] g2 [g3,b3,d4,f4] c3 [g3,c4,e4] g2 [g3,c4,e4]", // Dm G7 C
  L: "c3 [g3,c4,e4] a2 [a3,c4,e4] d3 [a3,d4,f4] d3 [a3,d4,f4]", // C Am Dm
  M: "g2 [b3,d4,f4,g4] d3 [b3,f4,g4] c3 [c4,e4,g4] g3 [c4,e4,g4]", // G7 C
  N: "c3 [c4,e4,g4] g3 [c4,e4,g4] f3 [c4,f4,a4] d3 [d4,f4,a4]", O: "c3 [c4,e4,g4] g2 [b3,d4,f4,g4] c3 [c4,e4,g4] ~@2",
  P: "[[c4,e4,a4] ~ [g4,b4] ~ [e4,a4] ~ [g4,b4] ~ [e4,a4] ~ [e2,b4] ~, ~@7 [b3,e4]@5 ~@3 [a3,c4]@5 ~@3 [b3,e4]@5 ~@3 [a3,c4]@5 ~@3 [e4,g4]@5 ~@4]/3", // Am G A5 G A5 E5 Am E5 …
  Q: "[d3,c4,d4,f#4,a4]@2 [d3,c4,d4,f#4,a4]@2 [g2,b3,d4,g4]@3 ~", // D7 G
  R: "c3 [g3,c4,e4] g2 [c3,g3,c4,e4] d3 [a3,d4,f4] a2 [a3,d4,f4]", // C Dm
  S: "g2 [g3,b3,d4] g2 [g3,b3,d4] c3 [g3,c4,e4] a#2 [a#3,d4,f4]", // G C A#
  T: "a2 [a3,c#4,e4,g4] a2 [a3,c#4,e4,g4] d3 [a3,d4,f4] d3 [a3,d4,f4]", // A7 Dm
  U: "[c3,g3,c4,e4] ~ [g2,g3,b3,d4] ~ [c2,g3,c4,e4]@2 ~@2", V: "[c3,g3,c4,e4] ~ [g2,g3,b3,d4] ~ [c3,g3,c4,e4]@2 c2@2",
})).s("gm_acoustic_guitar_nylon").gain(0.46).pan(0.4)

// bass · acoustic bass
const bass = note(`<
  ~@2 A B C B C B C D E F G H I J K L M ~@8 F G H I J K L M ~@8 F G H I J K L M ~@8 F G H I J K L M ~@8
>`.pickRestart({
  A: "~@8 g2@3 ~ c2@3 ~", B: "f2@3 ~ d2@3 ~ g2@3 ~ g2@3 ~", C: "c3@3 ~ c3@3 ~ g2@3 ~ c2@3 ~",
  D: "f2@3 ~ d2@2 g2@4 ~@2 g2@3 ~", E: "c3@3 ~ g2@3 ~ c3@4 ~@4", F: "c3@3 ~ g2@3 ~ d3@3 ~ a2@3 ~",
  G: "g2@3 ~ g2@3 ~ c3@3 ~ a#2@3 ~", H: "a2@3 ~ a2@3 ~ d3@3 ~ c3@3 ~", I: "g2@3 ~ g2@3 ~ c3@4 ~@4",
  J: "c3@3 ~ a2@3 ~ d3@3 ~ f3@3 ~", K: "d3@3 ~ g2@3 ~ c3@3 ~ g2@3 ~", L: "c3@3 ~ g2@3 ~ f2@3 ~ d2@3 ~",
  M: "c2@3 ~ g2@3 ~ c3@3 ~ c3@2 b2@2",
})).s("gm_acoustic_bass").gain(0.31).pan(0.4)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@35 A@3 B C D E F ~@8 A@3 B C D E F ~@8 A@3 B C D E G>".pickRestart({
  A: "[e4,a4,c5]@3 ~ [e4,g4,b4]@3 ~", B: "d4 f#4 f4 ~", C: "c5@3 e5 d5@2 a5@2", D: "g5@3 f5 e5@2 d5@2", E: "c#5 d5",
  F: "g4 [b3,f4] [c4,e4] ~", G: "g4 [b3,f4] [e4,g4,c5] ~",
})).s("gm_string_ensemble_2").gain(0.15).pan(0.6)

// chords · synth brass 2
const synth_brass_2 = note("<~@43 A B C D E F G H ~@8 A B C D E F G H ~@8>".pickRestart({
  A: "e4@2 ~ c4 f4@2 ~ b3", B: "f4 b3 c4 a#3", C: "c#4 e4 a4 ~ d4 a3 c4 ~", D: "g3@2 [d4,f4]@2 [c4,e4]@3 ~",
  E: "[c4,e4]@2 a3@2 f4 ~ [d4,g4]@2", F: "[g3,f4]@6 g4@2 [c4,g4]@2 e4@2 g4@2 e4 ~", G: "[c4,e4]@3 a#3 [f4,a4]@2 ~@2",
  H: "[c4,g4]@2 b3 ~ [c4,e4]@2 ~@2", // C5 C
})).s("gm_synth_brass_2").gain(0.2).pan(0.7)

// drums · kick
const kick = s("bd").struct("<A B A B@16 ~@8 B@8 ~@8 B@8 ~@8 B@8 ~@8>".pickRestart({
  A: "~ x", B: "x!2",
})).gain(0.31)

// drums · rim
const rim = s("rim").struct("<~@19 x!8 ~@8 x!8 ~@8 x!8 ~@8 x!8>").gain(0.31)

// drums · hihat
const hihat = s("hh").struct("<A@19 B@8 A@8 B@8 A@8 B@8 A@8 B@7 C>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x!4", C: "x!2 ~@2",
})).gain(0.31)

stack(acoustic_guitar_nylon, bass, string_ensemble_2, synth_brass_2, kick, rim, hihat)

More by Brassens Georges