Strudelify

I Feel Love

Donna Summer

KeyA majorTempo130 bpm
0:00/0:00
// I Feel Love — Summer Donna
// 130 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 3 "Bowed Bass" named as a bass, played on electric bass finger (its contrabass patch is not one)
// note: duplicate parts dropped: ch 2 "Right Bass" synth bass 1 (copy of ch 1 "Left Bass" synth bass 1, 0.25 beats late)
// note: Full arrangement: all 195 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/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 · synth bass 1 · "Left Bass"
const bass = note(`<
  A@24 B@4 C@4 D@7 E A B C D A B C D A@32 B@4 C@4 D@7 E A B C D A B C D A B C D A B C D A B C D A B C D A@24 B@4 C@4 D@7
  E A B C D A B C D A B C D A B C D A B C D A B C D A B C D A@6 F
>`.pickRestart({
  A: "a2 ~ a2 ~ e2 ~ g2 ~ a2 ~ a2 ~ e2 ~ g2 ~", B: "c3 ~ c3 ~ g2 ~ a2 ~ c3 ~ c3 ~ g2 ~ a2 ~",
  C: "d3 ~ d3 ~ a2 ~ c3 ~ d3 ~ d3 ~ a2 ~ c3 ~", D: "e3 ~ e3 ~ b2 ~ d3 ~ e3 ~ e3 ~ b2 ~ d3 ~",
  E: "e3 ~ e3 ~ b2 ~ d3 ~ e3 ~ e3 ~ d3 ~ e3 ~", F: "a2 ~ a2 ~ e2 ~ g2 ~ a2 ~ a2 ~@5",
})).s("gm_synth_bass_1").gain(0.6).pan(0.1)

// bass · electric bass finger · "Bowed Bass"
const bass_2 = note(`<
  ~@4 A@20 B@4 C@4 D@8 A B C D A B C D A@32 B@4 C@4 D@8 A B C D A B C D A B C D A B C D A B C D A ~@15 A@12 B@4 C@4 D@8
  A B C D A B C D A B C D A B C D A B C D A ~@14
>`.pickRestart({
  A: "a1 ~ a1 ~@13", B: "c2 ~ c2 ~@13", C: "d2 ~ d2 ~@13", D: "e2 ~ e2 ~@13",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · synth strings 1 · "Strings"
const synth_strings_1 = note(`<
  ~@12 A@8 ~@4 B@4 C@4 D@8 E F@6 G@8 ~ H@4 I@4 J@8 K@7 L@5 M@3 N@8 O@2 P@5 Q R S T U V@3 W@4 X@2 Y@2 ~@18 K@7 Z@5 M@3
  N@8 O@2 P@5 Q R S T U V@3 W@4 X@2 Y@2 ~@13
>`.pickRestart({
  A: "[c#4,e4,a4]/8", B: "[c4,e4,g4]/4", C: "[d4,f#4,a4]/4", D: "[b3,e4,g#4]/8", E: "[c#4,a4]",
  F: "[[c4,g4]@15 ~ [a3,d4]@15 ~ b3@15 [a3,c#4,a4]@17 [c4,g4]@15 ~ [d4,a4]@15 g#4, ~@15 f#4@16 e4@49 ~@16, ~@31 g#4@16 ~@32 f#4@16 ~]/6", // C5 D5 A C5 D5
  G: "[b3@15 c#4@64 ~ c4@48, e4, ~@15 a4@113]/8", H: "[~@31 c#5@16 e5@17, c#4]/4",
  I: "[~@31 e3@16 d3@15 ~ c#3, [c4,c5]]/4", J: "[~@47 g3@16 a3@64 ~, c#5, ~@15 c#4@112 ~, ~@32 e3@17 ~@79]/8",
  K: "[a3,c#4,e4]/7", L: "[~@16 g4@63 ~, ~@15 [c4,e4]@64 ~]/5", M: "[d4,f#4,a4]/3", N: "[~ [e4,b4]@7, ~@15 g#4@113]/8",
  O: "[~ a4, ~@15 c#4@16 ~]/2",
  P: "[[c4,g4]@15 [d4,f#4,a4]@16 ~ e4@15 ~ [c#4,a4]@16 [c4,g4]@16, ~@31 [g#4,b4]@16 e4@32 ~]/5", Q: "[d4,f#4,a4]",
  R: "[e4,g#4,b4]@15 ~", S: "[e4,a4,c#5]", T: "[e4,g4,c5]", U: "[f#4,a4,d5]",
  V: "[[g#4,b4,e5]@15 ~ [a4,c#5]@16 [g4,c5]@16, ~@5 e4@11]/3", // E A C5
  W: "[[f#4,a4,d5]@15 ~ b4@15 ~ a4@15 ~ g4@16, ~@15 [g#4,e5]@16 [e4,c#5]@16 [e4,c5]@17]/4", // D C#m C
  X: "[[f#4,a4,d5]@15 [g#4,b4,e5]@17]/2", Y: "[a4@15 [g4,c5]@17, e4, c#5@17 ~@15]/2",
  Z: "[~ g4@4, ~@15 [c4,e4]@64 ~]/5", // C
})).s("gm_synth_strings_1").gain(0.29)

// drums · kick
const kick = s("bd").struct("<[x!4]!194 [x!3 ~]>").gain(0.72)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!117 ~@7 [~ x ~ x]!57 ~@14>").gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<[x!16]!117 ~@13 [x!16]!51 ~@14>").gain(0.64)

// drums · shaker
const shaker = s("sh").struct(`<
  [~ x ~ x ~ x ~ x]!116
  [~ x ~ x ~ x ~@2]
  ~@11
  [~ x ~ x ~ x ~ x]!52
  [~ x ~ x ~ x ~@2]
  ~@14
>`).gain(0.64)

// drums · claves
const claves = s("clave:2").struct(`<
  [~ x ~@2 x ~ x!2 ~ x ~@2 x ~ x!2]!116
  [~ x ~@2 x ~ x!2 ~ x ~@2 x ~ x ~]
  ~@11
  [~ x ~@2 x ~ x!2 ~ x ~@2 x ~ x!2]!52
  [~ x ~@2 x ~ x!2 ~ x ~@2 x ~ x ~]
  ~@14
>`).gain(3.14)

stack(bass, bass_2, synth_strings_1, kick, snare, hihat, shaker, claves)

More by Donna Summer