Strudelify
KeyA minorTempo116 bpm
0:00/0:00
// Evil Woman — Electric Light Orchestra
// 116 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 "Piano (E.Piano1)" epiano1 (copy of ch 2 "Vocal  (Strings)" string ensemble 1)
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(116/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 · electric guitar muted · "Muted Gt."
const electric_guitar_muted = note(`<
  A@2 B@3 C@2 D@2 C@2 D@2 E F G H G I J K L@2 M H N O P@2 Q R S T U R S V W X Y M Z AA AB AC@2 AD@2 AE S AF@2 N AG Q R S
  T U R S V W AH AI AJ@2 N AK AL U J S Z U N AK AM@2 Q R S T U R S V W R S T U R S V W R S T U R S V W
>`.pickRestart({
  A: "[~@6 e4@14 ~@8 d#4@3 ~]/2",
  B: "[~ g4@3 ~@2 a4@6 ~@20 c4 ~ c4 ~ c4 ~ c4 ~ c4 ~ c4 ~ c4 ~ c4 ~, ~@15 e4@20 ~@13]/3",
  C: "[c4@3 ~ c4@3 ~ b3 ~ b3@3 ~ a3@5 ~ a3@3 ~ a3 ~ a3 ~ b3 ~ b3 ~]/2",
  D: "[c4@3 ~ c4@3 ~ b3 ~ b3@3 ~ a3@5 ~ a3@3 ~ b3 ~ b3@5 ~]/2", E: "~@4 c5@2 ~ b4@4 ~ g4@3 ~",
  F: "c5@3 ~ c5@7 ~ g4@3 ~", G: "~@2 c5@3 ~ b4@6 ~@2 a4@2", H: "~@2 f4 ~ f4@3 ~ g4@5 ~@3", I: "~@2 f4 ~ a4@7 ~ g4@3 ~",
  J: "~@2 c5@3 ~ b4@7 ~@3", K: "a4 ~ f4@5 ~ g4@5 ~@3", L: "[c5@4 ~@2 b4@6 ~@2 a4@5 ~ c5@7 ~ b4@3 ~]/2",
  M: "~@2 c5@5 ~ b4@4 ~@2 a4@2", N: "c5@5 ~@3 g4@5 ~@3", O: "f4@3 ~ c5@7 ~ g4@3 ~",
  P: "[c5@4 ~@2 b4@3 ~ g4@3 ~ g4@5 ~ e4@3 ~ e4 ~ e4 ~ e4 ~ e4 ~]/2", Q: "e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~ e4 ~",
  R: "~@4 c4@3 ~ d4@4 ~@2 g4 ~", S: "f4@3 ~ f4@3 ~@5 g4@3 ~", T: "~@4 d4@3 ~ d4@4 ~@2 g4 ~",
  U: "f4@3 ~ f4@3 ~ g4@5 ~@3", V: "~@4 e4 ~ d4@3 ~ b3@3 ~@3", W: "a3@3 ~ f3@3 ~@5 d4@3 ~", X: "~@4 c5 ~ b4@6 ~@2 a4@2",
  Y: "~@12 g4@3 ~", Z: "~@2 c5@5 ~ g4@5 ~@3", AA: "c5@4 ~@2 b4@7 ~@3", AB: "~@2 a4 ~ f4 ~ f4@5 ~ g4@3 ~",
  AC: "[c5@5 ~@3 b4@3 ~ g4 ~ f4@5 ~ f4@3 ~@5 g4@3 ~]/2", AD: "[c5@5 ~@3 b4@3 ~ b4@2 ~ a4@2 ~ a4@5 ~@5 g4@3 ~]/2",
  AE: "c5@4 ~@2 b4@6 ~@2 g4 ~", AF: "[~@2 c5@3 ~ g4@6 ~@2 f4@5 ~ a4@3 ~@5 g4@3 ~]/2", AG: "g4@4 ~@2 e4 ~ g4@5 ~@3",
  AH: "~@4 c5@3 ~ g4@5 ~@3", AI: "f4@4 ~@2 a4 ~@5 g4@3 ~", AJ: "[c5@5 ~@3 b4@4 ~@2 a4@5 ~ f4@3 ~ g4@5 ~@3]/2",
  AK: "f4@3 ~ a4@3 ~@5 g4@3 ~", AL: "~@2 c5@5 ~ b4@5 ~@3", AM: "[c5@4 ~@2 b4@3 ~ g4@3 ~ e5@5 ~ c5@3 ~ g4@5 ~@3]/2",
})).s("gm_electric_guitar_muted").gain(0.27).pan(0.1)

// other · electric guitar muted · "Muted Gt."
const electric_guitar_muted_2 = note(`<
  A@5 B@2 C@2 B@2 C@2 D E F G F H I J K@2 L G M N O@2 P Q R S T S U V W X@2 L Y Z AA AB@2 AC@2 AD AE AF@2 AG AH P Q R S
  T S U V W AI AJ AK@2 AL AM AN AO I AE Y AO AL AM AP@2 P Q R S T S U V W Q R S T S U V W Q R S T S U V W
>`.pickRestart({
  A: "[~@6 a#3@14 ~@8 a3@6 ~@4 a3@6 ~@20 g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~, ~@47 c4@20 ~@13]/5",
  B: "[a3@3 ~ a3@3 ~ g3 ~ g3@3 ~ f3@5 ~ f3@3 ~ f3 ~ f3 ~ g3 ~ g3 ~]/2",
  C: "[a3@3 ~ a3@3 ~ g3 ~ g3@3 ~ f3@5 ~ f3@3 ~ g3 ~ g3@5 ~]/2", D: "~@4 a4@2 ~ g4@4 ~ d4@3 ~",
  E: "a4@3 ~ a4@7 ~ d4@3 ~", F: "~@2 a4@3 ~ g4@6 ~@2 f4@2", G: "~@2 d4 ~ d4@3 ~ d4@5 ~@3", H: "~@2 d4 ~ f4@7 ~ d4@3 ~",
  I: "~@2 a4@3 ~ g4@7 ~@3", J: "f4 ~ d4@5 ~ d4@5 ~@3", K: "[a4@4 ~@2 g4@6 ~@2 f4@5 ~ a4@7 ~ g4@3 ~]/2",
  L: "~@2 a4@5 ~ g4@4 ~@2 f4@2", M: "a4@5 ~@3 e4@5 ~@3", N: "d4@3 ~ a4@7 ~ d4@3 ~",
  O: "[a4@4 ~@2 g4@3 ~ d4@3 ~ e4@5 ~ c4@3 ~ c4 ~ c4 ~ c4 ~ c4 ~]/2", P: "c4 ~ c4 ~ c4 ~ c4 ~ c4 ~ c4 ~ c4 ~ c4 ~",
  Q: "~@4 a3@3 ~ b3@4 ~@2 d4 ~", R: "c4@3 ~ c4@3 ~@5 d4@3 ~", S: "~@4 a3@3 ~ b3@4 ~@2 b3 ~",
  T: "c4@3 ~ c4@3 ~ d4@5 ~@3", U: "a3@3 ~ a3@3 ~@5 d4@3 ~", V: "~@4 c4 ~ b3@3 ~ g3@3 ~@3",
  W: "f3@3 ~ d3@3 ~@5 [g3,b3]@3 ~", X: "[~@4 a4 ~ g4@6 ~@2 f4@7 ~@7 d4@3 ~]/2", Y: "~@2 a4@5 ~ d4@5 ~@3",
  Z: "a4@4 ~@2 g4@7 ~@3", AA: "~@2 f4 ~ d4 ~ d4@5 ~ d4@3 ~", AB: "[a4@5 ~@3 g4@3 ~ e4 ~ d4@5 ~ d4@3 ~@5 d4@3 ~]/2",
  AC: "[a4@5 ~@3 g4@3 ~ g4@2 ~ f4@2 ~ f4@5 ~@5 d4@3 ~]/2", AD: "a4@4 ~@2 g4@6 ~@2 d4 ~", AE: "d4@3 ~ d4@3 ~@5 d4@3 ~",
  AF: "[~@2 a4@3 ~ d4@6 ~@2 c4@5 ~ f4@3 ~@5 d4@3 ~]/2", AG: "f4@5 ~@3 d4@5 ~@3", AH: "e4@4 ~@4 e4@5 ~@3",
  AI: "~@4 a4@3 ~ d4@5 ~@3", AJ: "c4@4 ~@2 f4 ~@5 d4@3 ~", AK: "[a4@5 ~@3 g4@4 ~@2 f4@5 ~ d4@3 ~ d4@5 ~@3]/2",
  AL: "a4@5 ~@3 d4@5 ~@3", AM: "c4@3 ~ f4@3 ~@5 d4@3 ~", AN: "~@2 a4@5 ~ g4@5 ~@3", AO: "d4@3 ~ d4@3 ~ d4@5 ~@3",
  AP: "[a4@4 ~@2 g4@3 ~ g4@3 ~ c5@5 ~ g4@3 ~ e4@5 ~@3]/2",
})).s("gm_electric_guitar_muted").gain(0.27).pan(0.1)

// bass · electric bass finger · "Fingered Bass/E.Piano1"
const bass = note("<A@5 B C B D B C B D ~@91>".pickRestart({
  A: "[~@6 c3@14 ~@8 c3@6 ~@4 d#3@6 ~@20 c2@4 ~@2 e2@5 ~ g2@3 ~, ~@47 g3@20 ~@13]/5", B: "a2@4 ~@2 a2 ~ e2@3 ~ e2@3 ~",
  C: "d2@4 ~@2 d2 ~ d2@3 ~ e2@3 ~", D: "d2@4 ~@2 d2 ~ e2@3 ~ e2@3 ~",
})).s("gm_electric_bass_finger").gain(0.32)

// other · electric guitar muted · "Fingered Bass/E.Piano1"
const electric_guitar_muted_3 = note(`<
  ~@13 A B C D C E F G H@2 I J K L M N O ~ P ~ Q ~ P ~ R S@2 I T U V W@2 X@2 Y Z AA AB K ~ O ~ P ~ Q ~ P ~ R AC AD AE@2
  K AF AG AH F Z AI AH K AB AJ@2 O ~ P ~ Q ~ P ~ R ~ P ~ Q ~ P ~ R ~ P ~ Q ~ P ~ R
>`.pickRestart({
  A: "~@4 e4@2 ~ e4@4 ~@5", B: "f4@3 ~ f4@7 ~@5", C: "~@2 e4@3 ~ e4@6 ~@2 d4@2", D: "~@2 c4 ~ c4@3 ~@9",
  E: "~@2 c4 ~ d4@7 ~@5", F: "~@2 e4@3 ~ e4@7 ~@3", G: "d4 ~ c4@5 ~@9", H: "[e4@4 ~@2 e4@6 ~@2 d4@5 ~ f4@7 ~ d4@3 ~]/2",
  I: "~@2 e4@5 ~ e4@4 ~@2 d4@2", J: "~@2 c4 ~ c4@3 ~ b3@5 ~@3", K: "e4@5 ~@11", L: "~@4 f4@7 ~@5",
  M: "e4@4 ~@2 d4@3 ~@7", N: "~@8 b3 ~ b3 ~ b3 ~ b3 ~", O: "g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~", P: "~@12 b3@3 ~",
  Q: "~@8 b3@5 ~@3", R: "~@12 e3@3 ~", S: "[~@4 e4 ~ e4@6 ~@2 c4@7 ~@11]/2", T: "~@2 f4@5 ~@9", U: "e4@4 ~@2 e4@7 ~@3",
  V: "~@2 d4 ~ c4 ~ c4@5 ~@5", W: "[e4@5 ~@3 e4@3 ~ d4 ~ c4@5 ~ c4@3 ~@5 b3@3 ~]/2",
  X: "[e4@5 ~@3 e4@3 ~ e4@2 ~ d4@2 ~ c4@5 ~@9]/2", Y: "e4@2 ~ e4@3 ~@2", Z: "c4@3 ~ c4@3 ~@5 b3@3 ~",
  AA: "~@2 e4@3 ~@11", AB: "~@4 c4@3 ~@9", AC: "~@4 e4@3 ~@9", AD: "~@6 c4 ~@9",
  AE: "[e4@5 ~@3 e4@4 ~@2 d4@5 ~ c4@3 ~ b3@5 ~@3]/2", AF: "~@4 c4@3 ~@5 b3@3 ~", AG: "~@2 e4@5 ~ e4@5 ~@3",
  AH: "c4@3 ~ c4@3 ~ b3@5 ~@3", AI: "~@2 e4@5 ~@9", AJ: "[e4@4 ~@2 d4@3 ~ d4@3 ~ a4@5 ~@5 e4@5 ~@3]/2",
})).s("gm_electric_guitar_muted").gain(0.23)

// bass · electric bass finger · "Fingered Bass"
const bass_2 = note(`<
  ~ A@4 ~@8 B C B D B C B D B C B E B C F G H I C I E J C J E B C B D B C B E B C B E B C F G H B C B E J C J E B C B E
  B C B E B C B E B C F G H K C L E J C J E B C I E J C J E L C L E J C J E
>`.pickRestart({
  A: "[~@9 f2 c3 ~ f2@7 f#2 d#3 ~ f#2@6 ~@3 c3@20 ~@13]/4", B: "a2@4 ~@2 a2 ~ e2@3 ~ e2@3 ~",
  C: "d2@4 ~@2 d2 ~ d2 ~ d2 ~ e2 ~ e2 ~", D: "d2@4 ~@2 d2 ~ e2 ~ e2@5 ~", E: "d2@4 ~@2 d2 ~ e2 ~ e2@3 ~ e2 ~",
  F: "f2@3 ~ f2@3 ~ g2@3 ~ g2@3 ~", G: "c2@11 ~@5", H: "c2@4 ~@2 e2@5 ~ g2@3 ~", I: "a2@4 ~@2 a2 ~ e2@3 ~ e2@2 ~@2",
  J: "a2@4 ~@2 a2 ~ e2@5 ~@3", K: "a2@4 ~@2 a2 ~ e2@2 ~@2 e2@2 ~@2", L: "a2@4 ~@2 a2 ~ e2@2 ~@2 e2@3 ~",
})).s("gm_electric_bass_finger").gain(0.26)

// chords · synth strings 1 · "Syn. Strings 1"
const synth_strings_1 = note("<A@5 ~@99>".pickRestart({
  A: "[~@6 a4@22 a5@19 a4@2 g4@2 a4@2 ~ c5@13 ~@13, ~@28 a4@13 ~@6 g5@22 ~@11]/5",
})).s("gm_synth_strings_1").gain(0.25)

// other · percussive organ · "Organ 2"
const percussive_organ = note(`<
  ~@38 A B A C A B A D A B A D A B E F G H I H J K I K J L M L N L M L N L M L N L M O P Q R I S J K I K J H I T J K I K
  J S I S J K I K J
>`.pickRestart({
  A: "a4@4 ~@2 a4 ~ e4@3 ~ e4@3 ~", B: "d4@4 ~@2 d4 ~ d4 ~ d4 ~ e4 ~ e4 ~", C: "d4@4 ~@2 d4 ~ e4 ~ e4@5 ~",
  D: "d4@4 ~@2 d4 ~ e4 ~ e4@3 ~ e4 ~", E: "f4@3 ~ f4@3 ~ g4@3 ~ g4@3 ~", F: "c4@11 ~@5", G: "c4@4 ~@2 e4@5 ~ g4@4",
  H: "a3@4 ~@2 a3 ~ e3@3 ~ e3@3 ~", I: "d3@4 ~@2 d3 ~ d3 ~ d3 ~ e3 ~ e3 ~", J: "d3@4 ~@2 d3 ~ e3 ~ e3@3 ~ e3 ~",
  K: "a3@4 ~@2 a3 ~ e3@5 ~@3", L: "a5@4 ~@2 a5 ~ e5@3 ~ e5@3 ~", M: "d5@4 ~@2 d5 ~ d5 ~ d5 ~ e5 ~ e5 ~",
  N: "d5@4 ~@2 d5 ~ e5 ~ e5@3 ~ e5 ~", O: "f5@3 ~ f5@3 ~ g5@3 ~ g5@3 ~", P: "c5@11 ~@5", Q: "c5@4 ~@2 e5@5 ~ g5@4",
  R: "a3@4 ~@2 a3 ~ e3@2 ~@2 e3@2 ~@2", S: "a3@4 ~@2 a3 ~ e3@2 ~@2 e3@3 ~", T: "a3@4 ~@2 a3 ~ e3@3 ~ e3@2 ~@2",
})).s("gm_percussive_organ").gain(0.21).pan(0.1)

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

// drums · snare
const snare = s("sd").struct("<~@8 A B@3 C B@7 D B@3 D B@2 ~@2 E B@7 D B@14 ~@2 E B@7 D B@14 F ~ E B@24>".pickRestart({
  A: "x ~@5 x ~ x ~ x!3 ~@3", B: "~ x ~ x", C: "~@4 x ~@2 x!2 ~ x!3 ~@3", D: "~@4 x ~@5 x!3 ~@3", E: "x ~@2 x!2 ~ x ~",
  F: "x",
})).gain(0.37)

// drums · hihat
const hihat = s("hh").struct("<~@54 [x!8] ~@24 [x!8] ~@24>").gain(0.37)

// drums · open hat
const open_hat = s("oh").struct("<[~@6 x!10] [x!16]!3 ~@100>").gain(0.37)

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

// drums · ride
const ride = s("rd").struct("<~@4 A ~@4 B@3 C B@11 D B@2 A@2 E B@22 F A ~ B@22 A ~@2 B@24>".pickRestart({
  A: "x", B: "x!4", C: "x!2 ~@2", D: "x!3 ~", E: "x ~@2 x!2 ~ x ~", F: "x!2",
})).gain(0.37)

// drums · cowbell
const cowbell = s("cb").struct("<~@30 [x!4]!8 ~@17 [x!4]!8 ~@17 [x!4]!24>").gain(0.37)

stack(
  electric_guitar_muted, electric_guitar_muted_2, bass, electric_guitar_muted_3, bass_2, synth_strings_1,
  percussive_organ, kick, snare, hihat, open_hat, crash, ride, cowbell
)

More by Electric Light Orchestra