Strudelify

Wasted Years

Iron Maiden

KeyG majorTempo152 bpm
0:00/0:00
// Wasted Years — Iron Maiden
// 152 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 186 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(152/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 · distortion guitar · "Guitar 1"
const distortion_guitar = note(`<
  A B C D A B C D A B C D A B E F@2 ~@36 G H I J K L H L G H M N ~@20 G H I J K L H L G H M N A B C D A B C D A B C D A
  B C D A B C D A B C D A B O@2 P Q R S T U@3 V W X Y Z AA@2 AB@2 AC@3 AD AE AF AG AH AI AE AI AD AE AJ AK ~@4 AD AE AF
  AG AH AI AE AI AD AE AJ AK A B C D A B C D A B AL@3
>`.pickRestart({
  A: "e6@2 e5!4 b5@2 e5!4 c6@2 e5!2", B: "e5!2 a5@2 e5!4 b5 e5!3 g5 e5!3", C: "a5@2 e5!4 f#5@2 e5!4 g5@2 e5!2",
  D: "e5!2 a5@2 e5!4 f#5@2 e5!2 g5 e5!3", E: "a5 e5!5 f#5 e5!5 e5@2 a5@2", F: "[d6@31 ~]/2", G: "[e3,e4,b4,e5]@15 ~",
  H: "[d4,a4,d5]@15 ~", I: "g5@3 ~ d5@2 c5@5 ~ g5@3 ~", J: "d5@2 c5@5 ~ [c5,d5,g5]@2 [c5,d5,g5]@2 [c5,d5,g5]@3 ~",
  K: "[g3,d4,g4]@15 ~", L: "[c4,g4,c5]@7 ~ [a3,e4,a4]@7 ~", M: "[g4,c5] [d5,g5]!2 [g4,c5] [d5,g5]!2 [g4,c5] [d5,g5]",
  N: "[d5,g5] [g4,c5] [d5,g5]!2 [g4,c5] [d5,g5] [d4,f#4]!2", // G5 C5 G5 C5 G5 D
  O: "[e5@2 e5@2 e5@2 e5@2 e5@2 [e5,f#5]@2 e5@2 e5@2 e5@2 [e5,a5]@2 e5@2 [e5,a5]@2 b5@2 e5@2 b5@2 b5!2, ~@3 f#5@2 ~ g5@3 ~@7]/2", // Esus2 A5
  P: "a5 b5 g5 b5 g5 b5 a5 b5 g5 b5 g5 b5 a5 b5 g5 b5", Q: "g5 b5 a5 b5 g5 b5 g5 b5 a5 b5 g5 b5 g5 b5 g5@2",
  R: "g5@3 f#5@2 e5@3 d5@3 e5@2 f#5@3", S: "e5@11 ~ [b4,e5]@2 d6@2", T: "e6!2 d6 b5 a5 b5@2 e6 d6 b5 d6 e6!2 d6 b5 a5",
  U: "[b5!2 d6 b5 d6 e6 d6 b5 f#6@2 g6@3 ~ f#6 g6@4 ~ f#6 g6@2 [f#6,g6]@2 g6@3 f#6 e6 c6@16 g6@2]/3", // Gmaj7
  V: "f#6 g6 e6 [b5,g6] e6 g6 f#6 g6 e6 g6 e6 g6 f#6 g6 e6 g6", W: "e6 g6 f#6 g6 e6 g6 e6 g6 f#6 g6 e6 g6 e6 g6 f#6 g6",
  X: "e6 g6 e6 g6 f#6 g6 e6 g6 e6 g6 f#6 [f#6,g6] e6 g6 e6 [f#6,g6]", Y: "g6 e6 g6 e6 g6 e6@5 b5@2 e6@2 e6@2",
  Z: "f#6 g6 e6 f#6 g6 e6 c6 d6 b5 c6 a5 b5 g5 a5 f#5 g5",
  AA: "[e5 f#5 d5 e5 c5 d5 b4@5 ~@3 d#6 e6@2 d#6 f#6@2 g6@2 e6@2 f#6@2 g6@2 a6 g6 ~ a6]/2",
  AB: "[b6 a6 ~ b6 c7 b6 ~ c7 e7@3 ~ d7 c7 d7@13 c7@2 b6@3]/2", AC: "[c7@3 d7@2 c7@3 b6@3 g6@2 d6@34 ~]/3",
  AD: "[e4,e5,b5,e6]@15 ~", AE: "[d5,a5,d6]@15 ~", AF: "g6@3 ~ d6@2 c6@5 ~ g6@3 ~",
  AG: "d6@2 c6@5 ~ [c6,d6,g6]@2 [c6,d6,g6]@2 [c6,d6,g6]@3 ~", AH: "[g4,d5,g5]@15 ~",
  AI: "[c5,g5,c6]@7 ~ [a4,e5,a5]@7 ~", AJ: "[g5,c6] [d6,g6]!2 [g5,c6] [d6,g6]!2 [g5,c6] [d6,g6]",
  AK: "[d6,g6] [g5,c6] [d6,g6]!2 [g5,c6] [d6,g6] [d5,f#5]!2", // G5 C5 G5 C5 G5 D
  AL: "[e5@5 ~ d5@4 e5 d5 c5@6 b4@5 ~ a4@2 g4@2 e4@6 [e3,b3,e4]@13 ~]/3", // E5
})).s("gm_distortion_guitar").gain(0.11).pan(0.8)

