Strudelify

Two Tickets To Paradise

Eddie Money

KeyG majorTempo122 bpm
0:00/0:00
// Two Tickets To Paradise — Eddie Money
// 122 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 95 bars on a 24-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 · distortion guitar · "Unnamed-000"
const distortion_guitar = note(`<
  A B@2 C A D@2 C A E@3 A F@3 G H G I G H G I A E@3 A F@3 G H G I G H G I J K@8 L@2 M N L@2 M N O@3 N O@3 N E@3 A F@3 G
  H G I G H G I P Q@8 R@4 S@2
>`.pickRestart({
  A: "~@3 [a3,f#4] [b3,g4] [c4,a4]", // D Em F
  B: "[[c4,a4]@5 ~ [b3,g4]@3 [b3,g4]@8 ~ [a3,f#4]@3 [a3,f#4]@8 ~ [g3,e4]@3 [g3,e4]@3 [g3,e4]@5 ~ [f#3,d4]@5 ~]/2", // F Em D C D
  C: "[a3,f#4]@2 ~", // D
  D: "[[c4,a4]@5 ~ [b3,g4]@3 [b3,g4]@8 ~ [a3,f#4]@3 [a3,f#4]@8 ~ [g3,e4]@3 [g3,e4]@3 [g3,e4]@5 ~ e4@3 f#4 e4 ~]/2", // F Em D C
  E: "[[c4,a4]@5 ~ [b3,g4]@10 ~@2 [a3,f#4]@3 [a3,f#4]@8 ~ [g3,e4]@3 [g3,e4]@8 ~ [f#3,d4]@3 f#4@6 e4 f#4@6 ~@14, ~@45 a3@13 ~@14]/3", // F Em D C D
  F: "[[c4,a4]@5 ~ [b3,g4]@3 [b3,g4]@6 [a3,f#4]@5 ~ [a3,f#4]@8 ~ [a3,f#4]@3 [a3,f#4]@6 [g3,e4]@3 [f#3,d4]@3 f#4@6 e4 d4@6 ~@14, ~@45 a3@13 ~@14]/3", // F Em D C D
  G: "~@9 g4@3 [b3,g4]@4 [a3,f#4]@4 [f#3,d4]@4", H: "d4@3 c4@13 ~@8, f#3@2 ~", I: "[f#3,d4]@2 ~",
  J: "~@4 [b3,g4] [c4,a4]", // Em F
  K: "[~@6 [d4,g4,c5]@5 ~ b4@3 a4@3 g4@3 b4@6 a4@3 [d4,f#4,a4]@5 ~@5 a4@4 b4@4 ~@3 [d4,g4,c5]@5 ~ [d4,g4,c5]@3 [c4,e4,b4]@5 ~ g4@3 b4@6 a4@3 [d4,f#4,a4]@5 ~@5 a4@4 b4@4 ~@6 [d4,g4,c5]@5 ~ b4@3 a4@3 g4@3 b4@6 a4@3 [d4,f#4,a4]@5 ~@5 a4@4 b4@4 ~@6 [d4,g4,c5]@5 ~ b4@3 a4@3 g4@3 b4@6 a4@3 [d4,f#4,a4]@5 ~ [a4,f#5]@4 [b4,g5]@4 [c5,a5]@4, ~@12 [c4,e4]@8 ~ [d4,f#4]@8 ~@11 [d4,f#4]@10 ~@19 [d4,f#4]@8 ~@11 [d4,f#4]@10 ~@10 [c4,e4]@8 ~ [d4,f#4]@8 ~@11 [d4,f#4]@10 ~@10 [c4,e4]@8 ~ [d4,f#4]@8 ~@19]/8", // Csus2 D Csus2 Cmaj7 D Csus2 D Csus2 …
  L: "[[c5,a5]@5 ~ [b4,g5]@3 [b4,g5]@8 ~ [a4,f#5]@3 [a4,f#5]@8 ~ [g4,e5]@3 [g4,e5]@8 ~ [f#4,d5]@5 ~]/2", // F Em D C D
  M: "[a4,f#5]@2 ~", N: "~@3 [a4,f#5] [b4,g5] [c5,a5]",
  O: "[[c4,a4]@5 ~ [b3,g4]@3 [b3,g4]@8 ~ [a3,f#4]@3 [a3,f#4]@8 ~ [g3,e4]@3 [g3,e4]@8 ~ [f#3,d4]@3 f#4@4 e4 ~ f#4@13 ~@8, ~@45 a3@13 ~@14]/3", // F Em D C D
  P: "~@4 [c4,a4] [d4,b4]", // F G
  Q: "[~@6 [d4,g4,c5]@5 ~ b4@3 a4@3 g4@3 b4@6 a4@3 [d4,f#4,a4]@5 ~@5 a4@4 b4@4 ~@3 [d4,g4,c5]@5 ~ [d4,g4,c5]@3 [c4,e4,b4]@5 ~ g4@3 b4@6 a4@3 [d4,f#4,a4]@5 ~@5 a4@4 b4@4 ~@6 [d4,g4,c5]@5 ~ b4@3 a4@3 g4@3 b4@6 a4@3 [d4,f#4,a4]@5 ~@5 a4@4 b4@4 ~@3 [d4,g4,c5]@5 ~ [d4,g4,c5]@3 [c4,e4,b4]@5 ~ g4@3 b4@6 a4@3 [d4,f#4,a4]@5 ~@5 a4@4 b4@4, ~@12 [c4,e4]@8 ~ [d4,f#4]@8 ~@11 [d4,f#4]@10 ~@19 [d4,f#4]@8 ~@11 [d4,f#4]@10 ~@10 [c4,e4]@8 ~ [d4,f#4]@8 ~@11 [d4,f#4]@10 ~@19 [d4,f#4]@8 ~@11 [d4,f#4]@8]/8", // Csus2 D Csus2 Cmaj7 D Csus2 D Csus2 …
  R: "[~@6 [d4,g4,c5]@5 ~ b4@3 a4@3 g4@3 b4@6 a4@3 [d4,f#4,a4]@5 ~@5 a4@4 b4@4 ~@3 [d4,g4,c5]@5 ~ [d4,g4,c5]@3 [c4,e4,b4]@5 ~ g4@3 b4@6 a4@3 [d4,f#4,a4]@16 ~@2, ~@12 [c4,e4]@8 ~ [d4,f#4]@8 ~@11 [d4,f#4]@10 ~@19 [d4,f#4]@8 ~@19]/4", // Csus2 D Csus2 Cmaj7 D C D
  S: "[[d5,a5]@5 ~]/2", // D5
})).s("gm_distortion_guitar").gain(0.8)

