Strudelify

Bachelorette

Bjork

KeyB♭ majorTempo98 bpm
0:00/0:00
// Bachelorette — Bjork
// 98 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 130 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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 · contrabass
const bass = note(`<
  ~@4 A@2 B@2 C@2 B@2 A@2 B@2 C@2 B@2 A@2 B@2 C@2 B@2 A@2 B@2 C@2 B@2 ~@8 D E D F D E G H A@2 B@2 C@2 B@2 A@2 B@2 C@2
  B@2 A@2 B@2 C@2 B@2 ~@8 D E D F D E G H A@2 B@2 C@2 B@2 A@2 B@2 C@2 B@2 A@2 B@2 C@2 B@2 A@2 B@2 C@2 B@2 ~@6
>`.pickRestart({
  A: "c2/2", B: "d2/2", C: "eb2/2", D: "c3", E: "g2", F: "f2", G: "c2", H: "g2 ~",
})).s("gm_contrabass").gain(0.29)

// chords · string ensemble 2 · "Strings 2"
const string_ensemble_2 = note(`<
  ~@4 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 A@2 B@2 C@2 D@2 ~@16 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2
  D@2 ~@16 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 ~@6
>`.pickRestart({
  A: "[c4,eb4]/2", B: "[d4,g4]/2", C: "[eb4,a4]/2", D: "[d4,bb4]/2", E: "[eb4 g4, c4]/2", F: "[g4 bb4, d4]/2",
  G: "[a4 c5, eb4]/2", H: "[bb4 g4, d4]/2",
})).s("gm_string_ensemble_2").gain(0.32)

// other · cello
const cello = note(`<
  ~@12 A@2 B@2 C@2 D E ~@8 A@2 B@2 C@2 D E ~@16 A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D E ~@16 A@2 B@2 C@2 D E A@2
  B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D ~@7
>`.pickRestart({
  A: "[c3@24 d3@3 bb2@2 c3@3]/2", B: "[d3 g3@3]/2", C: "[a3@3 eb3@2 d3@3 c3@24]/2", D: "d3@3 g2@2 bb2@3 a2@8", E: "g2",
})).s("gm_cello").gain(0.24).pan(0.7)

// bass · piano
const bass_2 = note(`<
  ~@12 A@2 B@2 C@2 B@2 A@2 B@2 C@2 B@2 A@2 B@2 C@2 B@2 D@2 ~@14 A@2 B@2 C@2 B@2 A@2 B@2 C@2 B@2 A@2 B@2 C@2 B@2 D@2 ~@14
  A@2 B@2 C@2 B@2 A@2 B@2 C@2 B@2 A@2 B@2 C@2 B@2 A@2 B@2 C@2 B ~@7
>`.pickRestart({
  A: "c1@3 g1 c2@2 g1@2", B: "d1@3 g1 d2@2 g1@2", C: "eb1@3 g1 eb2@2 g1@2", D: "c1/2",
})).s("gm_piano").gain(0.54).pan(0.4)

// chords · string ensemble 1 · "Strings 4"
const string_ensemble_1 = note("<~@3 A B@2 ~@38 C D C E C D F ~@33 C D C E C D F ~@39>".pickRestart({
  A: "~@10 [g3,g5] [eb3,f3,eb5,f5] [c3,d3,c5,d5] [a2,bb2,a4,bb4] [f2,g2,f4,g4] [d2,eb2,d4,eb4]", B: "[c2,c4]/2",
  C: "[c2,g4]", D: "[g1,bb4]", E: "[f1,ab4]", F: "[c1,g4]",
})).s("gm_string_ensemble_1").gain(0.29)

// other · string ensemble 1 · "Solo Strings"
const string_ensemble_1_2 = note(`<
  ~@59 A B C@2 A D C@2 ~@32 A B C@2 A D C@2 A B C@2 A D C@2 A B C@2 A D C@2 ~@7
>`.pickRestart({
  A: "~ bb5@2 c6 bb5@2 a5 g5", B: "bb5@3 eb5@13", C: "[~ bb5@2 c6 bb5@2 a5 g5@2 bb5@7]/2", D: "a5@3 c5@13",
})).s("gm_string_ensemble_1").gain(0.34)

// chords · piano
const piano = note("<~@39 A@3 ~@5 A@3 ~ B@3 ~@25 A@3 ~@5 A@3 ~ B@3 ~@36>".pickRestart({
  A: "[~ c5@4 ~, ~@3 [a5,bb5]@16 ~@5, ~@7 [eb5,g5]@32 ~@9]/3", // Bbmaj7 Eb
  B: "[~ bb5@4 ~, ~@3 [c5,eb5]@16 ~@5, ~@7 [g5,a5]@32 ~@9]/3", // Cm Gsus2
})).s("gm_piano").gain(0.18)

// chords · flute
const flute = note("<~@36 A B A C A B D C A B A C A B D ~@25 A B A C A B D C A B A C A B D ~@39>".pickRestart({
  A: "[c4,g4]", B: "[g3,bb4]", C: "[f3,ab4]", D: "[c3,g4]",
})).s("gm_flute").gain(0.25)

// chords · pad sweep · "Sweep"
const pad_sweep = note("<A@4 ~@32 B@8 ~@32 B@8 ~@46>".pickRestart({
  A: "[~ a4, [g5,d6], ~ g6@3]/4", B: "[c6,g6]/8",
})).s("gm_pad_sweep").gain(0.12).pan(0.6)

// other · timpani
const timpani = note("<~@3 A B C D E B E D A B ~@38 F B ~@15 B ~@22 F B ~@37>".pickRestart({
  A: "~@7 g2", B: "c3", C: "~@7 c3", D: "d3", E: "~@7 bb2", F: "~@14 c3!2",
})).s("gm_timpani").gain(0.55).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@12 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 ~ 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 ~ 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 ~@7
>`.pickRestart({
  A: "~@8 x ~@2 x!2 ~@3", B: "~@8 x ~@2 x!3 ~@2",
})).gain(0.54)

// drums · snare
const snare = s("sd").struct(`<
  ~@4
  [x!2 ~@2 x ~ x!5 ~ x!4]
  [x!3 ~ x ~ x!5 ~ x!4]!87
  [~ x!5 ~@2 x!3 ~ x!4]
  [x!3 ~ x ~ x!5 ~ x!4]!30
  ~@7
>`).gain(0.18)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@4 [~@11 x ~@4] [~@3 x ~@7 x ~@4]!87 [~@3 x ~@4] [~@3 x ~@7 x ~@4]!30 ~@7>")
  .gain(0.12)

// drums · ride
const ride = s("rd").struct("<~@12 A@24 ~@8 A@7 ~ A@24 ~@8 A@7 ~ A@31 ~@7>".pickRestart({
  A: "x!8",
})).gain(0.3)

stack(
  bass, string_ensemble_2, cello, bass_2, string_ensemble_1, string_ensemble_1_2, piano, flute, pad_sweep, timpani,
  kick, snare, snare_soft, ride
)

More by Bjork