Strudelify

Le Freak

Chic

KeyG minorTempo120 bpm
0:00/0:00
// Le Freak — Chic
// 120 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 11 "+FUNK GTR" electric guitar muted (copy of ch 3 "+FUNK GTR" electric guitar muted)
// note: Full arrangement: all 146 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@17 A B A B A B A C@2 B A B A B A D ~@16 A B A B A B A C@2 B A B A B A D ~@16 E@7 F@8 G@8 H@4 I@5 A B A B A B A C@2 B
  A B A B A D ~@17
>`.pickRestart({
  A: "[g3,bb3,d4,f4]@15 ~", B: "[g3,bb3,c4,e4]@15 ~", C: "[[g3,bb3]@16 [g3,bb3,d4] ~@15, [c4,e4]@31 ~, ~@16 f4@15 ~]/2",
  D: "[g3,bb3,c4,e4]", E: "[[g3,bb3,d4,f4]@30 ~ [g3,c4,e4,g4]@31 ~ [g3,bb3,d4,f4]@31 ~ [g3,c4,e4,g4]@17]/7",
  F: "[~@15 [g3,bb3,d4,f4]@32 [g3,c4,e4,g4]@31 ~ [g3,bb3,d4,f4]@32 [g3,c4,e4,g4]@17]/8", // Gm7 C Gm7 C
  G: "[~@15 [g3,bb3,d4,f4]@31 ~ [g3,c4,e4,g4]@31 ~ [g3,bb3,d4,f4]@31 ~ [g3,c4,e4,g4]@17]/8", // Gm7 C Gm7 C
  H: "[~@15 [g3,bb3,d4,f4]@32 [g3,c4,e4,g4]@17]/4", I: "[~@15 [g3,bb3,d4,f4]@32 [g3,c4,e4,g4]@32 ~]/5",
})).s("gm_epiano2").gain(0.33)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B A C A B A C A B A C A B A C D E F E F E F E F E F E F E F E F B A C A B A C A B A C A B A C D E F E F E F E F E F
  E F E F E F B A C A B A C A B A C A B A C D G H@7 I@8 J H@7 I@6 K L E F E F E F E F E F E F E F E F B A C A B A C A B
  A C A B A C M@2
>`.pickRestart({
  A: "~@14 f1 ~", B: "g1@5 ~@11", C: "g1 ~@7", D: "~@6 g1 ~ g2!2 g1@2 f1 ~ gb1 ~",
  E: "g1@3 ~@2 f1 g1 ~ bb1!2 g1 ~ f1 ~ g1 ~", F: "c2 ~@2 c2 ~ f1 g1 ~ bb1 ~@2 bb1 ~ bb1 f1 ~",
  G: "g1 ~ bb2 ~ bb2 ~ g2 ~ bb2 ~ g2 ~ bb2 g2 ~ g1", H: "~ bb2!2 ~ bb2 ~ g2 ~ bb2 ~ g2 ~ bb2 g2 ~ g1",
  I: "~ bb2!2 ~ bb2 ~ g2 ~ bb2 ~ g2 ~ bb2@2 ~ g1", J: "g1 bb2!2 ~ bb2 ~ g2 ~ bb2 ~ g2 ~ bb2 g2 ~ g1",
  K: "~ bb2!2 ~ bb2 ~ g2 ~ bb2 ~ g2 ~ bb2@2 ~@2", L: "g1@4 ~@2 g1 ~ g2!2 g1@2 f1 ~ gb1 ~",
  M: "[~@6 g1 ~ g2!2 g1@2 f1 ~ gb1 g1@4 ~@13]/2",
})).s("gm_electric_bass_finger").gain(0.42)

// chords · electric guitar muted · "+FUNK GTR"
const electric_guitar_muted = note(`<
  A B C B D B C B E B C B D B C B E B C B D B C B E B C B D B C B E B C B D B C B E B C B D B C B E B C B D B F B E B C
  B D B C B E B C B D B C B E B C B D B C B E G H G I G H G I G H G I G H G I G H G I G H G I G H G I G H G ~ B C B D B
  C B E B C B D B C B E B C B D B C B E B C B D B C B J ~
>`.pickRestart({
  A: "~@14 f3 ~", B: "g3 ~ [d4,g4]!2 ~@2 g3@2 [bb3,d4]!2 [g3,d4] ~ f3 ~ g3 ~",
  C: "[g3,c4] ~ [g3,c4] [c4,e4] ~ g3 c4 ~ [f3,bb3] ~ [f3,bb3] [bb3,d4] ~ bb3 f3 ~", // C5 C Bb5 Bb
  D: "[g3,c4] ~ [g3,c4] [c4,e4] ~ g3 c4 ~ [f3,bb3] ~@2 [bb3,d4] ~ bb3 f3 ~", // C5 C Bb5 Bb
  E: "[g3,c4] ~ [g3,c4] [c4,e4] ~ g3 c4 ~ [f3,bb3] ~ [bb3,d4,a4]!2 ~ bb3 f3 ~", // C5 C Bb5 Bbmaj7
  F: "g3@2 c4 [c4,e4] ~ g3 c4 ~ [f3,bb3] ~ [f3,bb3] [bb3,d4] ~ bb3 f3 ~", G: "g3 ~ g3!2 ~ g3 ~@2 g3!2 ~ bb3@3 g3 ~",
  H: "g3 ~ g3!2 ~ g3 ~@2 g3 ~ d4 ~ bb3@3 ~", I: "g3 ~ g3!2 ~ g3 ~@2 g3 ~ d4 ~ bb3@2 f3@2",
  J: "[g3,c4] ~ [g3,c4] [c4,e4] ~ g3 c4 ~ [f3,bb3] ~ [bb3,d4,a4]!2 ~ bb3 f3 g3", // C5 C Bb5 Bbmaj7
})).s("gm_electric_guitar_muted").gain(0.29).pan(0.8)

