Strudelify

Almost Doesn't Count

Brandy

KeyG minorTempo76 bpm
0:00/0:00
// Almost Doesn't Count — Brandy
// 76 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 65 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(76/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
const bass = note(`<
  A B C@2 ~ B C@2 A B C@2 ~ B C@2 A B C@2 D E F G D E F H ~ B C@2 A B C@2 I J K L I J C@2 D E F G D E F H ~ B C@2 A B
  C@2 A B C@2 ~
>`.pickRestart({
  A: "g1@11 ~ d2@2 ~@4 c2@25 ~@5", B: "g1@9 c2@14 ~", C: "[c2@4 f2@3 bb1@6 ~@3]/2", D: "g1@2 ~@7 g1@3 ~@7 g1@25 ~@4",
  E: "g1@3 ~@7 g1@2 ~@6 g1@26 ~@4", F: "~ eb1@2 ~@7 eb1@3 ~@6 eb1@26 ~@3", G: "eb1@4 ~@6 eb1@3 ~@6 eb1@25 ~@4",
  H: "eb1@4 ~@6 eb1@13 ~@2 f1@5 ~@3 f1@13 ~@2", I: "g1@17 ~ a1@23 ~ a1@4 ~@2", J: "a1@17 ~ c2@16 ~@2 d2@10 ~@2",
  K: "g1@6 a1@9 ~", L: "d2@9 c2@9 bb1@5 ~",
})).s("gm_fretless_bass").gain(0.64)

// other · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C@2 ~@15 D E@2 F@4 G@3 ~@6 H I J K@2 L@2 ~ M N@2 O@4 P@4 ~@5 H Q R ~@3
>`.pickRestart({
  A: "~@3 a2@3 bb2@3 ~@3 d3@6 ~@9 [g4,ab4] g4 ~ f4@3 ~@3 bb4@3 ~@3 eb4@6, g2@4 ~@5 g4@6 ~@3 eb4@18 eb4@6 ~@6, ~ [g3,bb3,d4]@13 ~@4 eb3@10 ~@5 [bb3,d4]@9 ~@6, ~@19 [g3,c4]@23 ~@6, ~@19 c3@17 ~@3 g4@8 ~", // Abmaj7 Gm Bb C5
  B: "~ a2 bb2 ~ d3@2 ~@4 f4 ~ bb4 [eb4,g4]@2 eb4, g2@4 ~@5 g4@6 ~@4 [g3,c4]@25 ~@4, ~ [g3,bb3,d4]@12 ~@5 eb3@15 bb3@15, ~@19 eb4@20 ~@9, ~@19 c3@14 d4@6 ~@9", // Eb C5 Gm
  C: "[~ [g3,c4,eb4]@23 [eb4,bb4]@9 [eb4,bb4]@8 ~ bb3@9 ~@3 c4@3 d4@20 ~@19, ~@24 [g3,c4,g4]@17 ~ g3@23 ~@31, ~@14 d4@5 ~@13, ~@51 bb3@14 ~@31]/2", // Cm Eb5 C5
  D: "~@30 d4@3 f4@3 c4@2 ~ bb3@3 c4@3 d4@3",
  E: "[~@6 d4@3 g4@7 ~@2 d4@3 g4@7 ~@2 d4@2 ~ g4@7 ~@2 d4@2 ~ g4@8 ~ d4@2 ~ g4@8 ~ d4@2 ~ g4@6 ~@3 d4@2 ~ f4@3 a4@2 ~@2 bb4@4 c5@3 ~]/2",
  F: "[~@7 d4@3 g4@8 d4@3 g4@8 ~ d4@3 g4@9 d4@3 ~ g4@10 ~@10 d4@3 g4@5 ~@4 d4@3 f4@3 c5@3 [bb3,a4]@3 ~@3 d4@3 ~@6 d4@3 g4@7 ~@2 d4@2 ~ g4@7 ~@2 d4@2 ~ g4@7 ~@2 d4@2 ~ g4@8 ~ d4@2 ~ g4@8 ~ d4@2 ~ g4@6 ~@3 d4@2 ~ f4@3 a4@2 ~@2 bb4@4 c5@3 ~, ~ d5@10 ~@73 c4@2 ~@4 c4@2 ~@100, ~@91 f4@8 ~@93]/4", // Bbmaj7
  G: "[~@7 d4@3 g4@8 d4@3 g4@8 ~ d4@3 g4@8 ~ d4@3 ~ g4@10 ~@10 d4@2 ~ g4@5 ~@10 c5@3 a4@2 ~@2 f4@8 ~@45, ~ d5@10 ~@133]/3",
  H: "~@27 bb3@3 d4@3 f4@3 c4@10 d4@2", I: "~@33 d4@2 ~ gb4@4 g4@8", J: "~ bb4@17 ~@30",
  K: "[~@8 c4 ~@2 g4@4 ~ a4@4 bb4@3 a4@7 f4@3 g4@8 ~ f4@3 d4@18 ~@33, ~@5 d4 ~@42]/2",
  L: "[~@9 gb4@3 g4@3 a4@3 bb4@6 d5@8 c5@6 a4@3 c5@3 ~ bb4@6 ~@3 a4@3 g4@6 ~ e4@2 f4@3 ~ e4@11 ~@15, ~@63 d4@2 ~@31]/2",
  M: "~@30 d4@3 f4@3 c4@2 ~ bb3@3 c4@2 ~ d4@3",
  N: "[~@6 d4@3 g4@7 ~@2 d4@2 ~ g4@7 ~@2 d4@2 ~ g4@7 ~@2 d4@2 ~ g4@8 ~ d4@2 ~ g4@8 ~ d4@2 ~ g4@6 ~@3 d4@2 ~ f4@3 a4@2 ~@2 bb4@4 c5@3 ~]/2",
  O: "[~@7 d4@3 g4@8 d4@3 g4@8 ~ d4@3 g4@8 ~ d4@3 ~ g4@10 ~@10 d4@2 ~ g4@5 ~@4 d4@3 f4@3 c5@3 [bb3,a4]@3 ~@3 d4@3 ~@6 d4@3 g4@7 ~@2 d4@2 ~ g4@7 ~@2 d4@3 g4@7 ~@2 d4@2 ~ g4@8 ~ d4@2 ~ g4@8 ~ d4@2 ~ g4@6 ~@3 d4@2 ~ f4@3 a4@2 ~@2 bb4@4 c5@3 ~, ~ d5@10 ~@73 c4@2 ~@4 c4@3 ~@99, ~@91 f4@8 ~@93]/4", // Bbmaj7
  P: "[~@7 d4@3 g4@8 d4@3 g4@8 ~ d4@3 g4@9 d4@3 ~ g4@10 ~@10 d4@3 g4@5 ~@10 c5@3 a4@2 ~@2 f4@8 ~@34 bb4@3 g4@3 ~ eb4@10 ~@7 a4@3 bb4@4 a4@3 ~ g4@11 ~@13, ~ d5@10 ~@157 a4 ~@23]/4",
  Q: "~@9 d4@2 ~ g4@3 ~@3 a4@2 ~ bb4@3 a4@3 ~@3 g4@9 ~@9", R: "~@12 c5@6 bb4@5 ~ g4@15 ~@9",
})).s("gm_acoustic_guitar_steel").gain(0.64)

// chords · acoustic guitar steel
const acoustic_guitar_steel_2 = note(`<
  ~@5 A B@2 A C B@2 ~ A B@2 A C B@2 ~@9 A B@2 A C D@2 E@4 ~@2 B@2 ~@10 B@2 A C B@2 A C B@2 ~
