Strudelify

Viva Las Vegas

ZZ Top

KeyG majorTempo280 bpm
0:00/0:00
// Viva Las Vegas — ZZ Top
// 280 bpm, 2/2, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 152 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(280/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 · piano · "Unnamed-000"
const piano = note(`<
  ~@4 A B C@2 D E F G H I J@2 D E F K L M N@2 O M N@2 P Q R@2 S@2 T ~ S@2 T ~@16 K P U V@2 ~@4 L U R@2 ~@8 W X Y X Z AA
  AB AC@2 ~ W X W X W AD AE@2 AF AG@3 ~ AH AI B AJ AK AL AM F AN AO@2 AJ AP AQ AR@2 ~ AS U V@2 ~@4 U Q AT ~ AU@2 AV ~
  S@2 T ~ AU@2 AV ~ AW@2 AX@2 AY@7 AZ
>`.pickRestart({
  A: "d3@7 ~ d3@7 ~", B: "e3@3 ~ g3@3 ~ a3@3 ~ g3@3 ~", C: "[b3@3 ~ b3@7 ~ g3@11 ~ a3@3 ~ g3@3 ~]/2",
  D: "e4@7 ~ d4@7 ~", E: "b3@7 ~ g3@7 ~", F: "a#3@4 b3@3 ~@9", G: "~@8 d3@3 ~ d3@3 ~", H: "d3@7 ~ d3@3 ~ d3@3 ~",
  I: "e3@3 ~ g3@3 ~ a3@4 g3@3 ~", J: "[b3@3 ~ b3@3 ~ b3@3 ~ g3@11 ~ a3@4 g3@3 ~]/2", K: "~@4 g3@7 ~ f#3@3 ~",
  L: "e3@3 ~ e3@3 ~ e3@3 ~ b2@3 ~", M: "e3@3 ~ e3@11 ~", N: "[g3@3 ~ g3@3 ~ g3@3 ~ e3@15 ~ b2@3 ~]/2",
  O: "e3@7 ~ e3@7 ~", P: "e3@7 ~ e3@3 ~ b2@3 ~", Q: "e3@3 ~ e3@3 ~ e3@7 ~", R: "[g3@7 ~ g3@3 ~ e3@15 ~@5]/2",
  S: "[e4@3 ~ e4@19 ~ e4@7 ~]/2", T: "d4@3 ~ b3@3 ~@9", U: "e3@3 ~ e3@3 ~ e3@3 ~ e3@3 ~",
  V: "[g3@3 ~ g3@7 ~ e3@15 ~@5]/2", W: "g4@7 ~ g4@3 ~ e4@3 ~", X: "g4@3 ~ a4@3 ~ g4@3 ~ e4@3 ~", Y: "~@4 g4@7 ~ e4@3 ~",
  Z: "g4@3 ~ g4@3 ~ g4@3 ~ e4@3 ~", AA: "g4@3 ~ a4@3 ~@9", AB: "d5@2 e5@2 e5@3 ~ d5@7 ~",
  AC: "[b4@7 ~ g4@3 ~ b4@19 ~]/2", AD: "g4@3 ~ a4@3 ~ g4@3 ~ g4@3 ~", AE: "[a4@7 ~ a4@3 ~ a4@15 ~ a4@3 ~]/2",
  AF: "e5@3 ~ e5@3 ~ e5@3 ~ d5@3 ~", AG: "[f5@4 e5@3 ~ d5@3 ~ d5@31 ~@5]/3", AH: "~@4 d3@3 ~ d3@3 ~ d3@3 ~",
  AI: "d3@3 ~ d3@7 ~ d3@3 ~", AJ: "b3@3 ~ b3@7 ~ b3@3 ~", AK: "g3@7 ~ g3@3 ~ g3@3 ~", AL: "d4@2 e4@2 d4@7 ~ d4@3 ~",
  AM: "b3@3 ~ g3@3 ~ a3@4 g3@3 ~", AN: "~@4 d3@7 ~ d3@3 ~", AO: "[d3@7 ~ d3@3 ~ e3@7 ~ g3@7 ~ g3@3 ~]/2",
  AP: "g3@3 ~ e3@3 ~ g3@3 ~ g3@3 ~", AQ: "~@4 e4@7 ~ d4@3 ~", AR: "[b3@3 ~ g3@7 ~ b3@19 ~]/2",
  AS: "~@4 e3@3 ~ e3@3 ~ e3@3 ~", AT: "g3@3 ~ g3@7 ~ e3@3 ~", AU: "[e5@3 ~ e5@19 ~ e5@7 ~]/2", AV: "d5@3 ~ b4@3 ~@9",
  AW: "[[e4,g4]@3 ~ [e4,g4]@27 ~]/2", AX: "[[f#4,a4]@3 ~ [f#4,a4]@19 ~ [d4,f#4]@7 ~]/2",
  AY: "[[f#4,b4]@3 ~ [g4,b4]@107 ~]/7", AZ: "[g4,b4] ~@7",
})).s("gm_piano").gain(0.72).pan(0.1)

