Strudelify

Ultra Moderne Solitude

Alain Souchon

KeyF♯ minorTempo108 bpm
0:00/0:00
// Ultra Moderne Solitude — Alain Souchon
// 108 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(108/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 · electric bass finger · "Remixed"
const bass = note(`<
  ~@17 A B C D@2 E F G H I J K L M@2 N O P Q@2 B C D@2 E F G H I J R S T U K L M@2 N O P Q@2 B C D@2 E F G H I J B C D@2
  E F G H I J ~@8 A B C D@2 E F G H I J B C D@2 E F G H I J B C D@2 E F G V
>`.pickRestart({
  A: "~@8 f#1@7 ~", B: "b1@5 ~ b1 ~ c#2@5 ~ c#2@2", C: "f#1@5 ~ c#2 ~ f#2@2 ~@2 f#1@2 c#2 ~",
  D: "[b1@7 ~ c#2@4 ~@2 f#1@8 c#2 ~ f#2@2 c#2 ~ f#1@4]/2", E: "b1@5 ~ b1@2 c#2@4 ~@2 c#2@2",
  F: "f#1@5 ~ f#1 ~ c#2@2 f#2@2 c#2@2 f#1 ~", G: "d1@4 d2@3 ~ c#1@4 c#2@3 ~, e1 ~@15", H: "b1@4 ~@2 b1 ~ c#2@4 c#1@4",
  I: "f#1@4 ~@2 f#1@6 ~@2 f#1 ~", J: "f#1@2 ~ f#1@4 ~", K: "b1@5 ~ b1@2 ~@4 c#1@4, ~ c#2", L: "f#1@5 ~ f#1@7 ~ f#1@2",
  M: "[b1@4 c#2@3 f#1@3 ~ f#1@2 c#2 f#2@2]/2", N: "b1@7 ~ c#2@4 c#1@4", O: "f#1@5 ~ f#1@6 f#2@3 ~", P: "b1@3 c#2@5",
  Q: "[f#1@31 ~]/2", R: "b1@7 ~ c#2@4 ~@2 c#2@2", S: "f#1@4 ~@2 f#1@2 f#2@2 c#2@2 f#1@2 c#2 ~",
  T: "b1@5 ~ b1@2 c#1@4 c#2@3 ~", U: "f#1@4 ~@2 f#1@8 f#2 ~", V: "b1 ~@3",
})).s("gm_electric_bass_finger").gain(0.6)

// bass · electric bass finger · "Remixed" · soft notes
const bass_soft = note(`<
  ~@19 A ~@2 B ~ C ~@13 A ~@2 B ~ C ~@17 A ~@2 B ~ C ~@4 A ~@2 B ~ C ~@13 A ~@2 B ~ C ~@4 A ~@2 B ~ C ~@4 A ~@2 B ~ C ~
>`.pickRestart({
  A: "~@10 c#2 ~@5", B: "a#1 ~@15", C: "~@8 d#1 ~@7",
})).s("gm_electric_bass_finger").gain(0.3)

