Strudelify

S'asseoir par terre

Alain Souchon

KeyG majorTempo127 bpm
0:00/0:00
// S'asseoir par terre — Alain Souchon
// 127 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 92 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(127/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 · fretless bass
const bass = note(`<
  ~@8 A@2 B C D E B F G H I J G K B ~ L M I N L M I O P Q R S T U I ~ V W X Y V W Z O AA AB Z AC AA AB I ~ V W X Y V W Z
  O AA AB Z AC AA AB I ~ V W X Y V W Z AD V W Z AE V W AF AG@2 AH@2 ~
>`.pickRestart({
  A: "[g2@27 ~ g2@4]/2", B: "d2@15 ~", C: "d2@8 g2@3 ~ g2@4", D: "g1@8 g1@7 ~", E: "g1@7 ~ g1@8", F: "g1@2 g2 f#2",
  G: "e2@7 ~ e2@8", H: "a2@11 ~ a2@4", I: "d2", J: "g1@9 ~ g2@4 f#2@2", K: "a1@11 ~ a1@4", L: "g2@15 ~",
  M: "g2@6 f#2 e2", N: "~@2 d2 f#2 g2@3 d2", O: "g2@2 g2 f#2", P: "e2@3 e2 e2@3 b2", Q: "a2@5 ~ a2@2 a2@6 e2@2",
  R: "d2@7 ~ d2@8", S: "g2@7 ~ g2@4 g2@2 f#2@2", T: "e2@6 e2 ~ e2@6 b2@2", U: "a2@5 ~ a2 ~ a2@6 e2@2",
  V: "g2@5 ~ g2@2 g2@6 d2@2", W: "g2@5 ~ g2@2 g2@4 f#2@2 e2@2", X: "d2@5 ~ d2@2 d2@6 a1@2", Y: "d2@3 g2 g2@3 d2",
  Z: "d2@5 ~ d2@2 d2@6 d2@2", AA: "e2@5 ~ e2@2 e2@6 b2@2", AB: "a2@5 ~ a2@2 a2@4 b2@2 c3@2", AC: "g2@3 g2 g2@2 g2 f#2",
  AD: "g2@6 g2@2 g2@4 d2@3 ~", AE: "d2@3 d2 g2@3 g2", AF: "d2@5 ~ d2@2 d2@5 ~ d2 ~", AG: "[c3@3 b2@3 a2@10]/2",
  AH: "g2/2",
})).s("gm_fretless_bass").gain(0.12).pan(0.3)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@4 A B C D E@2 F G H E I J K L M N O P@2 Q E@2 F G H E I R S L M T S U V W X Y@2 Z AA AB AC@2 AD AE AF@3 AG@2 W X Y@2
  Z AH AB AC@2 AI AJ AK@3 AG@2 W X AL@2 Z AA AB AM@2 X AN@2 Z AH AB AO AP@5