// other · electric guitar jazz · "Unnamed-000"
const electric_guitar_jazz = note(`<
  ~@40 A B C@2 D E F G H B I@2 J K F ~@4 L M N O@2 ~@4 P@2 Q ~ P@2 Q ~@45 R S O@2 ~@28
>`.pickRestart({
  A: "d4@7 ~ d4@7 ~", B: "e4@7 ~ a4@4 g4@3 ~", C: "[b4@3 ~ b4@7 ~ g4@11 ~ a4@3 ~ g4@3 ~]/2",
  D: "d5@2 e5@2 e5@3 ~ d5@7 ~", E: "b4@4 g4@3 ~ a4@3 ~ g4@3 ~", F: "a#4@4 b4@3 ~@9", G: "~@12 d4@3 ~",
  H: "d4@3 ~ d4@3 ~ d4@7 ~", I: "[b4@7 ~ b4@3 ~ g4@11 ~@5 g4@3 ~]/2", J: "e5@3 ~ e5@3 ~ d5@3 ~ d5@3 ~",
  K: "b4@3 ~ b4@3 ~ g4@7 ~", L: "~@12 b3@3 ~", M: "e4@3 ~ e4@3 ~ e4@3 ~ e4@3 ~", N: "e4@3 ~ e4@11 ~",
  O: "[g4@7 ~ g4@3 ~ e4@15 ~@5]/2", P: "[e5@3 ~ e5@19 ~ e5@7 ~]/2", Q: "d5@3 ~ b4@3 ~@9", R: "d4@2 e4@2 e4@3 ~ e4@7 ~",
  S: "e4@7 ~ e4@3 ~ e4@3 ~",
})).s("gm_electric_guitar_jazz").gain(0.72).pan(0.1)

// chords · piano · "Unnamed-001"
const piano_2 = note("<A B A C D E F G H E I J D E F G H E I ~@65 K L ~@66>".pickRestart({
  A: "[g3,b3,d4]@3 ~ [g3,b3,d#4]@3 ~ [g3,b3,e4]@6 [g3,b3,d4]@2", // G Gaug Em G
  B: "~ [g3,b3,d#4] ~ [g3,b3,d#4] g3@2 g3 ~, ~@4 [b3,e4]@3 ~", C: "~ [g3,b3,d#4] ~ [g3,b3,d#4] [g3,b3,e4]@3 ~",
  D: "~@4 [e3,g3,b3]@3 ~@5 [e3,g3,b3]@3 ~", E: "~@4 [b3,d4]@3 ~@5 [b3,e4]@3 ~", F: "~@4 [d4,g4]@3 ~@5 [b3,d4]@3 ~",
  G: "~@4 [b3,d4]@3 ~@5 [b3,d4]@3 ~", H: "~@4 [e4,g4,b4]@3 ~@5 [e4,g4]@3 ~", I: "~@4 [d4,g4]@3 ~@5 [b3,d4,g4]@3 ~",
  J: "~@4 [g3,b3]@3 ~@5 [g3,b3]@3 ~", K: "~@4 [b3,d#4,g4]@3 ~ [b3,e4,g4]@5 ~ [b3,d4,g4]@2",
  L: "~ [b3,d#4,g4] ~ [b3,d#4,g4] [b3,e4,g4] ~@3", // Baug Em
})).s("gm_piano").gain(0.72)

