Strudelify

Les elucubrations

Antoine

KeyE majorTempo166 bpm
0:00/0:00
// Les elucubrations — Antoine
// 166 bpm, 4/4, key E major. 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 148 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(166/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 · piano · "Soft karaoke"
const piano = note(`<
  ~ A B C@2 D E F@2 G@2 H I@2 J A B C@2 D E F@2 G@2 H I@2 J A B C@2 D E F@2 G@2 H I@2 J A B C@2 D E K@2 L M N@2 O@2 A B
  C@2 D E F@2 G@2 H I@2 J A B C@2 D E F@2 G@2 H I@2 P Q@2 R@2 S T F@2 G@2 H I@2 P Q@2 R@2 S T K@2 U V N@2 W@2 Q@2 R@2 S
  T F@2 G@2 H I@2 P Q@2 R@2 S T F@2 G@2 H I@2 P Q@2 R@2 X@3
>`.pickRestart({
  A: "g5 g#5@4 ~ [g#5,b5]@5 ~ [f#5,a5]@3 ~ [g#5,b5]@2 ~@5 g5, b5@5 ~@13 [f#5,a5]@6, ~@11 e5", // G#m F#m G#m F#m
  B: "~ g#5 ~ g#5@2 [g#5,b5]@5 ~@2 [f#5,a5]@4 b5@2 [f#5,a5]@4 e5 ~, b5@2 b5@3 ~@11 g#5 ~@7", // G#m F#m
  C: "[g5 g#5@2 ~ g#5 ~ [g#5,b5]@5 ~ [f#5,a5]@4 ~@2 [e5,a5]@3 ~ [g#5,b5]@11 ~@15, b5@3 b5@3 ~@10 [g#5,b5]@6 g5@4 ~@22]/2", // G#m F#m A5 G#m
  D: "[a#5,b5] d6@2 ~@6 b5@2 ~ b5@3 a5 g5 e5@4 ~ [b5,d6]@2, ~@3 b5@2 b5@2 b5@2 ~@13 a#5 ~, ~@4 d6@2 d6@2 d6@3 d6@5 ~@8", // Bmaj7 Bm
  E: "d6 b5 d6 b5 d6 b5 ~ d6 ~@2 b5@4 d6 b5 a5 g5 e5@3 ~ [b5,d6]@2, ~@8 b5@2 ~@12 a#5 ~, ~@9 d6@5 ~@10", // Bm
  F: "[~@4 [e5,g#5,b5] ~ [e5,g#5,b5]@3 ~ [e5,g#5,b5] ~ [e5,g#5,b5]@3 ~ [g#5,b5] ~ [e5,g#5,b5]@3 ~ [e5,a5]@5 ~ e5@2 ~@4 [e5,a5,c#6] ~ [e5,a5,c#6]@2 ~@2 [e5,a5,c#6] ~ [e5,a5,c#6]@2 ~@2 [e5,a5,c#6] ~, ~@11 c#6@4 ~@9, ~@28 a5 ~@19]/2", // E G#m E A5 A
  G: "[[f#5,b5,d#6]@5 ~ [f#5,b5,d#6]@2 ~@2 [f#5,b5] ~ [f#5,b5]@2 ~@2 [f#5,d#6]@2 b5@2 ~@2 g5@2 g#5@3 ~ [e5,g#5,b5] ~ [e5,g#5,b5]@3 ~ [e5,g#5,b5] ~ [e5,g#5,b5]@3 ~ [e5,g#5,b5] ~ [e5,g#5,b5]@3 ~ [e5,g#5,b5]@2, ~@10 d#6@4 ~@2 b5 ~@5 [e5,b5]@5 ~@21]/2", // B B5 D#m E E5
  H: "b5 g#5 b5 g#5 b5 g#5 b5 g#5 b5 g#5 ~@2 [e5,g#5,b5]@3 ~ [e5,g#5] ~ [e5,g#5,b5]@3 ~ [e5,g#5,b5] ~, g5 ~@11", // E
  I: "[[a5,c#6]@4 e5 ~ [e5,a5,c#6]@3 ~ [e5,a5,c#6] ~ [e5,a5]@3 ~ [e5,a5] ~ [e5,a5,c#6]@3 ~ [f#5,b5,d#6]@6 [f#5,b5] ~ [f#5,b5]@4 [f#5,b5] ~ [f#5,b5,d#6]@3 b5@2 [f#5,b5]@3 ~ [b5,d6]@3, e5@3 ~@9 c#6@4 ~@12 d#6@7 ~@4 d#6@5 ~@4, ~@39 f#5 ~@5 [a#5,c6] ~@2]/2", // A A5 A B B5 B B5 Bm …
  J: "d6@2 b5 d6 b5 d6 d6@2 b5 ~ b5@2 [e5,g#5,b5]@3 ~ [e5,g#5,b5] [e5,g#5,b5]@3 ~ [e5,g#5] ~@2, a#5 ~@5 b5 ~@3 e5 ~ g5 ~@8 b5@2 ~", // E
  K: "[[g#5,e6]@3 ~ [g#5,b5,e6] ~ [g#5,b5,e6]@3 ~ [g#5,b5,e6] ~ [g#5,b5,e6]@3 ~ [g#5,b5,e6] ~ [g#5,b5,e6]@3 ~ [a5,c#6,e6]@7 ~ [a5,c#6,e6]@3 ~ [a5,c#6,e6] ~ [a5,c#6,e6]@3 ~ [a5,e6]@4 ~ [a5,c#6] ~@2, b5 ~@39 c#6@2 ~@3 e6@2 ~]/2", // C#m E A A5 A
  L: "~ d#6@2 ~ [b5,d#6] ~ [b5,d#6,f#6]@3 ~ [b5,d#6,f#6] ~ [b5,d#6,f#6]@3 d#6 [b5,f#6] ~ [b5,f#6]@2 ~ [d#6,f#6] b5 ~, [b5,f#6] ~@5, d6@2 ~@2 f#6@2 ~@11 d#6@3 ~@4", // B B5 D#m B5
  M: "[g#5,b5,e6]@3 [b5,e6]@2 ~@2 d6 b5 d6 ~@2 [b5,d6]@3 [b5,d6] ~ a#5 [b5,d6]@3 ~ [b5,d6] ~, ~@3 g#5 ~@2 [a#5,b5]@2 ~@16", // E E5 Bm Bmaj7
  N: "[[g#5,b5,e6]@3 ~ [g#5,b5,e6] ~ [g#5,b5,e6]@3 ~ [g#5,b5,e6] ~ [g#5,b5,e6]@3 ~ [g#5,b5,e6] ~ [g#5,b5,e6]@3 ~ [a5,c#6,e6]@5 ~ [a5,c#6,e6] ~ [c#6,e6]@4 a5 ~ [a5,c#6,e6]@3 ~ [a5,c#6,e6] ~ [a5,c#6,e6]@3 [a5,c#6] ~@2, ~@30 a5@3 ~@12 e6@2 ~]/2", // E A C#m A
  O: "[d6 d#6@2 ~ [b5,d#6,f#6] ~ [b5,d#6,f#6]@3 ~ [b5,d#6,f#6] ~ [b5,d#6,f#6]@3 ~ [b5,d#6,f#6] ~ [b5,d#6,f#6]@2 ~@2 [g#5,b5,e6]@5 ~ [g#5,b5,e6] ~ [g#5,b5,e6]@3 ~ [g#5,b5,e6] ~ [g#5,b5,e6]@3 ~ [g#5,b5] ~ [g#5,b5,e6]@3 ~ [g#5,b5,e6]@2, [b5,f#6]@3 ~@37 e6@2 ~@6]/2", // B E G#m E B5
  P: "d6@2 [b5,d6] ~ b5 d6 d6@2 b5 ~ b5@2 [e5,g#5,b5]@3 ~ [e5,g#5,b5] [e5,g#5,b5]@3 ~ [e5,g#5] ~@2, a#5 ~@5 b5 ~@3 e5 ~ g5 ~@8 b5@2 ~", // Bm E
  Q: "[g5 g#5@4 ~ [g#5,b5]@5 ~ [f#5,a5]@3 ~ [g#5,b5]@2 ~@5 b5@2 g#5 [g#5,b5]@3 [g#5,b5]@5 ~@2 [f#5,a5]@4 b5@2 [f#5,a5]@4 e5 ~, b5@5 ~@13 [f#5,a5]@5 g5 ~@16 g#5 ~@7, ~@11 e5 ~@12]/2", // G#m F#m G#m F#m
  R: "[g5 ~ b5@2 g#5 ~ [g#5,b5]@5 ~ [f#5,a5]@4 ~@2 [e5,a5]@3 ~ g#5@11 ~@15, b5@2 ~@19 b5@11 ~@16, ~ g#5@3 ~@12 [g#5,b5]@5 g5@4 ~@23]/2", // G#m F#m A5 G#m
  S: "[a#5,b5] ~ b5@2 [b5,d6]@2 ~@3 b5@2 ~@3 a5 ~ g5 e5@4 ~ [b5,d6]@2, ~ d6@2 ~@3 d6@2 d6@3 d6@5 ~@8, ~@7 b5@2 ~@3 b5@4 ~@6 a#5 ~", // Bmaj7 Bm
  T: "d6 b5 d6 b5 d6 b5 ~ d6 ~@2 b5@4 d6 b5 a5 g5 e5@3 a#5 [b5,d6]@2, ~@4 b5 ~@7, ~@9 d6@5 ~@10", // Bm
  U: "~ d#6@2 ~ [b5,d#6] ~ [b5,d#6,f#6]@3 ~ [b5,d#6,f#6] ~ [b5,d#6,f#6]@3 [b5,d#6,f#6] ~@2 [b5,f#6]@2 ~ [d#6,f#6] b5 ~, [b5,f#6] ~@5, d6@2 ~@2 f#6@2 ~@11 d#6@3 ~@4", // B B5 D#m B5
  V: "[g#5,b5,e6]@3 [b5,e6]@2 ~@2 d6 b5 d6 ~@2 [b5,d6]@3 [b5,d6] ~ [b5,d6]@3 ~ [b5,d6] ~@2, ~@3 g#5 ~@2 [a#5,b5]@2 ~@9 a#5 ~@6", // E E5 Bm Bmaj7
  W: "[[b5,d#6,f#6]@3 ~ [b5,d#6,f#6] ~ [b5,d#6,f#6]@3 ~ [b5,d#6,f#6] ~ [b5,d#6,f#6]@3 ~ [b5,d#6,f#6] ~ [b5,d#6,f#6]@2 ~@2 [g#5,b5,e6]@5 ~ [g#5,b5,e6] ~ g#5@3 ~ [g#5,b5,e6] ~ [g#5,b5,e6]@3 ~ [g#5,b5] ~ [g#5,b5,e6]@3 ~ [g#5,b5]@2, d6 ~@28 [b5,e6]@3 ~@8 e6@2 ~@3 e6@2 ~]/2", // B E G#m E G#m E5
  X: "[a#5 ~ d6@2 [a#5,b5]@2 ~ a#5@2 d6 b5 [b5,d6]@48 ~@13, b5@4 ~@2 d6@3 ~@63, ~@7 b5 ~@64]/3", // Bmaj7 Bm
})).s("gm_piano").gain(0.29).pan(0.2)