// chords · distortion guitar · "Guitar 2"
const distortion_guitar_2 = note(`<
  ~@8 A@7 B@2 C D E F C D G@2 H@2 I D E J K@2 I D L F C D M@2 N@2 O P Q J R@2 S T U T V U W X Y Z AA AB AC U W@2 I D L F
  C D M@2 N@2 O P Q J R@2 S T U T V U W X Y Z AA AB AC U W@2 AD@8 AE@2 AF AG AH AI AH AI AJ AK AL AM AH AI AH AI AJ AK
  AN AO C AI AH AP AJ AQ AN AM C AI AH AP AJ AQ AN AM S T U T V U W X Y Z AA AB AC U W@2 S T U T V U W X Y Z AA AB AC U
  W@2 AD@8 AE@2 AR AS@2
>`.pickRestart({
  A: "[[e3,b3,e4]@59 ~ [e3,b3,e4]@49 ~ [d4,a4,d5,g5]@2]/7", B: "[[d4,a4,d5,f#5]@31 ~]/2",
  C: "[d4,a4,d5] [e4,b4,e5] e3 [e4,b4,e5] e3!2 [e4,b4,e5] e3", D: "e3 [e4,b4,e5] e3!3 [g4,d5,g5]!3",
  E: "[g4,d5,g5] [d4,a4,d5] d4 [d4,a4,d5] d4!2 [d4,a4,d5] d4", F: "d4 [d4,a4,d5] d4!3 [d4,a4,d5]!3",
  G: "[[g4,d5]@2 [f#4,c#5]@2 f#4@2 [f#4,c#5]@4 f#4@2 [f#4,d5]@2 [f#4,d5]@4 [g4,d5,g5]@3 ~ [d5,g5]@2 [g4,d5,g5]@2 [g4,d5,g5]@2 [g4,d5,g5]@2 [g4,d5,g5]@2]/2", // G5 F#5 D G5
  H: "[[g4,d5,g5] [c4,g4,c5] c4 [c4,g4,c5] c4!2 [c4,g4,b4,d5]@7 [d4,f#4]!3]/2", // G5 C5 G D
  I: "[d4,f#4] [e4,g4] e3 [e4,b4,e5] e3!2 [e4,b4,e5] e3", J: "d4 [d4,a4,d5] d4!3 [g4,d5,g5]!3",
  K: "[[g4,d5,g5]@3 ~ c4@2 [c4,g4,c5]@2 c4@2 c4@2 [c4,g4,b4,d5]@14 [d4,f#4]@2 [d4,f#4]@2 [d4,f#4]@2]/2", // G5 C5 G D
  L: "[g4,d5] [d4,a4] d4 [d4,a4,d5] d4!2 [d4,a4,d5] d4", // G5 D5
  M: "[[g4,d5] [f#4,c#5] f#4 [f#4,d5] e4 f#4 [f#4,a4,d5]@3 [g4,d5,g5] g5 d5 [g4,d5,g5]!4]/2", // G5 F#5 D G5
  N: "[[g4,d5,g5]@3 ~ c4@2 [c4,g4,c5]@2 [c4,g4]@2 c4@2 [c4,g4,b4,d5]@14 [d4,f#4]@2 [d4,f#4]@2 [d4,f#4]@2]/2", // G5 C5 G D
  O: "[d4,f#4] [e4,g4] e3 [e4,b4,e5] e3!2 [e4,b4] e3", P: "e3 [e4,b4] e3!3 [g4,d5,g5]!3",
  Q: "[g4,d5,g5]@3 ~ d4@2 [d4,a4,d5]@2 d4@2 d4@2 [d4,a4,d5]@2 d4@2", // G5 D5
  R: "[[g4,d5,g5]@3 ~ c4@2 [c4,g4,c5]@2 c4@2 c4@2 [c4,g4,b4,d5]@6 [g4,b4,d5]@2 [g4,b4,d5]@2 [g4,b4,d5]@2 [g4,b4,d5]@2 [g4,b4,d5]@2 [g4,b4,d5]@2 [g4,b4,d5]@2]/2", // G5 C5 G
  S: "[g3,d4,g4]@15 ~", T: "[c4,g4,c5]@7 ~ [a3,e4,a4]@7 ~", U: "[d4,a4,d5]@15 ~", V: "[e3,b3,e4]@13 ~ [d4,a4,d5,g5]@2",
  W: "[c4,g4,c5,d5]!8", // Csus2
  X: "[c4,g4,c5,d5]@2 [c4,g4,c5,d5]@2 [c4,g4,c5,d5]@2 [c4,g4,c5,d5]@2 [c4,g4,c5,d5]@2 [c4,g4,c5,d5]@2 [c4,g4,c5,d5]@3 ~", // Csus2
  Y: "[g3,d4,g4]@5 ~ [g3,d4,g4]@4 [g3,d4,g4]@2 [g3,d4,g4]@3 ~", // G5
  Z: "[c4,g4,c5]@5 ~ [c4,g4,c5]!2 [a3,e4,a4]@5 ~ [a3,e4,a4]!2", // C5 A5
  AA: "[d4,a4,d5]@5 ~ [d4,a4,d5]@2 [d4,a4,d5]@2 [d4,a4,d5]@2 [d4,a4,d5]@2 [c4,g4,c5]!2", // D5 C5
  AB: "[c4,g4,c5]@5 ~ [c4,g4,c5]!2 [a3,e4,a4]@7 ~", AC: "[e3,b3,e4]@15 ~", AD: "[[e3,b3,e4]@55 ~@5 [e3,b3,e4]@67 ~]/8",
  AE: "[[d4,a4,d5]@31 ~]/2", AF: "[c4,g4,c5]!8", AG: "[c4,g4,c5]!5 [d4,a4,d5]!3",
  AH: "[e4,b4,e5] e3!2 [e4,b4,e5] e3!2 [e4,b4,e5] e3", AI: "e3 [e4,b4,e5] e3!2 [e4,b4,e5] e3 [e4,b4,e5] e3",
  AJ: "[d4,a4,d5] d4!2 [d4,a4,d5] d4!2 [d4,a4,d5] d4", AK: "d4 [d4,a4,d5] d4!2 [d4,a4,d5] d4 [d4,a4,d5] [c4,g4,c5]",
  AL: "[c4,g4,c5]@3 ~ c4@2 [c4,g4,c5]@2 c4@2 c4@2 [c4,g4,c5]@2 c4@2", AM: "c4 [c4,g4,c5] c4!2 [c4,g4,c5] [d4,a4,d5]!3",
  AN: "[c4,g4,c5] c4!2 [c4,g4,c5] c4!2 [c4,g4,c5] c4", AO: "c4 [c4,g4,c5] c4!2 [c4,g4,c5] c4 [d4,a4,d5]!2",
  AP: "[e4,b4,e5]!2 e3!2 [e4,b4,e5] e3 [e4,b4,e5] e3", AQ: "d4 [d4,a4,d5] d4!2 [d4,a4,d5] d4 [d4,a4,d5] d4",
  AR: "[c4,e4]!3 [b3,d4]!3 [a3,c4]!2", // C Bm Am
  AS: "[[a3,c4]@2 [g3,b3]@2 [g3,b3]@2 [g3,b3]@2 [a3,c4]@2 [g3,b3]@2 e3@6 [e3,b3,e4,b4]@13 ~, ~@12 g3@3 ~@17]/2", // Am G Am G E5
})).s("gm_distortion_guitar").gain(0.11).pan(0.3)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@4 A@4 B@4 C@2 D E@2 F G H I F G J K L M F G H N O M F G H I F G J K L M F G H N O P Q R I R S I T U Q R I R S I V@2
  F G H I F G J K L M F G H N O P Q R I R S I T U Q R I R S I V@2 B@4 C@2 W@2 E@2 P M X@4 I Y P M X@2 Z AA I Y P AB F X
  AC AD I@2 P M F X F X I@2 P M Q R I R S I T U Q R I R S I V@2 Q R I R S I T U Q R I R S I V@2 B@4 C@2 W@2 E@2 AE AF@2
