Strudelify

Rive gauche

Alain Souchon

KeyB majorTempo110 bpm
0:00/0:00
// Rive gauche — Alain Souchon
// 110 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): MIDI.
setcpm(110/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// other · flute · "MIDI"
const flute = note(`<
  ~@3 A B C B D E F G H I J I K L M N O P M I Q R S R A T@2 U@2 V W V X I J N Y L M P Z AA AB AA Y L AC@2 ~@8 A AD AE AD
  AF AG AH AI AJ I AK I AL AA AM P Z N AN P AO@2 AP AQ AR ~ AS AT ~@14
>`.pickRestart({
  A: "~@7 a#4", B: "b4!2 a#4 g#4 d#4@4", C: "~@2 f#4@2 f#4@2 e4@8 g#4 a#4", D: "~@4 e4@3 d#4", E: "d#4 g#4!2 f#4 d#4@4",
  F: "~ c#4 d#4 e4@4 ~", G: "g#4!3 f#4 d#4 f#4@3", H: "~ f#4 e4 d#4 e4@2 ~@2", I: "~@12 f#4@3 ~",
  J: "f#4@3 ~ f#4@2 e4@4 e4@4 ~@2", K: "a#4@3 ~ g#4@3 ~ e4@2 e4@3 ~@3", L: "~@10 f#4@3 ~ f#4@2",
  M: "f#4@2 f#4@2 e4@2 d#4@2 e4@2 e4@5 ~", N: "~@6 f#4!2", O: "f#4@3 ~ f#4@2 g#4@3 ~ e4@5 ~", P: "~@5 f#4@2 f#4",
  Q: "a#4@3 ~ g#4@3 ~ e4@2 e4@2 d#4@2 c#4@2", R: "c#4 d#4@5 ~@2", S: "~@6 d#4 c#4",
  T: "[b4@3 a#4@2 g#4@3 d#4@2 f#4@10 f#4@2 e4@6 ~@2 g#4 a#4]/2",
  U: "[b4@3 a#4@2 g#4@3 d#4@2 f#4@8 c#4@2 d#4@2 e4@6 ~@4]/2", V: "g#4!3 f#4 d#4@3 ~", W: "~ c#4 d#4 e4@3 ~@2",
  X: "~ c#4 b3 c#4@3 ~@2", Y: "a#4@3 g#4@2 f#4@3 e4@2 e4@5 ~", Z: "f#4@2 f#4@2 e4@2 d#4@2 e4@2 f#4@5 ~",
  AA: "~@5 f#4!3", AB: "f#4@4 e4@2 d#4@2 e4@7 ~", AC: "[f#4@2 f#4@2 e4@2 d#4@2 e4@4 e4@2 d#4@9 ~@9]/2",
  AD: "b4@2 b4@2 a#4@2 g#4@2 d#4@5 ~ f#4@2", AE: "f#4@2 e4@2 d#4@2 e4@7 ~ g#4 a#4", AF: "f#4 e4 d#4 e4@3 ~ d#4",
  AG: "d#4 g#4!2 f#4 d#4@3 ~", AH: "~ c#4 d#4 e4@3 ~ d#4", AI: "d#4@2 g#4@2 g#4@2 f#4@2 d#4@3 ~ f#4@3 ~",
  AJ: "f#4 e4 d#4 e4@3 ~@2", AK: "f#4@3 ~ f#4@4 e4@2 e4@4 ~@2", AL: "a#4@3 ~ g#4@3 ~ e4@2 e4@5 ~",
  AM: "f#4@3 ~ e4@2 d#4@2 e4@2 e4@5 ~", AN: "f#4@3 ~ d#4@2 e4@4 f#4@5 ~",
  AO: "[a#4@2 a#4@2 g#4@2 f#4@2 e4@2 e4@2 e4@2 f#4@4 ~@10 f#4@3 ~]/2", AP: "g#4@2 f#4 f#4@3 ~@2", AQ: "~@6 d#4!2",
  AR: "c#4 c#4@3 ~@4", AS: "~@10 e4@3 ~ e4@2", AT: "d#4@2 d#4@3 ~@11",
})).s("gm_flute").gain(0.3)

// other · tenor sax · "MIDI"
const tenor_sax = note("<~@52 A ~@3 A ~@27 A ~ B C A ~@3 A ~@3 A ~@4>".pickRestart({
  A: "g#4@2 a#4 b4@2 a#4@2 ~ f4@2 g#4 a#4@2 g#4@3", B: "g#4@2 a#4 b4 g#4@2 a#4 b4 g#4@2 a#4 b4 g#4@2 a#4 b4",
  C: "g#4@2 a#4 b4 ~@4 g#4@2 a#4 b4 ~@4",
})).s("gm_tenor_sax").gain(0.3)

// chords · string ensemble 2 · "MIDI"
const string_ensemble_2 = note(`<
  ~@12 A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A B ~@16 A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B ~@5
>`.pickRestart({
  A: "[b3,d#4,g#4]", B: "[c#4,f#4,a#4]",
})).s("gm_string_ensemble_2").gain(0.3)

// other · electric guitar jazz · "MIDI"
const electric_guitar_jazz = note(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "f#3 ~", B: "f#3 e3",
})).s("gm_electric_guitar_jazz").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@4 A@8 B@16 A@7 C B@16 A@8 ~@8 B@13 ~ B@14 ~@5>".pickRestart({
  A: "x!2 ~@2 x ~@3", B: "x!2 ~ x!3 ~ x", C: "x",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@4 A@8 B@16 A@7 ~ B@16 A@8 ~@8 B@13 ~ B@14 ~@5>".pickRestart({
  A: "~ x ~@2", B: "~ x ~ x",
})).gain(0.3)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@3 A B@56 ~@7 A B@13 A B@14 ~@5>".pickRestart({
  A: "~@4 x!3 ~", B: "x!7 ~",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@3 [~@7 x]!57 ~@7 [~@7 x]!29 ~@5>").gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@52 A ~ A ~ A ~ A ~@33 A ~@8>".pickRestart({
  A: "x!4 ~@4",
})).gain(0.3)

stack(flute, tenor_sax, string_ensemble_2, electric_guitar_jazz, kick, snare, pedal_hat, open_hat, ride)

More by Alain Souchon