Strudelify

Experience (Follow Me)

RMB

KeyD♭ majorTempo165 bpm
0:00/0:00
// Experience (Follow Me) — RMB
// 165 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 135 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(165/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.

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@40 A B A C A B A C ~@12 D E F G D E F ~ H E H I H E H I H E H J ~@4 K L K M K L K M K L K M K L K N ~@20 A B A C A B
  A O ~@7
>`.pickRestart({
  A: "gb2!3 ~ gb2!3 ~ db3!3 ~ db3!3 ~", B: "ab2!3 ~ ab2!3 ~ bb2!3 ~ bb2!3 ~",
  C: "ab2!3 ~ ab2!3 ~ ab2!2 c3 ab2!3 c3 ab2", D: "~ gb2 ~ gb2 ~ db2 ~ db2", E: "~ ab2 ~ ab2 ~ bb2 ~ bb2",
  F: "~ gb2 ~ gb2 ~ bb2 ~ bb2", G: "~ ab2 ~ ab2 ~ ab2 ~ ab2", H: "~ gb2 ~ gb2 ~ db3 ~ db3",
  I: "~@2 ab2@2 ~@2 ab2@2 ~@2 c3 ab2!3 c3 ab2", J: "~ ab2 ~ ab2 ~@4", K: "bb2!3 ~ bb2!3 ~ bb2!3 ~ bb2!3 ~",
  L: "ab2!3 ~ ab2!3 ~ ab2!3 ~ c3!2 ab2 ~", M: "ab2!3 ~ ab2!3 ~ ab2!2 f2 ab2!3 c3 ab2", N: "ab2 ~@7", O: "ab2 ~@15",
})).s("gm_lead_2_sawtooth").gain(0.38)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  ~@3 A B C D E B C D E F G H I J G K L M N O P M N O Q R@8 B C D E B C D E B C D S ~@4 T@4 U@4 V W@3 V W@3 V W@3 X Y Z
  AA V AB@3 ~@4 F G H I F G H I F G H I F G H ~@5 B C D AC AD@8 AE@4 V AF@3 V AG AH@8 ~
>`.pickRestart({
  A: "~ ab4, ~@5 ab5@10 ~, ~@6 eb5@9 ~, ~@7 eb4@9",
  B: "gb5@2 bb3@2 gb5@2 ~ gb5!2 ~ bb3@2 eb5@2 db5@2, db3@6 bb3@2 db3@5 ~ db3 ~, ~@10 f5 ~@5",
  C: "eb5@2 eb3@2 bb3@3 eb5 eb5@2 f3@2 f3@2 bb3@2, ab2@6 ~@2 bb2@5 ~@3, ~@4 eb5@2 ~@4 db5 ~ c5 ~ ab4 ~",
  D: "db5@2 db3@2 db5@2 ~ db5 eb5 db5 ~ db5 c5 ~ f3@2, gb2@2 gb3@2 ~ f3 bb3@2, ~@6 db3@2 bb2@5 ~ db5 ~",
  E: "c5 ~ bb4 ~@3 eb3@2 ab2@2 ab4@2 f4@2 ab2@2, ab2@4 [ab3,ab4]@5 ~ ab3@4 f5 ~, ~ eb3@2 ~@3 c3@2", // Ab
  F: "~@3 f4 ~ f4 ~ f4, bb3@3 ~ bb3@3 ~, eb5@4 bb4@5 ~@3 bb4@4, ~ f4@2 db5@4 ~",
  G: "~@2 eb4@2 ~@2 eb4 ~@3 eb4@2 bb4 ~ eb4@2, [ab3,db5]@6 db5@4 c5 ~ ab4@4, ~@4 ab4@4 ab3@5 ~ c5 ~", // Db5
  H: "eb5 ~@2 f4 ~ f4 ~ f4, bb3@3 ~ bb3@3 ~, ~@2 f4@4 db5@7 ~@3, ~@4 bb4@5 ~@3 bb4@4",
  I: "db5@2 ~ db5!2 ~ c5@2 ~ bb4 eb4@2 ab4 ~ eb4@2, ab3@6 eb4 ~ ab3@5 ~@3, ~@2 eb4@2 ab4@5 ~ bb4 ~@3 bb4 ~",
  J: "~@3 f4 ~ f4 ~ f4, [bb3,eb5]@3 ~ bb3@3 ~, ~ f4@2 db5@4 ~, ~@4 bb4@5 ~@3 bb4@4", // Eb5
  K: "~@3 f4 ~ f4 ~ f4, bb3@3 ~ bb3@3 ~, eb5@4 bb4@5 ~@3 bb4@4, ~@2 f4@4 db5@7 ~@3",
  L: "db5@2 ~ db5 db5@2 c5@2 ~ bb4 eb4@2 ~@2 eb4@2, ab3@6 eb4 ~ ab3@5 ~@3, ~@2 eb4@2 ab4@5 ~ bb4 ~ ab4@4",
  M: "~@2 [f3,ab3,eb4] ~ [f3,ab3,eb4]@2 f3 [f3,ab3,db4]@2 ~@7", // Fm7 Db
  N: "~@2 [f3,ab3,eb4] ~ [f3,ab3,eb4]@2 f3 [gb3,ab3,db4] ~ [gb3,ab3,db4] ~ gb3 [gb3,ab3,db4] ~ [gb3,ab3,db4]@2", // Fm7 Gbsus2
  O: "~@2 [eb3,gb3,db4] ~ [eb3,gb3,db4] ~ eb3 [eb3,gb3,db4]@2 ~ [eb3,gb3,c4]@2 ~@4", // Ebm7 Cdim
  P: "~@2 [eb3,gb3,db4] ~ [eb3,gb3,db4]@2 eb3 [eb3,gb3,db4]@2 [eb3,gb3,c4] ~@2 [eb3,gb3,c4]@4", // Ebm7 Cdim
  Q: "~@2 [eb3,gb3,db4] ~ [eb3,gb3,eb4]@2 eb3 [eb3,gb3,db4]@2 [eb3,gb3,c4] ~@2 [eb3,ab3,c4]@4", // Ebm7 Ebm Ebm7 Cdim Ab
  R: "[~@2 [bb2,bb3]@2 ~ [bb2,bb3,eb4]@2 ~ [bb3,db4]@2 ~ [bb3,db4]@2 ~@2 bb2@2 ~ [ab2,ab3,db4]@2 ~ [ab2,db4]@2 ~ [ab3,c4]@2 ~ ab3@2 ~@2 ab2@2 ~ [bb2,bb3]@2 ~ [bb2,bb3,eb4]@2 ~ [bb3,db4]@2 ~ [bb3,db4]@2 ~@2 bb2@3 [ab2,ab3,db4]@2 ~ [ab2,db4]@2 ~ [ab3,c4]@2 ~ ab3@2 ~@2 ab2@2 ~ [bb2,bb3]@2 ~ [bb2,bb3,eb4]@2 ~ [bb3,db4]@2 ~ [bb3,db4]@2 ~@2 bb2@2 ~ [ab2,ab3,db4]@2 ~ [ab2,db4]@2 ~ [ab3,c4]@2 ~ ab3@2 ~@2 ab2@2 ~ [bb2,bb3]@2 ~ [bb2,bb3,eb4]@2 ~ [bb3,db4]@2 ~ [bb3,db4]@2 ~@2 bb2@3 [ab2,ab3,db4]@2 ~ [ab2,db4]@2 ~ [ab3,c4]@2 ~ ab3@2 ~@2 ab2, ~@2 eb4 ~@5 bb2 ~ bb2@2 ~ bb2@2 ~@9 ab2 ~ ab2@2 ~ ab2@2 ~@9 bb2 ~ bb2@2 ~ bb2@2 ~@9 ab2 ~ ab2@2 ~ ab2@2 ~@9 bb2 ~ bb2@2 ~ bb2@2 ~@9 ab2 ~ ab2@2 ~ ab2@2 ~@9 bb2 ~ bb2@2 ~ bb2@2 ~@9 ab2 ~ ab2@2 ~ ab2@2 ~, ~@14 [bb3,db4]@2 ~@5 ab3 ~@5 c4 ~@2 [ab3,c4]@2 ~@2 eb4 ~@11 [bb3,db4]@2 ~@5 ab3 ~@5 c4 ~@2 [ab3,c4]@2 ~@2 eb4 ~@11 [bb3,db4]@2 ~@5 ab3 ~@5 c4 ~@2 [ab3,c4]@2 ~@2 eb4 ~@11 [bb3,db4]@2 ~@5 ab3 ~@5 c4 ~@2 [ab3,c4]@2]/8", // Bb Eb5 Bbm Db5 Ab Bb Eb5 Bbm …
  S: "c5 ~ bb4 ~@3 eb3@3 ~@7, ab2@4 [ab3,ab4]@5 ~@7, ~ eb3@2 ~@5", // Ab
  T: "[db5@4 ~@4 f5@4 ~@4 eb5@4 ~@10 db5@6 ~@4 f5@4 ~@2 eb5@15 ~@3, ~@4 db5@26 ~@6 db5@23 ~@5, ~@12 f5@14 f5@14 ~@4 f5@15 ~@5, ~@10 eb5@4 eb5@9 ~@9, ~@3 ab5@4 ~]/4",
  U: "[db5@4 ~@4 f5@4 ~@4 eb5@4 ~@10 db5@6 ~@4 f5@4 ~@2 eb5@17 ~, ~@4 db5@26 ~@6 db5@27 ~, ~@12 f5@14 f5@14 ~@4 f5@19 ~, ~@10 eb5@4 eb5@9 ~@9, ~@3 ab5@4 ~]/4",
  V: "db5@3 ~ db5@3 ~ f5@3 ~ f5@3 ~",
  W: "[eb5@3 ~ eb5@3 ~ ab5 ~ f5 ~ eb5 ~ db5@4 ~@2 db5@3 ~ f5@3 ~ f5 ~ eb5@15 ~@3]/3",
  X: "gb5@3 ~ gb5@3 ~ f5@3 ~ f5@3 ~", Y: "eb5 ~ db5@2 c5@2 db5@9 ~", Z: "gb5@3 ~ gb5 ~ f5 ~ gb5@2 f5 ~ eb5@2 db5 ~",
  AA: "eb5 ab4",
  AB: "[eb5@3 ~ eb5@3 ~ ab5 ~ f5 ~ eb5 ~ db5@4 ~@2 db5@3 ~ f5@3 ~ f5 ~@11 [ab2,eb3,ab3,ab4]@8, ~@10 eb5@5 ~]/3", // Ab5
  AC: "c5 ~ bb4 ~@3 eb3@2 ab2@2 ~@4 ab2@2, ab2@4 [ab3,ab4]@5 ~ ab3@4 ~@2, ~ eb3@2 ~@3 c3@2", // Ab
  AD: "[db5@4 ~@4 f5@4 ~@4 eb5@4 ~@10 db5@6 ~@4 f5@4 ~@2 eb5@16 ~@2 db5@4 ~@4 f5@4 ~@4 eb5@4 ~@10 db5@6 ~@4 f5@4 ~@2 eb5@16 ~ eb5, ~@2 db5@13 ~@3 db5@14 ~@2 db5@13 ~@3 db5@14, ~@6 f5@7 f5@7 ~@2 f5@9 f5@5 ~@2 f5@7 f5@7 ~@2 f5@9 f5, ~@20 eb5@8 eb5@18 ~@17 eb5@17 ~@4 eb5@8 eb5@18 ~@18, ~@3 ab5@4 ~@4 ab5@4 ~]/8",
  AE: "[db5@4 ~@4 f5@4 ~@4 eb5@4 ~@10 db5@6 ~@4 f5@4 ~@2 eb5@16 f5 eb5, ~@2 db5@13 ~@3 db5@13 ~, ~@6 f5@7 f5@7 ~@2 f5@9 ~, ~@10 eb5@4 eb5@9 ~@9, ~@3 ab5@4 ~]/4",
  AF: "[eb5@3 ~ eb5@3 ~ ab5 ~ f5 ~ eb5 ~ db5@4 ~@2 db5@3 ~ f5@3 ~ f5 ~ eb5@15 ~ f5 eb5]/3",
  AG: "eb5@3 ~ eb5@3 ~ ab5 ~ f5 ~ eb5 ~ db5@2", AH: "[~@4 db5@3 ~ f5@3 ~ f5 ~ eb5@114]/8",
})).s("gm_piano").gain(0.43)

