Strudelify

Jailbreak

Thin Lizzy

KeyD majorTempo141 bpm
0:00/0:00
// Jailbreak — Thin Lizzy
// 141 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 4 "Track 4" overdriven guitar (copy of ch 3 "Track 3" overdriven guitar)
// note: Full arrangement: all 141 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(141/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · electric bass finger · "Track 2"
const bass = note(`<
  ~ A B C B C B C B C B C B C B C B C B C B C B C B ~ D@2 E@2 F@2 G@2 B C B C B C B C B C B C B C B C B C B C B C B ~
  D@2 E@2 D@2 H@2 D@2 E@2 F@2 G@2 I@8 J K L M J N O P Q R S T O U O V W X@2 B C B C B C B C B C B C B C B C B C B C B C
  B ~ D@2 E@2 D@2 H@2 D@2 E@2 F@2 G@2
>`.pickRestart({
  A: "d1@13 ~@3", B: "g1@3 ~@3 d1@2 ~@4 e1 ~ e1@2", C: "~@8 d1 ~ d1@2 e1@2 d1 ~", D: "[a1@7 d1@9]/2",
  E: "[a1@14 d1@17 ~]/2", F: "[a1@14 d1@15 ~@3]/2", G: "[g1 b1 d2 f#1@2 d1 e1@7 ~@3]/2", H: "[g1@14 e1@15 ~@3]/2",
  I: "[g1@2 b1@2 d2@2 f#1@4 d1@2 e1@17 ~@3]/2", J: "d2 ~ d2 ~ d2 ~ f#2 ~ d2 ~ d2@2 g2 ~ d2 ~",
  K: "d2@2 g#2 ~ d2 ~ d2@2 a2 ~ d2 ~ d2@3 ~", L: "d2 ~ d2 ~ d2 ~ f#2 ~ d2 ~ d2 ~ g2 ~ d2 ~",
  M: "d2@2 g#2 ~ d2 ~ d2 ~ a2 ~ d2 ~ d2@2 ~@2", N: "d2@2 g#2 ~ d2 ~ d2 ~ a2 ~ d2 ~ d2@3 ~",
  O: "d2 ~ d2 ~ d2@2 f#2 ~ d2 ~ d2@2 g2 ~ d2 ~", P: "d2@2 g#2 ~ d2@2 d2 ~ a2 ~ d2 ~ d2@2 ~@2",
  Q: "g1 ~ g1 ~ g1 ~ b1 ~ g1 ~ g1 ~ c2 ~ g1 ~", R: "g1@2 c#2 ~ g1 ~ g1@2 d2 ~ g1 ~ g1@3 ~",
  S: "g1 ~ g1 ~ g1 ~ b1 ~ g1 ~ g1@2 c2 ~ g1 ~", T: "g1@2 c#2 ~ g1@2 g1 ~ d2 ~ g1 ~ g1@2 ~@2",
  U: "d2@2 g#2 ~ d2 ~ d2@2 a2 ~ d2 ~ d2@2 ~@2", V: "d2@2 g#2 ~ d2 ~ d2@2 a2 ~ d2 ~ d2@2 b2 ~",
  W: "d2 ~ d2@2 c3 ~ d2 ~ d2@2 c#3 ~ d2 ~ d2@2", X: "[d3@21 ~@11]/2",
})).s("gm_electric_bass_finger").gain(0.72)

// chords · overdriven guitar · "Track 3"
const overdriven_guitar = note(`<
  ~ A B C B C B C B C B C B C B C B C B C B C B C B ~ D@4 E@2 F@2 B C B C B C B C B C B C B C B C B C B C B C B ~ G@2
  H@2 G@2 I@2 G@4 J@2 F@2 K@4 L@2 M@2 N O P Q R Q P S T U V W X Y Z AA AB AC@2 B C B C B C B C B C B C B C B C B C B C B
  C B ~ G@2 H@2 G@2 I@2 G@4 J@2 F@2
>`.pickRestart({
  A: "[d2,a2]@7 ~", B: "[g2,d3]@3 ~@3 [d2,a2]@3 ~@3 [e2,b2] ~ [e2,b2]@2",
  C: "~@8 [d2,a2] ~ [d2,a2]@2 [e2,b2]@2 [d2,a2] ~", D: "[[a2,e3]@6 ~ [d2,a2]@8 ~]/2",
  E: "[[a2,e3]@12 ~@2 [d2,a2]@15 ~@3]/2", F: "[g2 b2 d3 f#2@2 d2 e2@7 ~@3]/2", G: "[[a2,e3]@13 ~ [d2,a2]@16 ~@2]/2",
  H: "[[a2,e3]@12 ~@2 [d2,a2]@17 ~]/2", I: "[[g2,d3]@14 [e2,b2]@15 ~@3]/2", J: "[[a2,e3]@13 ~ [d2,a2]@15 ~@3]/2",
  K: "[g2 b2 d3 f#2@2 d2 e2@6 ~@4]/2", L: "[g2@2 b2@2 d3@2 f#2@4 d2@2 e2@11 ~@9]/2",
  M: "[g2 b2 d3 f#2@2 d2 e2@8 ~@2]/2", N: "d3 ~ d3 ~ d3 ~ f#3 ~ d3 ~ d3@2 g3@2 d3 ~",
  O: "d3@2 g#3 ~ d3 ~ d3 ~ a3@2 d3 ~ d3@2 ~@2", P: "d3 ~ d3 ~ d3@2 f#3 ~ d3 ~ d3@2 g3 ~ d3 ~",
  Q: "d3@2 g#3 ~ d3 ~ d3@2 a3 ~ d3 ~ d3@2 ~@2", R: "d3 ~ d3 ~ d3@2 f#3@2 d3 ~ d3@2 g3 ~ d3 ~",
  S: "d3@2 g#3@2 d3 ~ d3 ~ a3 ~ d3 ~ d3@2 ~@2", T: "g2 ~ g2 ~ g2 ~ b2 ~ g2 ~ g2 ~ c3 ~ g2 ~",
  U: "g2@2 c#3 ~ g2 ~ g2@2 d3 ~ g2 ~ g2@3 ~", V: "g2 ~ g2 ~ g2@2 b2 ~ g2 ~ g2@2 c3 ~ g2 ~",
  W: "g2@2 c#3 ~ g2 ~ g2@2 d3 ~ g2 ~ g2 ~@3", X: "[c3,d3] ~ d3 ~ d3 ~ f#3 ~ d3 ~ d3 ~ g3 ~ d3 ~",
  Y: "d3@2 g#3 ~ d3 ~ d3 ~ a3 ~ d3 ~ d3@2 ~@2", Z: "d3 ~ d3 ~ d3 ~ f#3 ~ d3 ~ d3 ~ g3 ~ d3 ~",
  AA: "d3@2 g#3 ~ d3 ~ d3@2 a3 ~ d3 ~ d3@2 b3 ~", AB: "d3 ~ d3@2 c4 ~ d3 ~ d3@2 c#4 ~ d3 ~ d3@2", AC: "[d4@21 ~@11]/2",
})).s("gm_overdriven_guitar").gain(0.46)