>`.pickRestart({
  A: "~ f#4@3 g3@2 d4@4 g3@2 d4@2 f#4@2, [b3,d4] ~@3", B: "g3 a3 c#4 f#4@2 c#4 d4@2", C: "d3 a3 d4 f#4@2 e4 f#4@2",
  D: "[c4,f#4]@3 ~ [a3,c4,e4]@2 [a3,c4,f#4]@2", E: "g2 d3 g3 b3 d4 g4 b3 d4", F: "d3 a3 d4 f#4 a4 d4 f#4 d4",
  G: "d3 a3 ~ f#4 g3 ~ d4 g4, ~@2 c4@2 ~ b3@2 ~", H: "g2 d3 g3 ~ d4 g4 b3 d4, ~@3 b3@2 ~@3",
  I: "d3 a3 c4 f#4 a4 c4 f#4 c4", J: "d3@2 g3@2 b3@2 ~@2 g4@4 [b3,d4,f#4]@3 ~, ~@6 d4@5 ~@5",
  K: "e3 g3 b3 e4 b3 g#4 d4 g#4", L: "a3 c4 e4 c4 a4 e4 b3 c4", M: "d3 a3 ~ f#4 a4 f#4 c4 f#4, ~ c4 ~@2",
  N: "g2@2 d3@2 g3@2 b3@2 ~@2 b3 ~ [a3,d4,f#4]@4, ~@2 g4 ~", O: "e3 b3 e4 g4 e4 g#4 e4 b3",
  P: "[a2 e3 c4 e4 a4 c4 b3 ~ [a3,c4]@7 ~, ~@7 c4 e4@6 ~@2, ~@15 [d3,f#3]@16 ~]/2", Q: "d4@2 b4 d4 c#4 a#4 c4!2",
  R: "d3@2 g3@2 b3@2 d4@2 g4@4 [b3,d4,f#4]@3 ~", S: "e3 b3 d4 e4 b4 g#4 d4 g#4",
  T: "g2@2 d3@2 g3@2 b3@2 g4@2 b3 ~ [a3,d4,f#4]@4", U: "a2 e3 c4 e4 a4 c4 b3 c4", V: "[d3,f#3,a3,c4,e4]@13 ~@3",
  W: "d4@2 b4 d4 ~ a#4 c4!2, ~@2 c#4 ~", X: "~@3 b4@2 [d4,g4]@2 b3, b3@11 ~@5, [d4,g4]@9 ~@7",
  Y: "[[d4,g4]@10 a3@2 b3@2 g4@2 a3@5 ~@3 c4@2 [d4,f#4]@2 ~@2 c4@2, ~@7 d4@5 ~@4, ~@2 f#4 ~, ~@22 a3@5 ~@5]/2", // G5 D
  Z: "~@2 c4@2 d4 ~ d4@4 ~@2 d4@2 b4@2, [f#4,a4]@5 ~ g4@8 ~@2, ~@10 b3@5 ~", // F#m
  AA: "d4@4 ~@2 d4@2 ~@2 b3@2 [d4,g4,b4]@3 ~, g4 ~, ~ b3 ~@2", AB: "d4@2 ~ d4 ~ d4 [g4,b4]@2, g4@7 ~@9, ~ b3 ~@2",
  AC: "[[c4,f#4,a4]@3 d4 [a4,c5]@2 d4 [g4,b4]@2 ~@5 f#4@2, ~@18 b3@4 g4@4 d4@5 ~, ~@20 d4@4 b3@5 ~@3]/2", // F#dim Am G
  AD: "~@4 b3@2 d4@4 ~@2 g#3@2 d4 ~, g4@9 ~@7, e4@3 ~@2 e4@2 ~",
  AE: "c4@4 ~@2 c4@3 a4@3 ~@2 c4@2, e4@3 ~@5, ~@4 a3@5 ~@3 a3@4",
  AF: "[~@6 c4 ~ b3@6 ~@2 [g3,e4]@4 ~@2 d4 e4, f#4@7 d4@8 b3@5 ~ b3@2 ~, ~@10 a3@5 ~ g4@15 ~@17, ~@29 g3@2 ~@9 g#3@7 ~]/3", // C
  AG: "[~@3 e4@2 a3 [c4,e4] ~ [d4,f#4,a4]@7 ~, a3 ~@3, ~@2 c4@4 ~@9 c4@15 ~@2, ~@2 a4@3 ~@11]/2", // C D
  AH: "d4@4 ~ d4@2 ~@3 b3@2 [d4,g4,b4]@3 ~, g4 ~, ~ b3 ~@2", // G
  AI: "~@4 b3@2 d4@4 ~@2 g#3@2 d4 ~, g4@9 ~@7, e4@6 ~@4 e4@5 ~",
  AJ: "c4@2 ~ c4@2 ~@2 c4, e4@3 ~@2 a4@2 ~, ~@4 a3@5 ~@3 a3@4",
  AK: "[~@6 c4 ~ b3@6 ~@2 [g3,e4]@4 ~@2 d4 e4, f#4@7 d4@8 b3@5 ~ b3@2 ~, ~@10 a3@6 g4@15 ~@17, ~@29 g3@2 ~@9 g#3@7 ~]/3", // C
  AL: "[[d4,g4]@10 a3@2 ~@2 g4@2 a3@5 ~@3 c4@2 [d4,f#4]@2 ~@2 c4@2, ~@6 b3 ~ f#4@4 ~@4, ~@13 d4@9 a3@4 ~@6]/2", // G5 D
  AM: "[[c4,f#4,a4]@3 d4 [a4,c5]@2 d4 [g4,b4]@2 ~@5 g4@2, ~@18 b3@4 g4@4 d4@5 ~, ~@20 d4@4 b3@5 ~@3]/2", // F#dim Am G
  AN: "[[d4,g4]@10 a3@2 b3@2 g4@2 a3@5 ~@3 c4@2 [d4,f#4]@4 c4@2, ~@7 d4@5 ~@4, ~@2 f#4 ~, ~@11 a3@2 ~@3]/2", // G5 D
  AO: "[c4,f#4,a4]@3 d4 ~@2 d4@2, ~ [a4,c5]", // F#dim Am
  AP: "[~@2 e4@2 c4@4 d4@2 b3@2 a3@19 ~ [d4,g4]@33 ~@15, ~@31 [d3,g3,b3]@34 ~@15]/5", // G5 G
})).s("gm_acoustic_guitar_nylon").gain(0.09).pan(0.6)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@4 A B C D E F G H I@2 J K L M N O P Q R ~ E F G H I@2 J K L M N O P S@2 T U V W X Y Z AA AB AC AD AE AF AG AH AI T U
  V W X Y Z AA AB AC AD AE AF AJ AH AI T U V W X Y Z AA AK U V W X Y Z AA AL@2 AM@2 ~
>`.pickRestart({
  A: "~ d4@3 b3 ~ b3@4 e3@2 b3@2 d4@2, [e3,g3]@7 ~@9, b3@3 ~@13", B: "a3 c#4@2 f#4@3 d4@2",
  C: "d3 a3 d4 f#4@2 e4 f#4@2", D: "a3@9 ~@7", E: "~ d4 ~@3 g4 ~ g4, b3@7 ~, ~@4 g4@4 b4@5 ~@3, ~@3 d4@2 ~ d4@2",
  F: "~ d4 g4 d4 b4 g4 d4 b3, b3@5 ~@3", G: "f#4 a3 c4 a3 ~ a3 c4 d4, ~@2 d4 ~", H: "a3 c4 f#4 d4 g4 b3 d4 b3",
  I: "g3 b3 d4 b3 g4 d4 b3 d4", J: "a3 c4 f#4 d4 a3 c4 f#4 d4", K: "~ b3 d4 b3 g4 d4 b3 d4, g3 ~@3",
  L: "~ b3 e4 b3 g#3 b3 e4 d4, g3 ~@3", M: "~ c4 e4 c4 a3 e4 c4 a3, a3 ~@3", N: "d4 a3 c4 f#4 d4 c4 a3 c4",
  O: "b3 d4 g4 d4 b3 d4 f#3 b3", P: "g3 b3 e4 b3 g#3 b3 e4 d4", Q: "a3@2 c4@2 e4@2 c4@2 a3@2 c4@2 a4@2 e4 ~",
  R: "[a3,c4,d4,f#4]@3 ~", S: "[a3@2 c4@2 e4@2 c4@2 a3@2 c4@2 a4@2 e4 ~ [c4,d4,f#4]@12 ~@4, ~@15 a3@13 ~@4]/2",
  T: "~@4 b3 g3 d3 b3", U: "[g3,d4,b4] [g3,d4,g4,b4]!7", V: "[g3,d4] [g3,d4,g4,b4]!3 [g4,b4] [g3,d4,g4,b4]!3",
  W: "[a3,d4,c5] [a3,d4,f#4,c5] [a3,d4,c5] [a3,d4,f#4,c5] [a3,d4,c5] [a3,d4,f#4,c5]!3", // D7
  X: "[a3,d4,c5] [a3,d4,f#4,c5]!2 [a3,d4,c5] [g3,d4,g4,b4]!4", // D7 G
  Y: "[g3,d4,g4] [g3,d4,g4,b4]!2 [g3,d4,b4] [g3,d4,g4,b4]!2 [d4,g4,b4] [g3,d4,g4,b4]", // G5 G
  Z: "[g3,d4,g4,b4]!3 [g3,g4] [g3,d4,g4,b4]!4", // G
  AA: "c5 [f#3,d4,f#4,c5] [d4,c5] [f#3,d4,c5]!2 [f#3,d4,f#4,c5] [d4,c5]!2", // D7
  AB: "b4 [g3,d4,g4,b4]!5 [f#3,d4,b4] [d4,f#4,b4]", AC: "[g3,b3,d4,g4]!4 [e3,b3,d4,e4,g#4]!2 [e3,d4,e4]!2",
  AD: "[a3,c4,a4]!2 [a3,c4,e4,a4] [a3,a4] [a3,c4,e4,a4] [a3,a4] [a3,c4,e4,a4] [a3,a4]", // Am A Am A Am A
  AE: "[d3,c4,f#4,a4]!2 d3!2 [d3,a4]!2 [d3,c4,f#4,a4] [d3,a4]", AF: "[g3,b3,d4,g4]!4 ~ b3 [f#3,b3,d4,f#4] [f#3,b3,d4]",
  AG: "[e3,e4] [e3,b3,d4,e4,f#4] e3!3 [e3,d4,e4] [e3,b3,d4,e4,g#4] [e3,e4]", // E Bm E7 E
  AH: "[a3,c4,a4] [a3,c4,e4,a4]!2 [a3,c4,a4] a3 [a3,a4] [a3,c4,e4,a4] [a3,a4]", AI: "[d3,a3,c4,f#4,a4]",
  AJ: "[e3,e4] [e3,b3,d4,e4,g4] e3!3 [e3,d4,e4] [e3,b3,d4,e4,g#4] [e3,e4]", // E Em7 E7 E
  AK: "b4 [g3,d4,g4,b4]!5 [g3,d4,b4] [d4,g4,b4]", // G
  AL: "[[e3,g3,c4,e4]@5 ~ [d3,g3,b3,d4]@6 [a2,e3,a3,c4]@19 ~, ~@12 b2 ~@19]/2", AM: "[g2,d3,g3,b3]/2",
})).s("gm_acoustic_guitar_steel").gain(0.06).pan(0.6)

