Strudelify

Bootie Call

All Saints

KeyF minorTempo90 bpm
0:00/0:00
// Bootie Call — All Saints
// 90 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 electric bass finger (copy of ch 4 fretless bass)
// note: Full arrangement: all 89 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · synth strings 1
const synth_strings_1 = 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 ~@16 A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B
  A C ~
>`.pickRestart({
  A: "[f4,ab4]", B: "[e4,g4]", C: "[e4,bb4]",
})).s("gm_synth_strings_1").gain(0.18)

// other · pizzicato strings
const pizzicato_strings = note(`<
  A B C D A B C D A B C D A B C D ~@8 A B C D A B C D A B C D A B C D ~@8 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 B C D A B C D A B C D ~
>`.pickRestart({
  A: "ab4@2 ~@10 ab4 ~ bb4 ~", B: "g4 ~@11 ab4 ~ bb4 ~", C: "ab4 ~@11 ab4 ~ bb4 ~", D: "[e4,bb4] ~@7 g4@2 ~@6",
})).s("gm_pizzicato_strings").gain(0.5)

// bass · fretless bass
const bass = note(`<
  ~@8 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 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
  B C D A B C D ~@8 A B C D A B C D E
>`.pickRestart({
  A: "f2@2 ~@2 c2@2 ~@2 f2 ~ c2@2 ~@2 f2 ~", B: "b1@2 ~@2 e2@2 ~@2 e2@2 b1@2 ~@2 g2 ~", C: "f2 ~ c2 ~ f2 c2 ~ f2",
  D: "b1@2 ~@2 e2@2 ~@2 e2 ~ b1@2 ~@2 g2 ~", E: "f2 ~@7",
})).s("gm_fretless_bass").gain(0.64)

// other · piano
const piano = note(`<
  ~@24 A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B ~
>`.pickRestart({
  A: "~@2 ab4 ~ ab4 ~@3 ab4 ~ ab4 ~ ab4 ~ g4 ~", B: "~@2 g4 ~ g4 ~@3 g4 ~ g4 ~ g4 ~ ab4 ~",
})).s("gm_piano").gain(0.46)

// other · pad metallic
const pad_metallic = note("<~@72 A B C B A B C B ~@9>".pickRestart({
  A: "f5@4 c5@4 f5@2 c5@3 ~ f5@2", B: "b4 ~@3", C: "f5@3 ~ c5@4 f5@2 c5@3 ~ f5@2",
})).s("gm_pad_metallic").gain(0.46)

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

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

// drums · snare
const snare = s("sd").struct("<~@15 A ~@15 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~>".pickRestart({
  A: "~@5 x ~@2",
})).gain(0.5)

// drums · low tom
const low_tom = s("lt").struct("<~@15 A ~@15 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~>".pickRestart({
  A: "~@6 x!4 ~@4 x ~",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<~@11 [~@7 x] [x!8]!60 ~@7 [x!8]!9 ~>").gain(0.5)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 A ~@15 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~>".pickRestart({
  A: "~@2 x!5 ~@9",
})).gain(0.5)

// drums · high tom
const high_tom = s("ht").struct("<~@15 A ~@15 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~>".pickRestart({
  A: "x!3 ~@13",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct("<~@15 A B ~@14 A B ~@6 A B ~@14 A B ~@6 A B ~@6 A B ~@6 A B ~@6 A B>".pickRestart({
  A: "~ x", B: "x",
})).gain(0.5)

stack(
  synth_strings_1, pizzicato_strings, bass, piano, pad_metallic, kick, clap, snare, low_tom, hihat, mid_tom, high_tom,
  crash
)

More by All Saints