Strudelify

Viva la Mexico

Klaus & Klaus

KeyG majorTempo122 bpm
0:00/0:00
// Viva la Mexico — Klaus & Klaus
// 122 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 2 "BASS" named as a bass, played on electric bass finger (its electric guitar jazz patch is not one)
// note: Full arrangement: all 73 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.

// bass · electric bass finger · "BASS"
const bass = note(`<
  A B C D A B E D A B F G A B C D A B C D H I C D A J C D K L C D M G N D A O C D A B P D A O Q D H R C D ~@2 F S T I Q
  D K I C D A U P G V W L X ~
>`.pickRestart({
  A: "g1@2 ~ g1 b1@2 d2@2 g1@2 ~ g1 b1@2 d2@2", B: "g1@2 ~ g1 b1@2 c2@2 d2@2 ~ d2 f#2@2 a2@2",
  C: "d2@2 ~ d2 b1@2 a1@2 d2@2 ~ d2 f#2@2 a2@2", D: "d2@2 ~ d2 b1@2 a1@2 g1@2 ~ g1 b1@2 d2@2",
  E: "d2@2 ~ d2 f#2@2 a2@2 d2@2 ~ d2 b1@2 a1@2", F: "d2@2 ~ d2 f#2@2 a2@2 d2@2 ~ d2 f#2@2 a2@2",
  G: "d2 ~@2 d2 b1@2 a1@2 g1@2 ~ g1 b1@2 d2@2", H: "g1@2 ~ g1 b1@2 d2@2 g1 ~@2 g1 b1@2 d2@2",
  I: "g1 ~@2 g1 b1@2 c2@2 d2 ~@2 d2 f#2@2 a2@2", J: "g1 ~@2 g1 b1@2 c2@2 d2 ~@3 f#2@2 a2@2, ~@11 d2@2 ~@3",
  K: "g1 ~@2 g1 b1@2 d2@2 g1@2 ~ g1 b1@2 d2@2", L: "g1@2 ~ g1 b1@2 c2@2 d2 ~@2 d2 f#2@2 a2@2",
  M: "g1@2 ~ g1 b1@2 d2 ~ d2@2 ~ d2 f#2@2 a2@2", N: "g1@2 ~ g1 b1@2 c2@2 d2@2 ~@2 f#2@2 a2@2, ~@11 d2@2 ~@3",
  O: "g1 ~@2 g1 b1@2 c2@2 d2@2 ~ d2 f#2@2 a2@2", P: "d2@2 ~@2 b1@2 a1@2 d2 ~@2 d2 f#2@2 a2@2, ~@3 d2@2 ~@11",
  Q: "d2@2 ~ d2 b1@2 a1@2 d2 ~@2 d2 f#2@2 a2@2", R: "g1@2 ~ g1 b1@2 c2@2 d2 ~@3 f#2@2 a2@2, ~@11 d2@2 ~@3",
  S: "d2 ~@2 d2@2 ~ d2@2 g1@2 ~ g1 b1@2 d2@2", T: "g1 ~@2 g1 b1@2 d2@2 g1 ~@2 g1 b1@2 d2@2",
  U: "g1 ~@2 g1 b1@2 c2@2 d2@2 ~@2 f#2@2 a2@2, ~@12 d2 ~@3", V: "g1 ~@2 g1 b1@2 g1@2 d2@2 ~ d2 f#2@2 a2@2",
  W: "d2@2 ~@2 b1@2 a1@2 g1@2 ~ g1 b1@2 d2@2, ~@3 d2@2 ~@11", X: "d2@2 ~ d2 b1@2 a1@2 g1@2 ~@2 g1@4",
})).s("gm_electric_bass_finger").gain(0.6)