>`.pickRestart({
  A: "~@3 a2@3 bb2@3 ~@3 d3@6 ~@9 [g4,ab4] g4 ~ f4@3 ~@3 bb4@3 ~@3 eb4@6, g2@4 ~@5 g4@6 ~@3 eb4@18 eb4@6 ~@6, ~ [g3,bb3,d4]@13 ~@4 eb3@10 ~@5 [bb3,d4]@9 ~@6, ~@19 [g3,c4]@23 ~@6, ~@19 c3@17 ~@3 g4@8 ~", // Abmaj7 Gm Bb C5
  B: "[~ [g3,c4,eb4]@23 [eb4,bb4]@9 [eb4,bb4]@8 ~ bb3@9 ~@3 c4@3 d4@20 ~@19, ~@24 [g3,c4,g4]@17 ~ g3@23 ~@31, ~@14 d4@5 ~@13, ~@51 bb3@14 ~@31]/2", // Cm Eb5 C5
  C: "~ a2 bb2 ~ d3@2 ~@4 f4 ~ bb4 [eb4,g4]@2 eb4, g2@4 ~@5 g4@6 ~@4 [g3,c4]@25 ~@4, ~ [g3,bb3,d4]@12 ~@5 eb3@15 bb3@15, ~@19 eb4@20 ~@9, ~@19 c3@14 d4@6 ~@9", // Eb C5 Gm
  D: "[~ [g3,c4,eb4]@23 [eb4,bb4]@9 [eb4,bb4]@8 ~ bb3@9 ~@3 c4@3 d4@17 bb3@4 d4@3 f4@3 c4@10 d4@2, ~@24 [g3,c4,g4]@17 ~ g3@23 ~@31, ~@14 d4@5 ~@13, ~@51 bb3@14 ~@31]/2", // Cm Eb5 C5
  E: "[~@6 d4@3 g4@6 ~@3 d4@2 ~ gb4@9 d4@3 g4@8 ~ d4@2 ~ gb4@8 ~ d4@2 ~ g4@7 ~@2 d4@2 ~ gb4@8 ~ d4@2 ~ g4@7 ~@2 d4@2 ~ gb4@8 ~ d4@2 ~ g4@8 ~ d4@2 ~ gb4@7 ~@2 d4@2 ~ g4@8 ~ d4@2 ~ gb4@7 ~@2 d4@2 ~ g4@7 ~@2 d4@2 ~ gb4@7 ~@2 d4@2 ~ g4@9 d4@2 ~@4]/4",
})).s("gm_acoustic_guitar_steel").gain(0.28)

// chords · epiano1
const epiano1 = note(`<
  ~@4 A B C D A E C D A E C D A E C D ~@8 A E C D A E C D ~@6 C D ~@8 A E C D A E C D A E C D ~