// bass · synth bass 1 · "SYN BASS 1"
const bass = note("<~@48 A B A C A B A C A B A C A B A C A B A D A B A C A B A C A B A E ~@55>".pickRestart({
  A: "gb2 bb3 db4 gb3 gb2 bb3 db4 gb3 db3 db4 f4 ab3 db3 db4 f4 ab3",
  B: "ab2 c4 eb4 ab3 ab2 c4 eb4 ab3 bb2 bb3 db4 f3 bb2 bb3 db4 f3",
  C: "ab2 c4 eb4 ab3 ab2 c4 eb4 ab3 ab2 eb4 c4 ab3 [ab2,eb4] c4 ab4 ab3", // Ab5
  D: "ab2 c4 eb4 ab3 ab2 c4 eb4 ab3 ab2 eb4 c4 ab3 [ab2,eb4] c4 ab4 ~", E: "ab2 c4 eb4 ab3 ab2 c4 eb4 ab3 ~@8",
})).s("gm_synth_bass_1").gain(0.31).pan(0.6)

// other · brass section · "BRASS 1"
const brass_section = note("<~@120 A B A C A B A D ~@7>".pickRestart({
  A: "~ e5 ~ e5 ~ b5 ~ b5", B: "~ gb5 ~ gb5 ~ ab5 ~ ab5", C: "~ gb5 ~ gb5 ~ gb5 ~ ab5", D: "eb5@15 ~",
})).s("gm_brass_section").gain(0.31).pan(0.4)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@29 A ~ B ~ A ~ C ~@43 D ~@31 E ~@3 D ~@2 D ~@16>".pickRestart({
  A: "x ~@6 x", B: "x ~@7 x ~@2 x ~@2 x ~", C: "x", D: "~ x", E: "~ x!2 ~",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~@24 A@12 B ~@3 A@8 B ~@11 A@7 B A@11 C ~@4 A@15 B A@7 B ~@12 A@7 ~@8>".pickRestart({
  A: "x!4", B: "x", C: "x!3 ~",
})).gain(0.07)