>`.pickRestart({
  A: "[e1@63 ~]/4", B: "[e1@59 ~ e1@3 ~]/4", C: "[g2@5 ~ e2@5 ~ f#2@6 d2@5 ~ e2@3 ~ c2@3 ~]/2",
  D: "d2@5 ~ b1@5 ~ c2@2 d2@2", E: "[d2@31 ~]/2", F: "d2 e2!7", G: "e2!5 g2!3", H: "g2 d2!7", I: "d2!8", J: "g2 f#2!7",
  K: "f#2 g2!7", L: "g2 c2!7", M: "c2!5 d2!3", N: "d2!5 g2!3", O: "g2!2 c2!6", P: "c2!8", Q: "g1!8", R: "c2!4 a1!4",
  S: "e1!7 d2", T: "c2!3 d2!3 e2!2", U: "e2 f#2!3 g2!4", V: "g2 c2!2 g2 c2!2 g2 c2",
  W: "[d2@5 ~ b1@5 ~ c2@6 a1@5 ~ b1@3 ~ g1@3 ~]/2", X: "e2!8", Y: "d2!7 c2", Z: "d2 e2 a2 d2 e2 a2 e2 d2",
  AA: "d2 e2 d2 b1 d2 e2 d2 b1", AB: "c2!6 d2!2", AC: "d2@2 e2@3 ~ d2@2 b1@2 a1@2 g1@2 d2@2",
  AD: "b1 a1 e1 d2 b1 a1 e1!2", AE: "c2!3 b1!3 a1!2", AF: "[a1@2 g1@2 g1@2 g1@2 a1@2 g1@2 e1@6 e1@13 ~]/2",
})).s("gm_electric_bass_finger").gain(0.72)

// drums · kick
const kick = s("bd").struct(`<
  A@14 B C ~ D E@3 D E@5 D E@3 D E D E@3 D E D E@3 D E D E@9 F G E@6 F G D E@3 D E D E@3 D E D E@9 F G E@6 F G A@10 H I
  E@14 F J E@22 F G E@6 F G E@6 F G E@6 F G A@10 F K L
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "x", D: "x ~@3 x!2 ~@2", E: "x!2", F: "~@2 x ~@2 x ~@2", G: "x ~@2 x ~@3 x",
  H: "x!8", I: "x!7 ~", J: "x!4", K: "x ~@2 x ~@2 x ~", L: "~ x ~@6",
})).gain(0.72)

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

