Strudelify

Anytime

Brian McKnight

KeyD♭ majorTempo65 bpm
0:00/0:00
// Anytime — Brian McKnight
// 65 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 73 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(65/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 · piano
const piano = note(`<
  ~ A@3 B C D E F G H I J K L M N O P Q R S@2 T U V W X Y Z AA AB AC AD AE AF AG V AH AI AJ AK AL AM AN AO AP AQ AR AS
  AT V AU Q AL AV AW Q AX T AY AZ AJ O BA O BB AI BC BD BE BF BG
>`.pickRestart({
  A: "[~@13 c5 db5 ab5@19 ~@14]/3",
  B: "[ab4,db5] c5 ab4 [ab4,db5] c5 ab4 [f4,ab4,db5]@3 ~ ab4 ~@4 db5, [f3,bb3,f4]@3 [ab3,f4]@3 gb3@10, ~@6 db4@5 [ab4,db5]@2 f4@2 ~, ~@9 f4@3 db4@4, ~@7 ab4", // Db5 Db Bb5 Db Db5
  C: "eb3 ab3 bb3 ~@3 bb4 db5 b2@5 b2 ~@2, bb4@3 eb4@2 ab4@2 ~ bb4@7 ~, ~@4 f4@3 ~@9",
  D: "[f4,ab4,db5] [f4,c5] ab4 [ab4,db5] c5 ab4 [f4,ab4,db5]@3 ~@5 ab4 db5, [f3,bb3]@3 [ab3,f4]@3 gb3@10, ~@6 db4@2 ~ db4@2 db5@2 f4@2 ~, ~@5 f4 db4@2", // Db F5 Db5 Db Bb5 Db
  E: "eb3 ab3 bb3 ~@3 bb4 db5 b2@8, bb4@3 eb4@2 ab4@2 ~ bb4@6 ~@2, ~@4 f4@3 ~@9",
  F: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [db3,f3]@3 ~@6 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@8 ab3@2, ~@3 [ab3,db4]@2 f3 db3@2, ~@9 db3@2 [ab3,db4]@2 f3@3", // Db5 Db Bb5 Db Db5
  G: "eb2 ab2 bb2 ~@3 bb3 db4 [b1,bb3]@7 f3, bb3@3 eb3@2 ab3@3 ~@8, ~@4 f3@3 ~@9", // Bmaj7
  H: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,db4]@3 ~@2 f3 ~@3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@10, ~@3 [db3,ab3]@2 ab3 db3@2, ~@9 f3@2 db4@2 f3@3, ~@7 ab3", // Db5 Db Bb5 Db Db5
  I: "eb2 ab2 bb2 ~@3 bb3 db4 ~@5 b2@2 f3, bb3@3 eb3@2 ab3@2 ~@9, ~@4 f3@3 ~ [b1,bb3]@7 ~", // Bmaj7
  J: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ ab3 ~@4 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@8 ab3@2, ~@6 db3@5 [ab3,db4]@2 f3@3, ~@9 f3@3 db3@4", // Db5 Db Bb5 Db Db5
  K: "eb2 ab2 bb2 ~@3 bb3 db4 ~@5 b1@2 f3, bb3@3 eb3@2 ab3@3 bb3@7 ~, ~@4 f3@3 ~ b1@4 ~@4, ~@10 b2@5 ~",
  L: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ ab3 [ab3,db4]@2 ~@2 db4, [f2,bb2,f3]@3 [ab2,f3]@3 [gb2,db3]@10, ~@9 f3@3 ~ f3@2 ~, ~@7 ab3", // Db5 Db Db5 Bb5 Db Gb5
  M: "eb2 ab2 bb2 ~@3 bb3 db4 [b1,bb3]@5 bb3@2 f3, bb3@3 eb3@2 ab3@3 ~@8, ~@4 f3@3 ~@9", // Bmaj7
  N: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ ab3 f3 ~@3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@10, ~@6 db3@5 ~ db3@4, ~@9 f3@2 [ab3,db4]@2 f3@2 ~, ~@7 ab3", // Db5 Db Bb5 Db Db5
  O: "eb2 ab2 bb2 ~@3 bb3 db4 b1@4 b2@3 f3, bb3@3 eb3@2 ab3@2 ~ bb3@7 ~, ~@2 f3 ~@5",
  P: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ f3 ab3 ~@2 ab3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@9 ~, ~@6 db3@2 ~ db3@2 db4@2 f3@2 ~, ~@3 db3", // Db5 Db Bb5 Db
  Q: "eb2 ab2 bb2 ~@3 bb3 db4 b1@2 ~@3 b1@2 f3, bb3@3 eb3@2 ab3@2 ~ bb3@7 ~, ~@4 f3@2 ~@4 b2@5 ~",
  R: "[e2,f3,ab3,db4] ~ [f3,ab3] [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ ab3 ~@4 db4, [f2,bb2]@3 [ab2,f3]@3 gb2@10, ~ c4@2 ~@3 db3@6 db3@4, ~@9 f3@2 [ab3,db4]@2 f3@2 ~, ~@7 ab3", // Db Fm Db5 Db Bb5 Db Db5
  S: "[eb2 ab2 bb2 ~@3 bb3 db4 b1@2 ~@5 ab3 [ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ ab3 f3 ~ db4 ~ [ab2,db4], bb3@3 eb3@2 ab3@3 bb3@5 f3@6 ~@3 db3@6 db3@4, ~@4 f3@3 ~@3 b2@5 ~ [f2,bb2]@3 [ab2,f3]@3 gb2@8 ab3@2, ~@25 f3@2 [ab3,db4]@2 f3@3]/2", // Db5 Db Db5 Bb5 Db Db5
  T: "eb2 ab2 bb2 eb3 ~@2 bb3 db4 b1@2 ~@3 b1 ~ f3, bb3@4 f3@3 ~@3 b2@5 ~, ~@5 ab3@2 ~ bb3@7 ~",
  U: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [db3,f3,ab3,db4]@3 ~ [f3,ab3] f3 ~@2 ab3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@10, ~@9 db3@2 db4@2 f3@2 ~, ~@3 db3", // Db5 Db Fm Bb5 Db
  V: "eb2 ab2 bb2 ~@3 bb3 db4 b1@2 ~@3 b1 ~ f3, bb3@3 eb3@2 ab3@2 ~ bb3@7 ~, ~@4 f3@3 ~@3 b2@5 ~",
  W: "[ab3,db4] ~ ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ ab3 [ab3,db4] ~@2 ab3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@9 ~, ~ c4@2 ~@3 db3@5 ~ db3@4, ~@9 f3@2 ~@2 f3@2 ~", // Db5 Db Db5 Bb5 Db
  X: "eb2 ab2 bb2 ~@3 bb3 db4 ~@4 b2@3 f3, bb3@3 eb3@2 ab3@2 ~@9, ~@4 f3@2 ~@2 [b1,bb3]@7 ~", // Bmaj7
  Y: "[ab3,db4] ~ ab3 [ab3,db4] ~ ab3 [f3,ab3,db4]@3 ~ f3!2 ~@2 ab3 [ab2,db4], [f2,bb2,f3]@3 [ab2,f3]@3 gb2@10, ~ c4@2 ~ c4@2 db3@2 ~ db3@2 db4@2 f3@2 ~, ~@3 db3", // Db5 Db Db5 Bb5 Db
  Z: "eb2 ab2 bb2 eb3 ~@2 bb3 db4 b1@2 ~@3 b1 ~ [f3,ab3], bb3@4 f3@2 ~@4 b2@5 ~, ~@5 ab3@2 ~ bb3@7 ~", // Fm
  AA: "[ab3,db4] ~ ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ f3 ~@2 db4 ab3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@9 ~, ~ c4@2 ~@3 db3@2 ~ db3@2 db4@2 f3@2 ~, ~@3 db3", // Db5 Db Bb5 Db
  AB: "eb2 ab2 bb2 eb3 ~@2 bb3 [bb3,db4] b1@2 ~@3 b1 ~ f3, bb3@4 f3@2 ~@4 b2@5 ~, ~@5 ab3@2 ~ bb3@7 ~", // Bbm
  AC: "[f3,ab3,db4] c4 [f3,ab3] [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ f3 ~@3 ab3 db4, [f2,bb2]@3 [ab2,f3]@3 gb2@9 ~, ~@6 db3@2 ~ db3@2 db4@2 f3@2 ~, ~@3 db3", // Db Fm Db5 Db Bb5 Db
  AD: "eb2 ab2 bb2 ~@3 bb3 db4 b1@2 ~@3 b1@2 f3, bb3@3 eb3@2 ab3@3 bb3@7 ~, ~@4 f3@2 ~@4 b2@5 ~",
  AE: "[ab3,db4] c4 [f3,ab3] [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ f3 ~ gb2 ~ ab3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@6 db3@4, ~@6 db3@2 ~ db3@2 db4@2 f3@2 ~", // Db5 Fm Db5 Db Bb5 Db
  AF: "eb2 ab2 bb2 ~@3 bb3 db4 [b1,bb3]@7 f3, bb3@3 eb3@2 ab3@2 ~@9, ~@4 f3@3 ~@9", // Bmaj7
  AG: "[ab3,db4] c4 [f3,ab3] [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ ab3 ~@4 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@10, ~@6 db3@5 ~ db3@4, ~@9 f3@2 db4@2 f3@2 ~, ~@7 ab3", // Db5 Fm Db5 Db Bb5 Db
  AH: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ f3!2 ~@3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@8 ab3@2, ~@6 db3@2 ~ db3@2 db4@2 f3@2 ~, ~@3 db3", // Db5 Db Bb5 Db
  AI: "eb2 ab2 bb2 eb3 ~@2 bb3 db4 b1@4 b2@3 f3, bb3@4 f3@3 ~@9, ~@5 ab3@2 ~ bb3@7 ~",
  AJ: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ f3 ~@3 ab3 [ab2,db4], [f2,bb2,f3]@3 [ab2,f3]@3 gb2@10, ~@6 db3@2 ~ db3@2 db4@2 f3@2 ~, ~@3 db3", // Db5 Db Db5 Bb5 Db
  AK: "eb2 ab2 bb2 ~@3 bb3 db4 b1@2 ~@3 b1 ~ ab3, bb3@3 eb3@2 ab3@3 bb3@6 f3@2, ~@4 f3@2 ~@4 b2@5 ~",
  AL: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ f3 ~@3 ab3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@9 ~, ~@6 db3@2 ~ db3@2 db4@2 f3@2 ~, ~@3 db3", // Db5 Db Bb5 Db
  AM: "eb2 ab2 bb2 ~@3 bb3 db4 b1@2 ~@3 b1@2 f3, bb3@3 eb3@2 ab3@2 ~ bb3@7 ~, ~@4 f3@3 ~@3 b2@5 ~",
  AN: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ ab3 ~@3 ab3 [ab2,ab3,db4], [f2,bb2,f3]@3 [ab2,f3]@3 gb2@10, ~@6 db3@5 ~ db3@4, ~@9 f3@2 db4@2 f3@2 ~", // Db5 Db Db5 Bb5 Db
  AO: "eb2 ab2 bb2 ~@3 bb3 db4 b1@2 b2@3 b1 f3 ~, bb3@3 eb3@2 ab3@2 ~ bb3@6 ~@2, ~@2 f3 ~@5",
  AP: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 f3 ab3 ~@3 ab3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@10, ~@6 db3@5 db4@2 f3@2 ~, ~@3 db3", // Db5 Db Bb5 Db
  AQ: "eb2 ab2 bb2 ~@3 bb3 db4 b1@2 b2@3 b1 ~ f3, bb3@3 eb3@2 ab3@2 ~ bb3@7 ~, ~@4 f3@3 ~@9",
  AR: "[ab3,db4] c4 [f3,ab3] [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ f3 ~@3 ab3 [gb2,db4], [f2,bb2,f3]@3 [ab2,f3]@3 gb2@6 db3@3 ~, ~@6 db3@2 ~ db3@2 db4@2 f3@2 ~", // Db5 Fm Db5 Db Gb5 Bb5 Db
  AS: "eb2 ab2 bb2 ~@3 bb3 db4 bb3@7 f3, bb3@3 eb3@2 ab3@2 ~@9, ~@4 f3@3 ~ b1@6 ~@2",
  AT: "db4 c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ f3 ~@3 ab3 db4, [f2,bb2,f3,ab3]@3 [ab2,f3]@3 gb2@9 ~, ~@6 db3@2 ~ db3@2 db4@2 f3@2 ~, ~@3 db3", // Db5 Db Bb7 Db
  AU: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ f3 ~@3 ab3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@9 ~, ~@6 db3@2 ~ db3@2 db4@2 f3@2 ~, ~@12 db3@3 ~", // Db5 Db Bb5 Db
  AV: "eb2 ab2 bb2 ~@3 bb3 db4 ~@5 b2@2 f3, bb3@3 eb3@2 ab3@2 ~@9, ~@4 f3@2 ~@2 [b1,bb3]@7 ~", // Bmaj7
  AW: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ ab3!2 db3 ~ ab3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 eb2@8 ~@2, ~@6 db3@5 ~@2 f3@2 ~, ~@9 f3@2 db4@2 ~@3", // Db5 Db Bb5 Db
  AX: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ ab3!2 ~@3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@8 ab3@2, ~@6 db3@5 ~ db3@4, ~@9 f3@2 db4@2 f3@2 ~", // Db5 Db Bb5 Db
  AY: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ ab3!2 ~@2 ab3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@10, ~@6 db3@5 db4@2 f3@2 ~, ~@9 f3@3 db3@4", // Db5 Db Bb5 Db
  AZ: "eb2 ab2 bb2 ~@3 bb3 db4 b1@2 ~@3 b1@2 f3, bb3@3 eb3@2 ab3@3 bb3@7 ~, ~@4 f3@3 ~@3 b2@5 ~",
  BA: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ f3 ~@3 ab3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@10, ~@6 db3@2 ~ db3@2 db4@2 f3@2 ~, ~@3 db3", // Db5 Db Bb5 Db
  BB: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ ab3 ~@3 ab3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@10, ~@6 db3@5 db4@2 f3@2 ~, ~@9 f3@3 db3@4", // Db5 Db Bb5 Db
  BC: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ ab3 f3 ~@3 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@10, ~@3 db3@3 db3@2, ~@9 f3@2 [ab3,db4]@2 f3@2 ~, ~@7 ab3", // Db5 Db Bb5 Db Db5
  BD: "eb2 ab2 bb2 ~@3 bb3 db4 b1@5 b2@2 f3, bb3@3 eb3@2 ab3@2 ~ bb3@7 ~, ~@4 f3@3 ~@9",
  BE: "[ab3,db4] c4 ab3 [ab3,db4] c4 ab3 [f3,ab3,db4]@3 ~ ab3 ~@4 db4, [f2,bb2,f3]@3 [ab2,f3]@3 gb2@10, ~@6 db3@5 [ab3,db4]@2 f3@2 ~, ~@9 f3@3 db3@2 ab3@2", // Db5 Db Bb5 Db Db5
  BF: "eb2 ab2 bb2 ~@3 bb3 db4 [b1,bb3]@5 ~ ab3 db4, bb3@3 eb3@2 ab3@2 ~@9, ~@4 f3@3 ~@6 f3@2 ~", // Bmaj7
  BG: "[f2,bb2] ~, bb3@3 ~@5", // Bb5
})).s("gm_piano").gain(0.64)