// chords · electric guitar clean · "Remixed"
const electric_guitar_clean = note(`<
  ~@2 A B C D@4 E@2 F G@3 H@3 I J K L M N O P Q R ~@9 I J K L M N O P Q R S T U V ~@9 I J K L M N O P Q R I J K L M N O
  P Q R E@2 F G@3 H@3 I J K L M N O P Q R I J K L M N O P Q R I J K L M N O W
>`.pickRestart({
  A: "b3", B: "d4", C: "~@2 b2@4 ~ f#3@2 ~ a3@2 ~@4, ~@3 e3 ~@4",
  D: "[~@4 e4@23 ~@23 f#3@14, ~ a4@7 ~@8, ~@7 b4@8 ~]/4",
  E: "[f#3@6 ~@22 c#3@2 a2 ~, ~@6 g#3@25 ~, ~@5 c#3@7 c#3@2 ~@2, ~@14 a3@17 ~, ~@26 f#3@5 ~]/2",
  F: "~@6 a3@4 g#3@5 ~, b2@11 ~@5, ~@4 f#3@7 ~@5",
  G: "[~@5 f#3@2 e3@3 ~@9 e3@3 ~@2, ~@3 [e3,a3]@4 ~@4 a3@10 ~@3, ~@15 e3@4 ~@5, ~@17 c#3@5 ~@2]/3", // A5
  H: "[~@8 f#3@13 ~@3, ~ e3@16 ~@7, ~@3 a3@16 ~@5]/3",
  I: "[a3,b3,d4,f#4]@4 ~@2 [a3,b3,d4,f#4] ~ [c#4,e4,f#4]@6 b3 ~, ~@8 b3@3 ~@5", // Bm7 F#7
  J: "[a3,c#4,e4]@2 ~ [a3,c#4,e4,f#4]@2 ~ [a3,c#4,e4] ~ a4@2 f#4@2 e4@2 c#4 ~, ~@8 [a3,c#4]@5 ~@3", // A F#m7 A
  K: "[a3,b3,d4,f#4]@5 ~ [a3,d4,f#4] ~@3 [c#4,e4,g#4]@4 b3 ~, ~@5 b3 ~@2", // Bm7 D C#m
  L: "[a3,e4] ~ [c#4,e4,a4]@4 a3 ~ [a3,c#4]@2 f#4 ~ [a3,c#4,e4]@2 c#4 ~, ~@2 a3@2 ~@4 [e4,a4] ~@7", // A5 A A5
  M: "[a3,b3,d4,f#4]@5 ~ [a3,b3,d4,f#4] ~ b3 ~ b3 ~ [b3,c#4,e4,g#4]@2 b3 ~, ~@2 [c#4,e4,g#4] ~", // Bm7 C#m7 C#m
  N: "[a3,c#4,e4]@2 ~ e4 c#4 ~ [a3,c#4] ~ [a3,c#4]@2 f#4 ~ [a3,c#4,e4]@2 f#4 ~, ~@8 a4 ~@7", // A
  O: "~@2 [d4,f#4]@4 [a3,f#4] ~@3 [c#4,e4,g#4]@4 a3 ~, ~@2 a3 ~@7 a3 ~@5", // D C#m
  P: "~@2 [a3,b3,d4,f#4]@4 [a3,b3,d4,f#4] ~@3 [c#4,e4,f#4]@4 [a3,b3] ~, ~@10 b3 ~@5", // Bm7 F#7 Asus2
  Q: "[a3,b3,d4,f#4] ~@5 [c#4,e4,f#4]@8 [a3,b3] ~, ~@6 [a3,b3]@7 ~@3", // Bm7 F#7 Asus2
  R: "[a3,b3]@3 ~@9 f#4@2 ~@2, [c#4,e4]@7 ~, f#4@5 ~@3, a4 ~@3 [a3,b3]@10 ~@2", // Asus2 C#m Asus2
  S: "[a3,b3,d4,f#4]@4 [a3,b3,d4,f#4]@2 [a3,b3] ~@3 b3 ~ [b3,c#4,e4,g#4]@2 b3 ~, b2@7 ~ c#3@6 ~@2", // Bm7 Asus2 C#m7
  T: "~@2 [a3,c#4,e4] ~ [a3,b3,c#4,f#4] ~ a3@2 [a3,c#4,a4]@2 f#3 [a3,c#4,f#4] ~@2 [a3,c#4,e4]@2, f#2@10 ~@2 c#3@3 ~, ~@6 [d#4,e4]@4 ~@3 f#3@2 ~", // A F#m A F#m A Emaj7
  U: "~@2 [a3,b3]@2 [a3,b3,d4,f#4]@2 [a3,b3] ~@3 b3 ~ [b3,c#4,e4,g#4]@2 b3 ~, b2@7 ~ c#3@7 ~", // Asus2 Bm7 Asus2 C#m7
  V: "~@2 [a3,c#4,e4] ~ [a3,f#4] ~ [f#3,a3] ~ [a3,c#4,a4]@2 f#3 [a3,c#4,f#4] ~ f#3 [a3,c#4,e4] ~, f#2 ~, ~@2 c#4 ~@5", // A D F#m A F#m A
  W: "~ [a3,b3,d4,f#4]@2 ~@5", // Bm7
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.8)

// chords · electric guitar clean · "Remixed" · soft notes
const electric_guitar_clean_2 = note(`<
  ~ A B@7 C@2 D E F@3 ~@5 G ~ H I J ~ K ~@12 G ~ H I J ~ K L M ~ N ~@12 G ~ H I J ~ K ~@3 G ~ H I J ~ K C@2 D E F@3 ~@5
  G ~ H I J ~ K ~@3 G ~ H I J ~ K ~@3 G ~ H I ~
>`.pickRestart({
  A: "[b3,c#4,e4,f#4]", // Bsus4
  B: "[[g#3,c#4,e4]@15 ~ [a3,b3]@17 ~@19 f#4@23 [b3,e4,f#4]@4 ~ a4@20 ~@10 f#4@2, ~@15 [b2,f#3]@18 ~@11 b3@31 f#3@23 ~@3 a4@10 ~, ~@26 c#4@14 e4@13 e4@3, ~@79 b3@20 ~ b3@12, ~@40 f#4@15 ~]/7", // C#m Asus2 Bsus4 B5
  C: "[~@4 d3@3 ~@15 a2@8 ~@2, d3@4 ~@8 e3@19 ~, ~@2 b2@5 ~@11 f#3@8 ~@6]/2", D: "~@2 d3@9 ~ c#3@3 ~",
  E: "[e3,a3]@3 ~@5", F: "[~@10 f#3@3 f#3@11, f#3@10 ~@3 a3@6 ~@5, ~@2 e3@5 ~@17, ~@3 g#3@4 ~@5]/3", G: "c#4 ~@15",
  H: "~@3 a3 ~@12", I: "~@12 a3 ~@3", J: "~@12 b3 ~@3", K: "~@2 a4 ~@13", L: "~@3 a3 ~@10 f#3 ~",
  M: "~@6 c#4@2 ~@2 f#2 ~@2 f#2@2 ~", N: "~@6 c#3 ~",
})).s("gm_electric_guitar_clean").gain(0.18).pan(0.8)

// chords · epiano2 · "Remixed"
const epiano2 = note(`<
  ~ A B C@2 D@2 E@2 F G H@2 I J K L@2 M@2 N@2 O P Q R S@2 T U V W X Y Z AA@2 M@2 N@2 O P Q R S@2 AB AC AD AE T U V W X Y
  Z AA@2 M@2 N@2 O P Q R S@2 M@2 N@2 O P Q R S@2 F G H@2 I J K L@2 M@2 N@2 O P Q R S@2 M@2 N@2 O P Q R S@2 M@2 N@2 O P Q
  AF
>`.pickRestart({
  A: "[f#2,f#3,a3,b3,c#4]@15 ~", B: "[f#3,g#3,b3,c#4,e4]@15 ~",
  C: "[[e3,b3]@15 ~ b3@15 ~, [f#3,a3,d4]@31 ~, ~@15 e3@16 ~, ~@8 e4@5 ~@3]/2", // E5 D
  D: "[f#2 ~ f#2@2 f#2@2 f#2@2 f#2@2 f#2@2 f#2@2 f#2@2 f#2@2 f#2@2 f#2@2 f#2@2 f#2@2 f#2@2 f#2@2 f#2@2, e4]/2",
  E: "[f#2@2 f#2@2 f#2@2 f#2@2 f#2@2 f#2@2 f#2@2 ~@2 f#2@2 f#2@2 f#2@2 f#2@2 f#2@2 f#2@2 f#2@2 f#2 ~, [a3,b3,e4,f#4]@31 ~]/2", // Asus2
  F: "[b2,a3,b3,f#4]@7 ~ [g#3,b3,e4]@4 ~@4, d4@5 ~@3 c#3@7 ~", G: "[f#2,f#3,a3,b3]@15 ~, e4@13 ~@3",
  H: "[[b3,d4,f#4]@6 ~@2 [c#3,g#3,b3,e4]@5 ~ [f#2,f#3,a3,b3]@17 ~, [b2,a3]@8 ~@6 [c#4,e4]@15 ~@3]/2", // Bm C#m7 B7 C#m
  I: "[b2,a3,b3]@8 [g#3,b3,e4]@5 ~@3, [d4,f#4]@6 ~@2 c#3@7 ~", J: "[f#3,a3,b3]@15 ~, [c#4,e4]@13 ~@3",
  K: "[b2,a3,b3]@7 ~ [g#3,b3,e4]@4 ~@4, [d4,f#4]@5 ~@3 c#3@7 ~", L: "[~@7 c#3@8 ~, [f#2,f#3,b3,c#4,f#4]@15 ~]/2",
  M: "[[b2,a3,b3,d4,f#4]@7 ~ [c#2,c#3,b3,e4,g#4]@7 ~ [a3,c#4]@2 ~@4 [a3,e4] ~ a4 ~@3 f#3@2 [a3,c#4,f#4] ~, ~@15 f#2@16 ~, ~@15 f#3@3 ~ [a3,c#4,f#4]@2 ~ c#4@8 ~@2, ~@16 e4 ~@3 f#3@4 a3@6 ~@2, ~@13 f#4@2 ~]/2", // Bm7 C#m7 A A5 F#m
  N: "[[a3,b3,d4,f#4]@6 ~@2 [c#3,e4,g#4]@4 ~@10 f#4@2 f#3@2 a4@2 f#3@2 [a3,f#4] ~, b2@8 [b3,c#4]@6 f#2@17 ~, ~@15 f#3@6 ~@11, ~@16 [a3,c#4,e4]@9 ~ [a3,c#4,e4]@4 ~@2]/2", // Bm7 C#m D Bsus2 A
  O: "[b2,a3,b3,d4,f#4]@5 ~@3 [c#2,c#3,b3,c#4,e4,g#4]@5 ~@3", // Bm7 C#m7
  P: "[f#3,a3,c#4,e4]@3 [e4,f#4] ~@2 [a3,c#4,e4,f#4] ~ [e4,a4] ~@3 f#3 ~ a3 ~, f#2@13 ~@3, ~@3 [a3,c#4]@2 ~@3 c#4@6 ~@2, ~ f#3 a3 ~, ~@5 f#4@2 ~", // F#m7 Esus2 F#m7 A5 A
  Q: "[d3,a3,d4,f#4]@3 ~ [c#2,c#3,b3,c#4,e4]@3 ~, d2 ~@3", // D C#m7
  R: "[b2,a3,b3,d4,f#4]@3 ~ [c#3,b3,c#4,e4]@3 ~, ~@2 [c#2,g#4] ~", // Bm7 C#m7 C#5
  S: "[~@24 c#3@2 ~@2 f#3@2 c#3 ~, f#4@15 ~, f#2@26 c#4@5 ~, c#4@22 a3@9 ~, [c#3,f#3,a3]@6 e4@25 ~]/2", // F#m
  T: "[b2,a3,b3,d4,f#4] [c#2,c#3,b3,c#4,e4,g#4]", U: "[f#2,f#3,a3,b3,c#4,e4,f#4]@13 ~@3",
  V: "[b2,a3,b3,d4,f#4]@7 ~ [c#3,b3,c#4,e4,g#4]@7 ~", W: "[f#2,f#3,a3,b3,c#4,e4,f#4]@15 ~",
  X: "[b2,a3,b3,d4,f#4]@7 ~ [c#3,b3,c#4,e4]@7 ~, ~@8 g#4@5 ~@3", Y: "[f#2,f#3,a3,b3,c#4,e4,f#4]@7 ~",
  Z: "[a3,b3,d4,f#4]@3 ~ [c#3,b3,c#4,e4,g#4]@3 ~, b2 ~", AA: "[[f#2,f#3,b3,c#4,e4,f#4]@29 ~@3]/2",
  AB: "[b2,a3,b3,d4,f#4]@8 [c#3,b3,c#4,e4,f#4]@7 ~", // Bm7 C#m7
  AC: "[a3,e4] ~@11 [a3,c#4,e4,f#4]@2 f#3 ~, [f#2,c#3]@15 ~, f#3@5 f#3@2 ~, c#4@6 b3@9 ~, ~@3 [a3,c#4,e4,f#4]@3 ~@2", // A5 F#m7 F#5 F#m7
  AD: "[b2,a3,b3,d4,f#4]@7 ~ [c#3,b3,c#4,e4,f#4]@7 ~", // Bm7 C#m7
  AE: "[a3,c#4,e4,f#4]@3 ~ f#3@2 ~ c#3, [f#2,c#3]@3 ~, f#3 ~, ~@3 [a3,c#4,e4,f#4]@3 [a3,c#4,e4,f#4]@2", // F#m7 F#5 F#m7
  AF: "[b2,a3,b3,d4,f#4]@3 ~@5", // Bm7
})).s("gm_epiano2").gain(0.3).pan(0.2)

// chords · epiano2 · "Remixed" · soft notes
const epiano2_soft = note(`<
  ~ A@4 B@2 C@2 D E ~@3 F G ~@2 H I J@2 ~ K ~@2 L@2 ~@9 H I J@2 ~ K ~@2 L@2 ~@13 H I J@2 ~ K ~@2 L@2 H I J@2 ~ K ~@2 L@2
  D E ~@3 F G ~@2 H I J@2 ~ K ~@2 L@2 H I J@2 ~ K ~@2 L@2 H I J@2 ~ K ~@2
>`.pickRestart({
  A: "[[e4,f#4]@15 f#2@16 f#2@16 ~@11 e4@5 ~, ~@47 f#2@16 ~, ~@48 [g#3,c#4]@15 ~]/4", B: "[b3,c#4,f#4]/2",
  C: "[~@7 f#2 ~@8, c#4@31 ~]/2", D: "~@9 c#4@5 ~@2", E: "c#4@13 ~@3", F: "f#2@15 ~", G: "~@8 c#4@5 ~@3",
  H: "~@8 c#4@7 ~", I: "~@3 c#3@5", J: "[~@15 c#3@7 ~@8 c#4 ~]/2", K: "b3 ~@5 c#3@8 ~@2",
  L: "[~@20 f#3@7 ~@5, ~@5 a4@7 ~@4]/2",
})).s("gm_epiano2").gain(0.12).pan(0.2)

// other · acoustic guitar steel · "Remixed"
const acoustic_guitar_steel = note("<~@69 A B C D E@3 F G@2 ~@38>".pickRestart({
  A: "~@8 a3@4 b3@3 ~", B: "c#4@3 ~ e4 ~ c#4@7 ~ a4 ~", C: "a4@2 ~@2 a4@2 ~@2 a4@2 ~@2 a4@3 ~",
  D: "a4@2 f#4 e4@3 f#4@4 ~@6",
  E: "[~@2 e4 ~ e5 ~ e4 e5 ~ e5 ~ e4 e5 ~ e4 e5@6 ~ c#5@4 b4@2 a4 ~ f#4@7 ~ f#4 a4@2 ~ e4 ~@5]/3",
  F: "f#5@2 ~ e5 d5 e5 d5 c#5 b4 c#5 b4 a4 g#4 a4 ~@2",
  G: "[e4@2 f#4@2 ~@2 a4 b4 c#5 ~@3 a4 g#4 e4 f#4@5 ~@3 a4@2 f#4 ~@2 f#4 a4 ~@2]/2",
})).s("gm_acoustic_guitar_steel").gain(0.42)

// other · acoustic guitar steel · "Remixed" · soft notes · Bm7
const acoustic_guitar_steel_2 = note(`<
  ~@75
  [~@5 e4 ~@9 [a4,b4,d5]]
  [~@14 g#4 e4]
  [~@9 d5 ~ b4 ~@4, ~@5 c#5 ~@2]
  [~@5 c#4 ~@5 e4 ~@4]
  ~@38
>`).s("gm_acoustic_guitar_steel").gain(0.24)

// other · overdriven guitar · "Remixed"
const overdriven_guitar = note("<~@5 [f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~]!4 ~@108>")
  .s("gm_overdriven_guitar").gain(0.06)

// other · blown bottle · "Remixed"
const blown_bottle = note("<~@29 A ~ A ~ A ~@18 A ~ A ~ A ~@60>".pickRestart({
  A: "f#4 ~ f#4 ~ f#4 ~ f#4@10",
})).s("gm_blown_bottle").gain(0.3).pan(0.1)

// other · tenor sax · "Remixed"
const tenor_sax = note("<~@16 A@2 ~@29 B@2 C D ~@36 A@2 ~@28>".pickRestart({
  A: "[~ a5@30 ~]/2", B: "[b4@10 e5@4 c#5@11 ~@7]/2", C: "a5@2 g#5 e5", D: "f#5@13 ~ e5@2",
})).s("gm_tenor_sax").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@18 A@18 B A@22 B A@20 ~@9 A@27 B>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@116>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@17 A B@17 C D B@21 C D B@20 ~@8 A B@27 ~>".pickRestart({
  A: "~@8 x ~@2 x!2 ~@3", B: "~ x ~ x", C: "~@2 x ~@2 x ~@2", D: "x",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~@18 A@13 B A B A@2 ~ A@17 B A B A@2 ~ A@20 ~@9 A@27 C>".pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!2 ~@6",
})).gain(0.56)