// drums · low tom
const low_tom = s("lt").struct("<~@63 A@2 ~@30 A@2 ~@58 A@2 ~@14 A@2 ~@12 B>".pickRestart({
  A: "x!8", B: "~ x ~@6",
})).gain(0.72)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@17 A@46 ~@2 A@30 ~@12 A B A@15 ~ A@30 ~@2 A@14 ~@12 A B ~>".pickRestart({
  A: "x!8", B: "x!7 ~",
})).gain(0.72)

// drums · china
const china = s("cr").struct(`<
  ~@8 A ~@5 B A ~@33 A C A C D A E F A C A C D A E F ~@16 A C A C D A E F A C A C D A E F A ~@2 G ~@4 A ~@2 G ~@14 E
  ~@17 A C A C D A E F A C A C D A E F A C A C D A E F A C A C D A E F A ~@2 G A ~@2 G A ~ E G H
>`.pickRestart({
  A: "x", B: "~@7 x", C: "x!2", D: "x ~@6 x", E: "x ~@2 x ~@2 x ~", F: "~ x ~@2 x ~@3", G: "~@3 x", H: "~ x ~@6",
})).gain(0.72)

// drums · tambourine
const tambourine = s("tb").struct("<[x!16]!14 [x!15 ~] ~@82 [x!16]!10 ~@66 [x!16]!10 ~@3>").gain(0.72)

stack(distortion_guitar, distortion_guitar_2, bass, kick, snare, low_tom, pedal_hat, china, tambourine)

More by Iron Maiden