Strudelify

A Votre Bon Coeur

Salvatore Adamo

KeyG majorTempo190 bpm
0:00/0:00
// A Votre Bon Coeur — Salvatore Adamo
// 190.1 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(190.1/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
const bass = note(`<
  A B C D E F G H I J K L M N O P Q R S T M N O P Q R S U E F G H I J K L E F G H I V W@3 D M N O P Q R S T M N O P Q R
  S U E F G H I J K L E F G H I V S M@2 N O P X Y Z Y AA AB E F G H I J K AB E F G H I ~
>`.pickRestart({
  A: "g1@4 ~@2 g1@2 d2@4 b1@3 ~", B: "c2@2 ~ c2 e2@2 ~ e2", C: "d2@5 ~ e2@2 d2@2 c2@2 b1@2 a1@2", D: "g1 ~@7",
  E: "c2@5 ~@3 g1@7 ~", F: "c2@7 ~ c2@7 ~", G: "b1@5 ~ d2@2 f#2@7 ~", H: "d2@8 b1@7 ~", I: "a1@7 ~ e2@7 ~",
  J: "a1@7 ~ d2@7 ~", K: "g1@7 ~ d2@4 b1@3 ~", L: "g1 ~@3", M: "g1@3 ~@5 d2@3 ~@3 b1@2",
  N: "g1@3 ~ d2@2 ~@2 b1@3 ~ g1@3 ~", O: "d2@2 ~ d2 a1@2 ~@2", P: "d2@4 ~@2 d2@2 a1@3 ~ a1@3 ~",
  Q: "d2@5 ~ d2@2 a1@3 ~ a1@3 ~", R: "d2@3 ~ c2@3 ~ b1@3 ~ a1@3 ~", S: "g1@2 ~@2 d2@2 ~ d2",
  T: "g1@3 ~ g1@3 ~ d2@4 g1@3 ~", U: "g1@3 ~@13", V: "[a5,d6,f#6] ~@7, d2@5 ~@11", W: "g1 g2 f#2 e2 d2 c2 b1 a1",
  X: "d2@5 ~@3 a2@4 ~@2 a2@2", Y: "d2@3 ~@13", Z: "~@8 f#2@3 ~@3 f#2@2", AA: "g1 ~ b1!2 d2!2 b1!2",
  AB: "g2@3 ~ f2@3 ~ e2@3 ~ d2@3 ~",
})).s("gm_acoustic_bass").gain(0.36)