// bass · slap bass 1 · "Unnamed-001"
const bass = note(`<
  ~ A@2 B C A D B C E A B C A@2 B C A F B C A F B C A@2 B C A@2 B C A F B C A F B C G@8 A@2 B H A@2 B H A@2 B H A@2 B H
  A@2 B C A@2 B C A F B C A F B H G@10 I@4
>`.pickRestart({
  A: "c2@5 ~ g2@3 c3@6 g2@3 c3@3 g2@3", B: "d2@5 ~ a2@3 d3@6 a2@3 d3@3 a2@3", C: "d2@5 ~ a2@3 d3@7 a2@4 e2@4",
  D: "c2@5 ~ g2@3 c3@8 ~ g2@5 ~", E: "c2@5 ~ g2@3 ~@6 g2@3 c3@3 g2@3, ~@2 c3 ~", F: "c2@5 ~ g2@3 c3@7 g2@4 c2@4",
  G: "[[g2,g3]@10 ~@2 [c2,c3]@8 ~ [d2,d3]@8 ~ [d2,d3]@5 ~@5 a2@4 d2@4]/2", H: "d2@5 ~ a2@3 d3@7 a2@4 d2@4",
  I: "[[g2,g3]@10 ~@2 [c2,c3]@8 ~ [d2,d3]@8 ~ [d2,d3]@58 ~@8]/4", // G C D
})).s("gm_slap_bass_1").gain(0.8)

// drums · rim
const rim = s("rim").struct("<~@2 A ~@3 A ~@3 B ~@3 C ~@11 D ~@3 C ~@27 D ~@3 D ~@3 D ~@3 C ~@24>".pickRestart({
  A: "~@2 x!3 ~@3", B: "~@6 x!2 ~@16", C: "~@5 x ~@2", D: "~@2 x!2 ~@4",
})).gain(0.8)

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

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

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

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

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

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@41 A ~ B ~ A ~ A C D E ~ C D E ~ C ~@3 C ~@3 C ~@16 A ~ B ~ A ~ B ~ A ~ F ~ D ~
>`.pickRestart({
  A: "~ x ~@2", B: "~ x ~ x ~@4", C: "~@5 x", D: "x", E: "~@3 x", F: "~ x ~ x ~@2 x ~",
})).gain(0.8)

// drums · china
const china = s("cr").struct("<~@48 A B C ~ A B C ~ A ~@3 A ~@3 A ~@28 D ~>".pickRestart({
  A: "~@4 x!2", B: "x ~ x!2 ~@4", C: "~@2 x!2 ~@4", D: "x",
})).gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct("<~@48 A B ~ C A B ~ C A ~@3 A ~@3 A ~@30>".pickRestart({
  A: "~ x", B: "~@6 x!2", C: "x",
})).gain(0.8)

stack(distortion_guitar, bass, rim, kick, snare, low_tom, hihat, mid_tom, high_tom, china, tambourine)