// chords · drawbar organ · "Unnamed-001"
const drawbar_organ = note(`<
  ~@19 A B@2 C B D B C B@3 C E ~@3 F ~@3 F ~@15 A B@2 C B D B C B@3 C B ~@3 F ~@3 F G H I H J K L M ~@2 G H N H G K O@2
  P Q R@2 ~ S T U V M L U W X Y U V Z L AA AB A ~@4 B@2 C B ~@3 AC ~@3 F ~@3 F ~@3 F ~@12
>`.pickRestart({
  A: "~@4 [b3,d4,g4]@7 ~ [a3,d#4,f#4]@3 ~", B: "~@4 [g3,b3]@3 ~@5 [g3,b3]@3 ~", C: "~@4 [b3,e4]@3 ~@5 [g3,b3]@3 ~",
  D: "~@4 [g3,b3]@3 ~@5 [g3,b3,d4]@3 ~", E: "~@4 [g2,b2,e3]@2 [b2,e3,g3]@4 [b2,e3,g3]@2 [e3,g3,b3]@3 ~",
  F: "[g3,b3,d4]@3 ~ [g3,b3,d#4]@2 [g3,b3,e4]@4 [g3,b3,d#4]@2 [g3,b3,d4]@3 ~", G: "~@4 [g3,c4,e4]@3 ~@5 [g3,c4]@3 ~",
  H: "~@4 [a3,c4,e4]@3 ~@5 [g3,c4]@3 ~", I: "~@4 [a3,c4,e4,g4]@7 ~ [g3,c4,e4]@3 ~",
  J: "~@4 [g3,c4,e4]@3 ~@5 [a3,c4]@3 ~", K: "~@4 [a3,c4,e4]@3 ~@5 [g3,c4,e4]@3 ~",
  L: "~@4 [e4,g4,b4]@3 ~@5 [e4,g4]@3 ~", M: "~@4 [b3,d4]@3 ~@5 [b3,d4]@3 ~", N: "~@4 [b3,e4,g4]@3 ~@5 [g3,c4]@3 ~",
  O: "~@4 [c#4,e4,g4]@3 ~@5 [c#4,g4]@3 ~", P: "~@4 [e4,g4,c#5]@3 ~@5 [e4,g4,b4]@3 ~", Q: "g4@11 ~@5",
  R: "[f#4,a4]@3 ~@5 [f#4,a4]@3 ~@5", S: "~@4 [a3,d4]@3 ~ [g3,d4]@3 ~ [f#3,c4,d4]@3 ~",
  T: "~@4 [e3,g3,b3]@3 ~@5 [e3,g3,b3]@3 ~", U: "~@4 [b3,d4]@3 ~@5 [b3,e4]@3 ~", V: "~@4 [d4,g4]@3 ~@5 [b3,d4]@3 ~",
  W: "~@4 [d4,g4]@3 ~@5 [b3,d4,g4]@3 ~", X: "~@4 [e3,g3,b3,d4]@7 ~ [e3,g3,b3,d4]@3 ~",
  Y: "~@4 [e3,g3,b3]@3 ~@5 [g3,b3]@3 ~", Z: "~@4 [g3,b3]@3 ~@5 [b3,e4]@3 ~", AA: "~@4 [b3,d4]@3 ~@5 [b3,d4,g4]@3 ~",
  AB: "~@4 [b3,d4,g4]@3 ~@5 [b3,e4,g4]@3 ~", AC: "~@4 [g3,b3,e4]@2 [b3,e4,g4]@4 [b3,e4,g4]@2 [e4,g4,b4]@3 ~",
})).s("gm_drawbar_organ").gain(0.72)