// chords · string ensemble 2 · "SLOWSTRIN"
const string_ensemble_2 = note("<A@7 B@8 C@8 D@2 E@7 F@2 G@3 H@8 I@8 J@8 K@4 L@7 ~>".pickRestart({
  A: "[[g4,b4]@24 [f#4,a4,c5]@32 [g4,b4]@32 ~ f#4@23, d4, ~@11 [a4,c5]@3]/7", // G F#dim G Am
  B: "[~@8 b4@32 [f#4,a4,c5]@31 ~ b4@32 [f#4,a4,c5]@24, ~ [d4,g4]@8 [d4,g4]@7]/8", // F#dim G5
  C: "[~@8 [g4,b4]@32 [f#4,a4,c5]@31 ~ [g4,b4]@31 ~ [f#4,a4,c5]@24, ~ d4@15]/8", D: "[~ [g4,b4]@3]/2",
  E: "[~@8 [f#4,a4,c5]@31 ~ [d4,g4,b4]@31 ~ [d4,f#4,a4,c5]@31 ~ [d4,g4,b4]@8]/7", // F#dim G D7 G
  F: "[~@8 [d4,f#4,a4,c5]@15 ~ [d4,g4,b4]@8]/2", G: "[~ [f#4,a4,c5]@2 [g4,b4]@3, ~ d4@5]/3",
  H: "[~@8 [d4,f#4,a4,c5]@31 ~ [d4,g4,b4]@32 [d4,f#4,a4,c5]@31 ~ [d4,g4,b4]@24]/8", // D7 G D7 G
  I: "[~@8 [d4,f#4,a4,c5]@31 ~ [d4,g4,b4]@31 ~ [d4,f#4,a4,c5]@31 ~ [d4,g4,b4]@24]/8", // D7 G D7 G
  J: "[~@8 [d4,f#4,a4,c5]@31 ~ d4@32 [d4,f#4,a4,c5] [d4,f#4,a4,c5]@31 [g4,b4]@24, ~@40 [g4,b4]@35 ~@29 d4 ~@23]/8", // D7 G
  K: "[~@8 [d4,f#4,a4,c5]@31 ~ [d4,g4,b4]@24]/4", // D7 G
  L: "[~@8 [d4,f#4,a4,c5]@31 ~ [d4,g4,b4]@16 ~ d4@15 [d4,g4,b4]@15 ~ [d4,f#4,a4,c5]@15 ~ [d4,g4,b4]@6 ~@2, ~@56 [f#4,a4,c5]@15 ~@41]/7", // D7 G D7 G F#dim
})).s("gm_string_ensemble_2").gain(0.24).pan(0.6)

