Strudelify
KeyF majorTempo91 bpm
0:00/0:00
// Rame — Alain Souchon
// 91 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 25, 4/4 at bar 25, 2/4 at bar 45, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(91/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 · pad warm · "accomp"
const pad_warm = note(`<
  ~@2 A@2 B C@2 D A@2 B E F A@2 B C@2 D A@2 B E G@7 H I J@8 K@3 L@2 M N O P Q R S T M N O P Q R S T M N O P Q R S T M N
  O P Q R S T M N O P Q R S T U
>`.pickRestart({
  A: "[bb3,eb4,g4]@5 ~ [bb3,d4,f4]@8 ~@2", B: "[bb3,c4,f4]@5 ~ [a3,c4,f4]@8 ~@2",
  C: "[ab3,db4,f4]@5 ~ [ab3,c4,eb4]@8 ~@2", D: "[ab3,bb3,eb4]@5 ~ [g3,bb3,eb4]@8 ~@2",
  E: "[ab3,c4,eb4] bb3 c4 eb4 [bb3,d4,f4] c4 d4 f4", F: "[g3,c4,g4] c4 d4 g4@4 ~",
  G: "[[g3,c4,g4]@2 c4@2 d4@2 g4@18 [a3,c4,f4]@15 ~ [g3,bb3]@7 ~ a3@7 ~ a3@7 ~ [f3,d4]@7 ~ g3@7 ~ a3@7 ~ bb3@7 ~ a4@3 ~ bb3@3 ~ [bb3,c4,e4,g4]@3 ~ [bb3,c4,e4,g4]@3 ~, ~@40 [c4,f4]@15 ~ [c4,f4]@15 ~ [c4,f4]@15 ~ [d4,f4]@15 ~@9]/7", // C5 F Gm Dm C7 F5 Dm
  H: "[c4,f4,a4]@3 ~ [c4,f4,a4]@3 ~ [d4,f4,c5]@3 ~ [d4,f4,c5]@3 ~", // F Dm7
  I: "[d4,f4,c5]@3 ~ [d4,f4,c5]@3 ~ [c4,f4,g4,c5]@3 ~ [c4,f4,g4,c5]@3 ~", // Dm7 Csus4
  J: "[[e4,g4,bb4,c5]@3 ~ [e4,g4,bb4,c5]@3 ~ [bb3,d4,f4]@15 ~ [bb3,eb4,g4]@5 ~ [bb3,d4,f4]@8 ~@2 [bb3,eb4,g4]@5 ~ [bb3,d4,f4]@8 ~@2 [bb3,c4,f4]@5 ~ [a3,c4,f4]@8 ~@2 [ab3,db4,f4]@5 ~ [ab3,c4,eb4]@8 ~@2 [ab3,db4,f4]@5 ~ [ab3,c4,eb4]@8 ~@2 [ab3,bb3,eb4]@5 ~ [g3,bb3,eb4]@8 ~@2 [bb3,eb4,g4]@5 ~ [bb3,d4,f4]@2]/8", // C7 Bb Eb Bb Eb Bb Bbsus2 F …
  K: "[~@8 [bb3,eb4,g4]@5 ~ [bb3,d4,f4]@8 ~@2 [bb3,c4,f4]@5 ~ [a3,c4,f4]@8 ~@2 [ab3,c4,eb4]@2 bb3@2 c4@2 eb4@2]/3", // Eb Bb Bbsus2 F Ab
  L: "[[bb3,d4,f4] c4 d4 f4 [g3,c4,g4] c4 d4 g4@9]/2", M: "[a3,c4,f4]@15 ~", N: "[g3,bb3]@7 ~ a3@7 ~, [c4,f4]@15 ~",
  O: "a3@7 ~ [f3,d4]@7 ~, [c4,f4]@15 ~", P: "g3@7 ~ a3@7 ~, [c4,f4]@15 ~", Q: "bb3@7 ~ a4@3 ~ bb3@3 ~, [d4,f4]@15 ~",
  R: "[bb3,e4,g4]@7 ~ [f4,a4]@7 ~, c4@15 ~", S: "[d4,f4,c5]@15 ~", T: "[c4,f4]@7 ~ [e4,bb4]@7 ~, [g4,c5]@15 ~",
  U: "[bb3,d4,f4]@15 ~", // Bb
})).s("gm_pad_warm").gain(0.35)