// chords · piano · "Unnamed-001"
const piano_3 = note(`<
  ~@32 A B C ~ A B C ~ D E F G H E I J D E F G H E I ~@13 A B C ~ A B C ~@22 K L M ~@16 J@2 N J ~@4 J@2 N ~ A B C ~ A B
  C ~ A B C ~ A B O P Q R S T U V W X
>`.pickRestart({
  A: "[e4,g4,c5]@3 ~ [e4,g4,c5]@7 ~ [e4,g4,c5]@3 ~", B: "~@4 [e4,g4,c5]@3 ~@5 [e4,g4,c5]@3 ~",
  C: "~@4 [d4,g4]@3 ~@5 [b3,e4,g4]@3 ~", D: "~@4 [e3,g3,b3]@3 ~@5 [e3,g3,b3]@3 ~", E: "~@4 [b3,d4]@3 ~@5 [b3,e4]@3 ~",
  F: "~@4 [d4,g4]@3 ~@5 [b3,d4]@3 ~", G: "~@4 [b3,d4]@3 ~@5 [b3,d4]@3 ~", H: "~@4 [e4,g4,b4]@3 ~@5 [e4,g4]@3 ~",
  I: "~@4 [d4,g4]@3 ~@5 [b3,d4,g4]@3 ~", J: "~@4 [g3,b3]@3 ~@5 [g3,b3]@3 ~", K: "~@7 [f#4,a4,d5]",
  L: "[f#4,a4,d5]@3 ~ [f#4,a4,d5]@3 ~ [f#4,a4,d5]@3 ~ [f#4,a4,d5]@3 ~", M: "[f#4,a4,d5]@3 ~@13",
  N: "~@4 [b3,e4]@3 ~@5 [g3,b3]@3 ~", O: "[f#4,c5,d5]@3 ~ [f#4,c5,d5]@7 ~ [f#4,c5,d5]@3 ~",
  P: "~@4 [f#4,c5]@3 ~@5 [f#4,c5]@3 ~", Q: "~@4 [b4,d5]@11 ~", R: "~@4 [g4,b4,d5]@11 ~", S: "~@4 [e4,g4,b4,d5]@11 ~",
  T: "~@4 [d4,e4,g4,b4]@11 ~", U: "~@4 [b3,d4,e4,g4]@11 ~", V: "~@4 [g3,b3,d4,e4]@11 ~", W: "~@4 [e3,g3,b3,d4]@11 ~",
  X: "[d3,e3,g3,b3] ~@7", // Em7
})).s("gm_piano").gain(0.72)

// bass · acoustic bass · "Unnamed-002"
const bass = note(`<
  A B A B A@15 C D@11 E F G A H F G A@17 C D@11 E F G A H F G A@2 F@5 I A@3 H F@6 J@2 K L M N O P A@15 C D@11 E F G A H
  F G A@2 F G A@2 F I Q R S@7 T
>`.pickRestart({
  A: "g2@3 ~@5 d2@3 ~@5", B: "g2@3 ~@5 d3@3 ~ d2@3 ~", C: "g2@3 ~ g2@7 ~ b2@3 ~", D: "e2@3 ~@5 b2@3 ~@5",
  E: "e2@3 ~@5 b2@3 ~ e3@3 ~", F: "c3@3 ~@5 g2@3 ~@5", G: "c3@3 ~@5 c3@3 ~@5", H: "g2@3 ~@5 d2@3 ~ g2@3 ~",
  I: "c3@3 ~@5 g2@3 ~ c3@3 ~", J: "a2@3 ~@5 e2@3 ~@5", K: "a2@3 ~@5 e3@3 ~@5", L: "[a3,c#4]@11 ~@5",
  M: "[d3,c4]@3 ~@5 [d3,c4]@3 ~@5", N: "[d3,c4]@3 ~@5 [d3,c4]@3 ~@3 [d3,c4]@2",
  O: "[d3,c4]@3 ~ [d3,c4]@3 ~ [d3,c4]@3 ~ [d3,c4]@3 ~", P: "[d3,c4]@3 ~ [c3,f#3]@3 ~ [b2,e3]@3 ~ [a2,d3]@3 ~",
  Q: "d3@3 ~@5 a2@3 ~@5", R: "d3@3 ~@5 d2@3 ~@5", S: "g2@3 ~@5 e2@3 ~ d2@3 ~",
  T: "g2@2 ~@2 [g1,g2]@3 ~ [g1,g2]@4 [g1,g2]@2 ~@2", // G
})).s("gm_acoustic_bass").gain(0.72)