// chords · marimba
const marimba = note("<~@4 A B ~@2 C D ~@14 E D ~@2 F G H ~@21 I J ~@2 K L ~@2 M N O ~ P J Q ~@4 R ~>".pickRestart({
  A: "[b3,g4] ~ [b3,g4] ~ b4 [d4,b4]!2 d4 [b3,g4] ~ [b3,g4] ~ b4 [d4,b4]!2 ~", // Em G Em G
  B: "[b3,g4]!2 ~ [b3,g4] ~ [b3,g4] ~ [b3,g4] [a3,f#4] ~ [g3,e4] ~ [f#3,d4]!3 d4", // Em D C D
  C: "[b3,g4] ~ [b3,g4] ~ b4 [d4,b4]!2 d4 [b3,g4] ~ [b3,g4] ~ [d4,b4] b4 [d4,b4]!2", // Em G Em G
  D: "[b3,g4]!2 ~ [b3,g4] ~ [b3,g4] ~ [b3,g4] [a3,f#4] ~ [g3,e4] ~ [f#3,d4]!4", // Em D C D
  E: "[b3,g4] ~ [b3,g4] ~ [d4,b4] b4 [d4,b4] d4 [b3,g4] ~ [b3,g4] ~ [d4,b4] b4 [d4,b4] ~", // Em G Em G
  F: "[b3,g4] ~ [b3,g4] ~ [d4,b4] b4 [d4,b4]!2 [b3,g4] ~ [b3,g4] ~ [d4,b4]!2 b4 [d4,b4]", // Em G Em G
  G: "b3 g4 b3 [b3,g4] ~ [b3,g4] ~ [b3,g4] [a3,f#4] ~ [g3,e4] ~ [f#3,d4] d4 [f#3,d4]!2", H: "[f#3,d4] ~@15",
  I: "[b3,g4] ~ [b3,g4] ~ b4 [d4,b4]!2 d4 [b3,g4] ~ [b3,g4] ~ [d4,b4]!3 b4", // Em G Em G
  J: "[b3,g4]!2 ~ [b3,g4] ~ [b3,g4] ~ [b3,g4] [a3,f#4] ~ [g3,e4] ~ [f#3,d4]!2 d4 [f#3,d4]", // Em D C D
  K: "[b3,g4] ~ [b3,c#4,g4] ~ [c#4,d4,b4] ~@3 [b3,g4] ~ [b3,g4] ~ [d4,b4] b4 [d4,b4] ~", // Em C#m7b5 G Em G
  L: "[b3,g4] ~ [b3,g4] ~ [b3,g4]!2 ~ [b3,g4] [a3,f#4] ~ [g3,e4] ~ [f#3,d4]!2 d4 [f#3,d4]", // Em D C D
  M: "[b3,g4] ~ [b3,g4] ~ b4 [d4,b4]!2 d4 [b3,g4] ~ [b3,g4] ~ [d4,b4]!2 b4 ~", // Em G Em G
  N: "[b3,g4]!2 ~ [b3,g4] ~ [b3,g4] ~ [b3,g4] [a3,f#4] ~ [g3,e4] ~ [f#3,d4] d4 [f#3,d4]!2", O: "f#3 ~@15",
  P: "[b3,g4] ~ [b3,g4] ~ [d4,b4] b4 [d4,b4] d4 [b3,g4] ~ [b3,g4] ~ [d4,b4]!3 ~", Q: "d4 ~@15",
  R: "~@8 [b3,g4] ~ [b3,g4]!3 ~@3", // Em
})).s("gm_marimba").gain(0.28).pan(0.2)

// chords · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note(`<
  A B C D A B C D A B C D ~@12 A B C D A B C D B D B D ~@18 C D A B C D A B C D A B C D B E B F ~
>`.pickRestart({
  A: "~@2 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~", // G
  B: "~@2 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [c5,d5,f#5] ~@3 [c5,d5,f#5] ~", // G D7
  C: "~@2 [c5,d5,f#5] ~@3 [c5,d5,f#5] ~@3 [c5,d5,f#5] ~@3 [c5,d5,f#5] ~", // D7
  D: "~@2 [c5,d5,f#5] ~@3 [c5,d5,f#5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~", // D7 G
  E: "f#5 ~ [c5,d5,f#5] ~@3 [c5,d5,f#5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~", // D7 G
  F: "~@2 [c5,d5,f#5] ~@3 [c5,d5,f#5] ~ [b4,d5,g5] ~@3 [b4,d5,g5] ~@3", // D7 G
})).s("gm_pizzicato_strings").gain(0.28).pan(0.9)

// chords · brass section · "BRASS"
const brass_section = note(`<
  A B C D ~@2 E F ~@2 G F ~@14 H F ~@2 I J K L M N ~@18 E O ~@2 E P ~@2 Q O ~@2 Q J R S T U ~
