Strudelify

Anything I Want

Kevin Paige

KeyE♭ majorTempo120 bpm
0:00/0:00
// Anything I Want — Kevin Paige
// 120 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · slap bass 1 · "SLAPBASS 1"
const bass = note(`<
  ~ A B C D E F G H I J@2 K@2 L M N O P Q R S T U V W X W X W@3 H Y Z AA AB I J@2 K@2 L M N O P Q R S T U V W X W X W@3
  H Y Z AA AB Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR W X W X W@3 H Y Z AA AB Y Z AA AB Y Z AA AS
>`.pickRestart({
  A: "db3@2 db2 db3 ~ db3 ~ db3 ~ db3 db2 ~ db3 ~ db2 ~", B: "db3@2 db2 db3 ~ db3 ~ db3 ~ db2 db3 db2 db3 ~ db3 db2",
  C: "eb3 ~ eb2 eb3 ~ eb3 ~ eb3 ~ eb2 eb3 ~ eb3@2 eb2 eb3", D: "eb3 ~ eb2 eb3 ~ eb3 ~ eb3 ~ eb2 eb3 ~ eb3 ~ eb2 ~",
  E: "db3@2 db2 db3 ~ db3 ~ db3 ~ db2 db3 db2 db3@2 db2 ~", F: "db3 ~ db2 db3 ~ db3 ~ db3 ~ db2 db3 db2 db3@2 db2@2",
  G: "eb3@2 eb2 eb3 ~ eb3 ~ eb3 ~ eb2 eb3 ~ eb3@2 eb2@2", H: "eb3 ~@15", I: "eb3 ~@5 eb3 eb2 ~ eb3 ~ eb3 eb2@2 eb3 eb2",
  J: "eb3 ~@5 eb3 eb2 ~ eb2 ~ eb2 eb3@2 eb2 eb3", K: "eb3 ~@5 eb3 eb2 ~ eb2 ~ eb2 eb3@2 eb3 eb2",
  L: "eb3 ~@5 eb3 eb2 ~ eb2 ~ eb2 eb3 ~ eb3@2", M: "eb2 ~@5 eb3 eb2 ~ eb2 ~ eb2 eb3@2 eb2@2",
  N: "eb3 ~@5 eb3 eb2 ~ eb2 ~ eb2 eb3 ~ eb3 eb2", O: "eb3@3 ~ eb3@2 eb2 eb3 ~ eb3 ~ eb3 eb2@2 eb3 eb2",
  P: "eb3@3 ~ eb3 ~ eb2 eb3 ~ eb3@2 eb2 eb3@2 eb2@2", Q: "eb3@4 eb2@2 eb3!2 ~ eb3@2 eb2 eb3@2 eb2@2",
  R: "eb3@3 ~ eb3@2 eb2 eb3 ~ eb3@2 eb2 eb3@2 eb2@2", S: "eb3@4 eb3 ~ eb2 eb3 ~ eb3@2 eb2 eb3@2 eb2@2",
  T: "eb3@4 ~@2 eb3 eb2 ~ eb2 ~ eb2 eb3@2 eb2@2", U: "eb3@4 ~@2 eb3 eb2 ~ eb2 ~ eb3 eb2@2 eb2 ~",
  V: "bb2 ~ bb2 ~ bb2 ~@11", W: "eb3 ~ eb3 ~ eb3@2 eb2 eb3 ~ eb3@2 eb2 eb3@2 eb2@2",
  X: "eb3 ~ eb3 ~ eb3@2 eb2 eb3 ~ eb3@2 eb2 eb3 eb2 eb3 ~", Y: "eb3 eb2 eb3 ~ eb3@2 eb2 eb3 ~ eb3@2 eb2 eb3 ~ eb3 eb2",
  Z: "eb3 eb2 eb3@2 eb3@2 eb2 eb3 ~ eb3@2 eb2 eb3@2 eb3 eb2", AA: "eb3 ~ eb3 ~ eb3@2 eb2 eb3 ~ eb3@2 eb2 eb3 ~ eb3 eb2",
  AB: "eb3 eb2 eb3 ~ eb3@2 eb2 eb3 ~ eb3@2 eb2 eb3@2 eb2 ~", AC: "eb3 ~ eb3 ~ eb3@2 ab2 db3 ~ db3 ~ db3!2 ~ db3!2",
  AD: "ab2 ~ ab2 ~ ab3@2 ab2 ab3 ~ ab3 ~ ab3 ab2 gb3@2 ~", AE: "eb3 ~ eb3 ~ eb3 ~ eb3 db3 ~ db3 ~ db3 db3@2 db3!2",
  AF: "ab2 ~ ab2 ~ ab2@2 ab3 ab2 ~ ab2 ~ ab2 ab3 ab2 ab3 ~", AG: "eb3 ~ eb3 ~ eb3@2 bb2 db3 ~ db3 ~ db3!2 ~ db3!2",
  AH: "ab2 ~ ab2 ~ ab2@2 ab3 [ab2,ab3] ~ ab3@2 ab2 ab3@2 ab2 gb3", // Ab
  AI: "eb3 ~ eb3 ~ eb3 ~ eb3 db3 ~ db3 ~ db3!2 ~ db3!2", AJ: "ab2 ~ ab2 ~ ab3@2 ab2 ab3 ~@8",
  AK: "b2 ~ b2@2 b3@2 b2 b2@2 b2 ~ b2 b3@2 b2 b3", AL: "b2@2 b2@2 b3@2 b2 b3@2 b2 ~ b2 ~@2 b2 ~, ~@3 b3",
  AM: "eb3 ~ eb3 ~ eb3@2 bb2 eb3 ~ eb3@2 eb2 eb3@2 eb2@2", AN: "eb3 ~ eb3 ~ eb3@2 bb2 eb3 ~ eb3@2 eb2 eb3@2 eb2 ~",
  AO: "b2 ~ b2@2 b3@2 b2 b3 ~ b3@2 b2 b3@2 b2@2", AP: "b3 ~ b3 ~ b3@2 b2 b3@2 b2 b3@2 b2@2 b3@2",
  AQ: "ab2 ~ ab2@2 ab3@2 ab2 ab3@2 ab2@2 ab2 ab3@2 ab2@2", AR: "bb2 ~ bb2 ~ bb2@2 ~@10", AS: "eb3 ~@7",
})).s("gm_slap_bass_1").gain(0.64)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  A B@2 C@2 B@2 C D E F G H@2 I J K L M N O P@2 Q R S T U ~ V W X ~ Y Z@2 AA E F G H@2 I J K L M N O P@2 Q R S T U ~ V W
  X ~ Y Z@2 AA Y Z@2 AA AB AC AD AE AF AG AH AI AJ AK AL@2 AM AN AO AP S T U ~ V W X ~ Y Z@2 AA Y Z@2 AA Y Z@2 AQ