// other · lead 5 charang · "Track 5"
const lead_5_charang = note(`<
  ~@8 A@2 ~@16 B@4 C@2 D@2 ~@2 E@2 ~@3 F ~@16 G@4 H@2 I@2 G@2 J@2 C@2 D@2 ~@6 K@2 ~@43 G@4 H@2 I@2 G@2 J@2 C@2 D@2
>`.pickRestart({
  A: "[b3@4 ~@2 g3@3 ~@3 e3@8 ~@12]/2", B: "[e5@13 ~ d5@15 ~@3]/2", C: "[e5@6 ~ d5@7 ~@2]/2",
  D: "[[a4,d5] ~ [a4,d5] ~ [g4,d5] ~ [f#4,c5]@4 [g4,d5]@2 [e4,b4]@14 ~@6]/2", // D5 G5 F#dim G5 E5
  E: "[~@4 a4 ~ a4 ~ a4@4 g4@2 e4@10 ~@8]/2", F: "~ a4@2 ~@5", G: "[e5@6 ~ d5@8 ~]/2", H: "[e5@11 ~@3 d5@14 ~@4]/2",
  I: "[a4@10 ~@2 a4 ~ g4@5 ~ g4@2 f#4@2 g4@2 f#4@2 e4@2 ~@2]/2", J: "[e5@12 ~@2 d5@15 ~@3]/2",
  K: "[g3@2 b3@2 d4@2 f#3@4 d3@2 e3@15 ~@5]/2",
})).s("gm_lead_5_charang").gain(0.72)

// other · ocarina · "Track 11"
const ocarina = note("<~@82 A@8 ~@51>".pickRestart({
  A: "[~ c5@127]/8",
})).s("gm_ocarina").gain(0.5)

// other · lead 2 sawtooth · "Track 12"
const lead_2_sawtooth = note("<~@82 A@8 ~@51>".pickRestart({
  A: "c#6/8",
})).s("gm_lead_2_sawtooth").gain(0.45)

// other · lead 3 calliope · "Track 13"
const lead_3_calliope = note("<~@86 A@3 B C@2 D@2 E@4 ~@43>".pickRestart({
  A: "[d6@6 g5@6 d6@6 g5@6 ~ d6@6 g5@5 d6@6 g5@6]/3", B: "~ d6@6 g5@6 d6@2 ~", C: "[~@3 d6@5 g5@6 ~ d6@6 g5@6 d6@5]/2",
  D: "[~ g5@6 d6@6 g5@6 d6@6 g5@6 ~]/2", E: "[~@6 d6@6 g5@6 d6@5 g5@6 d6@6 g5@6 d6@5 g5@5 d6@5 g5@3 ~@5]/4",
})).s("gm_lead_3_calliope").gain(0.54)

// other · pad warm · "Track 14"
const pad_warm = note("<~@82 A@8 ~@51>".pickRestart({
  A: "f5/8",
})).s("gm_pad_warm").gain(0.45)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@25 A ~@6 B ~@7 C A ~@15 A ~@14 B ~@7 B ~ D E D E D E D E D E D E D E D F B ~@17 A ~@7 A ~@14 B ~
>`.pickRestart({
  A: "~@15 x", B: "~@5 x ~@2", C: "x", D: "~@3 x ~@4", E: "~ x ~@6", F: "~ x ~@5 x",
})).gain(0.8)

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

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 B ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@17 B ~ A ~ A ~@22
  B ~ A ~ B ~ B ~ A ~ A ~ A ~@3 B ~ A ~ A ~ A ~@16
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@3 x ~@2",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@25 A ~@6 B ~@8 C ~@15 A ~@14 B ~@7 B ~ D E D E D E D E D E D E D E D E F G ~@16 C ~@7 A ~@14 B ~
>`.pickRestart({
  A: "~ x ~@6", B: "~ x!2 ~@5", C: "~@10 x ~@2 x ~@2", D: "x ~@2 x", E: "~ x", F: "~ x ~@2", G: "x",
})).gain(0.8)

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

stack(
  bass, overdriven_guitar, lead_5_charang, ocarina, lead_2_sawtooth, lead_3_calliope, pad_warm, kick, snare, low_tom,
  hihat, mid_tom, open_hat, high_tom, crash
)

More by Thin Lizzy