// chords · piano
const piano = note(`<
  A B C D E F G@2 H I J K L M N O@2 P Q R S T U V O W X Y E F G@2 H I J K E F G@2 H ~ Z AA@2 AB L M N O@2 P Q R S T U V
  O W X Y E F G@2 H I J K E F G@2 H ~ X AC L M N O AD AE AF AE AG AH E F G@2 H I J AH E F G@2 H ~
>`.pickRestart({
  A: "[g1,g2,g3]@3 ~@3 [g2,g3] ~ [d2,d3,d4]@4 [b1,b2,b3]@3 ~, ~@3 g1 ~@4", // G D B
  B: "[c2,c3,c4]@2 ~ [c2,c4] [e2,e4]@2 ~ [e2,e4], ~@6 c3 ~ e3@2 ~@4 e3 ~", // C E
  C: "[d2,d4]@2 ~ [e2,e4] [d2,d4] [c2,c3,c4] [b1,b2,b3] [a1,a2,a3], d3@2 ~@4 e3 ~ d3 ~@5 g2 ~", D: "[g1,g2,g3]@3 ~@13",
  E: "[g5,c6,e6,g6] ~@3 [g5,c6,e6,g6] ~ [g5,c6,e6,g6] ~@3 [g5,c6,e6,g6] ~ [g5,c6,e6,g6] ~ [g5,c6,e6,g6] ~", // C
  F: "[g5,c6,e6,g6] ~@3 [g5,c6,e6,g6] ~ [g5,c6,e6,g6] ~@3 [g5,c6,e6,g6] ~ [g5,c6,e6,g6] ~ [c6,e6,g6] ~", // C
  G: "[b5,d6,f#6] ~@3 [b5,d6,f#6] ~ [b5,d6,f#6] ~@3 [b5,d6,f#6] ~ [b5,d6,f#6] ~ [b5,d6,f#6] ~", // Bm
  H: "[a5,c6,e6,a6] ~@3 [a5,c6,e6,a6] ~ [a5,c6,e6,a6] ~@3 [a5,c6,e6,a6] ~ [a5,c6,e6,a6] ~ [a5,d6,e6,f#6,a6] ~", // Am D
  I: "[a5,d6,f#6] ~@3 [a5,d6,f#6] ~ [a5,d6,f#6] ~@3 [a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~", // D
  J: "[b5,d6,g6] ~@3 [b5,d6,g6] ~ [b5,d6,g6] ~@3 [b5,d6,g6] ~ [b5,d6,g6] ~ [b5,d6,g6] ~", K: "[b5,d6,g6] ~@15",
  L: "[d6,g6,b6] ~@3 [d6,g6,b6] ~ [d6,g6,b6] ~ d2@2 g6 ~ g6 ~ b1@2, g1@3 ~@13", // G
  M: "[g6,b6] ~@3 [d6,g6,b6] ~ [d6,g6,b6] ~ b1@2 [g6,b6] ~ g1@2 d6@2, g1@3 ~ d2@2 ~@10", // G
  N: "[f#6,a6] ~@3 a6 ~ d2@2 ~@2 a6 ~ a6 ~ a6 ~, d2@4 ~@2 a6 ~ a1@4 ~@4", // F#m
  O: "d2@4 a6 ~ d2@2 a1@2 a6 ~ a1@2 a6 ~, a6 ~@5 a6 ~@5 a6 ~@3",
  P: "d2@3 ~ c2@2 a6 ~ b1@2 a6 ~ a1@2 a6 ~, a6 ~@3 a6 ~@7 a6 ~@3",
  Q: "[d6,g6,b6] ~@3 [g6,b6] ~ [d6,g6,b6] ~@3 [g6,b6] ~ [g6,b6] ~ [g6,b6] ~, g1@2 ~@2 d2@2 ~ d2", // G
  R: "g1@3 ~ [g6,b6] ~ [g6,b6] ~@3 [g6,b6] ~ g1@2 g6 ~, g6 ~@3 g1@2 ~@2 d2@4 g6 ~@3", // G
  S: "[g6,b6] ~@3 [g6,b6] ~ [g6,b6] ~ d2@2 [g6,b6] ~@3 b1@2, g1@3 ~@11 g6 ~", // G
  T: "[d6,g6,b6] ~@3 [g6,b6] ~ [d6,g6,b6] ~ b1@2 g6 ~ g1@2 g6 ~, g1@3 ~ d2@2 ~@6 g6 ~@3", // G
  U: "[d6,a6] ~@3 a6 ~ d2@2 ~@2 a6 ~ a6 ~ a6 ~, d2@4 ~@2 a6 ~ a1@4 ~@4", // D5
  V: "[d6,a6] ~@3 a6 ~ [d6,a6] ~ a1@2 a6 ~ a1@2 a6 ~, d2@4 ~@2 d2@2 ~@4 a6 ~@3", // D5
  W: "d2@3 ~ c2@2 a6 ~ b1@2 [d6,a6] ~ [a1,a6]@3 ~, a6 ~@3 a6 ~@11", // D5 A
  X: "[d6,g6,b6] ~@3 [d6,g6,b6] ~ [d6,g6,b6] ~@3 [d6,g6,b6] ~ [d6,g6,b6] ~ d2@2, g1 ~ d2 ~", // G
  Y: "[d6,g6,b6] ~@15, g1@3 ~@13", // G
  Z: "[g2,b4] [g3,b5,b6] [f#3,a5,a6] [e3,g5,g6] [d3,f#5,f#6] [c3,e5,e6] [b2,d5,d6] [a2,c5,c6]", // G F#m Em D C Bm Am
  AA: "[g2,b4,b5] [g3,b5,b6] [f#3,a5,a6] [e3,g5,g6] [d3,f#5,f#6] [c3,e5,e6] [b2,d5,d6] [a2,c5,c6]", // G F#m Em D C Bm Am
  AB: "[g2,b4,b5] ~@7", AC: "[d6,g6,b6] ~@3 [g6,b6] ~ [g6,b6] ~ d2@2 [g6,b6] ~@3 b1@2, [g1,b5]@3 ~@11 g6 ~",
  AD: "[d1,d2]@5 ~@3 [a1,a2]@4 ~@2 [a1,a2]@2", AE: "[d1,d2]@3 ~@13", AF: "~@4 [f#1,f#2]@2 ~ [f#1,f#2]",
  AG: "[d5,g5,b5] ~@3 [d5,g5,b5] ~ [d5,g5,b5] ~@3 [d5,g5,b5] ~ [g5,b5] ~ [g5,b5] ~", // G
  AH: "[d5,g5,b5] ~@3 [d5,g5,b5] ~ [d5,g5,b5] ~@3 [d5,g5,b5] ~ [g5,b5] ~ [d5,g5,b5] ~", // G
})).s("gm_piano").gain(0.32)