>`.pickRestart({
  A: "[db4,f4,ab4]!2 ~ [db4,f4,ab4] ~ [db4,f4,ab4] ~ [eb4,g4,bb4]@5 ~@4", B: "[[db3,ab3,db4]@29 ~@3]/2",
  C: "[eb3,bb3,eb4] ~@5 [eb3,bb3,eb4] ~@9", // Eb5
  D: "[eb3,bb3,db4,eb4,f4,ab4] [db4,f4,ab4] ~ [db4,f4,ab4] ~ [db4,f4,ab4] ~ [eb4,g4,bb4] ~@8", // Bbm7 Db Eb
  E: "eb3 ~@5 eb3 eb2 ~ eb3 ~ eb3 eb2@2 eb3 eb2", F: "eb3 ~@5 eb3 eb2 ~ eb2 bb2 [eb2,ab2] [bb2,eb3]@2 [eb2,db3] eb3",
  G: "eb3 ~@5 eb3 eb2 ~ eb2 ~ eb2 eb3@2 eb2 eb3", H: "eb3 ~@5 eb3 eb2 ~ eb2 ~ eb2 eb3@2 eb3 eb2",
  I: "eb3 ~@5 eb3 eb2 ~ eb2 bb2 [eb2,ab2] bb2@2 eb3@2, ~@12 eb3 ~ db3 ~", J: "eb2 ~@5 eb3 eb2 ~ eb2 ~ eb2 eb3@2 eb2@2",
  K: "eb3 ~@5 eb3 eb2 ~ eb2 ~ eb2 eb3 ~ eb3 eb2",
  L: "[eb4,g4,bb4] ~@3 eb3@2 eb2 eb3 ~ eb3 ~ eb3 eb2@2 eb3 eb2, eb3@3 ~ [db4,f4,ab4]@12", // Eb Db
  M: "eb3@3 ~ eb3 ~ eb2 eb3 ~ eb3@2 eb2 eb3@2 eb2@2", N: "eb3@4 eb2@2 eb3!2 ~ eb3@2 eb2 eb3@2 eb2@2",
  O: "eb3@3 ~ eb3@2 eb2 eb3 ~ eb3@2 eb2 eb3@2 eb2@2",
  P: "[[eb4,g4,bb4]@2 ~@2 eb3 ~ eb2 eb3 ~ eb3@2 eb2 eb3@2 eb2@2 eb3@4 ~@2 eb3 eb2 ~ eb2 ~ eb2 eb3@2 eb2@2, eb3 [db4,f4,ab4]@4 ~@3]/2", // Eb Db
  Q: "eb3@4 ~@2 eb3 eb2 ~ eb2 ~ eb3 eb2@2 eb2 ~", R: "bb2 ~ bb2 ~ bb2 ~@11",
  S: "[eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [db4,f4,ab4]@7 ~ [db4,f4,ab4]@4", T: "[bb3,eb4,g4]@3 ~@13",
  U: "[eb4,g4,bb4] ~@2 [db4,f4,ab4]@13", V: "[eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [db4,f4,ab4]@7 ~ [db4,f4,ab4]@3 ~",
  W: "[bb3,eb4,g4] ~@7", X: "[eb4,g4,bb4] ~@2 [db4,f4,ab4]@8 ~ [db4,f4,ab4]@2 ~@2",
  Y: "[eb3,g3,bb3,db4,eb4,g4]@2 [eb3,g3] [bb3,db4,eb4,g4]@2 [eb3,g3] [bb3,db4,eb4,g4]!2 [eb3,g3] [bb3,db4,eb4,g4]@2 [eb3,g3] [bb3,db4,eb4,g4]@2 [eb3,g3] [bb3,db4,eb4,g4]", // Eb7 Eb Eb7 Eb Eb7 Eb Eb7 Eb …
  Z: "[bb3,db4,eb4,g4]@2 [eb3,g3] [bb3,db4,eb4,g4]@2 [eb3,g3] [bb3,db4,eb4,g4]!2 [eb3,g3] [bb3,db4,eb4,g4]@2 [eb3,g3] [bb3,db4,eb4,g4]@2 [eb3,g3] [bb3,db4,eb4,g4]", // Eb7 Eb Eb7 Eb Eb7 Eb Eb7 Eb …
  AA: "[bb3,db4,eb4,g4]@2 [eb3,g3] [bb3,db4,eb4,g4]@2 [eb3,g3] [bb3,db4,eb4,g4] [bb3,eb4,g4] ~ [eb3,g3] [bb3,db4,eb4,g4] [eb3,g3] [bb3,db4,eb4,g4]@2 ~@2, ~@7 db4@2 ~@7", // Eb7 Eb Eb7 Eb Eb7 Eb Eb7 Eb …
  AB: "eb3 ~ eb3 ~ eb3@2 ab2 db3 ~ db3 ~ db3!2 ~ db3!2", AC: "ab2 ~ ab2 ~ ab3@2 ab2 ab3 ~ ab3 ~ ab3 ab2 gb3@2 ~",
  AD: "eb3 ~ eb3 ~ eb3 ~ eb3 db3 ~ db3 ~ db3 db3@2 db3!2", AE: "ab2 ~ ab2 ~ ab2@2 ab3 ab2 ~ ab2 ~ ab2 ab3 ab2 ab3 ~",
  AF: "eb3 ~ eb3 ~ eb3@2 bb2 db3 ~ db3 ~ db3!2 ~ db3!2",
  AG: "ab2 ~ ab2 ~ ab2@2 ab3 [ab2,ab3] ~ ab3@2 ab2 ab3@2 ab2 gb3", // Ab
  AH: "eb3 ~ eb3 ~ eb3 ~ eb3 db3 ~ db3 ~ db3!2 ~ db3!2", AI: "ab2 ~ ab2 ~ ab3@2 ab2 ab3 ~@8",
  AJ: "[b2,gb3,b3,eb4]@9 ~ [gb3,b3,eb4] ~@2 [b2,gb3,b3,eb4] ~@2", // B
  AK: "[gb3,b3,eb4]@10 [gb3,b3,eb4]@3 [b2,gb3,b3,eb4]@3, b2@13 ~@3", // B
  AL: "[[g3,bb3,eb4]@9 [g3,bb3,eb4]@3 ~@4 [g3,bb3,db4,eb4]@6 ~@3 [g3,bb3,db4,eb4]@7, eb3@14 eb3@9 eb3@9, ~@12 [g3,bb3,eb4]@4 ~@6 [g3,bb3,db4,eb4]@3 ~@7]/2", // Eb Eb7 Eb Eb7
  AM: "[b2,gb3,b3,eb4]@10 [b2,gb3,b3,eb4] ~@2 [b2,gb3,b3,eb4] ~@2", AN: "[b2,gb3,b3,eb4]@5 [b2,gb3,b3,eb4]@3",
  AO: "[eb3,ab3]@7 ~@5 gb3@4, [ab2,c4], ~@7 eb3@9, ~ ab3", // Ab5 Ab
  AP: "[bb2,f3,ab3,d4,f4] ~ [bb2,f3,ab3,d4,f4] ~ [bb2,f3,ab3,d4,f4] ~@11", AQ: "[eb3,bb3,eb4] ~@15",
})).s("gm_epiano1").gain(0.5)

// other · pad halo · "HALO PAD"
const pad_halo = note(`<
  ~ A@2 B@2 A@2 B C ~@19 D ~ E ~@2 F@2 ~ G ~@19 D ~ E ~@2 F@2 ~ G F@2 ~ G ~@8 H@2 C ~ I@2 J K ~@3 D ~ E ~@2 F@2 ~ G F@2
  ~ G F@2 ~@2
