Strudelify

Vous permettez Monsieur ?

Salvatore Adamo

KeyC majorTempo124 bpm
0:00/0:00
// Vous permettez Monsieur ? — Salvatore Adamo
// 124 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 90 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(124/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 · epiano2
const epiano2 = note(`<
  ~@2 A B C D E F G H I J K L M N O P Q R S@2 T@2 U@2 V W S@2 T@2 U@2 X ~ B C D E F G H Y W S@2 T@2 U@2 V W S@2 T@2 U@2
  X ~ Z AA AB AC AD O P Q R S@2 T@2 U@2 V W S@2 T@2 U@2 V AE V AF AG AH
>`.pickRestart({
  A: "~@4 [g3,b3,d4]@4 [g3,c4,e4] ~@7", B: "[e4,g4,c5]@2 [c4,e4,g4] [e4,g4,c5]", C: "[c4,e4,g4]@8 [g3,c4,e4]@7 ~",
  D: "[e3,g3,c4]@2 [g3,c4,e4] [c4,e4,g4]", E: "[b3,d4,f4] [b3,d4,g4]", F: "[d4,f4,b4]@2 [b3,d4,g4] [b3,d4,f4]",
  G: "[g3,b3,d4] [b3,d4,f4]", H: "[b3,d4,g4]@2 [b3,d4,f4] [b3,d4,g4]", I: "[c4,e4,g4] ~@7",
  J: "[g3,c4,e4]@2 [e4,g4,c5] [c4,e4,g4]", K: "[c4,e4,g4] [g3,c4,e4]",
  L: "[g3,c4,e4]@4 [c4,e4] ~ [c4,e4]@2 e4@4 f4@2 e4@2, ~ g3@3, ~ c4", M: "[g3,b3,d4]",
  N: "[g3,b3,f4]@3 ~ [g3,b3,f4] ~ [g3,b3,f4]@2 [g3,b3,f4]@4 g4@2 f4@2, ~@3 [b3,d4]", O: "[g3,c4,e4]@11 ~ [c4,e4,g4]@4",
  P: "[g3,b3,d4]@4 [b3,d4,f4]@2 [g3,b3,e4] [g3,b3,d4]", Q: "[e3,g3,c4]@7 ~@5 [b3,d4,g4] ~@3", R: "[e4,g4,c5] ~@15",
  S: "[[c4,f4,a4]@23 ~ [c4,f4,a4]@8]/2", T: "[[c4,e4,g4]@23 ~ [c4,e4,g4]@8]/2", U: "[[d4,g4,b4]@23 ~ [d4,f4,b4]@8]/2",
  V: "[c4,e4,g4]", W: "[c4,e4,g4] ~@15", X: "[c4,e4,g4] ~", Y: "[c4,e4,g4] ~@5 [b3,d4,g4]@2",
  Z: "[e3,g3,c4] ~@7 [e3,g3,c4] ~@7", AA: "[e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3,c4] ~@7",
  AB: "[e3,g3,c4] ~@7 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3", AC: "[f3,a3,c4] ~@15",
  AD: "[a3,c4,f4]@3 ~ [a3,c4,f4] ~ [a3,c4,f4]@2 [a3,c4,f4]@4 g4@2 f4@2, ~@3 [a3,c4]", AE: "[d4,g4,b4]",
  AF: "[d4,g4,b4] ~@7", AG: "~@3 [g3,b3,d4]", AH: "[g3,c4,e4] ~@15",
})).s("gm_epiano2").gain(0.35).pan(0.8)

