Strudelify

Animal

Def Leppard

KeyF♯ majorTempo122 bpm
0:00/0:00
// Animal — Def Leppard
// 122 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 4 electric bass finger (copy of ch 3 electric bass pick)
// note: Full arrangement: all 121 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(122/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.

// chords · overdriven guitar · "Guitar1"
const overdriven_guitar = note(`<
  A@2 B C D E F@2 ~@8 G@8 H I J K H I J K L@2 M@4 N@2 ~@8 G@8 H I J K H I J K L@2 M@4 O@2 P@2 Q R S T U V W X W Y W X W
  Y H I J K H I J K L@2 M@4 Z AA L@2 M@4 AB AC AD@3 AE ~ AF@3 ~
>`.pickRestart({
  A: "[f5,a#5]/2", B: "a4 c4!2 a4 c4!2 a4 c4", C: "a#4 c4!2 a4@2 a#4@3", D: "a#4 c4!2 a#4 c4!2 a#4 c4",
  E: "c5 c4!2 a#4 c5@4", F: "[[c4,c5]@2 c4@2 c4@2 [c4,c5]@2 c4@2 [c4,c5]!2 [c4,c5]@2 [c4,c5]@16 ~@2]/2",
  G: "[~ c6 f5 [f5,c6]@13]/2", H: "[b3,f#4] f#4 b3 e4 [b3,f#4] f#4 [f#4,b4]@2, [f#5,b5], b4 [f#4,b4] b4 ~",
  I: "[c#4,f#4] f#4 c#4 e4 [c#4,f#4] f#4 [f#4,c#5]@2, c#5 [f#4,c#5] c#5 ~", // F#5
  J: "[c#4,g#4] g#4 c#4 f#4 [c#4,g#4] g#4 [g#4,c#5]@2, c#5 [g#4,c#5] c#5 ~", // C#5
  K: "[g#4,c#5]@2 [c#4,e4] ~ [g#4,c#5]@2 [c#4,g#4,c#5]@2, ~ [g#4,c#5] ~@2, ~@3 [c#4,f#4]@3 ~@2", // C#5 C#m C#5 F#5
  L: "[~ c#5 f#4 ~ g#4@5 c#5 ~ c#5@5, ~@3 c#5@5 ~@2 f#4@6]/2",
  M: "[f#4 c#5 f#4 ~ f#4@5 f#4 ~ f#4@6 c#5 f#4 ~ g#4@5 c#5 ~ c#5@5, ~@3 c#5@5 ~@2 c#5@6 ~@3 c#5@5 ~@2 f#4@6]/4",
  N: "[f#4 c#5 f#4 ~ f#4@5 ~@7, ~@3 c#5@5 ~@8]/2", O: "[f#4 c#5 f#4 ~ f#4@5 ~@3 a#2@2 f#2@2, ~@3 c#5@5 ~@8]/2",
  P: "[g2@6 ~ a2@3 ~@2 [c3,g3]@2 [f#2,c#3]@2]/2", Q: "~@7 g2, [e2,e3]", R: "g2 ~ g2 [d3,d4]",
  S: "[e2,b2]@2 ~@5 [e2,b2]", T: "[e2,b2] ~ g2 [d3,d4]", U: "~@4 e4@2 f4@2 f#4@3 g4@3 g#4@2",
  V: "a4@2 b4@3 c5@3 c5@2 c#5@3 d5@3", W: "a#2!8", X: "c3!4 d3!4", Y: "c3!4 d3!2 c3!2",
  Z: "f#4 c#5 f#4 ~ f#4@4, ~@3 c#5@5", AA: "f#4 c#5 f#4 [c#5,f#5]@5", AB: "f#4 c#5 f#4 c#5 [f#4,c#5]!4",
  AC: "[f#4,c#5,f#5]!6 f#4 c#5", // F#5
  AD: "[f#4 [c#5,f#5] f#4 ~@5 f#4 c#5 f#4 ~@5 f#4 [c#5,f#5] f#4 [c#5,f#5] f#4 [c#5,f#5]!3, ~@3 [c#5,f#5]@6 ~@2 [c#5,f#5]@6 ~@7]/3", // F#5
  AE: "[a4,e5,a5] [f#4,c#5]!2 [f#4,e5,a5]@3 ~@2", // A5 F#5 F#m7
  AF: "[f#4 c#5 f#4 [f#4,c#5]@6 c#5 f#4 [f#4,c#5]@6 c#5 f#4 c#5 [f#4,c#5]!4]/3", // F#5
})).s("gm_overdriven_guitar").gain(0.25)