>`.pickRestart({
  A: "[~@4 [ab4,ab5]@4 [g4,g5]@4 [bb4,bb5]@19 ~]/2", B: "[eb4,eb5] ~@5 [eb4,eb5] ~@9", C: "[eb4,eb5] ~@15",
  D: "~@9 db5@2 ~ db5 ~ ab5 ~, ~@11 eb5@2 ~@3", E: "~@6 eb6@6 db6@2 bb5 ~",
  F: "[ab5 g5 ab5 g5 [ab4,db5,ab5]@4 [g4,g5]@4 [bb4,bb5]@20]/2", G: "~@8 eb4!7 ~", H: "[[b4,eb5,gb5,ab5]@31 ~]/2",
  I: "[b4,eb5,gb5,ab5]/2", J: "[ab4,c5,eb5]@15 ~", K: "[bb4,d5,f5] ~ [bb4,d5,f5] ~ [d5,f5] ~@11, ~@2 bb4 ~@5",
})).s("gm_pad_halo").gain(0.5)

// other · orchestra hit · "ORCH.HIT"
const orchestra_hit = note(`<
  A ~@2 B C ~@13 D E ~ E D E F ~@7 G H@3 I ~@9 D E ~ E D E F ~@7 G H@3 I H@3 I ~@10 J H ~@3 K L ~@6 G H@3 I H@3 I H@3 M