>`.pickRestart({
  A: "[g4,b4] ~ [g4,b4] ~ [b4,d5]@2 ~@2 [g4,b4] ~ [g4,b4] ~ [b4,d5]@2 ~@2", // G Bm G Bm
  B: "[g4,b4]!2 ~ [g4,b4] ~ [g4,b4] ~ [g4,b4] [a4,c5]@2 [b4,c5]@2 a4@2 ~@2, ~@10 g4 ~ f#4 ~@3", // G Am Cmaj7
  C: "[d5,f#5]@7 ~ [c5,e5]@7 ~", D: "[b4,d5]!2 ~ [b4,d5] [a4,c5] ~ [a4,c5] ~ [g4,b4]@5 ~@3",
  E: "[f#4,d5]@8 [e4,c5]@7 ~", F: "[d4,b4]!2 ~ [d4,b4] [c4,a4] ~ [c4,a4] ~ [b3,g4]@5 ~@3", G: "[f#4,d5] c5, ~@4 e4@3 ~",
  H: "[f#4,d5] [e4,c5]", I: "d5 c5, f#4@3 ~ e4@3 ~", J: "[d4,b4]!2 ~ [d4,b4] [c4,a4] ~ [c4,a4] ~ [b3,g4] ~@4 g4 b4 d5",
  K: "g5 ~@2 f#5 ~@2 e5 ~ d5@3 f#5 ~@4", L: "f#5 ~@2 e5 ~@2 c5 ~ [g4,b4]@4 ~ g4 b4 d5",
  M: "[b4,g5] ~@2 [a4,f#5] ~@2 [g4,e5] ~ [f#4,d5]@3 [a4,f#5] ~@4", // Em D C D
  N: "[d5,f#5] ~@2 [c5,e5] ~@2 [c5,f#5] ~ [b4,g5]@6 ~@2", O: "[d4,b4]!2 ~ [d4,b4] [c4,a4] ~ [c4,a4] ~ [b3,g4]@4 ~@4",
  P: "[d4,b4]!2 ~ [d4,b4] [c4,a4] ~ [c4,a4] ~ [b3,g4]@3 ~@5", Q: "[f#4,d5]@7 ~ [e4,c5]@7 ~",
  R: "g5@2 ~ f#5 ~@2 e5 ~ d5@2 ~ f#5 ~@4", S: "f#5 ~@2 e5 ~@2 c5@2 [g4,b4]@4 f#4 g4 b4 d5",
  T: "g5@2 ~ [a4,f#5] ~@2 [g4,e5] ~ [f#4,d5]@3 [a4,f#5] ~@4, b4 ~@15", // D C D
  U: "[a4,f#5] ~@2 [c5,e5] ~@2 [c5,f#5] ~ [b4,g5] ~ [b4,g5]!2 g5@2 ~@2, ~@12 b4 ~@3", // D C Cdim Em
})).s("gm_brass_section").gain(0.45).pan(0.3)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  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 C D A B C D B D B D A B C D A B C D A B C D A B C D A B C D A E C
  D A B C D A B C D B D B F ~
>`.pickRestart({
  A: "[b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~ [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~", // G
  B: "[b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~ [c4,d4,f#4] ~@2 [c4,d4,f#4] ~@2 [c4,d4,f#4] ~", // G D7
  C: "[c4,d4,f#4] ~@2 [c4,d4,f#4] ~@2 [c4,d4,f#4] ~ [c4,d4,f#4] ~@2 [c4,d4,f#4] ~@2 [c4,d4,f#4] ~", // D7
  D: "[c4,d4,f#4] ~@2 [c4,d4,f#4] ~@2 [c4,d4,f#4] ~ [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~", // D7 G
  E: "[b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~ [c4,d4,e4,f#4] ~@2 [c4,d4,f#4] ~@2 [c4,d4,f#4] ~", // G D7
  F: "[c4,d4,f#4] ~@2 [c4,d4,f#4] ~@2 [c4,d4,f#4] ~ [b3,d4,g4] ~@3 [b3,d4,g4] ~@3", // D7 G
})).s("gm_electric_guitar_clean").gain(0.32).pan(0.7)

// drums · kick
const kick = s("bd").struct("<[x!4]!72 ~>").gain(0.5)

