Strudelify

Stagger Lee

Price Lloyd

KeyE♭ majorTempo135 bpm
0:00/0:00
// Stagger Lee — Price Lloyd
// 135 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 99 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(135/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@7 A B C D E C F G H I J K L C M N O I J K L C M N O I J K L C M N O I J K L C M N O I J K L C M N O I J K L C M N O
  I J K L C M N O I J K L C M N O I J K L C M N O I J K L C M N P Q@3
>`.pickRestart({
  A: "~@4 bb1@2 bb2@2 bb1 ~ bb2@2 bb1@2 bb2@2 bb1@2 bb2@2 bb1@4", B: "eb2@5 ~ eb2@5 ~ eb2@5 ~ eb2@4 ~@2",
  C: "eb2@5 ~ eb2@5 ~ eb2@5 ~ eb2@5 ~", D: "ab1@5 ~ ab1@5 ~ ab1@4 ~@2 ab1@4 ~@2",
  E: "ab1@4 ~@2 ab1@5 ~ ab1@5 ~ ab1@5 ~", F: "bb1@5 ~ bb1@4 ~@2 bb1@5 ~ bb1@5 ~", G: "eb2@5 ~ eb2@5 ~ eb2@4 ~@2 eb2@6",
  H: "~@4 bb1 ~ bb1@2 ~@2 bb1 ~ bb1@2 ~@2 bb1 ~ bb1@2 ~@2 bb1 ~", I: "eb2@5 ~ eb2@4 ~@2 eb2@4 ~@2 eb2@4 ~@2",
  J: "eb2@5 ~ eb2@4 ~@2 eb2@5 ~ eb2@5 ~", K: "ab1@5 ~ ab1@4 ~@2 ab1@5 ~ ab1@4 ~@2",
  L: "ab1@4 ~@2 ab1@4 ~@2 ab1@4 ~@2 ab1@5 ~", M: "bb1@5 ~ bb1@4 ~@2 bb1@4 ~@2 bb1@5 ~",
  N: "eb2@5 ~ eb2@4 ~@2 eb2@5 ~ eb2@6", O: "~@4 bb1 ~ bb1@2 ~@2 bb1 ~ bb1 ~@3 bb1 ~ bb1 ~@3 bb1 ~",
  P: "bb1@3 ~ b1@3 ~ c2@3 ~ db2@3 ~ c2@3 ~ db2@3 ~", Q: "[eb2@25 ~@11]/3",
})).s("gm_acoustic_bass").gain(0.64)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A@2 B@2 C D E F G@2 H I J@2 K L@2 M N@3 O P Q R M N@3 O P Q R M N@3 O P Q R M N@3 O P Q R M N@3 O P Q R M N@3 O P Q R
  M N@3 O P Q R M N@3 O P Q R M N@3 O P Q R M N@3 O P S T@3
>`.pickRestart({
  A: "[~@11 eb4, [eb2,eb3,g4]@20 [f4,bb4] f3@3, eb4@3 g3, bb4@5 bb4 eb5@6, ~ bb3@2]/2", // Eb Bb5
  B: "[c4@2 ~ g4, [c3,bb3,eb4], g4@3 ~, ~ c4]/2", C: "[ab2,ab3,c4,eb4]", D: "[bb2,f3,bb3,d4,f4]@23 ~",
  E: "[eb2,eb3,bb3,eb4,g4,bb4]", // Eb
  F: "~@4 [bb2,f3,bb3,d4,f4] ~ [bb2,f3,bb3,d4,f4] ~@3 [bb2,f3,bb3,d4,f4] ~ [bb2,f3,bb3,d4,f4] ~@3 [bb2,f3,bb3,d4,f4] ~ [bb2,f3,bb3,d4,f4]@3 ~@3", // Bb
  G: "[[eb3,eb4,g4,bb4]@4 [eb3,bb3] ~ [f4,ab4,bb4] ~ [eb3,bb3] ~@5 [eb4,g4,bb4]@2 [eb3,bb3] ~ [f4,ab4,bb4]@2 [eb3,bb3] ~@5 [eb4,g4,bb4]@2 [eb3,bb3] ~ [f4,ab4,bb4]@2 [eb3,bb3] ~@3 [eb3,bb3]@2 [eb4,g4] ~ bb3@2 ~@2 [eb3,bb3]@4, bb3 ~@4 [eb4,g4,bb4]@2 ~@4 [eb4,g4,bb4]@2 ~@4 [eb4,g4,bb4]@2 bb4 ~ [f4,ab4,bb4]@3, ~@12 [eb3,bb3]@4 ~@8 [eb3,bb3]@4 ~@12 eb3 ~@7]/2", // Eb Eb5 Bb7 Eb5 Eb Eb5 Bb7 Eb5 …
  H: "[ab3,c4,eb4]@2 ab2 ~@2 ab2 [ab3,c4,eb4] ~ ab3 [ab3,db4,f4]@2 [gb3,c4,eb4], ~@6 [ab3,db4,f4]@6 ~@2 ab2@9 ~, ~@8 [c4,eb4]@3 ~", // Ab Db Cdim Db Cm
  I: "~@4 ab2@2 [gb3,c4,eb4] ~@15 [gb3,c4,eb4]@2, ab2 ~@2 ab2!3, ~ [gb3,c4,eb4]@2 ~@2 [gb3,c4,eb4]@2 [gb3,c4,eb4]@2 [gb3,c4,eb4]@2 ~", // Cdim
  J: "[[eb4,g4,bb4]@4 ~@2 [eb4,g4,bb4]@4 [eb3,bb3] ~@7 [eb4,g4,bb4]@4 f3@2 ~@6 [ab3,d4,f4]@4 ~@6 [ab3,d4,f4]@2 ~@4 [g3,bb3]@2, [eb3,bb3]@10 ~@2 [eb4,g4,bb4]@6 ~@4 bb2@13 ~ [bb2,f3]@12, ~@16 [eb3,bb3]@6 d3 ~ [ab3,d4,f4]@6 ~@4 [ab3,d4,f4]@6 ~@2 [ab3,d4,f4]@6, ~@28 f3@7 ~@13]/2", // Eb Eb5 Eb Ddim Gm Eb5 Eb Bb5 …
  K: "~@6 [eb4,g4,bb4]@4 bb3@2 ~@6 [eb4,g4,bb4]@5 ~, eb3@7 ~, [eb4,g4]@2 ~@2 [f4,ab4]@3 ~, ~@2 bb3@3 ~ bb4@3 ~@3, ~@16 bb3@5 ~@3", // Eb Fm
  L: "[~@4 [bb2,f3,bb3,d4,f4] ~ [bb2,f3,d4,f4] ~@3 [bb2,f3,bb3,d4,f4] ~ [bb2,f3,bb3,d4,f4] ~@3 [bb2,f3,bb3,d4,f4] ~ [bb2,f3,bb3,d4,f4]@3 ~ bb3@2 [eb3,bb3]@2 [eb4,bb4] ~ [eb3,bb3] ~@5 [eb4,g4,bb4]@2 [eb3,bb3] ~ [eb4,g4,bb4] ~ [eb3,bb3] ~ [f4,ab4,bb4]@4 [eb4,g4,bb4]@2, ~@3 bb3 ~@7 [d4,f4]@2 g4 ~ [f4,ab4]@3 ~@6, ~@15 bb4@2 ~@7, ~@8 [eb3,bb3] ~@3]/2", // Bb Eb5 Eb Eb5 Eb Eb5 Bb7 Eb …
  M: "[eb3,bb3] ~@7 [eb3,bb3]@2 [db4,g4,bb4]@2 [eb3,bb3] ~@7 [eb3,bb3]@4, ~@2 [eb4,g4,bb4]@4 [eb4,g4,bb4]@5 ~@3 [db4,g4,bb4]@4 [db4,g4,bb4]@6, ~ [eb3,bb3] ~@2 [eb3,bb3] ~", // Eb5 Gdim Eb5 Eb Gdim Eb5
  N: "[[gb3,c4,eb4]@3 ~@7 eb3@2 [ab3,c4,eb4]@2 ~@8 eb3@2 [gb3,c4,eb4]@3 ~@5 [gb3,c4,eb4]@2 eb3@2 [ab3,c4,eb4]@4 ~@20 [eb4,g4,bb4]@4 ~@6 f3@2, ~@4 [gb3,c4,eb4]@4 [gb3,c4,eb4]@5 ~@3 [ab3,c4,eb4]@4 [ab3,c4,eb4]@4 ~@4 [gb3,c4,eb4]@4 ~@8 [ab3,c4,eb4]@4 [ab3,c4,eb4]@4 [eb4,g4,bb4]@4 ~@2 [f4,ab4,bb4]@6 ~@6 [f4,ab4,bb4]@6, ~ ab2@7 ~@4, ~@9 eb3@2 ~@4 eb3@2 ~@4 eb3@2 eb3@6 eb3@7, ~@23 bb3@2 bb3@4 bb3@2 ~ bb3@4]/3", // Cdim Ab Cdim Ab Eb Cdim Ab Cdim …
  O: "[bb3,d4,f4]@2 f3 [c4,eb4,f4]@2 [bb3,d4,f4]@3 ~ [bb3,d4,f4]@2 bb3, bb2@22 g3 ~, ~@16 f3@7 ~", // Bb F7 Bb
  P: "[eb4,g4]@4 ~@2 [f4,ab4]@5 ~ [eb4,g4,bb4]@4 ~@2 [f4,ab4,bb4]@4 [eb4,g4,bb4] ~, eb3@23 ~, ~@4 bb3@8 ~@4 bb3@7 ~", // Eb Fm Eb Bb7 Eb
  Q: "~@4 [bb2,f3,bb3,d4,f4] ~ [bb2,f3,d4,f4] ~@3 [bb2,f3,bb3,d4,f4] ~ [bb2,f3,d4] ~@3 [bb2,f3,bb3,d4,f4] ~ [bb2,f3,bb3,d4,f4] ~@3 [bb2,f3,bb3,d4,f4] ~, ~@3 bb3 ~@2 [bb3,f4] ~@5", // Bb Bb5
  R: "[eb3,bb3] ~ [eb4,bb4] ~ [eb3,bb3] ~@5 [eb4,g4,bb4]@2 [eb3,bb3] ~ [eb4,g4,bb4] ~ [eb3,bb3] ~ [f4,ab4,bb4]@4 [eb4,g4,bb4]@2, ~ g4 ~ [f4,ab4]@3 ~@6, ~@3 bb4@2 ~@7, ~@2 [eb3,bb3] ~@3", // Eb5 Eb Eb5 Eb Eb5 Bb7 Eb Fm …
  S: "bb2@3 ~ b2@3 ~ c3@3 ~ db3@3 ~ c3@3 ~ db3@2 ~@2", T: "[[eb3,g3,bb3]@3 ~]/3",
})).s("gm_piano").gain(0.47)