>`.pickRestart({
  A: "~@12 eb5@3 ~", B: "eb5@4 ~@2 eb5@3 ~@7", C: "eb5@3 ~@3 eb5@2 ~@8", D: "~@6 eb5 ~", E: "eb5@3 ~@13",
  F: "bb4 ~ bb4 ~ bb4 ~@7 eb5@3 ~", G: "eb5@7 ~@9", H: "eb5@2 ~ eb5@3 ~@2", I: "eb5@4 ~@2 eb5@3 ~@3 eb5@2 ~@2",
  J: "eb5@5 ~ eb5@7 ~@3", K: "bb4 ~ bb4 ~ bb4@7 ~ bb4@3 ~", L: "eb5 ~@3", M: "eb5@5 ~@11",
})).s("gm_orchestra_hit").gain(0.59)

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

// drums · snare
const snare = s("sd").struct(`<
  A B@3 C B@2 D E B@7 F B@7 G B@6 D H B@3 I B@7 F B@7 G B@6 D H B@3 I B@3 I B@7 F B@3 C B@2 D G B@6 D H B@3 I B@2 J I
  B@2 K L
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@4 x ~@2 x ~ x!2", D: "~@4 x ~@7 x ~@2 x", E: "x ~@2 x", F: "~@4 x ~@7 x ~ x!2",
  G: "x!3 ~@3 x ~", H: "x ~@6 x", I: "~@4 x ~ x ~@2 x ~@2 x ~@3", J: "~@4 x ~@6 x ~@4", K: "~@4 x ~@6 x ~@2 x!2",
  L: "x",
})).gain(0.66)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@4 A ~@2 B ~@23 B C ~@3 D ~@22 B C ~@3 D ~@3 D ~@11 A ~@2 B ~@7 B C ~@3 D ~@3 D ~@2 E ~
>`.pickRestart({
  A: "~@13 x ~@2", B: "~@7 x", C: "~@12 x!2 ~@2", D: "x!2 ~ x ~@3 x ~@2 x!2 ~@4", E: "~@7 x ~ x ~@2 x!2 ~@2",
})).gain(0.22)

// drums · clap
const clap = s("cp").struct("<~@33 [~ x ~ x]!4 ~@24 [~ x ~ x]!8 ~@24 [~ x ~ x]!11 ~>").gain(0.66)

// drums · low tom
const low_tom = s("lt").struct("<~@4 A ~@18 B ~@8 C D@4 ~@14 B ~@8 C D@8 ~@11 A ~@11 C D@10 E F>".pickRestart({
  A: "~@8 x ~@3 x!2 ~@2", B: "~@7 x", C: "~@7 x ~@8", D: "~ x ~ x", E: "~@2 x ~@4 x", F: "x",
})).gain(0.66)

// drums · hihat
const hihat = s("hh").struct("<A B@7 C B@15 D B@7 C B@19 D B@7 C B@23 D B@7 C B@11 ~>".pickRestart({
  A: "~@8 x!5 ~@3", B: "x!8", C: "~@4 x ~@3 x!6 ~@2", D: "~@2 x!2",
})).gain(0.22)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@4 A ~@18 B ~@8 C ~@3 D ~@14 B ~@8 C ~@3 D ~@3 D ~@11 A ~@11 C ~@3 D ~@3 D ~@2 E ~
>`.pickRestart({
  A: "~@5 x ~ x ~ x!2 ~@5", B: "~@11 x ~ x ~@2", C: "~@4 x!2 ~@10", D: "~@9 x!3 ~@4", E: "~@12 x ~@2 x",
})).gain(0.66)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A ~@23 A ~@27 A ~@31 A ~@12>".pickRestart({
  A: "~@7 x",
})).gain(0.66)