// chords · piano · soft notes
const piano_soft = note(`<
  ~@12 A B C D E F G H I J K L M N ~@20 A B C D E F G H I J K L M N ~@17 O A B C D ~@4 P Q ~@7 Q ~@6
>`.pickRestart({
  A: "~@10 b6 ~ [d6,b6] ~ [d6,g6,b6] ~", B: "d6 ~@9 d6 ~ [g6,b6]@3 ~",
  C: "~@4 f#6 ~ [d6,f#6] ~@3 [d6,f#6] ~ [d6,f#6] ~ [d6,f#6] ~", D: "[d6,f#6] ~@3 f#6 ~ [d6,f#6] ~@3 f#6 ~ f#6 ~ f#6 ~",
  E: "[c6,d6,f#6] ~@3 [d6,f#6] ~ [c6,d6,f#6] ~@3 f#6 ~ [d6,f#6] ~ [d6,f#6] ~", // D7 D D7 D
  F: "[d6,f#6] ~@3 f#6 ~ [c6,d6,f#6] ~@3 f#6 ~ f#6 ~ f#6 ~", G: "~@4 d6 ~@5 d6 ~ d6 ~ d6 ~",
  H: "[d6,b6] ~@3 d6 ~ d6 ~@3 d6 ~ [d6,b6] ~ [d6,b6] ~", I: "d6 ~@3 d6 ~ d6 ~@5 [d6,g6,b6] ~ [d6,b6] ~",
  J: "~@4 d6 ~@5 b6 ~ [d6,b6] ~ b6@2, ~@14 d6 ~", // G
  K: "[c6,f#6] ~@3 f#6 ~ [c6,d6,f#6] ~@3 [d6,f#6] ~ [d6,f#6] ~ [d6,f#6] ~", // Cdim D7 D
  L: "f#6 ~@3 [d6,f#6] ~ f#6 ~@3 [d6,f#6] ~ [d6,f#6] ~ [d6,f#6] ~", // D
  M: "[d6,f#6] ~@3 [d6,f#6] ~ [d6,f#6] ~@3 [d6,f#6] ~ [d6,f#6] ~ [d6,f#6] ~", // D
  N: "[d6,f#6] ~@3 [d6,f#6] ~ [d6,f#6] ~@3 f#6 ~ f#6 ~ d6 ~", O: "~@4 d6 ~ d6 ~@5 [d6,g6,b6] ~ [d6,b6] ~",
  P: "~@12 d5 ~ d5 ~", Q: "~@12 d5 ~@3",
})).s("gm_piano").gain(0.16)

// chords · rock organ
const rock_organ = note(`<
  ~@4 A@4 B@4 C@6 D@4 E@4 F G H@4 I J@3 K@2 L@2 I M ~@4 C@6 D@4 E@4 F G H@4 I J@3 K@2 L@2 I M F ~ N@5 ~@3 O@2 H@4 I J@3
  H@4 I P
>`.pickRestart({
  A: "[~ c5@30 ~@2 f#5@31, ~ [g4,e5]@31 d5@32, ~@31 b4@31 ~@2]/4", // C
  B: "[e5@16 f#5@16 [g4,b4]@17 ~@15, [a4,c5] ~, ~@8 d5@17 ~@7]/4", C: "[[g5,b5] [f#5,a5]@2, d5]/6",
  D: "[~ b5@63, g5]/4", E: "[f#5,a5]/4", F: "[g5,b5]@15 ~", G: "[d5,g5,b5] ~@15",
  H: "[[e5,c6] [d5,f#5,b5], g5@15 ~@17]/4", I: "[c5,e5,a5]", J: "[f#5 [g5,b5] ~, d5@11 ~@5]/3",
  K: "[~ c6, g5, c5 ~, ~ e5@30 ~]/2", L: "[~ d5@31, [f#5,b5]]/2", M: "[d5,f#5] ~@7",
  N: "[[g5,b5]@32 a5@33 ~@15, d5@21 ~@19, ~@32 f#5@3 ~@45]/5", O: "[b4,d5,g5]/2", P: "[d5,f#5] ~@15",
})).s("gm_rock_organ").gain(0.2)

