Strudelify

Where My Girls At

702

KeyF minorTempo93 bpm
0:00/0:00
// Where My Girls At — 702
// 93 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 73 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(93/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.

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~ A B C D A B C D A B C D E B F D A B G 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 H I@8 J@8 ~@8
>`.pickRestart({
  A: "[f3,c4,f4,ab4]@5 ~@17 [f3,c4,f4,ab4]@5 ~@5", B: "[bb2,bb3,db4,f4,ab4]@6 ~@16 [bb2,bb3,db4,f4,ab4]@5 ~@5",
  C: "[c3,bb3,e4,g4]@6 ~@16 [c3,bb3,e4,g4]@5 ~@5", D: "[f3,c4,f4,ab4]@6 ~@16 [f3,c4,f4,ab4]@5 ~@5",
  E: "[f3,c4,f4,ab4]@5 ~@27", F: "[c3,e4]@6 ~@16 [c3,bb3,e4,g4]@5 ~@5, [bb3,g4] ~@31",
  G: "[c3,bb3,e4,f4,g4]@6 ~@16 [c3,bb3,e4,g4]@5 ~@5", H: "[f3,c4,f4,ab4]@6 ~@15 [f3,c4,f4,ab4]@5 ~@5 [f3,c4,f4,ab4]",
  I: "[~@22 [f3,ab4]@5 ~@4 [bb2,bb3,db4,f4,ab4]@6 ~@17 [bb2,f4]@5 ~@4 [c3,bb3,e4,g4]@6 ~@16 [c3,bb3,e4,g4]@5 ~@5 [f3,c4,f4,ab4]@6 ~@16 [f3,c4,f4,ab4]@5 ~@5 [f3,c4,f4,ab4]@5 ~@18 [f3,ab4]@5 ~@4 [bb2,bb3,db4,f4,ab4]@6 ~@17 [bb2,f4]@5 ~@4 [c3,bb3,e4,g4]@6 ~@16 [c3,bb3,e4,g4]@5 ~@5 [f3,c4,f4,ab4]@6 ~@16 [f3,c4,f4,ab4]@5 ~@5 [f3,c4,f4,ab4], ~@21 [c4,f4]@5 ~@27 [bb3,db4,ab4]@5 ~@91 [c4,f4]@5 ~@27 [bb3,db4,ab4]@5 ~@70]/8", // Fm Bbm7 Bb5 C7 Fm Bbm7 Bb5 C7 …
  J: "[~@21 [f3,c4,f4,ab4]@5 ~@5 [bb2,bb3,db4,f4,ab4]@6 ~@16 [bb2,bb3,db4,f4,ab4]@5 ~@5 [c3,bb3,e4,g4]@6 ~@16 [c3,bb3,e4,g4]@5 ~@5 [f3,c4,f4,ab4]@6 ~@16 [f3,c4,f4,ab4]@5 ~@5 [f3,c4,f4,ab4]@5 ~@17 [f3,c4,f4,ab4]@5 ~@5 [bb2,bb3,db4,f4,ab4]@6 ~@16 [bb2,bb3,db4,f4,ab4]@5 ~@5 [c3,bb3,e4,g4]@6 ~@16 [c3,bb3,e4,g4]@5 ~@5 [f3,c4,f4,ab4]@6 ~@27]/8", // Fm Bbm7 C7 Fm Bbm7 C7 Fm
})).s("gm_acoustic_guitar_nylon").gain(0.4)

// chords · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_2 = note("<~@64 A@6 ~@3>".pickRestart({
  A: "[~@21 [f3,c4,f4,ab4]@5 ~@5 [f3,c4,f4,ab4]@5 ~@17 [f3,c4,f4,ab4]@5 ~@5 [bb2,bb3,db4,f4,ab4]@6 ~@16 [bb2,bb3,db4,f4,ab4]@5 ~@5 [c3,bb3,e4,g4]@6 ~@16 [c3,bb3,e4,g4]@5 ~@5 [f3,c4,f4,ab4]@6 ~@16 [f3,c4,f4,ab4]@5 ~@5 [f3,c4,f4,ab4]@5 ~@28]/6", // Fm Bbm7 C7 Fm
})).s("gm_acoustic_guitar_nylon").gain(0.2)

// bass · piano
const bass = note(`<
  ~@5 A B C D E F G H I B G J E F G J E F G J E F G J E F G J K F G J E F G J E F G J E F G L@7 M@2 N@8 ~@8
>`.pickRestart({
  A: "f2@5 ~@17 f2@6 ~@4", B: "bb1@5 ~@17 bb1@5 ~@5", C: "e2@6 ~@16 e2@5 ~@5", D: "f1@4 ~@7 c2@3 ~@2",
  E: "f2@5 ~@17 f2@7 ~@3", F: "bb1@5 ~@17 bb1@6 ~@4", G: "e2@5 ~@17 e2@6 ~@4", H: "f2@3 ~@5 c2@8", I: "f2@5 ~@27",
  J: "f2@6 ~@10 c2@15 ~", K: "f2@4 ~@18 f2@7 ~@3",
  L: "[f2@5 ~@10 c2@15 ~ f2@5 ~@17 f2@7 ~@3 bb1@5 ~@17 bb1@6 ~@4 e2@5 ~@17 e2@6 ~@4 f2@6 ~@10 c2@15 ~ f2@5 ~@17 f2@7 ~@3 bb1@5 ~@17 bb1@6 ~@4 e2]/7",
  M: "[~@21 e2@6 ~@4 f2@6 ~@10 c2@15 ~ f2]/2",
  N: "[~@21 f2@7 ~@3 bb1@5 ~@17 bb1@6 ~@4 e2@5 ~@17 e2@6 ~@4 f2@6 ~@10 c2@15 ~ f2@5 ~@17 f2@7 ~@3 bb1@5 ~@17 bb1@6 ~@4 e2@5 ~@17 e2@6 ~@4 f2@6 ~@27]/8",
})).s("gm_piano").gain(0.45)

// bass · piano · soft notes
const bass_soft = note("<~@64 A@6 ~@3>".pickRestart({
  A: "[~@15 c2@15 ~ f2@4 ~@18 f2@7 ~@3 bb1@5 ~@17 bb1@6 ~@4 e2@5 ~@17 e2@6 ~@4 f2@6 ~@10 c2@16 f2@4 ~@29]/6",
})).s("gm_piano").gain(0.2)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@64
  [~@11 x ~ x ~ x ~@11 x ~@3 x]
  [~@11 x ~ x ~ x ~@15 x]!3
  [~@11 x ~ x ~ x ~@11 x ~@3 x]
  ~@4
>`).gain(0.25)