// bass · electric bass finger · "BASSE"
const bass = note(`<
  ~ A@4 B C@8 D A@4 B C@8 D A@4 B C@8 D A@4 B C@8 D A@4 B C@8 D A@4 B C@8 D A@4 B C@8 D A@4 B C@8 D A@4 B C@8 D A@4 B
  C@8 D A@4 E@2 ~
>`.pickRestart({
  A: "[e1@6 g#1@5 ~ a1@3 ~ d2 ~ a1@4 e1@7 ~ g#1@5 ~ a1@4 d2 ~ a1@4 e1@8 g#1@5 ~ a1@3 ~ d2 ~ a1@4 e1@9 ~@17]/4",
  B: "e1@6 g#1@5 ~ a1@3 ~ b1 ~ a1@4 e1@2",
  C: "[~@6 g#1@5 ~ a1@4 b1 ~ a1@4 e1@8 g#1@5 ~ a1@3 ~ b1 ~ a1@4 a1@8 c#2@5 ~ d2@3 ~ e2 ~ d2@4 b1@8 d#2@5 ~ e2@3 ~ f#2 ~ e2@4 e1@8 g#1@5 ~ a1@3 ~ b1 ~ a1@4 e1@8 g#1@5 ~ a1@3 ~ b1 ~ a1@4 a1@8 c#2@5 ~ d2@3 ~ e2 ~ d2@4 b1@8 d#2@5 ~ e2@3 ~ f#2 ~ e2@4 e1@2]/8",
  D: "~@6 g#1@5 ~ a1@3 ~ b1 ~ a1@4 e1@2", E: "[e1@37 ~@11]/2",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · harmonica
const harmonica = note(`<
  ~ A@3 ~@11 A@3 ~@11 A@3 ~@11 A@3 ~@11 A@3 ~@11 A@3 ~@11 B@3 ~@11 B@3 ~@11 B@3 ~@11 B@3 ~@11 B@3 ~@4
>`.pickRestart({
  A: "[[b4,d5,e5]@11 ~ [a4,c#5,e5]@3 ~ [b4,e5] ~ [a4,c#5]@3 [b4,d5]@13 ~ [a4,c#5,e5]@3 ~ [d5,e5]@2 [a4,c#5]@3 ~ [b4,d5]@14 [a4,c#5,e5]@3 ~ [b4,e5] ~ [a4,c#5]@3 ~ [b4,d5]@3, ~@15 d5@2 ~ e5@17 ~@4 b4 ~ e5@17 ~@5 d5@2 e5@7]/3", // E7 A E5 A Bm A Dsus2 A …
  B: "[[b4,d5,e5]@11 ~ [a4,c#5,e5]@3 [b4,e5] ~@2 [a4,c#5]@3 [b4,d5]@13 ~ [a4,c#5,e5]@3 ~ [d5,e5]@2 [a4,c#5]@3 ~ [b4,d5]@14 [a4,c#5,e5]@3 ~ [b4,e5] ~ [a4,c#5]@3 ~ [b4,d5]@3, ~@15 d5@2 ~ e5@17 ~@4 b4 ~ e5@17 ~@5 d5@2 e5@7]/3", // E7 A E5 A Bm A Dsus2 A …
})).s("gm_harmonica").gain(0.32).pan(0.3)

// chords · acoustic guitar steel · "STEELGUIT"
const acoustic_guitar_steel = note(`<
  ~ A@4 B@2 C D E C@2 D E C A@4 B@2 C D E C@2 D E C F@4 B@2 C D E C@2 D E C F@4 B@2 C D E C@2 D E C F@4 B@2 C D E C@2 D
  E C F@4 B@2 C D E C@2 D E C F@4 B@2 C D E C@2 D E C F@4 B@2 C D E C@2 D E C F@4 B@2 C D E C@2 D E C F@4 B@2 C D E C@2
  D E C F@4 ~@3
>`.pickRestart({
  A: "[[b3,e4]@3 ~ [b3,e4] ~ e4@4 b3 ~ [b3,e4]@4 [b3,e4] ~ [b3,e4]@3 ~ e4@6 b3 ~ e4@4 b3 ~ [b3,e4]@3 ~ [b3,e4] ~ [b3,e4]@3 ~ [b3,e4]@6 [b3,e4] ~ e4@4 b3 ~ [b3,e4]@3 ~ [b3,e4] ~ [b3,e4]@3 ~ [b3,e4]@9 ~@17, ~@6 b3@3 ~@13 b3@5 ~@3 b3@3 ~@21 b3@3 ~@39]/4", // E5
  B: "[[g#3,b3,e4]@3 ~ [g#3,b3,e4] ~ [g#3,b3]@3 ~ [g#3,b3] ~ [g#3,b3,e4]@3 ~ [g#3,b3,e4] ~ [g#3,b3,e4]@3 ~ [g#3,e4]@6 b3 ~ [g#3,b3]@3 ~ [g#3,b3] ~ [g#3,b3,e4]@3 ~ [g#3,b3,e4] ~ [g#3,b3,e4]@3 ~ [g#3,b3,e4] ~, ~@6 e4@4 ~@12 b3@5 ~@3 e4@4 ~@14]/2", // E G#m E C#m G#m E
  C: "[g#3,b3,e4]@3 ~ [g#3,b3,e4] ~ [g#3,b3,e4]@3 ~ [g#3,b3,e4] ~ [g#3,b3,e4]@3 ~ [g#3,b3,e4] ~ [g#3,b3,e4]@3 ~ [g#3,b3,e4] ~", // E
  D: "[a3,c#4,e4]@3 ~ [a3,c#4,e4] ~ [a3,c#4,e4]@3 ~ [a3,c#4,e4] ~ [a3,c#4,e4]@3 ~ [a3,c#4,e4] ~ [a3,c#4,e4]@3 ~ [a3,c#4,e4] ~", // A
  E: "[b3,d#4,f#4]@3 ~ [b3,d#4,f#4] ~ [b3,d#4,f#4]@3 ~ [b3,d#4,f#4] ~ [b3,d#4,f#4]@3 ~ [b3,d#4,f#4] ~ [b3,d#4,f#4]@3 ~ [b3,d#4,f#4] ~", // B
  F: "[[g#3,b3,e4]@3 ~ [g#3,b3,e4] ~ [g#3,b3]@3 ~ [g#3,b3] ~ [g#3,b3,e4]@3 ~ [g#3,b3,e4] ~ [g#3,b3,e4]@3 ~ [g#3,e4]@6 b3 ~ [g#3,b3]@3 ~ [g#3,b3] ~ [g#3,b3,e4]@3 ~ [g#3,b3,e4] ~ [g#3,b3,e4]@3 ~ [g#3,b3,e4]@6 [g#3,b3,e4] ~ [g#3,b3]@3 ~ [g#3,b3] ~ [g#3,b3,e4]@3 ~ [g#3,b3,e4] ~ [g#3,b3,e4]@3 ~ [g#3,b3,e4]@9 ~@17, ~@6 e4@4 ~@12 b3@5 ~@3 e4@4 ~@20 e4@4 ~@38]/4", // E G#m E C#m G#m E G#m E
})).s("gm_acoustic_guitar_steel").gain(0.19).pan(0.9)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@47 A B C@3 D E@2 F@2 ~@91>".pickRestart({
  A: "e4@5 e4@3 ~@8 e4@3 ~@5", B: "e4@4 e4@3 ~@3 e4@3 ~@3 e4@3 ~@3 e4 ~",
  C: "[e4@2 ~@2 e4@2 ~@4 e4 ~ g4@3 ~ a4@2 ~@4 g4@8 e4@3 ~@2 e4 g4@3 ~ a4@2 ~@3 g4@6 e4@2 ~@5 e4@2 ~@4 e4 ~ b4@2 ~@2 a#4@2]/3",
  D: "~ a4@2 ~ g4@2 e4@4 ~@2 e4@3 ~@3 e4@2 ~@4",
  E: "[e4@5 ~@5 e4 ~ g4@3 ~ a4@2 ~@3 g4@9 e4@3 ~ e4 ~ g4@3 ~ a4@2 ~@4 e4 ~]/2",
  F: "[g4@3 ~ a4@2 g4@4 e4 ~ a4@3 ~ g4@2 e4@3 ~ e4@8 d4@4 b3 ~ d4@4 e4@7 ~]/2",
})).s("gm_overdriven_guitar").gain(0.44)

