Strudelify

People Are Still Having Sex

LaTour

KeyG majorTempo125 bpm
0:00/0:00
// People Are Still Having Sex — LaTour
// 125 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 140 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(125/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 · "Synth Bass 2"
const bass = note(`<
  ~@3
  [~@13 g1 f1 d1]
  [g1@2 a#1 g1 ~ g1 f1 d1 g1@2 a#1 g1 ~ g1 f1 d1]!48
  ~@7
  [~@13 g1 f1 d1]
  [g1@2 a#1 g1 ~ g1 f1 d1 g1@2 a#1 g1 ~ g1 f1 d1]!40
  ~@8
  [g1@2 a#1 g1 ~ g1 f1 d1 g1@2 a#1 g1 ~ g1 f1 d1]!32
>`).s("gm_synth_bass_1").gain(0.64)

// bass · slap bass 2 · "Synth Bass 1"
const bass_2 = note(`<
  ~@12
  [g1!2 ~@4 g1!2 ~ g1 ~@6]!15
  ~@25
  [g1!2 ~@4 g1!2 ~ g1 ~@6]!16
  ~@24
  [g1!2 ~@4 g1!2 ~ g1 ~@6]!8
  ~@24
  [g1!2 ~@4 g1!2 ~ g1 ~@6]!16
>`).s("gm_slap_bass_2").gain(0.64)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@20 A@2 B@2 A@2 B@2 ~@8 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@16 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@24 A@2
  B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2
>`.pickRestart({
  A: "[f4,a4,d5]/2", B: "[d4,g4,b4]/2",
})).s("gm_string_ensemble_1").gain(0.25)

// other · church organ · "Organ"
const church_organ = note("<~@100 A B@2 ~ C D@2 ~@33>".pickRestart({
  A: "~@2 a4 g#4 a4@12", B: "[g4 f4 e4 ~ c#4@6 d4@16 ~@6, ~@3 d4@2 ~@27]/2", C: "~@2 a3 g#3 a3@12",
  D: "[g3 f3 e3 ~ c#3@6 d3@16 ~@6, ~@3 d3@2 ~@27]/2",
})).s("gm_church_organ").gain(0.64)

// chords · piano
const piano = note("<~@108 A B C@2 D E F@2 ~@24>".pickRestart({
  A: "d5 d#5@2 d5@3 c5@2 d5@7 ~, a#3@15 ~, ~ g3@14 ~", B: "d#5@3 d5@3 c5@2 d5@3 c5@3 a#4@2, [g3,a#3]@7 ~, d5 ~@15",
  C: "[d5@16 f4@3 g4@3 a4@2 a#4@3 a4@3 g4@2, [f3,a3]@7 ~]/2", // F
  D: "d#5@3 d5@3 c5@2 d5@3 g5@3 a5@2, [g3,a#3]@15 ~, d5 ~@15", E: "a5 a#5@7 a#5@3 a5@3 g5@2, [g3,a#3]@7 ~",
  F: "[g#5 a5@2 g5@3 f5@2 e5@3 f5@3 ~@10 d5@2 e5@2 f5@3 ~, [f3,a3]@14 d5@9 ~@9, ~@8 [f3,a3]@7 ~]/2", // F
})).s("gm_piano").gain(0.4)

// other · pad new age · "oont"
const pad_new_age = note("<~@71 [a#4!4] ~@3 [a#4!4] ~@64>").s("gm_pad_new_age").gain(0.8)

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

// drums · clap
const clap = s("cp").struct("<~@8 [~ x ~ x]!19 [~ x ~@2] [~ x ~ x]!112>").gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@8 [~ x ~ x]!19 [~ x ~@2] [~ x ~ x]!112>").gain(0.64)

stack(bass, bass_2, string_ensemble_1, church_organ, piano, pad_new_age, kick, clap, snare)