>`.pickRestart({
  A: "[d3,g3,bb3]@3 ~@6 [d3,g3,bb3]@3 ~@6 [d3,g3,bb3]@22 ~@8", // Gm
  B: "[d3,g3,bb3,d4] ~@2 [d3,g3,bb3,d4] ~@2 [d3,g3,bb3]@7 ~@3", C: "[g3,bb3,d4]@21 ~@3 [f3,bb3,c4]@20 ~@4",
  D: "[f3,bb3,d4]@43 ~@5", E: "[d3,g3,bb3,d4]@4 ~@5 [d3,g3,bb3,d4]@3 ~@6 [d3,g3,bb3]@21 ~@9",
})).s("gm_epiano1").gain(0.8)

// other · string ensemble 2
const string_ensemble_2 = note(`<
  ~@9 A@3 ~@2 B C ~ A@3 D E F G D H I@2 ~@5 A@3 J K L M J N@3 D E F G O H I@2 ~@5 A@3 ~@5
>`.pickRestart({
  A: "[~@27 bb3@3 g4@2 ~ g4@3 f4@3 eb4@2 ~ eb4@16 ~@11 bb3@3 g4@5 ~ g4@5 ~ f4@3 d4 ~@2 d4@26 ~@28]/3",
  B: "~@30 f4@6 eb4@2 ~ eb4@2 ~ d4@2 ~@4", C: "d4@19 ~@29",
  D: "~@3 bb3@3 f4@4 ~@2 f4@3 ~@3 f4@4 ~@2 f4@3 ~@3 f4@4 ~@2 f4@4 ~@2 f4@4 ~@2",
  E: "f4@2 ~ f4@5 ~ eb4@9 d4@2 ~ d4@8 ~@19",
  F: "f4@3 ~@3 f4@4 ~@2 f4@4 ~@2 f4@4 ~@2 f4@4 ~@2 f4@3 ~@3 f4@3 ~@3 f4@4 ~@2",
  G: "f4@3 ~@3 f4@6 eb4@5 ~ d4@3 ~@3 d4@9 eb4@8 ~ d4@5 ~", H: "f4@3 ~@3 f4@6 eb4@5 ~ d4@10 ~@20",
  I: "[~@21 d4@3 eb4@6 f4@3 g4@5 ~ eb4@6 g4@21 f4@18 ~@12]/2", J: "d4@9 [a3,c4]@10 ~@5",
  K: "~ bb3@32 ~@15, [g3,c4]@5 ~", L: "[g3,bb3,d4]@16 ~@2 [f3,a3]@19 ~@8 d4@3, ~@7 [f3,a3,c4]", M: "g3@41 ~@7",
  N: "[~ bb3@26 ~@3 g4@2 ~ g4@3 f4@3 eb4@2 ~ eb4@16 ~@11 bb3@3 g4@5 ~ g4@5 ~ f4@3 d4 ~@2 d4@26 ~@28, [g3,c4]@5 ~@13, ~@27 bb3@5 ~@112]/3", // C5
  O: "~@3 bb3@3 f4@4 ~@2 f4@3 ~@3 f4@4 ~@2 f4@3 ~@3 f4@4 ~@2 f4@3 ~@3 f4@4 ~@2",
})).s("gm_string_ensemble_2").gain(0.56)

// other · string ensemble 2 · soft notes · Gm C Gm
const string_ensemble_2_soft = note(`<
  ~@36
  [[g3,bb3]@9 f3@10 ~@5]
  [e3@5 ~]
  [~@9 c4@10 ~@5]
  [[e3,c4]@7 ~]
  [[g3,bb3]@9 f3@10 ~@5]
  [e3@5 ~]
  ~@23