// other · trumpet
const trumpet = note("<~@3 A B C D E F G H ~@76 A I C D E J G H A I C D E J ~>".pickRestart({
  A: "~@2 [g4,g5] ~ [g4,g5]@3 [f4,f5], ~@4 [f#4,f#5] ~@11", B: "[e4,e5]@4 [c4,c5] ~ [c4,c5]@2 ~@8",
  C: "~@4 [f#4,f#5] ~@3 [f#4,f#5]@5 ~ [e4,e5]@2", D: "[d4,d5]@4 [b3,b4] ~ [b3,b4]@2 ~@8",
  E: "~@4 [e4,d#5,e5] ~@3 [e4,e5]@5 ~ [d4,d5]@2", F: "~ d5 ~@2 [a3,a4] ~ [a3,a4]@2 ~@8, [c4,c5] ~@3",
  G: "~@4 [c#4,c#5,d5] ~@3 [d4,d5]@5 ~ [c4,c5]@2, ~@2 d4 ~@5", H: "[b3,b4]@3 ~ [g3,g4] ~ [g3,g4]@2 ~@8, c5 ~@15",
  I: "~ e5@3 [c4,c5] ~ [c4,c5]@2 ~@8, e4 ~@3", J: "~ c5@3 [a3,a4] ~ [a3,a4]@2 ~@8, c4 ~@3, ~ d5 ~@14",
})).s("gm_trumpet").gain(0.4).pan(0.4)

// other · alto sax
const alto_sax = note(`<
  ~@3 A B C D E F G H ~@3 I J ~@2 K L ~@2 M N ~@4 O P Q R S T U V ~@12 I J ~@2 K L ~@2 W N ~@4 O P Q R S T U V ~@17 A X
  C D E F G H A X C D E F ~
>`.pickRestart({
  A: "~@4 g4@2 ~@2 g4@5 ~ f4@2, ~@4 f#4 ~@11", B: "e4@4 c4 ~ c4@2 ~@8", C: "~@4 f#4@2 ~@2 f#4@5 ~ e4@2",
  D: "d4@4 b3 ~@2 b3 ~@8", E: "~@4 [d#4,e4] ~@3 e4@5 ~ d4@2", F: "c4@4 a3 ~ a3@2 ~@8",
  G: "~@4 d4@2 ~@2 d4@5 ~ c4@2, ~@4 c#4 ~@11", H: "b3@4 g3 ~ g3@3 ~@7",
  I: "~ [e3,e4] [d3,d4] [e3,e4], ~@4 [d#3,d#4] ~@11", J: "[d3,d4] ~@7", K: "~ [b2,b3] [d3,d4] [b2,b3]",
  L: "[g3,g4] ~@7", M: "~@2 [d3,d4] [e3,e4] [f#3,f#4] [g3,g4] [a3,a4] [b3,b4]", N: "[c4,c5]@3 ~@13",
  O: "~@6 [b2,b3,b4] [a2,a3,a4], ~@10 [c3,c5]@3 ~@3, ~@11 c4@3 ~@2", P: "[g2,g3,g4] ~",
  Q: "~@10 [b2,b3,b4]@2 a#3 ~ [a2,a4]@2, ~@6 [a#2,a#4] ~, ~@13 a3@3", R: "[g#2,g#4] ~, g#3 ~@3",
  S: "~@10 [a2,a3,a4]@2 g#3 ~ [g2,g4]@2, ~@6 [g#2,g#4] ~, ~@13 g3@3", T: "[f#2,f#3,f#4] ~",
  U: "~@5 [a#2,a#3,a#4] [b2,b3,b4] [d3,d4,d5]", V: "~ g3@2 ~@13, g4@3 ~@13, ~ g5 ~@14",
  W: "~@4 [f#3,f#4] [g3,g4] [a3,a4] [b3,b4], ~@2 d3 e3 ~@4, ~@5 d4@2 e4@2 ~@7", X: "~ e4@3 c4 ~@2 c4@2 ~@7",
})).s("gm_alto_sax").gain(0.4).pan(0.6)