// drums · mid tom
const mid_tom = s("mt").struct("<~@28 A ~ A ~ A ~ A ~@45 B@20 ~@11 C D E@2 F D E G H ~@15>".pickRestart({
  A: "x ~@6 x", B: "x", C: "~@2 x!2 ~@2 x!3 ~@7", D: "~@3 x ~@2 x!3 ~@2 x!2 ~ x!2", E: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2",
  F: "x ~ x!3 ~ x!3 ~@7", G: "x ~ x!3 ~ x!2 ~@2 x!3 ~ x!2", H: "x!16",
})).gain(0.28)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@111 [~@14 x!2] [x!3 ~@2 x ~@2] ~@3 [x!3 ~@2 x ~@2] ~@18>").gain(0.21)

// drums · open hat
const open_hat = s("oh").struct("<~@24 A@12 ~@4 A@8 ~@12 A@7 ~ A@11 B ~@4 A@15 ~ A@7 ~@13 A@7 ~@8>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4",
})).gain(0.41)

// drums · crash
const crash = s("cr").struct(`<
  ~@28 A@8 ~@4 A@8 ~@20 A@11 B ~@4 A@15 ~@8 C D ~@2 E ~@3 E@2 F A D A@7 D ~@7
>`.pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "~@3 x", D: "x", E: "~ x", F: "x!2",
})).gain(0.21)

// drums · tambourine
const tambourine = s("tb").struct("<~@113 [~@2 x!2] ~ [~@3 x] ~@19>").gain(0.55)

stack(
  lead_2_sawtooth, piano, bass, brass_section, kick, snare, low_tom, hihat, mid_tom, mid_tom_soft, open_hat, crash,
  tambourine
)