// chords · brass section · "BRASS 1"
const brass_section = note(`<
  A B A C A B A C A B A C A B A C ~@16 A B A C A B A C A B A C A B A C ~@16 A B A C A B A C A B A C A B A C D B ~@14 E@2
  ~@6 D B ~@22 A B A C A B A C A B A C A B A C F ~
>`.pickRestart({
  A: "~@14 [bb4,d5,g5] ~", B: "[bb4,d5,g5] ~@15", C: "[bb4,d5,g5] ~@7", D: "~@14 [bb4,d5,f5] ~",
  E: "[~@15 [bb4,d5,g5]@2 ~@15]/2", F: "~@14 [bb4,d5,f5] [bb4,d5,g5]",
})).s("gm_brass_section").gain(0.54)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  A B ~@6 A B ~@6 A B A B A B C D@2 B A B A B C E@2 B ~@14 A B A B A B C D@2 B A B A B C E@2 B ~@15 F@7 G@8 H@8 I@8 A B
  A B A B C D@2 B A B A B C E@2 B ~@14 J ~
>`.pickRestart({
  A: "~@14 f4 ~", B: "g4 ~@15", C: "~@3 g5 f5 ~@2 f5 d5 ~@2 d5 c5 ~ f4 ~", D: "[~@16 c5@13 ~ f4 ~, g4@29 ~@3]/2",
  E: "[~@16 c5@8 e5@5 ~ f4 ~, g4@29 ~@3]/2", F: "[bb3@31 c4@32 f4@32 g4@17]/7", G: "[~@15 bb4@32 c5@32 d5@32 e5@17]/8",
  H: "[~@15 f5@32 g5@32 bb5@32 c6@17]/8", I: "[~@15 d6@32 e6@32 f6@32 g6@17]/8", J: "~@14 f4 g4",
})).s("gm_string_ensemble_1").gain(0.54).pan(0.3)

// chords · pad poly · "POLYSYNTH"
const pad_poly = note(`<
  A B C B A B C B A B C B A B C B ~@16 A B C B A B C B A B C B A B C B ~@16 A B C B A B C B A B C B A B C B ~@48 A B C B
  A B C B A B C B A B C B ~@2
>`.pickRestart({
  A: "~@8 [eb4,f4,g4,a4,bb4]@5 ~ [bb4,d5,g5] ~", B: "[bb4,d5,g5] ~@15", C: "~@14 [bb4,d5,g5] ~",
})).s("gm_pad_poly").gain(0.6)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1_2 = note("<~@81 A@7 B@4 C@8 D@4 E@8 F ~@33>".pickRestart({
  A: "[d5@31 e5@32 d5@32 e5@17]/7", B: "[~@15 g5@32 a5@17]/4",
  C: "[~@15 [bb3,bb5]@32 [c4,c6]@32 [d4,d6]@32 [e4,e6]@17]/8", D: "[~@15 [f4,g6]@32 [g4,a6]@17]/4",
  E: "[~@15 [bb3,bb4,d5,bb6]@32 [c4,c5,e5,c7]@32 [d4,d5,f5,d7]@32 [e4,e5,g5,e7]@17]/8", F: "~@14 d5 ~",
})).s("gm_string_ensemble_1").gain(0.3).pan(0.7)

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

// drums · clap
const clap = s("cp").struct("<~ A@16 ~@16 A@16 ~@16 A@48 ~@16 A@16 ~>".pickRestart({
  A: "~ x ~ x",
})).gain(0.54)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@15 B C A@6 B C A@6 B A@15 D C A@6 B C A@6 B A@15 D C A@6 B C A@6 B C A@6 B C A@6 B C A@6 B C A@6 B A@15 D ~
>`.pickRestart({
  A: "x!2 ~@2 x ~ x!4 ~@2 x ~ x!2", B: "x!2 ~@2 x ~ x!4 ~@2 x ~@3", C: "~ x ~@2 x ~ x!4 ~@2 x ~ x!2",
  D: "x!2 ~@2 x ~ x!2 ~@8",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~
  [~ x ~@3 x ~@2]!47
  [~ x ~@6]
  [~ x ~@3 x ~@2]!31
  [~ x ~@6]
  [~ x ~@3 x ~@2]!63
  [~ x ~@6]
  ~
>`).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@17 A ~@7 A ~@23 A ~@7 A ~@23 A ~@6 B ~@7 B ~@8 A ~@7 A ~@7 A ~@22 B ~>".pickRestart({
  A: "x", B: "~@15 x",
})).gain(0.6)

stack(
  epiano2, bass, electric_guitar_muted, brass_section, string_ensemble_1, pad_poly, string_ensemble_1_2, kick, clap,
  snare, hihat, open_hat, crash
)

More by Chic