// drums · high tom
const high_tom = s("ht").struct("<~@4 A ~@18 B ~@12 C ~@14 B ~@12 C ~@3 C ~@11 A ~@15 C ~@3 C ~@2 D ~>".pickRestart({
  A: "~@3 x ~@4", B: "~@8 x!2 ~@6", C: "~@6 x!2 ~@8", D: "~@11 x ~@4",
})).gain(0.66)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@11 A ~@7 A ~@3 A ~@3 A ~@11 A ~@7 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 ~ A ~
>`.pickRestart({
  A: "x",
})).gain(0.66)

// drums · ride
const ride = s("rd").struct("<~ A@7 ~@17 A@7 ~ A@4 ~@16 A@7 ~ A@8 ~@8 A@7 ~ A@7 ~ A@11 ~>".pickRestart({
  A: "x!2",
})).gain(0.66)

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

// drums · congas
const congas = s("conga:18").struct("<~@33 A B A C ~@24 A B A C A B A C ~@24 A B A C A B A D A B E ~>".pickRestart({
  A: "~ x ~@4 x!2 ~ x ~ x ~@4", B: "x!2 ~@4 x!2 ~ x ~ x ~@4", C: "x!2 ~@14", D: "~ x ~@14", E: "~ x ~@4 x!2 ~ x ~@6",
})).gain(2.13)

// drums · congas
const congas_2 = s("conga:33").struct("<~@33 A B A ~@25 A B A ~ A B A ~@25 A B A ~ A B A ~ A B ~@2>".pickRestart({
  A: "~@14 x!2", B: "~@13 x!2 ~",
})).gain(2.13)

stack(
  bass, epiano1, pad_halo, orchestra_hit, kick, snare, snare_soft, clap, low_tom, hihat, mid_tom, open_hat, high_tom,
  crash, ride, tambourine, congas, congas_2
)