// bass · electric bass finger
const bass = note(`<
  ~@2 A B@3 C D C@2 E B@3 C D B C F G H I J K D C B L H I B K D C M L B@3 C D C@2 N L H I J K D C B L H I B K D C M L O
  P Q R S B C T L H I J K D C B L H I B K D C K C U V W G
>`.pickRestart({
  A: "~@2 g1@2 c2 ~@3", B: "c2 ~@3 c2 ~@3 c2 ~@3 g1@2 ~@2", C: "d2 ~@3 d2 ~@3 d2 ~@3 g1@2 ~@2",
  D: "d2 ~@3 d2@2 ~@2 d2 ~@3 g1@2 ~@2", E: "c2@2 ~@10 g1@3 ~", F: "c2 ~@3 c2 ~@7 g1@3 ~", G: "c2 ~@15",
  H: "f2 ~@3 f2 ~@3 f2 ~@3 c2@4", I: "f2 ~@3 f2 ~@3 f2 ~@3 f2@2 ~@2", J: "c2 ~@3 c2 ~@3 c2 ~@3 g1@3 ~",
  K: "c2 ~@3 c2 ~@3 c2 ~@3 g1 ~@3", L: "c2 ~@7", M: "c2 ~@3 c2 ~@7 g1@2 ~@2", N: "c2 ~@5 g1 ~", O: "c2 ~@7 c2 ~@7",
  P: "c2 ~@3 c2 ~@3 c2 ~@7", Q: "c2 ~@7 c2 ~@3 c2@2 ~@2", R: "f2 ~@15", S: "f2 ~@3 f2@2 ~@2 f2 ~@3 f2@2 ~@2",
  T: "c2@2 ~@2 c2 ~@7 g1@2 ~@2", U: "c2 ~@3 c2 ~@3 c2 ~@3 c2 ~@3", V: "g1 ~@7", W: "~@12 g1 ~@3",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@3 A@3 B@2 C D E A@2 F G H I J K E L M N@2 O@2 P E Q@2 F@2 R@2 K E S T U V W X Y Z E AA AB F@2 R@2 Z E AC@2 AD@2 AE B
  K E AF AG AH AI AJ A AK K E AA AB A@2 D@2 AL E AM AN A F R@2 AO R AO AP AQ E
>`.pickRestart({
  A: "[g4,c5] ~@3 [g4,c5] ~@3 [g4,c5] ~@3 [g4,c5] ~@3", B: "[g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~ [g4,b4]@2",
  C: "[g4,b4] ~@3 [g4,b4] ~@5 [g4,b4]@3 ~ [g4,b4] ~", D: "[g4,b4] ~@3 [g4,b4] ~@7 [g4,b4] ~@3", E: "[g4,c5] ~@15",
  F: "[g4,c5] ~@3 [g4,c5] ~@5 [g4,c5] ~@3 [g4,c5] ~", G: "[g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~@3",
  H: "[g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~@3 [g4,b4]@4", I: "[g4,c5] ~@3 [g4,c5] ~@5 [g4,c5]@3 ~@3",
  J: "[g4,b4] ~@3 [g4,b4] ~@5 [g4,b4]@2 [g4,b4] ~ [g4,b4]@2", K: "[g4,c5] ~@3 [g4,c5] ~@7 [g4,b4] ~@3",
  L: "~@2 [a4,c5] ~@3 [a4,c5] ~@3 [a4,c5] ~ [a4,c5]@4", M: "~@2 [a4,c5] ~@3 [a4,c5] ~@3 [a4,c5] ~ [a4,c5]@3 ~",
  N: "~@2 [g4,c5] ~@3 [g4,c5] ~@5 [g4,c5]@4", O: "~@2 [g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~ [g4,b4]@4",
  P: "~@2 [g4,c5] ~@3 [g4,c5] ~ [g4,c5]@3 ~ [g4,b4]@3 ~", Q: "[a4,c5] ~@3 [a4,c5] ~@5 [a4,c5] ~@3 [a4,c5] ~",
  R: "[g4,b4] ~@3 [g4,b4] ~@5 [g4,b4] ~@3 [g4,b4] ~", S: "[g4,c5] ~@3 [g4,c5] ~@7 [g4,c5]@4",
  T: "[g4,c5] ~@3 [g4,c5] ~@7 [g4,c5]@3 ~", U: "[g4,c5] ~@3 [g4,c5] ~@5 [g4,c5] ~ [g4,c5]@3 ~",
  V: "[g4,b4] ~@3 [g4,b4] ~@7 [g4,b4]@4", W: "[g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~@3 [g4,b4]@3 ~",
  X: "[g4,b4] ~@3 [g4,b4] ~@7 [g4,b4]@3 ~", Y: "[g4,b4] ~@3 [g4,b4] ~@5 [g4,b4] ~@3 [g4,b4]@2",
  Z: "[g4,c5] ~@11 [g4,b4] ~@3", AA: "[a4,c5] ~@3 [a4,c5] ~@3 [a4,c5] ~@3 [a4,c5]@4",
  AB: "[a4,c5] ~@3 [a4,c5] ~@3 [a4,c5] ~@3 [a4,c5] ~@3", AC: "[a4,c5] ~ [a4,c5] ~@3 [a4,c5] ~@3 [a4,c5] ~ [a4,c5]@3 ~",
  AD: "[g4,c5] ~ [g4,c5] ~@3 [g4,c5] ~@3 [g4,c5] ~ [g4,c5]@3 ~", AE: "[g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~@5 [g4,b4]@2",
  AF: "[g4,c5] ~@7 [g4,c5] ~@7", AG: "[g4,c5] ~@3 [g4,c5] ~@3 [g4,c5] ~@7", AH: "[g4,c5] ~@7 [g4,c5] ~@3 [g4,c5] ~@3",
  AI: "[f4,a4] ~@15", AJ: "[f4,a4] ~@3 [f4,a4] ~@3 [f4,a4] ~@3 [f4,a4] ~@3",
  AK: "[f4,b4] ~@3 [f4,b4] ~@3 [f4,b4] ~@3 [f4,b4] ~@3", AL: "[g4,c5] ~@3 [g4,c5] ~@3 [g4,c5] ~@3 [g4,b4] ~@3",
  AM: "[a4,c5] ~@3 [a4,c5] ~@3 [a4,c5] ~@3 [a4,c5]@3 ~", AN: "[a4,c5] ~@3 [a4,c5] ~@3 [a4,c5] ~@5 [a4,c5] ~",
  AO: "[g4,c5] ~@3 [g4,c5] ~@3 [g4,c5] ~@5 [g4,c5] ~", AP: "[g4,b4] ~@15", AQ: "~@12 [g4,b4] ~@3",
})).s("gm_electric_guitar_clean").gain(0.35).pan(0)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~ A B C@2 D E F G H I J K L M N O P Q R S T ~@4 U V ~@2 W@2 X@2 Y Z C@2 D E F G H AA AB S T ~@4 U V ~@2 W@2 X@2 Y Z AC
  AD AE AF AG O P Q R S T ~@4 U V ~@2 W@2 X@2 AH U V ~ AI AJ
>`.pickRestart({
  A: "~@4 [g3,g4] [f#3,f#4] [g3,g4] [f#3,f#4] [g3,g4] ~@3 [g4,g5] [f#4,f#5] [g4,g5] [f#4,f#5]", // G F# G F# G F# G F#
  B: "[g4,g5] ~@3 [g4,b4,d5,g5]@4 [c5,e5,g5,c6] ~@7", C: "[c4,e4]/2", D: "[g4,g5]@2 [c5,c6] [e5,e6] [g5,g6]@3 [e5,e6]",
  E: "f6, f5@13 ~@3", F: "[d4,f4]", G: "[b3,g4]", H: "[f4,f5] [b4,b5] [d5,d6] [g5,g6] [b5,b6]@2 [a5,a6]@2",
  I: "[g5,g6] ~@15", J: "~ [g4,e5,g5] [c5,g5,c6] [e5,c6,e6]", K: "[g5,e6,g6] [e5,c6,e6]", L: "[g5,e6,g6]",
  M: "~@4 [d4,g4] [c#4,f#4] [d4,g4] [c#4,f#4] [d4,g4] ~@7", N: "[b3,d4]", O: "[c4,e4]", P: "[d4,g4] [g4,b4]",
  Q: "[d5,f5]@4 [c5,e5] ~@7 [g4,b4,d5,g5]@4", R: "[c5,e5,g5,c6] ~@7", S: "~@10 [a4,a5]@3 ~ [c5,c6] ~",
  T: "[b4,b5]@2 [a4,a5] ~@13", U: "~@12 [g4,g5] [f4,f5] [e4,e5] [d4,d5]", V: "[c4,c5] ~@15",
  W: "[c5,g5,c6] [d5,a5,d6] [c5,g5,c6] [g4,e5,g5] [c5,g5,c6] [d5,a5,d6] [c5,g5,c6] [g4,e5,g5]", // C5 D5 C5 C C5 D5 C5 C
  X: "[d5,g5,d6] [e5,a5,e6] [d5,g5,d6] [g4,d5,g5] [d5,g5,d6] [e5,a5,e6] [d5,g5,d6] [g4,d5,g5]", // G5 A5 G5 A5 G5
  Y: "[c5,g5,c6] ~@11 [f4,d5,f5]@4", Z: "[e4,c5,e5] ~@15", AA: "[g5,g6] ~@3 [g4,b4,g5]@4 [f#4,c5,a5]@4 [f4,d5,b5]@4",
  AB: "[e4,e5,c6] ~@15", AC: "[g3,c4,e4] ~@7 [g3,c4,e4] ~@7", AD: "[g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@7",
  AE: "[g3,c4,e4] ~@7 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3", AF: "[a3,c4,f4] ~@15", AG: "[c4,f4]", AH: "[c5,g5,c6] ~@15",
  AI: "~@3 [g4,b4,d5,g5]", AJ: "[c5,e5,g5,c6] ~@15",
})).s("gm_string_ensemble_1").gain(0.2)

// chords · marimba
const marimba = note(`<
  ~@20 A B C D E F G H A B C D E F H ~@10 A B C D E F G H A B C D E F H ~@10 A B C D E F G H A B C D E F C F C ~@3
>`.pickRestart({
  A: "~@2 [a3,c4] ~ [c4,f4] ~ [f4,a4] ~@3 [f4,a4] ~ [c4,f4] ~ [a3,c4] ~", // Am F5 F F5 Am
  B: "[f3,a3] ~ [a3,c4] ~ [c4,f4] ~ [f4,a4] ~@3 [f4,a4] ~ [c4,f4] ~@3", // F Am F5 F F5
  C: "[g3,c4] ~ [g3,c4] ~ [c4,e4] ~ [g4,c5] ~@3 [g4,c5] ~ [e4,g4] ~ [c4,e4] ~", // C5 C C5 Em C
  D: "[g3,c4] ~ [g3,c4] ~ [c4,e4] ~ [g4,c5] ~@3 [g4,c5] ~ [e4,g4] ~@3", // C5 C C5 Em
  E: "[g3,b3] ~ [b3,d4] ~ [d4,g4] ~ [g4,b4] ~@3 [g4,b4] ~ [d4,g4] ~ [b3,d4] ~", // G Bm G5 G G5 Bm
  F: "[g3,b3] ~ [b3,d4] ~ [d4,g4] ~ [g4,b4] ~@3 [g4,b4] ~ [d4,g4] ~@3", // G Bm G5 G G5
  G: "[g3,c4] ~ [c4,e4] ~ [e4,g4] ~ [g4,c5] ~@3 [g4,c5] ~ [e4,g4] ~ [c4,e4] ~", H: "[g3,c4] ~@15",
})).s("gm_marimba").gain(0.32).pan(0)

// other · pizzicato strings
const pizzicato_strings = note(`<
  ~@20 A B C D E F G H A B I J E F ~@11 A B C D E F G H A B I J E F ~@2 K L M N O P Q R ~ A B C D E F G H A B I J E F I
  E I ~ S T
>`.pickRestart({
  A: "~@2 c5 ~ f5 ~ a5 ~@3 a5 ~ f5 ~ c5 ~", B: "~@2 c5 ~ f5 ~ a5 ~@3 a5 ~ f5 ~@3",
  C: "~@2 c5 ~ e5 ~ c6 ~@3 [g4,e5] ~ [c5,g5] ~ [e5,c6] ~", D: "[g5,e6] ~ c5 ~ e5 ~ c6 ~@3 c6 ~ g5 ~@3",
  E: "~@2 d5 ~ g5 ~ b5 ~@3 b5 ~ g5 ~ d5 ~", F: "~@2 d5 ~ g5 ~ b5 ~@3 b5 ~ g5 ~@3",
  G: "~@2 e5 ~ g5 ~ c6 ~@3 c6 ~ g5 ~ e5 ~", H: "c5 ~@15", I: "~@2 c5 ~ e5 ~ c6 ~@3 c6 ~ g5 ~ e5 ~",
  J: "~@2 c5 ~ e5 ~ c6 ~@3 c6 ~ g5 ~@3", K: "[c4,c5] ~@7 [c4,c5] ~@7", L: "[c4,c5] ~@3 [c4,c5] ~@3 [c4,c5] ~@7",
  M: "[c4,c5] ~@7 [c4,c5] ~@3 [c4,c5] ~@3", N: "[f3,f4] ~@15",
  O: "~@2 [f3,a3] ~ [a3,c4] ~ [c4,f4] ~@3 [c4,f4] ~ [a3,c4] ~@3", // F Am F5 Am
  P: "~@2 [g3,c4] ~ [c4,e4] ~ [e4,g4] ~@3 [e4,g4] ~ [c4,e4] ~@3", // C5 C Em C
  Q: "~@2 [g3,b3] ~ [b3,d4] ~ [d4,g4] ~@3 [d4,g4] ~ [b3,d4] ~ [g3,b3] ~", R: "f4 ~@3 e4 ~@11", S: "~@12 g5 ~@3",
  T: "c6 ~@15",
})).s("gm_pizzicato_strings").gain(0.29).pan(1)

// other · glockenspiel
const glockenspiel = note("<~@3 A B C D E F G ~ A B C D H I G ~@18 A B C D E F G ~@47>".pickRestart({
  A: "g5@8 e5@4 c6@3 ~", B: "g5@8 e5@7 ~", C: "g5 ~", D: "f5@5 ~@3", E: "f5@2 d5 b5", F: "g5 f5", G: "g5@7 ~@9",
  H: "g5 a5 g5 d5 g5@8 ~@4", I: "g5 a5 g5 e5 g5@8 ~@4",
})).s("gm_glockenspiel").gain(0.35).pan(0.8)

// other · flute
const flute = note("<~@15 A B ~@7 C D ~@23 C D ~@23 C D ~@14>".pickRestart({
  A: "g5 a5 g5 d5 g5@11 ~", B: "g5 a5 g5 e5 g5@12", C: "g4@9 ~ f4@2 d4@2 b3@2", D: "g3@13 ~@3",
})).s("gm_flute").gain(0.28).pan(0.2)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A B@7 C B@7 D E B@7 E B@6 D F B@7 C E B@7 F B@6 D E G H I J B@3 D E B@7 E B@9 E K E
>`.pickRestart({
  A: "~@4 x!5 ~@7", B: "x ~@3 x ~@3 x ~@3 x!4", C: "x ~@11 x!4", D: "x ~@3 x ~@7 x!4", E: "x", F: "x ~@13 x!2",
  G: "x!2", H: "x ~@3 x ~ x!3 ~@7", I: "x ~ x!2", J: "x!3 ~", K: "~@12 x!4",
})).gain(0.32)

// drums · clap
const clap = s("cp").struct("<~@18 A ~@15 A ~@24 A ~@8 A ~@19 A ~>".pickRestart({
  A: "~ x",
})).gain(0.72)

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

// drums · high tom
const high_tom = s("ht").struct("<~@2 [~ x] ~@61 x ~@24 x>").gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@2 [~ x ~@2] ~@85 [~@3 x] ~>").gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@2 [~ x] ~@86 x>").gain(0.4)

stack(
  epiano2, bass, electric_guitar_clean, string_ensemble_1, marimba, pizzicato_strings, glockenspiel, flute, kick, snare,
  clap, hihat, high_tom, crash, ride
)

More by Salvatore Adamo