Strudelify

I Know Where It's At

All Saints

KeyF majorTempo95 bpm
0:00/0:00
// I Know Where It's At — All Saints
// 95 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 5 "Muted Guitar" named as a guitar, played on electric guitar muted (its clavinet patch is not one)
// note: Full arrangement: all 123 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(95/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 · fretless bass · "Bass"
const bass = note(`<
  ~ A B A B A B A C D E D E D E D F D E D E D E D F D E D E D E D F D E D E D E D F D E D E D E D F D E D F D E D E D E
  D F G H G ~@10 D E D E D E D F D E D E D E D F D E D E D E D F ~@25
>`.pickRestart({
  A: "c2 bb1", B: "f1", C: "f1 ~ f1 ~@3 f1 ~ f1@4 ~@4", D: "c2 ~ c2 ~@3 c2!2 bb1 ~ bb1 ~@3 bb1!2",
  E: "f1 ~ f1 ~@3 f1!2 bb1 ~ bb1 ~ b1 ~ b1 ~", F: "f1 ~@7 bb1 ~ bb1 ~ b1 ~ b1 ~", G: "c2 ~ bb1 ~", H: "f1 ~ f1 bb1",
})).s("gm_fretless_bass").gain(0.59).pan(0.4)

// bass · acoustic bass · "Bass"
const bass_2 = note("<~@65 A B A B A B A B ~@25 C@24 D>".pickRestart({
  A: "bb1@3 ~@5 c2@3 ~@5", B: "f1@3 ~@5 f1@3 ~ ab1@3 ~", C: "c2 ~ c2 ~@5 g1 ~ g1 ~ bb1 ~ bb1 ~", D: "c2 ~@7",
})).s("gm_acoustic_bass").gain(0.13).pan(0.4)

// chords · piano · "Piano1"
const piano = note(`<
  ~ A B A B A B A B A B C B C B A D ~@16 E B C F A B A D ~@12 A B E F A B A D G H G ~@10 E B C F A B A D E B C F A B A D
  E B C F A B A D ~@24 I
>`.pickRestart({
  A: "e4 [bb3,e4] d4!2, [c2,e3,g3] [bb2,d3,ab3,bb3]", B: "eb4!2 ~@2, [f2,c3,a3]",
  C: "e4!2 d4!2, [c2,e3,g3] [bb2,d3,ab3,bb3]", D: "[f2,c3,a3,eb4] ~@3", E: "e4 [bb3,e4] d4!2, [c2,e3,g3] [bb2,ab3,bb3]",
  F: "[f2,c3,a3], eb4 ~@3", G: "[g3,c4,e4] ~ [f3,bb3,d4] ~", H: "[f3,a3,c4,eb4] ~ [f3,a3,c4,eb4] [f3,bb3,d4]",
  I: "[c2,g3,e4] ~@7", // C
})).s("gm_piano").gain(0.29).pan(0.2)

// chords · piano · "Piano1" · soft notes
const piano_soft = note(`<
  ~@2 A ~ A ~ A ~ A ~ A B A B A ~@18 C A B D ~ A ~@15 A C D ~ A ~@15 C A B D ~ A ~@2 C A B D ~ A ~@2 C A B D ~ A ~@27
>`.pickRestart({
  A: "~@3 eb4", B: "~ bb3 ~@2", C: "~ d3", D: "~ eb4 ~ eb4",
})).s("gm_piano").gain(0.13).pan(0.2)

// chords · piano · "Piano2"
const piano_2 = note("<~ A B A B A B A B ~@114>".pickRestart({
  A: "[c4,e4] g3 [c4,e4] g3 [bb3,d4] f3 [bb3,d4] f3", B: "[a3,eb4] f3 [a3,eb4] f3 [a3,eb4] f3 [a3,eb4] f3",
})).s("gm_piano").gain(0.11).pan(0.8)

// other · electric guitar muted · "Muted Guitar"
const electric_guitar_muted = note(`<
  ~@24 A B C B C B C B ~ B C B C B C B ~@8 A B C B ~ B C B C B C B ~@14 B C B C B C B ~ B C B C B C B ~ B C B C B C B
  ~@26
>`.pickRestart({
  A: "~@8 bb3 ~ bb3!2 g3 ~ bb3 ~", B: "c4 ~@2 c4 ~@2 c4 ~@2 bb3 c4 ~@2 c4 ~ bb3",
  C: "~ c4 ~ bb3 c4 ~ bb3 ~@2 bb3 ~ bb3 ~@4",
})).s("gm_electric_guitar_muted").gain(0.17).pan(1)