// drums · low tom
const low_tom = s("lt").struct("<~@36 [~@3 x] ~@22 [~@3 x] ~@57>").gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@35 A B ~@9 C ~@11 A B ~@9 C ~@28 D ~@18>".pickRestart({
  A: "~@14 x!2", B: "x", C: "~@6 x!2", D: "~@10 x!3 ~ x!2",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@31 A ~ A ~@2 B ~@17 A ~ A ~@2 B ~@57>".pickRestart({
  A: "~@7 x", B: "x",
})).gain(0.32)

// drums · high tom
const high_tom = s("ht").struct("<~@35 A ~@10 B ~@11 A ~@10 B ~@28 C ~@18>".pickRestart({
  A: "~@10 x!3 ~@3", B: "~@2 x!3 ~@2 x ~@2 x ~@5", C: "~@2 x!3 ~ x!3 ~@7",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@80 A ~@8 A ~@9 A ~@9 A ~@7>".pickRestart({
  A: "x",
})).gain(0.48)

stack(
  bass, bass_soft, electric_guitar_clean, electric_guitar_clean_2, epiano2, epiano2_soft, acoustic_guitar_steel,
  acoustic_guitar_steel_2, overdriven_guitar, blown_bottle, tenor_sax, kick, rim, snare, hihat, low_tom, mid_tom,
  open_hat, high_tom, crash
)

More by Alain Souchon