Strudelify

Lady

Styx

KeyF majorTempo127 bpm
0:00/0:00
// Lady — Styx
// 127 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 86 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Staff-9.
setcpm(127/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 · piano · "Staff-2"
const piano = note("<A@2 B@2 C@2 D@2 A@2 E@2 F@2 G@2 A@2 E@2 F@2 H I A@2 E@2 F@2 G@2 A@2 E@2 F@2 J ~@47>".pickRestart({
  A: "[g5@4 gb5@5 d6@2 a5@2 gb5 a5 d5]/2", B: "[gb5 g5 gb5 e5@6 c6@9 b5@9 a5@9 g5@6 gb5@6]/2",
  C: "[g5@3 d6 gb5@2 d6@5 a5@2 gb5 a5 d5]/2", D: "[gb5 g5 gb5 e5@6 c6@9 a5@3 b5@6 d6 a5@2 g5@3 d5@3 a4@6 d5@3 a4@3]/2",
  E: "[gb5 g5 gb5 e5@6 c5@12 d6@6 c7@9 c6@6 g5@6]/2", F: "[g5@3 gb5@3 gb5 d6@4 a5@2 gb5 a5 d5]/2",
  G: "[gb5 g5 gb5 e5@6 c6@9 a5@3 b5@6 d7 a6@2 g6@3 d6@3 a5@6 d6@3 a5@3]/2", H: "d5 b5@2 g5 g6 d6 b5 g5",
  I: "d6 bb5 f5!2 e6 db6 a5!2", J: "[g4,b4,d5] [g4,b4,d5]@3 [g4,b4,d5] [g4,b4,d5]@3",
})).s("gm_piano").gain(0.56).pan(0.7)

// chords · french horn · "Staff-5"
const french_horn = note(`<
  ~@8 A B C@2 D E F ~ A B G@2 D H I ~ A B J@2 D E F ~ A B J@2 D H I K L@2 M@2 L@2 N@2 L@2 O@2 P ~ A B J@2 D E F ~ A B
  J@2 D H I ~ L@2 M@2 L@2 N@2 L@2 O@2 P ~ Q@2
>`.pickRestart({
  A: "gb5 g5@11 gb5@12", B: "~ d5 e5 gb5 e5 d5", C: "[d5 e5@11 c5@15 ~@21]/2", D: "c5 d5@3 d5@4",
  E: "gb5 g5 gb5 g5 gb5 g5 gb5 g5", F: "gb5 e5@7", G: "[d5 e5@11 c5@18 ~@18]/2", H: "~ a4 b4 c5 b4 c5", I: "d5",
  J: "[d5 e5@11 c5@24 ~@12]/2", K: "[bb4,d5,f5] [a4,db5,e5]",
  L: "[[a4,d5,g5]@2 [a4,d5,gb5]@4 [a4,d5,g5] [a4,d5,gb5]]/2", M: "[[g4,c5,e5] [e5,g5,c6]@2 ~]/2",
  N: "[[g4,c5,e5]@3 d5 [e4,g4,c5]@6 ~@6]/2", O: "[[g4,c5,e5]@2 [c5,e5,g5]@4 [g4,c5,e5]!2]/2",
  P: "[a4,d5,g5] [a4,d5,gb5]", Q: "[~ [a4,d5,g5]@12 [a4,d5,gb5]@25 ~@10]/2",
})).s("gm_french_horn").gain(0.72)

// bass · electric bass finger · "Staff-6"
const bass = note(`<
  ~@23 A B@2 C@2 B@2 C@2 B@2 C@2 B@2 D E F@2 G@2 F@2 G@2 F@2 G@2 H E F@2 G@2 F@2 G@2 F@2 G@2 H I J K L@2 M N L@2 M N L@2
  M N L O@3
>`.pickRestart({
  A: "bb2@4 a2@2 e2 eb2", B: "[d2@12 a2@3 b2@3 d3@18 d3@4 b2@4 gb2@4]/2", C: "[c2@4 g2 a2 c3@4 d3@2 c3 a2 e2@2]/2",
  D: "g2@3 g2 g2@4", E: "bb2!4 a2!4", F: "[c3 d3!2 c3 d3@2 c3 d3@2 c3 d3@2 c3@2 d3@2]/2",
  G: "[bb2 c3!2 bb2 c3@2 bb2 c3@2 bb2 c3@4 g2 a2]/2", H: "c3 d3!2 c3 d3@2 d3 c3", I: "c3 d3!2 c3 d3@2 c3 d3", J: "g2!8",
  K: "bb2 a2", L: "d2@3 d2!3 d2@3 d2!3", M: "c2@3 c2!3 c2@3 c2!3", N: "c2@3 c2!9",
  O: "[bb1@6 bb1@2 bb1@2 bb1@2 a1@6 a1@2 a1@2 ~ a1@2 d2@12 d2@25 ~@10]/3",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · acoustic guitar steel · "Staff-7"
const acoustic_guitar_steel = note(`<
  ~@24 A B C D A B C D A B C E A B F ~ G@2 C D A B C D A B C D A ~ A B C D A B C D A B C D A B H I J@2 K@2 J@2 K@2 J@2
  K@2 J I L@2
>`.pickRestart({
  A: "[gb4,a4,d5]!2 ~ [gb4,a4,d5]!2 ~ [gb4,a4,d5]!2", B: "~ [gb4,a4,d5]!2 ~ [gb4,a4,d5] ~ [gb4,a4,d5] ~",
  C: "[e4,g4,c5]!2 ~ [e4,g4,c5]!2 ~ [e4,g4,c5]!2", D: "~ [e4,g4,c5]!2 ~ [e4,g4,c5] ~ [e4,g4,c5] ~",
  E: "~ [e4,g4,c5]!2 ~ [e4,g4,c5] ~ [e4,g4,c5]@2", F: "[g4,b4,d5]@3 [g4,b4,d5] [g4,b4,d5]@4",
  G: "[gb4,a4,d5] ~ [gb4,a4,d5]!2 ~ [gb4,a4,d5] ~ [gb4,a4,d5]", H: "[g4,b4,d5]", I: "[bb4,d5,f5] [a4,db5,e5]",
  J: "[gb4,a4,d5]@3 [gb4,a4,d5]!3 [gb4,a4,d5]@3 [gb4,a4,d5]!3", // D
  K: "[e4,g4,c5]@3 [e4,g4,c5]!3 [e4,g4,c5]@3 [e4,g4,c5]!3", L: "[~ [a4,d5,g5]@12 [a4,d5,gb5]@25 ~@10]/2",
})).s("gm_acoustic_guitar_steel").gain(0.08)

// chords · string ensemble 1 · "Staff-8"
const string_ensemble_1 = note(`<
  ~@39 A B@2 C@2 B@2 C@2 B@2 C@2 D E B@2 C@2 B@2 C@2 B@2 C@2 B@2 F G B@2 C@2 B@2 C@2 B@2 C@2 D A H@2
>`.pickRestart({
  A: "[bb3,d4,f4] [a3,db4,e4]", B: "[a3,d4,gb4]/2", C: "[g3,c4,e4]/2", D: "[a3,d4,gb4]", E: "[bb4,d5,f5] [a4,db5,e5]",
  F: "[g3,b3,d4]", G: "[d4,f4,bb4] [e4,a4,db5]", H: "[~ [a3,d4,gb4]@38 ~@9]/2",
})).s("gm_string_ensemble_1").gain(0.48)

// chords · string ensemble 1 · "Staff-8" · soft notes
const string_ensemble_1_soft = note("<~@24 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C ~@47>".pickRestart({
  A: "[a3,d4]/2", B: "[g3,e4]/2", C: "[g3,b3,d4]",
})).s("gm_string_ensemble_1").gain(0.08)

// chords · overdriven guitar · "Staff-9"
const overdriven_guitar = note("<~@39 A B@2 ~@11 A C D E@2 F D G@2 C D E@2 F D H I ~@16>".pickRestart({
  A: "[bb3,d4,f4] [a3,db4,e4]", B: "~ [gb3,a3,d4] ~@2 [gb3,a3,d4] ~ [gb3,a3,d4] ~", C: "g4 ~", D: "~@3 a4@2 gb4 ~ d4",
  E: "[gb4 g4 gb4 ~@18 d5@6 ~@21]/2", F: "g4@3 ~@5",
  G: "[gb4 g4 gb4 ~@15 a4@3 b4@6 ~ a4 ~@4 d4@3 a3@6 d4@3 a3@3, ~@27 d5@2 ~@19]/2", H: "~ b4@2 g4!2 d4 b3 g3",
  I: "~ bb3 f3!2 ~ db4 a3 e3",
})).s("gm_overdriven_guitar").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@38 A B C D C D C D C D C D C D C B C D C D C D C D C D C D C D C B E F E G E F E G E F E G E B H ~
>`.pickRestart({
  A: "x!8", B: "x!2", C: "x ~@2 x!2 ~@2 x", D: "x!2 ~ x!2 ~@2 x", E: "x ~@2 x!4 ~@2 x!3", F: "x ~@2 x!4 ~@2 x ~@2",
  G: "x ~@3 x!3 ~@2 x ~@2", H: "~ x ~@11 x ~@10",
})).gain(0.56)

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

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

// drums · hihat
const hihat = s("hh").struct("<~@8 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 B@29 ~ C@13 D E ~>".pickRestart({
  A: "~@23 x", B: "x!3 ~ x!3 ~", C: "x ~@2 x!4 ~@2 x!3", D: "x ~@2 x!4 ~@5", E: "~ x ~@11 x ~@10",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@39 A B@3 C B@3 C B@3 C B D B C B@3 C B E B@3 C B@3 F ~ G ~ H ~ G ~ H ~ G ~ H ~ I ~@2
>`.pickRestart({
  A: "~@7 x ~ x ~@6 x ~@3 x ~@3", B: "~@7 x", C: "~@15 x ~@2 x!2 ~@4", D: "~@6 x!2 ~ x ~@2 x!2 ~ x ~@5 x ~@2",
  E: "~@6 x ~@8 x ~@2 x!2 ~@4", F: "~@3 x!3 ~@2 x ~@3", G: "~@7 x!4 ~", H: "~@4 x!2 ~ x!4 ~", I: "~@8 x!2 ~@2",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@40 A@3 B A@3 B A@3 B A@3 B A@3 B A B A@3 B A@3 ~@14 C D ~>".pickRestart({
  A: "~@3 x ~@4", B: "~@3 x ~@3 x", C: "~@5 x", D: "~ x ~@11 x ~@10",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@39 A ~@3 B ~@3 B ~@3 B ~ C ~ B ~@3 B ~ D ~@3 B ~@3 E ~ F ~ G ~ F ~ G ~ F ~ G ~ F ~@2
>`.pickRestart({
  A: "x!3 ~ x ~@3", B: "~@12 x!2 ~@10", C: "x!2 ~ x ~@20", D: "x ~@2 x!2 ~@7 x!2 ~@10", E: "x!3 ~@3 x ~@5", F: "~ x",
  G: "~ x!2 ~",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@38 A B@2 C B A B C B A B C B A B C B A B C B A B A B C B A B C B A B@14 D ~
>`.pickRestart({
  A: "x", B: "x!2", C: "~ x ~@2 x ~ x ~", D: "~ x ~@11 x ~@10",
})).gain(0.48)

// drums · bongos
const bongos = s("bongo:4").struct("<~@37 x ~@48>").gain(1.05)

// drums · triangle
const triangle = s("triangles:35").struct("<~@9 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@52>".pickRestart({
  A: "x",
})).gain(3.48)

stack(
  piano, french_horn, bass, acoustic_guitar_steel, string_ensemble_1, string_ensemble_1_soft, overdriven_guitar, kick,
  snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, bongos, triangle
)

More by Styx