// chords · overdriven guitar · "Overdrive" · C Bb F7 Bb C Bb C5
const overdriven_guitar = note(`<
  ~@61
  [[g3,c4,e4] ~ [f3,bb3,d4,f4] ~]
  [[f3,a3,eb4,f4] ~ [f3,a3,eb4,f4] [f3,bb3,d4,f4]]
  [[g3,c4,e4] ~ [f3,bb3,d4,f4] ~]
  ~@9
  [[c2,g2,c3]@3 ~@13]
  ~@49
>`).s("gm_overdriven_guitar").gain(0.22)

// chords · synth strings 1 · "Pads"
const synth_strings_1 = note(`<
  ~ A B@2 C D C D C A B@2 C D C D C ~@16 A B@2 C D C D C ~@12 A B@2 C D C D C ~@13 E F@22 G@2 ~@24
>`.pickRestart({
  A: "e5 [bb4,e5] d5!2, [e4,g4] [bb3,d4,ab4,bb4]", // Bbdim Em Bb7
  B: "[eb5 eb5@2 ~ e5 [bb4,e5] d5!2, [f3,c4,a4]@2 [c3,e4,g4] [bb3,d4,ab4,bb4], ~@3 eb5@2 ~@3]/2", // Bbdim F C Bb7
  C: "eb5@3 eb5, [f3,c4,a4]", D: "e5 [bb4,e5] d5!2, [c3,e4,g4] [bb3,d4,ab4,bb4]",
  E: "e5 [bb4,e5] d5!2, [e4,g4,g6] [bb3,d4,ab4,bb4,f6]", // Bbdim Em Bb7
  F: "[eb5 eb5@2 ~ e5 [bb4,e5] d5!2, [f3,c4,a4,c6]@2 [e4,g4,g6] [bb3,d4,ab4,bb4,f6], ~@3 eb5@2 ~@3]/2", // Bbdim F Em Bb7
  G: "[eb5 eb5@2 eb5@2 ~@3, [f3,c4,a4,c6] ~]/2", // F
})).s("gm_synth_strings_1").gain(0.07).pan(0.6)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@122>").gain(0.32)

// drums · kick
const kick = s("bd").struct("<~@8 A B@7 C B@15 D B@7 E B@11 D B@7 E F ~@3 G@8 F B@24 H@7 I G@16 F>".pickRestart({
  A: "x!2 ~ x!2 ~@3", B: "x ~ x ~@3 x!3 ~ x ~@3 x ~", C: "x ~@3 x!4", D: "x ~ x!3 ~ x!2 ~@8", E: "x ~@5 x!3 ~ x ~@5",
  F: "x", G: "x ~@3 x!2 ~@2", H: "x!2 ~ x!3 ~ x", I: "x ~@2 x!3 ~@2",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A@5 B A@2 C A@6 B A@5 B A@2 D A@4 B A@2 E A@11 D A@4 B A@2 E ~@3 D F@8 ~ A@4 B A@2 G A@4 B A@2 G A@4 B A@2 G A@7 E
  F@16 ~
>`.pickRestart({
  A: "~ x ~ x", B: "x!2 ~ x", C: "~ x ~@2", D: "~@2 x!2", E: "~@4 x ~@7 x!3 ~", F: "~@4 x ~@2 x ~ x ~@2 x ~@3",
  G: "~@2 x ~@3 x!2",
})).gain(0.8)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@7
  [~@2 x ~ x ~ x!2 ~@8]
  ~@55
  [x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~]
  ~@34
  [~@7 x ~ x ~@6]!8
  ~@17
>`).gain(0.48)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@9 A B@6 C A B@7 A B@7 A B@7 A B@7 A B@3 A B@7 ~@4 A B@7 ~ A B@7 A B@7 A B@7 A B@7 A B@7 A B@7 ~
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!3 ~ x!4",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@3 A ~@7 A ~@3 A ~@7 A@2 ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A
>`.pickRestart({
  A: "x",
})).gain(0.56)

stack(
  bass, bass_2, piano, piano_soft, piano_2, electric_guitar_muted, overdriven_guitar, synth_strings_1, rim, kick, snare,
  snare_soft, hihat, crash
)

More by All Saints