// chords · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~@40 A B C D E F G H I J K L M N ~@2 A B C D E F G H I J K L O N ~@2 A B C D E F G P A B C D E F G ~@5
>`.pickRestart({
  A: "g4 ~@7", B: "[g4,b4] ~@3 [g3,d4] ~@3", C: "f#4 ~ f#4 ~ f#4 ~@3", D: "f#4 ~@2 f#4 ~@4", E: "b4 ~@2 g4 ~@2 g3 ~",
  F: "~@3 [d4,b4] ~@4", G: "[f#3,d4,f#4] ~ [f#3,f#4] f#4!2 ~ [f#3,f#4]!2", H: "[g3,d4,g4] ~@5 f#4 f#3",
  I: "~@6 [b3,g#4]!2", J: "e4!2 ~ [c4,e4] ~ [c4,e4] ~ [c4,e4]", K: "~@2 [c4,f#4,a4]!2 [c4,f#4]!2 ~ [c4,f#4]",
  L: "~@4 [g3,b3,d4,g4] [g3,d4,g4] ~ f#4", M: "[b3,d4,f#4] ~ [b3,d4,e4,f#4]!2 [b3,d4,e4,g#4] [b3,g#4] ~ [b3,d4,g#4]",
  N: "e4 ~@2 e4 [c4,e4,a4] [c4,e4] ~ [c4,e4]", O: "[b3,d4,g4] ~ [b3,d4,e4,g4]!2 [b3,d4,e4,g#4] [b3,g#4] ~ [b3,d4,g#4]",
  P: "[g3,d4,g4] ~@5 g4 g3", // G5
})).s("gm_acoustic_guitar_steel").gain(0.04).pan(0.6)

// chords · epiano1
const epiano1 = note("<A B C D E F G@2 ~@84>".pickRestart({
  A: "d4@12 d4@3 ~, [d3,g3,b3,g4]", B: "[e3,g3,b3,e4]@5 g3 b3 e4", C: "f#4@3 d4, [e3,g3,b3]", D: "[d3,g3,b3]",
  E: "[e3,g3,b3,d4,f#4]", F: "g3 a3 c#4 f#4@2 c#4 d4@2", G: "[[d3,f#3,a3,d4]@3 ~]/2",
})).s("gm_epiano1").gain(0.2).pan(0.4)

// chords · vibraphone
const vibraphone = note(`<
  A B C D E F G@2 ~ H I J K@2 L@2 M N@2 O P@2 Q@2 R S T@2 U@2 V@2 M W X Y Z@2 AA ~ AB AC AD@2 AE AF AG@2 AH AI@2 AE M AJ
  AK@2 AL AM AN@2 AO AP AQ AR AS AT@3 AU AV AA ~ AW@2 AX AY AZ BA BB@2 BC BD BE@2 BF BG BH BI@2 BJ@3