// bass · electric bass finger
const bass = note(`<
  ~@16 A B A B A B C D ~@8 A B A B A B C E ~@8 A B A B A B C E A B A B A B C E A B A B A B C E ~
>`.pickRestart({
  A: "bb1@3 ab1@3 gb1@10", B: "eb1 b0", C: "bb1@3 ab1@3 gb1@9 ~", D: "eb1@8 gb0@7 ~", E: "eb1@8 gb1@7 ~",
})).s("gm_electric_bass_finger").gain(0.72)

// other · electric guitar clean
const electric_guitar_clean = note(`<
  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 A B C D A B C D ~
>`.pickRestart({
  A: "ab3 ~ ab3!2 eb3 ab3 ~@2 ab3!2 ~ ab3 ~ eb3 ab3 ~", B: "~ eb3 ab3!2 ~ ab3 ~@2 ab3!2 ~@2 bb3 ~ db4@2",
  C: "ab3 ~ ab3!4 ~ eb3 ab3!2 ~ ab3 ~ ab3!2 ~", D: "~ eb3 ab3!2 ~ ab3 ~ eb3 ab3!2 ~@2 ab3 ~ bb3@2",
})).s("gm_electric_guitar_clean").gain(0.4)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@16 A B A C D E F@2 ~@8 A B A C D E F@2 ~@8 A B A C D E F@2 A B A C D E F@2 A B A C D E F@2 ~
>`.pickRestart({
  A: "[ab4,db5]", B: "[ab4,db5,f5]@7 ~ [ab4,eb5]@8", C: "[ab4,db5,f5]@8 [ab4,eb5]@7 ~", D: "[ab4,db5,f5]",
  E: "[ab4,db5,f5] [ab4,eb5]", F: "[~@8 f5@7 ~, [ab4,db5]@15 ~]/2",
})).s("gm_string_ensemble_1").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  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 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 A B A C A B A C ~
>`.pickRestart({
  A: "x ~@6 x!2 ~@2 x ~@4", B: "x ~@10 x ~@4", C: "x ~@7 x ~@4 x ~ x",
})).gain(0.8)

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!72 ~>").gain(0.8)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~ 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 ~
>`.pickRestart({
  A: "~ x ~@6", B: "~@5 x ~@2",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C
  D C D C D C D C D C D C D ~
>`.pickRestart({
  A: "x!5 ~@3", B: "~ x ~@2 x ~@3", C: "x!7 ~ x!8", D: "x!16",
})).gain(0.4)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A B C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C
  D C D C D C D C D C D C D ~
>`.pickRestart({
  A: "~@5 x!3", B: "x ~ x!2 ~ x!3", C: "x!2 ~@2", D: "x!3 ~",
})).gain(0.24)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 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 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 ~
>`.pickRestart({
  A: "~@7 x ~@8", B: "~@15 x",
})).gain(0.72)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[~ x ~@2 x!2 ~@2]!72 ~>").gain(3.65)

stack(piano, bass, electric_guitar_clean, string_ensemble_1, kick, rim, low_tom, hihat, hihat_soft, open_hat, cabasa)

More by Brian McKnight