>`).s("gm_string_ensemble_2").gain(0.32)

// chords · string ensemble 2
const string_ensemble_2_2 = note("<~@19 A B@2 ~ C B@2 D@2 ~@15 A B@2 ~ C B@2 D@2 ~@9 E@2 F ~>".pickRestart({
  A: "~@4 [bb4,d5]@2 [d5,f5] [d5,gb5]", B: "[[bb4,d5,g5]@11 ~]/2", C: "~@4 d5@2 [d5,f5] [d5,gb5], ~@24 bb4@17 ~@7",
  D: "[[g4,c5]@43 ~@5 d5@22 ~@3 c5@19 ~@4, ~@47 [bb4,g5]@22 ~@3 [a4,f5]@19 ~@5]/2", // C5 Eb Dm
  E: "[[g3,bb3]@45 ~@3 g3@44 ~@4, ~@47 bb3@46 ~@3]/2", F: "[d3,f3,bb3,d4,f4,bb4]",
})).s("gm_string_ensemble_2").gain(0.31)

// chords · string ensemble 2 · soft notes
const string_ensemble_2_soft_2 = note("<~@22 A@2 ~@2 B ~@19 A@2 ~@2 B ~@9 C D E ~@2>".pickRestart({
  A: "[[g4,eb5]@89 ~@7, bb4@3 ~]/2", B: "eb4@11 ~", C: "[g3,bb3,d4]@23 ~", D: "d4@11 ~", E: "eb3@7 ~",
})).s("gm_string_ensemble_2").gain(0.15)

// other · piano
const piano = note(`<
  ~@60
  [~@6 bb2 ~@5 ab2 ~@5 gb2 ~@6 ab2 ~@4 ab2@2 ~@4 ab2@2 ~@4 ab2@2 ~@4]
  [ab2 ~@3 ab2!3 ~@2 ab2 ~@3 ab2 ~@4 ab2 ~@6 ab2 ~@4 ab2@2 ~@5 ab2 ~@4 ab2@2 ~@4]
  [ab2 ~@5 ab2@2 ~@5 ab2 ~@2 ab2!3 ~@2 ab2 ~@3 ab2 ~@5 ab2@2 ~@4 ab2 ~@4 ab2 ~@5]
  [~@13 bb1@2 ~@33]
  ~
>`).s("gm_piano").gain(0.3)

// drums · kick
const kick = s("bd").struct("<A@4 ~ A@7 ~ A@6 B C@2 D C@3 D C ~ A@14 B C@2 D C@3 D C ~ A@10 E ~>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@5 x ~ x ~@4 x!2 ~", C: "x ~@2 x ~ x!2 ~@9", D: "x ~@2 x ~ x!2 ~ x ~@2 x ~@4", E: "x",
})).gain(0.72)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<A@4 ~ A@7 ~ A@7 ~@9 A@15 ~@9 A@10 ~@2>".pickRestart({
  A: "~@5 x ~@10",
})).gain(0.32)

// drums · snare
const snare = s("sd").struct("<A@4 B A@7 B A@15 B A@23 C A@10 D ~>".pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~@37 x ~@10", D: "~@13 x ~@34",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  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 E C D A B C
  D ~@5
>`.pickRestart({
  A: "~@12 x ~@5 x ~@6 x ~@4 x ~@5 x ~@5 x ~@5", B: "x ~@3 x!3 ~@2 x ~@3 x ~@4 x ~@6 x ~@4 x ~@6 x ~@4 x ~@5",
  C: "x ~@5 x ~@6 x ~@2 x!3 ~@2 x ~@3 x ~@5 x ~@5 x ~@4 x ~@5",
  D: "x ~@5 x ~@5 x ~@3 x!2 ~ x ~@2 x ~@2 x ~@5 x ~@4 x ~@6 x ~@4",
  E: "x ~@3 x!3 ~@2 x ~@2 x!2 ~@4 x ~@6 x ~@4 x ~@5 x!2 ~@4 x ~@5",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A@2 ~@2 A ~@8
>`.pickRestart({
  A: "~ x ~@6",
})).gain(0.4)

// drums · bell tree
const bell_tree = s("marktrees:0").struct(`<
  ~@3 A ~@3 A ~@3 A ~@3 B ~@3 B ~@3 A ~@3 A ~@3 A ~@3 B ~@3 B ~@3 B ~@3 A ~@3 A ~@3 A ~@3 A ~@5
>`.pickRestart({
  A: "~@3 x", B: "~@37 x ~@10",
})).gain(3.81)

stack(
  bass, acoustic_guitar_steel, acoustic_guitar_steel_2, epiano1, string_ensemble_2, string_ensemble_2_soft,
  string_ensemble_2_2, string_ensemble_2_soft_2, piano, kick, kick_soft, snare, hihat, open_hat, bell_tree
)

More by Brandy