// chords · overdriven guitar · "lead guitar"
const overdriven_guitar = note("<~@11 A B@2 ~@8 A C@2 ~@17 D E@2 ~@41>".pickRestart({
  A: "ab3 bb3 ~ eb4 bb3 c4 d4 f4, ~ c4 ~@2", B: "[~@6 g4@13 ~@13, g3 ~, ~ c4@7 ~@8, ~ d4@3 ~@4]/2",
  C: "[~ c4 ~ g4@7 ~@6, g3 d4@4 ~@3]/2", D: "~@4 ab3 bb3 ~ eb4, ~@3 c4",
  E: "[bb3 c4 d4 f4 ~ c4 ~ g4@7 ~@2, ~@2 g3 d4@4 ~]/2",
})).s("gm_overdriven_guitar").gain(0.15)

// chords · pizzicato strings · "pizz"
const pizzicato_strings = note(`<
  ~@2 A@2 B C@2 D A@2 B E F A@2 B C@2 D A@2 B E G@2 H I J K L M N O@8 P@3 Q@2 I R S T U V W X I R S T U V W X I R S T U
  V W X I R S T U V W X I R S T ~@5
>`.pickRestart({
  A: "[bb3,eb4,g4]@5 ~ [bb3,d4,f4]@8 ~@2", B: "[bb3,c4,f4]@5 ~ [a3,c4,f4]@8 ~@2",
  C: "[ab3,db4,f4]@5 ~ [ab3,c4,eb4]@8 ~@2", D: "[ab3,bb3,eb4]@5 ~ [g3,bb3,eb4]@8 ~@2",
  E: "[ab3,c4,eb4] bb3 c4 eb4 [bb3,d4,f4] c4 d4 f4", F: "[g3,c4,g4] c4 d4 g4@4 ~",
  G: "[[g3,c4,g4]@2 c4@2 d4@2 g4@18 [a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~]/2", // C5 F
  H: "[a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~ [g3,bb3,c4,f4]@3 ~ [g3,bb3,c4,f4]@3 ~", // F Gm7
  I: "[a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~", // F
  J: "[f3,c4,d4,f4]@3 ~ [f3,c4,d4,f4]@3 ~ [g3,c4,f4]@3 ~ [g3,c4,f4]@3 ~", // Dm7 Csus4
  K: "[a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~ [bb3,d4,f4]@3 ~ [bb3,d4,f4]@3 ~", // F Bb
  L: "[d4,f4,a4]@3 ~ [bb3,d4,f4]@3 ~ [bb3,c4,e4,g4]@3 ~ [bb3,c4,e4,g4]@3 ~", // Dm Bb C7
  M: "[c4,f4,a4]@3 ~ [c4,f4,a4]@3 ~ [d4,f4,c5]@3 ~ [d4,f4,c5]@3 ~", // F Dm7
  N: "[d4,f4,c5]@3 ~ [d4,f4,c5]@3 ~ [c4,f4,g4,c5]@3 ~ [c4,f4,g4,c5]@3 ~", // Dm7 Csus4
  O: "[[e4,g4,bb4,c5]@3 ~ [e4,g4,bb4,c5]@3 ~ [bb3,d4,f4]@15 ~ [bb3,eb4,g4]@5 ~ [bb3,d4,f4]@8 ~@2 [bb3,eb4,g4]@5 ~ [bb3,d4,f4]@8 ~@2 [bb3,c4,f4]@5 ~ [a3,c4,f4]@8 ~@2 [ab3,db4,f4]@5 ~ [ab3,c4,eb4]@8 ~@2 [ab3,db4,f4]@5 ~ [ab3,c4,eb4]@8 ~@2 [ab3,bb3,eb4]@5 ~ [g3,bb3,eb4]@8 ~@2 [bb3,eb4,g4]@5 ~ [bb3,d4,f4]@2]/8", // C7 Bb Eb Bb Eb Bb Bbsus2 F …
  P: "[~@8 [bb3,eb4,g4]@5 ~ [bb3,d4,f4]@8 ~@2 [bb3,c4,f4]@5 ~ [a3,c4,f4]@8 ~@2 [ab3,c4,eb4]@2 bb3@2 c4@2 eb4@2]/3", // Eb Bb Bbsus2 F Ab
  Q: "[[bb3,d4,f4] c4 d4 f4 [g3,c4,g4] c4 d4 g4@9]/2", // Bb C5
  R: "[g3,bb3,c4,f4]@3 ~ [g3,bb3,c4,f4]@3 ~ [a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~", // Gm7 F
  S: "[a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~ [f3,c4,d4,f4]@3 ~ [f3,c4,d4,f4]@3 ~", // F Dm7
  T: "[g3,c4,f4]@3 ~ [g3,c4,f4]@3 ~ [a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~", // Csus4 F
  U: "[bb3,d4,f4]@3 ~ [bb3,d4,f4]@3 ~ [d4,f4,a4]@3 ~ [bb3,d4,f4]@3 ~", // Bb Dm Bb
  V: "[bb3,c4,e4,g4]@3 ~ [bb3,c4,e4,g4]@3 ~ [c4,f4,a4]@3 ~ [c4,f4,a4]@3 ~", // C7 F
  W: "[d4,f4,c5]@3 ~ [d4,f4,c5]@3 ~ [d4,f4,c5]@3 ~ [d4,f4,c5]@3 ~", // Dm7
  X: "[c4,f4,g4,c5]@3 ~ [c4,f4,g4,c5]@3 ~ [e4,g4,bb4,c5]@3 ~ [e4,g4,bb4,c5]@3 ~", // Csus4 C7
})).s("gm_pizzicato_strings").gain(0.17)