// drums · clap
const clap = s("cp").struct(`<
  ~@9 A@3 B C A@2 B A@3 B A@3 B D A@2 B A@3 B A@3 B A@3 B A@3 B A@3 E F@3 E F@3 E ~@2 G H I@3 ~@9
>`.pickRestart({
  A: "~@4 x ~@5 x ~@2 x ~@2", B: "~@4 x ~@7 x ~@2 x", C: "~ x ~@2", D: "~@4 x ~@8 x ~@2", E: "~@7 x ~@15 x ~@5 x ~@2",
  F: "~@7 x ~@11 x ~@5 x ~@6", G: "~@7 x ~@24", H: "~@7 x ~@21 x ~@2", I: "~@7 x ~@17 x ~@6",
})).gain(0.5)

// drums · clap · soft notes
const clap_soft = s("cp").struct(`<
  ~@61
  [~@19 x ~@12]!3
  [~@7 x ~@15 x ~@5 x ~@2]
  [~@7 x ~@11 x ~@5 x ~@6]!3
  [~@7 x ~@15 x ~@5 x ~@2]
  ~@4
>`).gain(0.25)

// drums · hihat
const hihat = s("hh").struct("<A B@12 C B@11 D B@22 E@9 ~@3 F E@3 ~@9>".pickRestart({
  A: "x!4", B: "~ x ~ x ~ x ~ x", C: "~ x ~@6", D: "~@7 x", E: "~@3 x ~@7 x ~@7 x ~@7 x ~@4", F: "~@27 x ~@4",
})).gain(0.5)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@64 [~@3 x ~@7 x ~@7 x ~@7 x ~@4]!5 ~@4>").gain(0.25)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~ A@2 B C A@2 B C A@2 B C ~ A B C D A B C D A B C E A B C D A B C D A B C D A B C D A B C D A B F G@2 H I G@2 H I J@2
  K I G@2 L ~@9
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~ x!2 ~ x ~ x!2 ~", B: "x!2 ~@4 x ~ x!2 ~ x ~ x ~@2", C: "x ~@5 x!4 ~ x ~ x ~@2",
  D: "~@3 x ~@2 x ~ x!2 ~ x ~ x!2 ~", E: "~@13 x!2 ~", F: "x ~@10 x ~ x ~ x ~ x ~@3 x ~@3 x ~@6",
  G: "~@5 x ~@5 x ~@3 x ~ x ~@3 x ~@3 x ~ x ~@3 x", H: "~ x ~@9 x ~@3 x ~ x ~@3 x ~@3 x ~@5 x",
  I: "~@11 x ~ x ~ x ~ x ~@3 x ~@3 x ~@6", J: "~@11 x ~@3 x ~ x ~@3 x ~@3 x ~ x ~@4",
  K: "~@11 x ~@3 x ~ x ~@3 x ~@3 x ~@6", L: "~ x ~@9 x ~@3 x ~@5 x ~@3 x ~@5 x",
})).gain(0.4)

// drums · cowbell · soft notes
const cowbell_soft = s("cb").struct(`<
  ~@63
  [~@17 x ~@14]
  [~@11 x ~ x ~ x ~ x ~@3 x ~@3 x ~@6]
  [~@5 x ~@5 x ~@3 x ~ x ~@3 x ~@3 x ~ x ~@3 x]!2
  [~ x ~@9 x ~@3 x ~ x ~@3 x ~@3 x ~@5 x]
  [~@11 x ~ x ~ x ~ x ~@3 x ~@3 x ~@6]
  ~@4
>`).gain(0.2)

// drums · shaker
const shaker = s("sh").struct("<~ A@12 B A@11 C A@22 D E@15 F E@7 G>".pickRestart({
  A: "x!4 ~@2 x!6 ~@4", B: "x!4 ~@12", C: "x!2 ~@14", D: "x!2 ~ x ~ x ~@5 x ~ x ~ x ~ x ~ x ~ x ~@9 x",
  E: "~ x ~ x ~ x ~@5 x ~ x ~ x ~ x ~ x ~ x ~@9 x", F: "~@31 x", G: "~ x ~ x ~ x ~@5 x ~ x ~ x ~ x ~ x ~ x ~@10",
})).gain(0.3)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@64 [~ x ~ x ~ x ~@5 x ~ x ~ x ~ x ~ x ~ x ~@10] ~@8>").gain(0.15)

stack(
  acoustic_guitar_nylon, acoustic_guitar_nylon_2, bass, bass_soft, kick, kick_soft, clap, clap_soft, hihat, hihat_soft,
  cowbell, cowbell_soft, shaker, shaker_soft
)