Strudelify
KeyC majorTempo116 bpm
0:00/0:00
// Melanie — Brassens Georges
// 116 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 182 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitare 2.
setcpm(116/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.

// bass · acoustic bass · "basse"
const bass = note(`<
  A B C D E D F G H D I J K L M N O P Q B H G R S C D F G T N U N V N W D Q B X Y X G Z AA X G AB AC AD L AE AF AG D A B
  C D E D F G H D I J K L M N O P Q B H G R S C D F G T N U N V N W D Q B X Y X G Z AA X G AB AC AD L AE AF AG D A B C D
  E D F G H D I J K L M N O P Q B H G R S C D F G T N U N V N W D Q B X Y X G Z AA X G AB AC AD L AE AF AG D Q B X Y X G
  Z AA X G AB AC AD L AE AF AG D A AH
>`.pickRestart({
  A: "c3 g2 c2 g1", B: "c2@2 g2@2 c2@2 a1 b1", C: "c2 g2 a1 e1", D: "g2 d2 c2 g1", E: "c2 g2 a1 e2", F: "c2 g2 a2 e2",
  G: "g2 d2 c2 g2", H: "c2 g1 a1 e1", I: "a2@2 e2@2 a1!2 b1 c#2", J: "d2 a1 g1 d2", K: "a2 e2 a1 e1", L: "d2 a1 g2 d2",
  M: "a1@2 e1@2 a1!2 b1 c#2", N: "d2 a2 g2 d2", O: "a1 e1 d2 a1", P: "g1 d2 c2 g2",
  Q: "c3@4 b2@2 ~ a2 g2@2 f2@2 e2@2 d2 ~", R: "c3 g2 a1 e2", S: "g2 d2 c3 g2", T: "a1@2 e2@2 a2@2 b1 c#2",
  U: "a2 e2 a1 e2", V: "a1@2 e1@2 a2@2 b1 c#2", W: "a1 e2 d2 a2", X: "c2 g1 a1 e2", Y: "g1 d2 c3 g2", Z: "c2 g1 a2 e2",
  AA: "g1 d2 c2 g1", AB: "a1@2 e1@2 a1 d2@2 e2", AC: "d3 a2 g2 d2", AD: "a1 e2 a2 e2", AE: "a1@2 e2@2 a2 c#2 d2 e2",
  AF: "d3 a2 g1 d2", AG: "a1 e2 d2 a1", AH: "c3@7 ~",
})).s("gm_acoustic_bass").gain(0.54)

// chords · acoustic guitar steel · "guitare 1"
const acoustic_guitar_steel = note(`<
  A@2 B C B C B D B D E F G H E I J C A@2 B C B C B D B D E I G K E I J D A@2 B D B D B D B D E F G K E L J D A@2 B C B
  C B D B D E F G H E I J C A@2 B C B C B D B D E I G K E I J D A@2 B D B D B D B D E F G K E L J D A@2 B C B C B D B D
  E F G H E I J C A@2 B C B C B D B D E I G K E I J D A@2 B D B D B D B D E F G K E L J D A@2 B D B D B D B D E F G K E
  L J D A ~
>`.pickRestart({
  A: "c3@2 [e3,g3,c4] ~ g2@2 [e3,g3,c4] ~ c3@2 [e3,g3,c4] ~ g2@2 [e3,g3,c4] ~", // C
  B: "c3@2 [e3,g3,c4] ~ g2@2 [e3,g3,c4] ~ a2@2 [e3,a3,c4] ~ e2@2 [e3,a3,c4] ~", // C Am
  C: "g3@2 [f3,b3,d4] ~ d3@2 [f3,b3,d4] ~ c3@2 [e3,g3,c4] ~ g2@2 [e3,g3,c4] ~", // Bdim C
  D: "g3@2 [d3,f3,b3] ~ d3@2 [d3,f3,b3] ~ c3@2 [e3,g3,c4] ~ g2@2 [e3,g3,c4] ~", // Bdim C
  E: "a2@2 [e3,g3,c#4] ~ e2@2 [e3,g3,c#4] ~ a2@2 [e3,g3,c#4] ~ e2@2 [e3,g3,c#4] ~", // C#dim
  F: "d3@2 [d3,f3,a3] ~ a2@2 [d3,f3,a3] ~ g3@2 [d3,g3,a#3] ~ d3@2 [d3,g3,a#3] ~", // Dm Gm
  G: "a2@2 [e3,g3,c#4] ~ e2@2 [e3,g3,c#4] ~ a2@2 [e3,a3,c4] ~ e2@2 [e3,a3,c4] ~", // C#dim Am
  H: "d3@2 [f#3,a3,c4] ~ a2@2 [f#3,a3,c4] ~ g3@2 [d3,f3,b3] ~ d3@2 [d3,f3,b3] ~", // F#dim Bdim
  I: "d3@2 [d3,f3,a3] ~ a2@2 [d3,f3,a3] ~ g3@2 [g3,a#3,d4] ~ d3@2 [g3,a#3,d4] ~", // Dm Gm
  J: "a2@2 [e3,g3,c#4] ~ e2@2 [e3,g3,c#4] ~ d3@2 [f#3,a3,c4] ~ a2@2 [f#3,a3,c4] ~", // C#dim F#dim
  K: "d3@2 [f#3,a3,c4] ~ a2@2 [f#3,a3,c4] ~ g3@2 [f3,b3,d4] ~ d3@2 [f3,b3,d4] ~", // F#dim Bdim
  L: "d3@2 [f3,a3,d4] ~ a2@2 [f3,a3,d4] ~ g3@2 [d3,g3,a#3] ~ d3@2 [d3,g3,a#3] ~", // Dm Gm
})).s("gm_acoustic_guitar_steel").gain(0.18).pan(0.8)

// chords · acoustic guitar nylon · "guitare 2"
const acoustic_guitar_nylon = note(`<
  A ~@17 A ~@17 A ~@17 A ~@17 A ~@17 A ~@17 A ~@17 A ~@17 A ~@17 A ~@17 A B
>`.pickRestart({
  A: "[e3,g3] ~@7", B: "[c3,e3,g3,c4] ~@7",
})).s("gm_acoustic_guitar_nylon").gain(0.12).pan(0.2)

// other · acoustic guitar nylon · "guitare solo"
const acoustic_guitar_nylon_2 = note(`<
  ~@3 A ~ B@2 A ~ C D ~@2 E ~@6 F G H I J K L M N O P Q R S@2 T ~@2 F U H V W X L Y Z O P AA R S@2 T ~@3 AB ~ AC AD AE ~
  C D ~@2 AF ~@6 F G H I J K L M N O P Q R S@2 T ~@2 F U H V W X L Y Z O P AA R S@2 T ~@3 AB ~ AC AD AE ~ C D ~@2 AF
  ~@60
>`.pickRestart({
  A: "~@10 c5 ~ b4 ~ c5@2", B: "[~@10 g4!2 a4 ~ b4@5 ~@13]/2", C: "~@8 c5 ~ c5!3 ~ c5 ~", D: "a4 ~@3",
  E: "a4 ~ a4!2 a4@2 a4@2 g4@2 e4 ~ d#4 ~ e4 ~", F: "c4@2 c4@2 g3@2 ~@2 c4@2 ~@2 e4@3 ~",
  G: "d3@3 c4 ~ g4 ~@2 c4@2 ~@2 c4 ~@3", H: "e4 ~ e4!2 g3@3 ~ c4@3 ~ e4@2 ~ d#4", I: "d4@3 ~ c4 ~ g4 ~ c4@3 ~@5",
  J: "e4 ~ e4!2 g3@3 ~ c4@3 ~ e4@2 e4@2", K: "d4@2 ~@3 g3 ~@2 c4@2 c4@2 c4@2 ~@2, ~@2 g4 ~@5",
  L: "e4@3 ~ g4@3 ~ c5@3 ~ c5@2 c5!2", M: "g4@3 ~ d4@2 f4 ~ c4@3 ~@5", N: "c4@2 ~@2 d4 ~ e4@2 a4 ~ g4@2 a4@2 g4 ~",
  O: "g4 ~ d4@2 c4 ~ d4 ~ g4 ~ g4!3 ~ g4@2", P: "e4@2 ~ a4!2 a4@2 ~ b4 ~ a4 ~ b4@2 e4 ~", Q: "d4 ~@3",
  R: "a3@2 ~ c#4@2 ~ e4@2 a4 ~ g4 ~ e4@2 g4 ~",
  S: "[f4 ~@3 g3 a3 ~ c4 g4 f4@2 ~ d4 f4 ~ e4@2 ~@2 a4!3 ~ e4@2 ~ g4 c4@5]/2", T: "~@2 g4 ~ c4@2 ~@2",
  U: "d3@3 c4 ~ g4 ~@2 c4@2 c5@2 [c4,b4]@2 c5 ~", V: "d4@3 ~ c4 ~ g4 ~ c4@2 g3!2 a3 ~ b3 ~",
  W: "c4@2 e4!2 g3@3 ~ c4@3 ~ e4@2 e4@2, e4 ~@15", X: "d4@2 ~@3 g3 ~@2 c4@2 [c4,c5]@2 [c4,b4]@2 c5@2, ~@2 g4 ~@5",
  Y: "g4@3 ~ d4@2 f4 ~ c4@2 c5!3 ~ c5 ~, ~@8 c5 ~@7", Z: "a4@4 d4 ~ e4@2 a4 ~ g4@2 a4@2 g4 ~, c4 ~@7",
  AA: "a4 ~ a4!2 a4@2 a4@2 g4@7 ~, d4 ~@3", AB: "~@10 c5@2 b4@2 c5 ~", AC: "~@10 g3!2 a3 ~ b3 ~", AD: "c4@3 ~@13",
  AE: "~@5 c5 b4 c5", AF: "a4 ~ a4!2 a4@2 a4@2 g4@7 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.15)

// chords · tuba
const tuba = note("<~@164 A B C D C D E D F G H I F G J B K ~>".pickRestart({
  A: "c3 [g3,c4,e4] g2 [g3,c4,e4] a2 [e3,a3,c4] e2 [e3,a3,c4]", // C Am
  B: "g3 [f3,b3,d4] d3 [f3,b3,d4] c3 [g3,c4,e4] g2 [g3,c4,e4]", // Bdim C
  C: "c3 [g3,c4,e4] g2 [g3,c4,e4] a2 [a3,c4,e4] e2 [a3,c4,e4]", // C Am
  D: "g3 [f3,b3,d4] d3 [f3,b3,d4] c3 [e3,g3,c4] g2 [e3,g3,c4]", // Bdim C
  E: "c3 [e3,g3,c4] g2 [e3,g3,c4] a2 [e3,a3,c4] e2 [e3,a3,c4]", // C Am
  F: "a2 [e3,g3,c#4] e2 [e3,g3,c#4] a2 [e3,g3,c#4] e2 [e3,g3,c#4]", // C#dim
  G: "d3 [f3,a3,d4] a2 [f3,a3,d4] g3 [g3,a#3,d4] d3 [g3,a#3,d4]", // Dm Gm
  H: "a2 [g3,c#4,e4] e2 [g3,c#4,e4] a2 [a3,c4,e4] e2 [a3,c4,e4]", // C#dim Am
  I: "d3 [f#3,a3,c4] a2 [f#3,a3,c4] g3 [f3,b3,d4] d3 [f3,b3,d4]", // F#dim Bdim
  J: "a2 [g3,c#4,e4] e2 [g3,c#4,e4] d3 [f#3,a3,c4] a2 [f#3,a3,c4]", K: "[c3,e3,g3,c4] ~@7",
})).s("gm_tuba").gain(0.15)

// other · trombone · "trombones"
const trombone = note(`<
  ~@129 A ~ B@2 A ~ C D ~@2 E ~@6 F G H I J K L M N O P Q R S@2 T ~@2 F U H V W X L Y Z O P AA R S@2 T ~@2
>`.pickRestart({
  A: "~@10 c5 ~ b4 ~ c5@2", B: "[~@10 g4!2 a4 ~ b4@5 ~@13]/2", C: "~@8 c5 ~ c5!3 ~ c5 ~", D: "a4 ~@3",
  E: "a4 ~ a4!2 a4@2 a4@2 g4@2 e4 ~ d#4 ~ e4 ~", F: "c4@2 c4@2 g3@2 ~@2 c4@2 ~@2 e4@3 ~",
  G: "d3@3 c4 ~ g4 ~@2 c4@2 ~@2 c4 ~@3", H: "e4 ~ e4!2 g3@3 ~ c4@3 ~ e4@2 ~ d#4", I: "d4@3 ~ c4 ~ g4 ~ c4@3 ~@5",
  J: "e4 ~ e4!2 g3@3 ~ c4@3 ~ e4@2 e4@2", K: "d4@2 ~@3 g3 ~@2 c4@2 c4@2 c4@2 ~@2, ~@2 g4 ~@5",
  L: "e4@3 ~ g4@3 ~ c5@3 ~ c5@2 c5!2", M: "g4@3 ~ d4@2 f4 ~ c4@3 ~@5", N: "c4@2 ~@2 d4 ~ e4@2 a4 ~ g4@2 a4@2 g4 ~",
  O: "g4 ~ d4@2 c4 ~ d4 ~ g4 ~ g4!3 ~ g4@2", P: "e4@2 ~ a4!2 a4@2 ~ b4 ~ a4 ~ b4@2 e4 ~", Q: "d4 ~@3",
  R: "a3@2 ~ c#4@2 ~ e4@2 a4 ~ g4 ~ e4@2 g4 ~",
  S: "[f4 ~@3 g3 a3 ~ c4 g4 f4@2 ~ d4 f4 ~ e4@2 ~@2 a4!3 ~ e4@2 ~ g4 c4@5]/2", T: "~@2 g4 ~ c4@2 ~@2",
  U: "d3@3 c4 ~ g4 ~@2 c4@2 c5@2 b4@2 c5 ~, ~@12 c4 ~@3", V: "d4@3 ~ c4 ~ g4 ~ c4@2 g3!2 a3 ~ b3 ~",
  W: "c4@2 e4!2 g3@3 ~ c4@3 ~ e4@2 e4@2, e4 ~@15", X: "d4@2 ~@3 g3 ~@2 c4@2 [c4,c5]@2 [c4,b4]@2 c5@2, ~@2 g4 ~@5",
  Y: "g4@3 ~ d4@2 f4 ~ c4@2 c5!3 ~ c5 ~, ~@8 c5 ~@7", Z: "a4@4 d4 ~ e4@2 a4 ~ g4@2 a4@2 g4 ~, c4 ~@7",
  AA: "a4 ~ a4!2 a4@2 a4@2 g4@7 ~, d4 ~@3",
})).s("gm_trombone").gain(0.19)

// drums · kick
const kick = s("bd").struct(`<
  ~@18 A@6 B A@3 C A@3 D A@3 E A@9 F A@7 G A@13 D A@9 H A@7 I A@3 J A@5 B A@17 B A@3 C A@3 D A@3 E A@9 F A@7 G A@13 D
  A@9 H A@7 I A@3 J ~
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x!2 ~@2", C: "~ x ~ x ~ x ~ x", D: "x ~ x ~@2 x ~@2", E: "~@5 x ~@2", F: "~ x ~ x ~@4",
  G: "~@2 x!2 ~@6 x ~@5", H: "x ~@3 x ~@3 x ~@4 x ~@2", I: "x ~@3 x ~@5 x ~@2 x ~@2", J: "x!2 ~@2 x ~@3",
})).gain(0.37)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@18 A@3 B@2 C D E C@2 ~ C E B F C@3 ~ E B E C E G E C E ~ C E C D B C@2 ~ C@5 H C@3 ~ E@3 I E@2 B ~ C B C B@2 D B@2 C
  ~ B@3 J E C@2 ~ C B E C E F E@3 ~ E B E J B E B A@3 B@2 C D E C@2 ~ C E B F C@3 ~ E B E C E G E C E ~ C E C D B C@2 ~
  C@5 H C@3 ~ E@3 I E@2 B ~ C B C B@2 D B@2 C ~ B@3 J E C@2 ~@2
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x!2 ~ x!4 ~", C: "x!3 ~ x!3 ~", D: "x!2 ~ x!2 ~@3", E: "x!7 ~", F: "x!3 ~@5",
  G: "x!3 ~ x ~@3", H: "x!3 ~ x!2 ~@2", I: "x!4 ~@4", J: "x!2 ~ x ~@4",
})).gain(0.33)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@21 A@2 B C D B@2 ~ B D A E B@3 ~ D A D B D E D B D ~ B D B C A B@2 ~ B@5 E B@3 ~ D@3 ~ D@2 A ~ B A B A@2 C A@2 B ~
  A@3 C D B@2 ~ B A D B D E D@3 ~ D A D C A D A ~@3 A@2 B C D B@2 ~ B D A E B@3 ~ D A D B D E D B D ~ B D B C A B@2 ~
  B@5 E B@3 ~ D@3 ~ D@2 A ~ B A B A@2 C A@2 B ~ A@3 C D B@2 ~@2
>`.pickRestart({
  A: "~@2 x ~@4 x", B: "~@3 x ~@3 x", C: "~ x ~@2", D: "~@7 x", E: "~@3 x ~@4",
})).gain(0.16)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@20 A@4 B A@3 C A@3 D A@3 E A@5 F A@3 G A@3 H A@3 I A@5 J A@3 K A@3 L A@3 M A@5 N A@3 M A@3 O A@3 P A@5 Q A@3 R A@3 S
  A@3 ~@2 A@4 B A@3 C A@3 D A@3 E A@5 F A@3 G A@3 H A@3 I A@5 J A@3 K A@3 L A@3 M A@5 N A@3 M A@3 O A@3 P ~
>`.pickRestart({
  A: "~ x!3 ~ x!3 ~ x!3 ~ x!3", B: "~ x!3 ~ x!3 ~ x ~@6", C: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", D: "~ x!3 ~ x!4 ~@7",
  E: "x!10 ~ x!5", F: "~ x!3 ~ x!3 ~ x!4 ~ x ~", G: "x!2 ~ x!3 ~ x!9", H: "~ x!3 ~ x!3 ~ x!2 ~ x!2 ~@2",
  I: "x ~@8 x ~@6", J: "~ x!3 ~ x!3 ~ x!4 ~@3", K: "x!15 ~", L: "~ x!3 ~ x!4 ~@6 x", M: "x!3 ~ x!3 ~ x!5 ~ x ~",
  N: "~ x!3 ~ x!3 ~ x!2 ~@5", O: "~ x!3 ~ x!5 ~ x!2 ~ x!2", P: "~ x ~@2", Q: "~ x!3 ~ x!3 ~@4 x ~@3",
  R: "x!3 ~ x!3 ~ x!3 ~ x!3 ~", S: "~ x!3 ~ x!11",
})).gain(0.12)

stack(
  bass, acoustic_guitar_steel, acoustic_guitar_nylon, acoustic_guitar_nylon_2, tuba, trombone, kick, hihat, hihat_soft,
  shaker
)

More by Brassens Georges