// chords · pizzicato strings · "pizz" · soft notes · Bb Dm Bb C7 F Dm7 Csus4 C7 …
const pizzicato_strings_soft = note(`<
  ~@81
  [[bb3,d4,f4]@3 ~ [bb3,d4,f4]@3 ~ [d4,f4,a4]@3 ~ [bb3,d4,f4]@3 ~]
  [[bb3,c4,e4,g4]@3 ~ [bb3,c4,e4,g4]@3 ~ [c4,f4,a4]@3 ~ [c4,f4,a4]@3 ~]
  [[d4,f4,c5]@3 ~ [d4,f4,c5]@3 ~ [d4,f4,c5]@3 ~ [d4,f4,c5]@3 ~]
  [[c4,f4,g4,c5]@3 ~ [c4,f4,g4,c5]@3 ~ [e4,g4,bb4,c5]@3 ~ [e4,g4,bb4,c5]@3 ~]
  [[bb3,d4,f4]@15 ~]
>`).s("gm_pizzicato_strings").gain(0.08)

// bass · electric bass pick · "basse"
const bass = note(`<
  A B C D E F G H I J K L M C D E F G H I J K L N@2 O P Q R S T U V@2 W@2 X@3 Y@3 Z AA@2 AB AC AD AE AF AG AH AI AB AC
  AD AE AF AG AH AI AB AC AD AE AF AG AH AI AB AC AD AE AF AG AH AI AB AC AD AE AF AG AH AI J
>`.pickRestart({
  A: "bb1@5 ~ bb1@2 bb1@7 ~", B: "bb1@5 ~ bb1@2 bb1@3 ~ bb1@3 ~", C: "bb2@6 ~@2 bb1@2 ~ bb1 bb1@3 ~",
  D: "bb1@3 ~ bb1@6 ~@2 bb1@3 ~", E: "f2@5 ~ f1@2 f1@3 ~ f1@2 g1@2", F: "ab1@10 ~@2 ab1@3 ~", G: "ab2@10 ~@2 ab1@3 ~",
  H: "bb1@3 ~ eb1@3 ~", I: "bb1@10 ~@2 bb1@3 ~", J: "bb1@13 ~@3", K: "f1@3 ~ a1@2 c2@2 f2@3 ~ f1@2 g1@2",
  L: "ab1@3 ~ bb1@3 ~", M: "~@12 c2@3 ~", N: "[c2@10 d1 e1 f1@3 ~]/2", O: "d2@6 ~@2 c2@3 ~ c1@2 c1@2",
  P: "f1@5 ~ f1@2 f1@3 ~ f1@2 a1@2", Q: "bb1@5 ~ g1@2 c2@3 ~ e2@3 ~", R: "f2@5 ~ f2@2 bb1@6 ~@2",
  S: "d2@3 ~ g1@3 ~ c2@3 ~ c1@3 ~", T: "f1@6 ~@2 bb1@5 ~ bb1@2", U: "bb1@6 ~@2 c2@5 ~ c2@2",
  V: "[c1@6 ~@2 bb1@13 ~@3 bb2@6 ~@2]/2", W: "[bb1@2 ~ bb1 bb1@3 ~ bb1@3 ~ bb1@6 ~@2 bb1@3 ~ f2@5 ~ f1@2]/2",
  X: "[f1@3 ~ f1@2 g1@2 ab1@10 ~@2 ab1@3 ~ ab2@10 ~@2 ab1@3 ~ bb1@6 ~@2]/3",
  Y: "[eb1@6 ~@2 bb1@10 ~@2 bb1@3 ~ bb1@13 ~@3 f1@3 ~ a1@2 c2@2]/3", Z: "f2@3 ~ f1@2 g1@2 ab1@6 ~@2",
  AA: "[bb1@3 ~ c2@10 d1 e1]/2", AB: "f1@3 ~ d2@3 ~", AC: "c2@3 ~ c1@2 c1@2 f1@5 ~ f1@2",
  AD: "f1@3 ~ f1@2 a1@2 bb1@5 ~ g1@2", AE: "c2@3 ~ e2@3 ~ f2@5 ~ f2@2", AF: "bb1@6 ~@2 d2@3 ~ g1@3 ~",
  AG: "c2@3 ~ c1@3 ~ f1@6 ~@2", AH: "bb1@5 ~ bb1@2 bb1@6 ~@2", AI: "c2@5 ~ c2@2 c1@6 ~@2",
})).s("gm_electric_bass_pick").gain(0.19)

// drums · rim
const rim = s("rim").struct("<~@13 A B A@2 B A B A B A B ~@10 C D C D C D C D C D C ~@41>".pickRestart({
  A: "~ x", B: "~ x ~@5 x", C: "~@5 x ~@2", D: "~@3 x ~@4",
})).gain(0.38)

// drums · snare
const snare = s("sd").struct("<~@25 x!19 [x ~@6 x] [~ x]!36 ~@5>").gain(0.33)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@81 [~ x]!5>").gain(0.14)

// drums · hihat
const hihat = s("hh").struct("<[~ x ~ x]!13 [x!8]!67 [x!7 ~] [x!2 ~@2] x ~@3>").gain(0.33)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@80 [~@7 x] [~ x!7]!2 [x!8]!3>").gain(0.14)

// drums · ride
const ride = s("rd").struct("<~@24 [~@2 x!2] [x!4]!8 [x!2 ~@2] ~@11 [x!4]!36 x ~@4>").gain(0.33)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@81 [~ x!3] [x!4]!4>").gain(0.14)

stack(
  pad_warm, overdriven_guitar, pizzicato_strings, pizzicato_strings_soft, bass, rim, snare, snare_soft, hihat,
  hihat_soft, ride, ride_soft
)

More by Alain Souchon