// chords · distortion guitar · "Guitar2"
const distortion_guitar = note(`<
  A B A B A B A C D C D C D C D C E F E F E F E F G H I@2 G H I@2 J K L M J K N O D C D C D C D C P Q P Q P Q P Q G H
  I@2 G H I@2 J K L M J K N R S@2 T U V W V X Y Z AA AB AC AD AE AF G H I@2 G H I@2 J K L M J K N AG J K L M J K AH AI
  AJ AK AL AM ~ AJ AN AO ~
>`.pickRestart({
  A: "[a#2,f3]!8", B: "[c3,g3]!3 [d3,a3]!3 [c3,g3]!2", C: "[c4,g4]!3 [d4,a4]!3 [c4,g4]!2", D: "[a#3,f4]!8",
  E: "[a#3,f4]!7 [a#3,e4,f4]", F: "[c4,f4,g4]!2 [c4,e4,g4] [d4,a4]!3 [c4,g4]!2, ~@3 f4@5",
  G: "[f#3,b3]@3 f#3@2 f#3@3, [f#5,b5]", H: "c#3 f#3 c#3 e3 c#3 f#3@2 ~",
  I: "[c#3 g#3 c#3 f#3 c#3 g#3@4 ~ [c#3,e3] [c#3,f#3]@3 [c#3,g#3]@2]/2", J: "f#2 [c#3,f#3] f#2!2 [c#3,f#3] f#2 b2 c#3",
  K: "e2 [b2,e3] e2!2 [b2,e3] e2 b2 c#3", L: "b2 [f#3,b3] b2!2 [f#3,b3] b2!3", M: "a2 [e3,a3] a2!2 [e3,a3] a2 b2 c#3",
  N: "b2 [f#3,b3] b2!2 [f#3,b3] b2!2 c#3", O: "[a2,e3]", P: "[a#2,f3,f4]!7 [a#2,f3,e4]",
  Q: "[c3,g3,f4]!2 [c3,g3,e4] [d3,a3]!3 [c3,g3]!2, ~@3 f4@5", R: "[a2,e3] ~ a#2 f#2",
  S: "[g2@6 ~ a2@3 ~@2 [c3,g3]@2 [f#2,c#3]@2]/2", T: "g2@2 ~@5 g2", U: "g2 ~ g2 [d3,d4]", V: "[e2,b2]@2 ~@5 [e2,b2]",
  W: "[e2,b2] ~ g2 [d3,d4]", X: "[e2,b2] ~@3", Y: "d4@4 d4 c4 d4 e4", Z: "e4@3 d4@3 c4@3 c4@7",
  AA: "d4@3 d4@3 d4!2 d4@2 c4@4 d4@2", AB: "d4 e4@3 e4@4 f4@8", AC: "d4@3 d4!2 c4@2 d4", AD: "a4@3 g4@3 f4@2 e4@6 e4@2",
  AE: "d4@3 d4@3 d4!2 d4@3 c4@3 d4@2", AF: "~ a#4 a4 g4, c5", AG: "a2 [e3,a3] a2!2 [e3,a3] a2 [e3,a3]!2",
  AH: "b2 [f#3,b3] b2!2 [f#3,b3]@2 b2 c#3", AI: "a2 [e3,a3] a2!2 [e3,a3]@2 b2 e3",
  AJ: "f#2 [c#3,f#3] f#2!2 [c#3,f#3]@2 b2 c#3", AK: "e2 [f#3,b3] e2!2 [b2,e3]@2 b2 c#3",
  AL: "b2 [f#3,b3] b2!2 [f#3,b3]!4", AM: "[a2,e3,a3]!3 [a2,e3,a3]@3 ~@2", AN: "e2 [b2,e3] e2!2 [b2,e3]@2 b2 c#3",
  AO: "b2 [f#3,b3] b2!2 [f#3,b3] [a2,e3,a3]!3", // B5 A5
})).s("gm_distortion_guitar").gain(0.25)