// chords · brass section · "BRASS 1"
const brass_section = note(`<
  ~@7 A B C D E F G H I B C D E F G H I B C D E F G H I B C D E F G H I ~@7 J B C D E F G H I B C D E F G H I B C D E F
  G H I K L M N O P L Q K L M N O P L Q K L M N O P L R S@3
>`.pickRestart({
  A: "~@4 bb4 ~ bb4 ~@3 bb4 ~ bb4 ~@3 bb4 ~ bb4 ~@3 bb4 ~", B: "~@6 [db4,ab4,c5]@5 ~ [db4,g4,bb4]@12",
  C: "~ [db4,ab4,c5] [db4,g4,bb4]@2", D: "~ [db5,f5] [gb4,c5,eb5]@2, ~@3 gb4@2 ~@7",
  E: "~@6 [gb4,db5,f5]@6 [c5,eb5]@11 ~, ~@4 gb4@3 ~", F: "~@6 [db4,ab4,c5]@5 ~ [db4,g4,bb4]@11 ~",
  G: "~@6 [ab4,eb5,g5]@5 ~ [ab4,d5,f5]@10 ~@2", H: "~@6 [db4,ab4,c5]@5 ~ [db4,g4,bb4]@10 ~@2",
  I: "~@4 [bb3,bb4,d5,f5] ~ [bb4,d5,f5]@2 ~@2 [bb3,bb4,d5,f5] ~ [bb3,bb4,d5] ~@3 [bb3,bb4,d5,f5] ~ [d5,f5]@2 ~@2 [bb3,bb4,d5] ~, ~@6 bb3 ~@5 f5@2 ~@4 [bb3,bb4] ~@3 f5@2", // Bb Dm Bb
  J: "~@4 [d5,f5,bb5] ~ [f5,bb5]@2 ~@2 [d5,f5,bb5] ~ [f5,bb5]@2 ~@2 [d5,f5,bb5] ~ [f5,bb5]@2 ~@2 [d5,f5] ~, ~@6 d5 ~@5 d5 ~@5 d5 ~@3 bb5@2", // Bb Bb5 Bb Bb5 Bb Bb5 Dm
  K: "[g4,bb4,eb5]@4 ~@2 [g4,bb4,eb5]@3 ~ [g4,bb4,eb5] ~ [g4,bb4,eb5]@2 ~@10", // Eb
  L: "[g4,bb4,eb5]@4 ~@2 [g4,bb4,eb5]@2 ~@2 [g4,bb4,eb5] ~ [g4,bb4,eb5]@2 ~@10", // Eb
  M: "[gb4,bb4,eb5]@4 ~@2 [gb4,bb4,eb5]@3 ~ [gb4,bb4,eb5] ~ [gb4,eb5]@2 ~@10, ~@12 bb4 ~@11", // Ebm
  N: "[gb4,bb4,eb5]@5 ~ [gb4,bb4,eb5]@3 ~ [gb4,bb4,eb5] ~ [gb4,bb4,eb5]@2 ~@10", // Ebm
  O: "[g4,bb4,eb5]@5 ~ [g4,bb4,eb5]@3 ~ [g4,bb4,eb5] ~ [g4,bb4,eb5]@2 ~@10", // Eb
  P: "[bb4,d5,f5]@5 ~ [bb4,d5,f5]@2 ~@2 [bb4,d5,f5] ~ [bb4,d5]@2 ~@10, ~@12 f5 ~@11", // Bb
  Q: "~@4 [bb4,d5,f5] ~ [d5,f5]@2 ~@2 [bb4,d5,f5] ~ [bb4,d5] ~@3 [bb4,d5,f5] ~ [bb4,d5] ~@3 [bb4,d5,f5] ~, ~@6 bb4 ~@5 f5@2 ~@4 f5@2 ~@4", // Bb Dm Bb
  R: "[gb4,gb5] ~ [f4,f5] ~ [eb4,eb5] ~ [db4,db5] ~ [c4,c5] ~ [bb3,bb4] ~", S: "[eb5@17 ~@7, g4@49 ~@23, bb4@7 ~@17]/3",
})).s("gm_brass_section").gain(0.45)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  A@5 B@2 C D@2 E@2 F G H I J@2 K@2 L M N O J@2 K@2 L M N O J@2 K@2 L M N O J@2 K@2 L M N O J@2 K@2 L M N O J@2 K@2 L M
  N O J@2 K@2 L M N O J@2 K@2 L M N O J@2 K@2 L M N O J@2 K@2 L M N ~ P@3