// chords · drawbar organ · "ORGUE1"
const drawbar_organ = note(`<
  ~ A@4 B@2 C D E@2 F D E@2 G@4 B@2 C D E@2 F D E@2 G@4 B@2 C D E@2 F D E@2 G@4 B@2 C D E@2 F D E@2 G@4 B@2 C D E@2 F D
  E@2 G@4 B@2 C D E@2 H D E@2 G@4 B@2 I D E@2 H D E@2 G@4 B@2 I D E@2 H D E@2 G@4 B@2 I D E@2 H D E@2 G@4 B@2 I D E@2 H
  D E@2 G@4 ~@3
>`.pickRestart({
  A: "[~ [g#4,b4,e5]@72 ~@23]/4", B: "[g#4,b4,e5]/2", C: "e5 g#5@23, b5, g5 ~@11", D: "~ c#5@22 ~, [e5,a5]@23 ~",
  E: "[[d#5,f#5]@12 [e5,g#5]@11 ~, b5@47 ~]/2", F: "g5 g#5@23, [e5,b5]", G: "[[e5,g5,b5] [g#4,b4,e5]@72 ~@23]/4",
  H: "[e5,g#5,b5], g5 ~@23", I: "[g#5,b5], g5 ~@11, e5 ~@23",
})).s("gm_drawbar_organ").gain(0.14)

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

// drums · snare
const snare = s("sd").struct(`<
  A B@3 ~ B@13 ~ B@13 ~ B@13 ~ B@9 C B@3 ~ B@13 ~ B@13 ~ B@13 ~ B@13 ~ B@13 ~ B@13 ~@4
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@3 x ~@4 x!4",
})).gain(0.54)

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

// drums · crash
const crash = s("cr").struct(`<
  ~ A@4 ~@10 A@4 ~@10 A@4 ~@10 A@4 ~@10 A@4 ~@10 A@4 ~@10 A@4 ~@10 A@4 ~@10 A@4 ~@10 A@4 ~@10 A@5 ~@2
>`.pickRestart({
  A: "x",
})).gain(0.39)

stack(piano, bass, harmonica, acoustic_guitar_steel, overdriven_guitar, drawbar_organ, kick, snare, hihat, crash)

More by Antoine