// other · brass section
const brass_section = note("<~@3 A@2 B C D E F G ~@76 H@2 B C D E F G H@2 B C D E ~>".pickRestart({
  A: "[~@4 g3@2 ~@2 g3@5 ~@2 f3@2 e3@3 c3 ~ c3@3 ~@7, ~@4 f3 ~@27]/2", B: "~@4 f#3@2 ~@2 f#3@5 ~ e3@2",
  C: "d3@4 b2 ~ b2@2 ~@8", D: "~@4 e3@2 ~@2 e3@5 ~ d3@2", E: "c3@4 ~ a2 a2@2 ~@8", F: "~@4 d3@2 ~@2 d3@5 ~ c3@2",
  G: "b2@4 g2 ~ g2@3 ~@7", H: "[~@4 g3@2 ~@2 g3@5 ~@2 f3@2 e3@4 c3 c3@3 ~@7, ~@4 f3 ~@27]/2",
})).s("gm_brass_section").gain(0.19).pan(0.6)

// other · xylophone · B A G F# E D C B …
const xylophone = note(`<
  ~@42
  [b4 [b5,b6] [a5,a6] [g5,g6] [f#5,f#6] [e5,e6] [d5,d6] [c5,c6]]
  [[b4,b5] [b5,b6] [a5,a6] [g5,g6] [f#5,f#6] [e5,e6] [d5,d6] [c5,c6]]!2
  [[b4,b5] ~@7]
  ~@56
>`).s("gm_xylophone").gain(0.22)

// drums · kick
const kick = s("bd").struct("<A@3 B A@7 B A@15 B A@7 B A@5 B A@3 B A@15 B A@7 B A@5 B A@6 C B D B A@15 ~>".pickRestart({
  A: "x!2", B: "x", C: "x ~@3 x ~@2 x", D: "~@4 x ~@2 x",
})).gain(0.28)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@4 A@7 ~@17 A@7 ~ A@5 ~@21 A@7 ~ A@5 ~@13 A@7 ~ A@5 ~>".pickRestart({
  A: "~ x ~ x",
})).gain(0.16)

// drums · snare
const snare = s("sd").struct(`<
  A B A C B@7 D A@3 B A@3 B A@3 B A@3 C B@7 C B@5 D A@3 D A@3 B A@3 B A@3 B A@3 C B@7 C B@5 D A@5 B ~@3 E A B@8 F B@5 ~
>`.pickRestart({
  A: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", B: "x ~ x!3 ~ x ~ x ~ x!3 ~ x ~", C: "x ~@9 x!3 ~ x ~", D: "x",
  E: "~@6 x!3 ~ x ~ x ~ x ~", F: "x!13 ~ x ~",
})).gain(0.2)

// drums · clap
const clap = s("cp").struct("<~@4 A@7 B ~@16 A@7 ~ A@5 B ~@3 B ~@16 A@7 ~ A@5 B ~@12 A@7 ~ A@5 ~>".pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<A@3 ~ A@7 ~ A@15 ~ A@7 ~ A@5 ~ A@3 ~ A@15 ~ A@7 ~ A@5 ~ A@6 ~@4 A@15 ~>".pickRestart({
  A: "x!8",
})).gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<~@82 [x ~@3 x ~@2 x] x [~@4 x ~@2 x] [~@4 x!2 ~ x] ~@16>").gain(0.24)

// drums · congas
const congas = s("conga:13").struct(`<
  A B A ~@9 A@3 B A@3 B A@3 B A@3 ~@15 A@3 ~ A@3 B A@3 B A@3 B A@3 ~@15 A@5 B ~@4 A B ~@7 B ~@6
>`.pickRestart({
  A: "~ x ~ x ~ x ~@2", B: "~@2 x ~@2 x ~@2",
})).gain(0.77)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  A ~ A ~@9 A@3 ~ A@3 ~ A@3 ~ A@3 ~@15 A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~@15 A@5 ~@5 A ~@15
>`.pickRestart({
  A: "~@2 x ~@2 x ~@2",
})).gain(0.77)

stack(
  bass, piano, piano_soft, rock_organ, trumpet, alto_sax, brass_section, xylophone, kick, kick_soft, snare, clap, hihat,
  mid_tom, congas, congas_2
)

More by Salvatore Adamo