// chords · woodblock · "Unnamed-005"
const woodblock = note(`<
  A B A B A@15 C D@11 E F G A H F G A@17 C D@11 E F G A H F G A@2 F@5 I A@3 H F@6 J@2 K L M N O P A@15 C D@11 E F G A H
  F G A@2 F G A@2 F I Q R S@6 T U
>`.pickRestart({
  A: "[g1,g2]@3 ~ [b1,g2]@3 ~ [d1,g2]@3 ~ [b1,g2]@3 ~", B: "[g1,g2]@3 ~ [b1,g2]@3 ~ [d2,g2]@3 ~ [d1,b1,g2]@3 ~",
  C: "[g1,g2]@3 ~ [b1,g2]@3 ~ g2@2 ~@2 [b1,g2]@3 ~, ~@4 g1@7 ~@5", D: "[e1,g2]@3 ~ [b1,g2]@3 ~ [b1,g2]@3 ~ [b1,g2]@3 ~",
  E: "[e1,g2]@3 ~ [b1,g2]@3 ~ [b1,g2]@3 ~ [b1,e2,g2]@3 ~", F: "[c2,g2]@3 ~ [b1,g2]@3 ~ [g1,g2]@3 ~ [b1,g2]@3 ~",
  G: "[c2,g2]@3 ~ [b1,g2]@3 ~ [c2,g2]@3 ~ [b1,g2]@3 ~", H: "[g1,g2]@3 ~ [b1,g2]@3 ~ [d1,g2]@3 ~ [g1,b1,g2]@3 ~",
  I: "[c2,g2]@3 ~ [b1,g2]@3 ~ [g1,g2]@3 ~ [b1,c2,g2]@3 ~", J: "[a1,g2]@3 ~ [b1,g2]@3 ~ [e1,g2]@3 ~ [b1,g2]@3 ~",
  K: "[a1,g2]@3 ~ [b1,g2]@3 ~ [e2,g2]@3 ~ [b1,g2]@3 ~", L: "g2@2 ~@2 [b1,g2]@3 ~ g2@2 ~@2 [b1,g2]@3 ~, [a2,c#3]@11 ~@5",
  M: "[d2,g2,c3]@3 ~ [b1,g2]@3 ~ [d2,g2,c3]@3 ~ [b1,g2]@3 ~", // Csus2 Em Csus2 Em
  N: "[d2,g2,c3]@3 ~ [b1,g2]@3 ~ [d2,g2,c3]@3 ~ [b1,g2]@2 [d2,c3]@2", // Csus2 Em Csus2 Em D7
  O: "[d2,g2,c3]@3 ~ [b1,d2,g2,c3]@3 ~ [d2,g2,c3]@3 ~ [b1,d2,g2,c3]@3 ~", // Csus2 G Csus2 G
  P: "[d2,g2,c3]@3 ~ [b1,c2,f#2,g2]@3 ~ [b1,e2,g2]@3 ~ [a1,b1,d2,g2]@3 ~", // Csus2 Cmaj7 Em G
  Q: "[d2,g2]@3 ~ [b1,g2]@3 ~ [a1,g2]@3 ~ [b1,g2]@3 ~", R: "[d2,g2]@3 ~ [b1,g2]@3 ~ [d1,g2]@3 ~ [b1,g2]@3 ~",
  S: "[g1,g2]@3 ~ [b1,g2]@3 ~ [e1,g2]@3 ~ [d1,b1,g2]@3 ~", T: "g1@3 ~@5 e1@3 ~ d1@3 ~",
  U: "g1@2 ~@2 g1@3 ~ g1@4 g1@2 ~@2",
})).s("gm_woodblock").gain(0.72)

stack(piano, electric_guitar_jazz, piano_2, drawbar_organ, piano_3, bass, woodblock)

More by ZZ Top