>`.pickRestart({
  A: "g5@3 d5, b4", B: "[g4,e5]", C: "f#5@11 ~ d5@4, g4, b4@7 ~", D: "b4@3 [f#5,a5]", E: "[d5,f#5]", F: "[c#5,f#5]",
  G: "[[f#4,d5]@3 ~]/2", H: "~@5 g4@3", I: "[f#4,a4]", J: "~@5 [a4,c5] [g4,b4] [a4,c5]",
  K: "[[b4,d5]@19 ~@7 [a4,c5]@2 [g4,b4]@4]/2", L: "[[f#4,a4]@7 g4@5 g5 d5 f#5 d5]/2", M: "e5",
  N: "[~@6 [g#4,b4] [a4,c5]@9]/2", O: "d5@9 ~ d5@2 f#5@2 d5@2, b4@3 ~", P: "[e5@25 ~@3 b4@2 c5@2]/2",
  Q: "[d5@19 ~@13]/2", R: "~ [g4,b4]@3", S: "[b4,d5]@5 [b4,g5]@3", T: "[a4@23 ~@5 [g4,b4]@4, f#5@21 ~@11]/2",
  U: "[[b4,d5]@13 [a4,c5] [g4,b4]@2]/2", V: "[[f#4,a4]@15 g4@9 ~@4 f#5@2 d5@2, ~@15 b3@4 ~@13]/2",
  W: "[a4,c5]@10 [a4,c5]@5 ~", X: "~@10 f#4@5 ~, c5@15 ~", Y: "[b4,d5]@3 g4", Z: "[g#4@8 [a4,c5]@6 b4 c5, e5@7 ~]/2",
  AA: "d5", AB: "~ [b4,d5]@3", AC: "[g4,b4]@5 [g4,b4]@3", AD: "[[a4,c5]@14 [g4,b4] [a4,c5]]/2", AE: "[b4,d5]",
  AF: "[g4,b4]@5 [a4,c5] [g4,b4]@2", AG: "[[f#4,a4]@14 g4@7 ~@3 g5@2 d5@2 f#5@2 d5@2]/2", AH: "e5@3 g#4",
  AI: "[a4@11 ~ b4@2 ~@2 a4@16, ~@7 c5@9]/2", AJ: "a4@5 b4 c5@2", AK: "[d5@21 ~@11]/2", AL: "~@4 [g4,b4]@6 [b4,g5]@5 ~",
  AM: "[b4,g5]@9 ~ [b4,g5]@6", AN: "[a5@12 f#5@4 a5@5 ~@5 [g4,b4]@2 [a4,c5]@4, c5@21 ~@11, ~@12 a4 ~@19]/2",
  AO: "[b4,d5]@10 [b4,g5]@5 ~", AP: "~@5 d5@2 ~, g5, b4@3 ~", AQ: "[f#4,d5]@15 ~", AR: "[b4,d5]@4 g5 d5 f#5 d5",
  AS: "~@5 g4@3 g#4@8, e5", AT: "[[a4,c5]@10 b4@4 ~@10 f#4@7 ~ b4@16, ~@14 [a4,c5]@17 d5@17]/3", AU: "e5@15 ~",
  AV: "[c5,e5]@6 b4 c5", AW: "[~@6 g4@7 [b4,d5]@3, ~@12 b4@13 ~@7]/2", AX: "[a4,c5]",
  AY: "[f#4,a4]@4 ~@2 [g4,b4] [a4,c5]", AZ: "[b4,d5]@7 ~", BA: "[b4,g5]@9 ~ a4@2 [g4,b4]@4, ~@10 c5 ~@5",
  BB: "[[f#4,a4]@15 g4@17, ~@15 b4@15 ~@2]/2", BC: "[b4,g5]", BD: "d5@5 [g4,b4]@3, b4 ~",
  BE: "[[a4,c5]@22 [g4,b4]@9 ~]/2", BF: "[b4,d5]@15 ~", BG: "[g4,b4]@15 ~", BH: "[f#4,a4]@9 ~@7",
  BI: "[[c5,e5]@3 [b4,d5]@3 a4@10, ~@12 c5@17 ~@3]/2", BJ: "[[b4,g5]@11 ~@5]/3",
})).s("gm_vibraphone").gain(0.07).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@40 A B A B A B A B A B A B A B C ~ A B A B A B A B A B A B A B C ~ A B A B A B A D A D A D A D A E ~ C ~@2
>`.pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x ~@2 x ~ x ~ x", C: "x", D: "x ~@2 x!2 ~@3", E: "x ~@2 x ~@2 x ~",
})).gain(0.22)

// drums · snare
const snare = s("sd").struct("<~@40 A@7 B A B A B A B ~@2 A@14 ~@2 A@15 ~@5>".pickRestart({
  A: "~ x", B: "~@2 x!2",
})).gain(0.22)

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

// drums · low tom
const low_tom = s("lt").struct("<~@80 x ~@11>").gain(0.17)

// drums · mid tom
const mid_tom = s("mt").struct("<~@79 [~@10 x ~@3 x!2] ~@12>").gain(0.17)

// drums · open hat
const open_hat = s("oh").struct("<~@80 [~@7 x]!7 ~@2 x ~@2>").gain(0.15)

// drums · high tom
const high_tom = s("ht").struct("<~@79 [~@12 x!2 ~@2] ~@12>").gain(0.17)

stack(
  bass, acoustic_guitar_nylon, acoustic_guitar_steel, acoustic_guitar_steel_2, epiano1, vibraphone, kick, snare, hihat,
  low_tom, mid_tom, open_hat, high_tom
)

More by Alain Souchon