// bass · electric bass pick
const bass = note(`<
  A B A B A B A B A B A B A B A B A B A B A B A B C D E@2 C D E@2 D F C G D F C H A B A B A B A B A B A B A B A B C D
  E@2 C D E@2 D F C G D F C I J K L M N O C@2 A P A Q A P A Q C D E@2 C D E@2 D F C G D F C G D F C G D F C H D F C H ~
  D F C ~
>`.pickRestart({
  A: "a#1!8", B: "c2!3 d2!3 c2!2", C: "b1!8", D: "f#2!8", E: "c#2!8", F: "e2!8", G: "a1!8", H: "a1",
  I: "~@2 a#1 f#1, a1", J: "g1!7 a1", K: "a1!4 c2!2 f#1!2", L: "g1!8", M: "g1!6 d2!2", N: "e1!8", O: "e1!6 d2!2",
  P: "c2!4 d2!4", Q: "c2!4 d2!2 c2!2",
})).s("gm_electric_bass_pick").gain(0.25)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@6 A@2 B C D E B C D E B C D E B C D E ~@16 B C D E B C D E B C D E B C D E ~@65
>`.pickRestart({
  A: "[~@12 [c5,c6] ~ [c5,c6]@16 ~@2]/2", B: "[c5,f5] f4!2 [c5,f5] f4!2 [c5,f5] f4",
  C: "c5 [c5,f5] c5!2 [c5,f5] [c5,e5] [c5,f5]!2", D: "[c5,f5] f4!2 [c5,e5] f4!2 [c5,f5]!2",
  E: "f5 g5 f5 g5 [c5,f5]!2 [c5,e5]!2", // F5 C
})).s("gm_electric_guitar_clean").gain(0.25)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@7 A B C D E F G H I J K L M N O P Q R S T ~ R S U@8 V@2 B C D E F G H I J K L M N O P Q R S T ~ R S U@8 W@2 ~ X Y@2
  Z AA ~ AB ~@8 R S T ~ R S U@8 AC@2 AD@3 AE AF AG AH AI AJ AF AK AL ~ AM AN AO AP
>`.pickRestart({
  A: "~@5 f4 a4 a#4", B: "a4 f4@3 ~@4", C: "~@2 a4 c5 c5@2 c5@2", D: "c5 d5@2 ~@5", E: "~@2 a4 c5 d5@2 c5@2",
  F: "c5 f4 ~@6", G: "~@2 c5!2 c5@2 c5@2", H: "c5 d5@3 ~@4", I: "~ f5!3 d5@2 c5@2", J: "c5 f4@3 ~@4",
  K: "~@2 f4 d4 f4@2 f4 d4", L: "f4 ~", M: "~ g5!2 f5 a5@2 g5 f5", N: "f5@2 d5@6 d5 c5 a#4@2 ~@4",
  O: "~@2 g5 f5 g5@2 a5@2", P: "g5 f5@3 ~@2 f5@2", Q: "~@2 f5!4 f5@2", R: "~@2 b5!2 ~ b5 ~ b5",
  S: "a#5 a#5@2 a#5@2 a#5@2 a#5", T: "g#5 ~@5 a#5 g#5",
  U: "[g#5 ~@5 [f#5,a#5] [e5,g#5]@3 ~@3 f#5!2 f#5@3 ~@3 f#5!2 f#5@3 ~@3 f#5!2 f#5@3 ~@3 f#5!2 f#5@3 ~@3 a5!2 a#5@3 ~@3 a#5!2 b5@3 ~@3 b5!3]/8", // F# E
  V: "[~@5 b5!2 b5@3 ~@4 f4 a4]/2", W: "[~@5 b5!2 b5@3 f#5@2 ~@4]/2", X: "~@5 d4 e4@2 b3@2 b3@2 ~@4",
  Y: "[~@10 a4@4 a4@6 ~@2 b4!2 b4@2 b4@2 b4@2 e4@2]/2", Z: "~@2 a#4@2 ~ a#4@3 ~@2 a#5@2 ~@2 d5@2",
  AA: "a#4@4 a#4@3 a#4@4 ~@5", AB: "~@2 f#5!2 f#5@2 f#5@2 f#5@2 f#5@2 f#5@4", AC: "[~@5 b5!2 b5@3 ~@6]/2",
  AD: "~ b5 a#5 g#5 f#5 ~@3", AE: "~ a5 f#5 g#5 ~@3 b5", AF: "c#6@2 f#5 f#5@3 ~ b5", AG: "~@2 f#5@3 ~@2 b5, c#6@3 ~@5",
  AH: "f#6@2 f#5 f#5@3 b5@2", AI: "b5@4 b5@2 a5 g#5 f#5@4 ~@2 b5@2", AJ: "c#6@4 f#5@2 f#5@6 ~@2 c#6 d#6",
  AK: "c#6@2 b5 b5@2 a#5 g#5@2", AL: "~ a5 f#5 a5@3 ~@2", AM: "~ f#5 a#5 a#5@3 ~@2",
  AN: "b5@2 c#6@2 c#6 a#5@3 f#5@4 f#5@4", AO: "~ a5 f#5 a5 a5@2 ~ a#5", AP: "a#5 ~@3",
})).s("gm_string_ensemble_1").gain(0.64)