>`.pickRestart({
  A: "[[bb5,eb6]@16 [c5,eb5]@15 ~ [eb5,ab5]@8, g5@94 [ab4,c5]@25 ~, ~@24 c6@23 ~@13]/5", // Eb5 Cm Ab5 Ab
  B: "[[d5,f5]@23 ~ [eb5,g5]@24, bb5@47 ~]/2", // Dm Eb
  C: "~@4 [bb3,f4,bb4,d5,f5] ~ [bb3,bb4,d5,f5] ~@3 [bb3,f4,bb4,d5,f5] ~ [bb3,f4,bb4,d5,f5] ~@3 [bb3,f4,bb4,d5,f5] ~ [bb3,f4,bb4,d5,f5] ~@3 [bb3,f4,bb4,d5,f5] ~, ~@3 f4 ~@8", // Bb
  D: "[[g4,bb4,eb5]@23 ~]/2", E: "[[ab4,eb5]@47 ~, c5@15 ~]/2", F: "[g4,bb4,eb5]@23 ~", G: "[f4,bb4,d5]@23 ~",
  H: "[g4,bb4,eb5]", // Eb
  I: "~@4 [bb4,d5,f5] ~ [bb4,d5] ~@3 [bb4,d5,f5] ~ [bb4,d5] ~@3 [bb4,d5,f5] ~ [bb4,d5] ~@3 [bb4,d5,f5] ~, ~@3 f5 ~@2 f5 ~@2 f5 ~@2", // Bb
  J: "[[bb4,eb5,g5]@47 ~]/2", K: "[[c5,eb5,ab5]@23 ~]/2", L: "[bb4,eb5,g5]@23 ~", M: "[bb4,d5,f5]@11 ~",
  N: "[bb4,eb5,g5]", // Eb
  O: "~@4 [bb4,d5,f5] ~ [bb4,d5,f5] ~@3 [bb4,d5,f5] ~ [bb4,d5,f5] ~@3 [bb4,d5,f5] ~ [bb4,d5,f5] ~@3 [bb4,d5,f5] ~", // Bb
  P: "[[eb5,g5,bb5,db6]@17 ~@7]/3", // Eb7
})).s("gm_rock_organ").gain(0.47)

// drums · kick
const kick = s("bd").struct("<~@7 [~@8 x!4] [x ~@4 x!2 ~ x ~@2 x]!87 [x!6] x ~@2>").gain(0.8)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@7 A ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@11
>`.pickRestart({
  A: "~@2 x ~@2 x ~@2 x ~@2 x", B: "~@2 x ~@2 x ~@2 x ~@3",
})).gain(0.24)

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

// drums · open hat
const open_hat = s("oh").struct("<~@95 x ~@3>").gain(0.8)

// drums · crash
const crash = s("cr").struct("<~@96 x ~@2>").gain(0.8)

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

stack(bass, piano, brass_section, rock_organ, kick, snare, snare_soft, hihat, open_hat, crash, ride)

More by Price Lloyd