// drums · snare
const snare = s("sd").struct("<[~@2 x!2 ~@2 x!2]!52 ~@2 [~@2 x!2 ~@2 x!2]!17 [~@4 x ~ x ~@3 x!3 ~@3] ~>").gain(0.5)

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!72 ~>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<[x!16]!19 [x!5 ~ x!10] [x!16]!51 [x!13 ~@3] ~>").gain(0.35)

// drums · crash
const crash = s("cr").struct("<A ~@3 A ~@7 A ~@11 A ~@3 A ~@3 A ~@3 A ~@15 A ~@7 A ~@3 A ~@3 A ~@4>".pickRestart({
  A: "x",
})).gain(0.4)

// drums · congas
const congas = s("conga:13").struct(`<
  A B A C D B@2 E B@2 E@2 B@2 F A E@4 B@2 E@2 A G A E B H A E@2 A E I B J B E@2 K E@5 L E@2 K I B@2 E A B E M N O E B E
  B E@3 B@2 E I ~
>`.pickRestart({
  A: "~@7 x", B: "~@13 x!2 ~", C: "~@9 x ~ x ~ x ~@2", D: "~@13 x ~@2", E: "~@12 x!3 ~", F: "~@7 x ~@4 x!3 ~",
  G: "~@6 x!2", H: "~@13 x!3", I: "~@10 x!3 ~@3", J: "~@11 x ~ x!2 ~", K: "~@11 x!4 ~", L: "~@10 x!5 ~",
  M: "~@12 x!2 ~@2", N: "~ x", O: "~ x ~ x",
})).gain(1.43)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  A B A C A@3 D E@6 F A E@3 D E@3 D A@2 E@5 D@2 E@2 G H I H D@3 E D E D@3 E D@2 G J D@3 E D K L M D E@3 D E@2 N E D I ~
>`.pickRestart({
  A: "x ~ x ~@4 x ~ x ~ x ~@4", B: "x ~ x ~@4 x ~ x!2 ~@5", C: "x!2 ~@2 x ~ x ~", D: "x ~ x ~@4 x ~@8",
  E: "x ~ x ~@4 x ~ x ~@6", F: "x ~ x ~@6 x ~@6", G: "x ~ x ~@4 x ~@5 x!2 ~", H: "x ~@2 x!2 ~@3", I: "x ~@2 x ~@4",
  J: "~@2 x ~@4 x ~ x ~@6", K: "x ~ x ~@4 x!2 ~@5 x ~", L: "x ~ x ~@6 x!2 ~@4 x", M: "~@7 x ~@8",
  N: "x ~@5 x ~@4 x ~@4",
})).gain(1.43)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  A B A C B@3 D E F G H E@2 G A G@3 D E@2 G D B I J G E@2 G D@2 E G K L M L D@2 K G D G D@2 K G D K N G D@2 O G@2 H P Q
  D G@3 D G@2 M E D M ~
>`.pickRestart({
  A: "~@4 x ~@7 x!2 ~@2", B: "~ x ~ x", C: "~@2 x ~@4 x", D: "~@4 x ~@4 x ~ x ~@4", E: "~@4 x ~@6 x!2 ~@3",
  F: "~@2 x ~@2 x!2 ~", G: "~@4 x ~@6 x ~@4", H: "~@2 x ~@2 x ~@2", I: "~ x ~@2", J: "~@4 x ~@6 x!3 ~@2",
  K: "~@4 x ~@4 x ~@6", L: "~@3 x ~@7 x ~@4", M: "~@3 x ~@4 x ~@7", N: "~@4 x ~@4 x ~@5 x", O: "~@4 x ~@4 x ~ x!3 ~@2",
  P: "~@4 x ~@2 x ~@4 x ~@3", Q: "x ~ x ~@6 x ~ x ~@4",
})).gain(1.43)

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

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

stack(
  bass, string_ensemble_2, marimba, pizzicato_strings, brass_section, electric_guitar_clean, kick, snare, clap, hihat,
  crash, congas, congas_2, congas_3, ht, mt
)