Strudelify

Human Behaviour

Bjork

KeyA minorTempo105 bpm
0:00/0:00
// Human Behaviour — Bjork
// 105 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 115 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(105/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 · electric bass finger · "Electric"
const bass = note("<A@20 B@4 A@20 B@4 A@16 B@8 A@24 ~@3 C A@14 ~>".pickRestart({
  A: "[a1@5 ~ a1@2 e1@2 g1@4 a1@8 c2@6 a1@2 g1@2]/2", B: "[a#1@5 ~ a#1@2 f1@2 g#1@4 a#1@8 c#2@6 a#1@2 g#1@2]/2",
  C: "~@3 c2@3 a1 g1",
})).s("gm_electric_bass_finger").gain(0.48)

// other · timpani
const timpani = note("<A@20 B@4 A@20 B@4 A@16 B@8 A@24 ~@3 C A@14 ~>".pickRestart({
  A: "[[a1,a2]@5 ~ a2@2 e2@2 g2@4 ~@2 a1@4 ~@2 c3@6 a2@2 g2@2, ~@7 a2@4 ~@5]/2", // A
  B: "[[a#1,a#2]@5 ~ a#2@2 f2@2 g#2@4 ~@2 a#1@4 ~@2 c#3@6 a#2@2 g#2@2, ~@7 a#2@4 ~@5]/2", C: "a1@2 ~ c3@3 a2 g2",
})).s("gm_timpani").gain(0.32)

// chords · agogo
const agogo = note(`<
  A B C D ~@8 A B C D A B C D E F E F A B A B A B A B A B A B A B A B A B A B E F E F A B A B A B A B A B A B A B A B G
  H G H G H G H 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 A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~@4 [a4,e5,a5] ~@9 e3 a3", B: "a2 a2@3 ~@12", C: "~@4 [a4,e5,a5] ~@10 a3, ~@7 e3", D: "a2 a2@2 ~@13",
  E: "~@4 [a#4,f5,a#5] ~@10 a#3, ~@7 f3", F: "a#2 a#2@2 ~@13", G: "~@4 [a#4,f5,a#5] ~@9 f3 a#3", H: "a#2 a#2@3 ~@12",
})).s("gm_agogo").gain(0.12)

// bass · overdriven guitar · "Overdrive"
const bass_2 = note("<~@28 A@16 ~@43 B C D E F G@2 H F I@6 ~@13>".pickRestart({
  A: "[[a1,a2]@4 g1 ~ a1 ~ a1@2 g1@2 ~@2 [a1,a2]@7 ~ g1@2 [c2,a2]@4 a1@2 g1 ~, ~@3 a2@3 ~@10]/2", B: "~@15 [e1,e2]",
  C: "~ [a1,a2] ~@3 [a1,a2]@2 ~@2 [a1,a2] ~@5 [e1,e2], [g1,g2] ~@7", // A E G
  D: "[g1,g2]@2 [a1,a2]@2 ~@2 [a1,a2] ~@3 [a1,a2]@2 ~@3 [e1,e2]", // G A E
  E: "[g1,g2]@2 [a1,a2]@2 ~@2 [a1,a2]@2 ~@2 [a1,a2] ~@4 [e1,e2]", // G A E
  F: "[g1,g2]@2 [a1,a2] ~@3 [a1,a2] ~@3 [a1,a2] ~@4 [e1,e2]", // G A E
  G: "[g1,g2]@2 [a1,a2]@2 ~@2 [a1,a2] ~@2 [a1,a2] ~@5 [e1,e2]", // G A E
  H: "[g1,g2]@2 [a1,a2]@2 ~@2 [a1,a2] ~@3 [a1,a2] ~@4 [e1,e2]", I: "[[a1,a2]@7 ~]/6",
})).s("gm_overdriven_guitar").gain(0.24)

// other · string ensemble 1 · "String En"
const string_ensemble_1 = note("<~@54 [~@6 a5@3 g5@3 c6@2 f5@2] [~ e5@4 g5@4 f5@4 e5@3] ~@59>")
  .s("gm_string_ensemble_1").gain(0.24)

// drums · kick
const kick = s("bd").struct("<[x!2]!96 ~@3 [~ x] [x!2]!14 ~>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!96 ~@3 [~ x ~ x]!15 ~>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@20 A ~@15 A ~@7 A ~@19 A ~@50>".pickRestart({
  A: "x",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~ 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 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~ x ~ x",
})).gain(0.4)

// drums · bongos
const bongos = s("bongo:18").struct("<~@48 [~@3 x ~@6 x ~@5]!8 ~@59>").gain(1.3)

// drums · congas
const congas = s("conga:18").struct("<~@48 [~@4 x!2 ~@6 x!2 ~@2]!8 ~@59>").gain(1.59)

// drums · congas
const congas_2 = s("conga:33").struct("<~@48 [x ~ x!2 ~@2 x!3 ~ x ~@3 x ~]!8 ~@59>").gain(1.59)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<[x!16]!96 ~@3 [x!16]!15 ~>").gain(1.07)

stack(
  bass, timpani, agogo, bass_2, string_ensemble_1, kick, snare, crash, tambourine, bongos, congas, congas_2,
  jingle_bells
)

More by Bjork