// drums · kick
const kick = s("bd").struct("<A@6 B A@15 C D A@7 E A@22 C D A@7 E A@8 F@8 A@15 E A@19 ~ G A@2 H ~>".pickRestart({
  A: "x!2", B: "x ~@3 x!2 ~@2", C: "x ~@3 x!2 ~ x", D: "x!2 ~ x!3 ~@2", E: "~ x", F: "x!8", G: "~@6 x!2",
  H: "x ~@3 x!3 ~",
})).gain(0.41)

// drums · rim
const rim = s("rim").struct("<~@31 A ~@7 B ~@23 A ~@7 B ~@23 A ~@25>".pickRestart({
  A: "x!2 ~@6", B: "~ x ~ x",
})).gain(0.41)

// drums · snare
const snare = s("sd").struct("<A@23 B A@15 ~ A@15 B A@15 ~@9 A@35 C ~ A@2 D ~>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "x!6 ~@2", D: "~@2 x ~@2 x!3",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct(`<
  A@6 B A@17 C@3 A C@3 D E@7 ~ A@16 C@3 A C@3 D E@7 ~@9 A@8 C@3 A C@3 D E@19 ~@2 E@2 A ~
>`.pickRestart({
  A: "x!8", B: "x!6 ~ x", C: "~ x!7", D: "x!5 ~@3", E: "x!7 ~",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct("<~@31 A B@7 ~@24 A B@7 ~@24 A B@19 ~@2 B@2 ~@2>".pickRestart({
  A: "~@5 x!3", B: "~@7 x",
})).gain(0.41)

// drums · crash
const crash = s("cr").struct("<~@6 A ~@17 B@3 ~ B@3 ~@25 B@3 ~ B@3 ~@16 C ~@8 B@3 ~ B@3 ~@26>".pickRestart({
  A: "~@3 x", B: "x", C: "~@5 x ~ x",
})).gain(0.41)

stack(
  overdriven_guitar, distortion_guitar, bass, electric_guitar_clean, string_ensemble_1, kick, rim, snare, hihat,
  open_hat, crash
)

More by Def Leppard