Strudelify

Tequila

The Champs

KeyF majorTempo176 bpm
0:00/0:00
// Tequila — The Champs
// 176 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5871289; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 169 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(176/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@16 A B A C ~ D ~ E ~ D ~ E ~ D ~ E ~ D ~ F G H G F G H G I J K J I J K J L M N M N M O P Q ~@8 R ~ R ~ S ~ S ~@9 R ~
  R ~ S ~ S ~@9 M T M T M T P Q ~@8 M T M T M T P Q ~@12 U V U V U V U V ~@7 W X Y X Y X Z P Q W X Y X Y X Z AA AB
>`.pickRestart({
  A: "c5@2 ~@2 c5@2 ~@2 bb4@6 c5 ~", B: "~@2 c5 ~@3 c5 ~ bb4@2 bb4@2 bb4 ~@3",
  C: "~@2 bb4@2 ~@2 bb4@2 bb4@2 bb4@2 bb4 ~@3", D: "~@3 g5 ~@4", E: "~@3 eb5 ~@4", F: "~@7 c4",
  G: "f4@2 ~@2 f4@2 eb4@2 g4@2 eb4 ~@3 f4 ~", H: "~@2 c4 ~@11 c4@2", I: "~@7 g4",
  J: "c5@2 ~@2 c5@2 bb4@2 d5@2 bb4 ~@3 c5 ~", K: "~@2 g4 ~@11 g4@2", L: "~@5 c4 d4 f4", M: "ab4",
  N: "f4 ~@2 f4 ~ c4 d4 f4", O: "f4 ~@2 f4 ~@4", P: "g4!5 ~ g4 ~", Q: "c5@3 ~@13", R: "~ bb3", S: "~ bb4", T: "f4 ~@7",
  U: "a3@2 ~@2 a3@2 ~@2 g3@6 a3 ~", V: "~@2 a3 ~@3 a3 ~ g3@2 g3@2 g3 ~@3", W: "~@5 c5 d5 f5", X: "ab5",
  Y: "f5 ~@2 f5 ~ c5 d5 f5", Z: "f5 ~@2 f5 ~@4", AA: "f5!5 ~ f5 ~", AB: "c6@3 ~@13",
})).s("gm_trumpet").gain(0.4)

// other · trumpet · "B♭ Trumpet" · soft notes
const trumpet_soft = note("<~@64 A ~ B ~ C D C D E F E F ~@4 A ~ B ~ C D C D E F E F ~@77>".pickRestart({
  A: "~@4 f4@2 eb4@2 g4@2 eb4 ~@3 f4 ~", B: "~@4 f4@2 eb4@2 g4@2 eb4 ~@3 c4 ~", C: "~@2 c4 ~@5",
  D: "~@4 c4@2 bb3 ~@3 bb3@2 bb3@2 ~@2", E: "~@2 c5 ~@5", F: "~@4 c5@2 bb4 ~@3 bb4@2 bb4@2 ~@2",
})).s("gm_trumpet").gain(0.2)

// other · trombone
const trombone = note(`<
  ~@12 A B A C A B A C ~ D ~ E ~ D ~ E ~ D ~ E ~ D ~ F G H G F G H G F G H G F G H G ~ I J I J I J K L ~@4 M ~ N ~ O ~ O
  ~ P ~ P ~@5 M ~ N ~ O ~ O ~ P ~ P ~@9 I Q I Q I Q K L ~@8 I Q I Q I Q K L ~@11 F G H G F G H G R S T S R S T S ~ U J U
  J U J K L ~ U J U J U J V L
>`.pickRestart({
  A: "f3@2 ~@2 f3@2 ~@2 eb3@6 f3 ~", B: "~@2 f3 ~@3 f3 ~ eb3@2 eb3@2 eb3 ~@3",
  C: "~@2 eb3@2 ~@2 eb3@2 eb3@2 eb3@2 eb3 ~@3", D: "~@3 bb3 ~@4", E: "~@3 g3 ~@4", F: "~@7 c3",
  G: "f3@2 ~@2 f3@2 eb3@2 g3@2 eb3 ~@3 f3 ~", H: "~@2 c3 ~@11 c3@2", I: "c4", J: "a3 ~@2 a3 ~@4", K: "g3!5 ~ g3 ~",
  L: "c4@3 ~@13", M: "~@4 f3@2 eb3@2 g3@2 eb3 ~@3 f3 ~", N: "~@4 f3@2 eb3@2 g3@2 eb3 ~@3 c3 ~", O: "~ eb3", P: "~ eb4",
  Q: "a3 ~@7", R: "~@7 c4", S: "f4@2 ~@2 f4@2 eb4@2 g4@2 eb4 ~@3 f4 ~", T: "~@2 c4 ~@11 c4@2", U: "d4",
  V: "d4!5 ~ d4 ~",
})).s("gm_trombone").gain(0.4)

// other · trombone · soft notes
const trombone_soft = note("<~@68 A B A B C D C D ~@8 A B A B C D C D ~@77>".pickRestart({
  A: "~@2 f3 ~@5", B: "~@4 f3@2 eb3 ~@3 eb3@2 eb3@2 ~@2", C: "~@2 f4 ~@5", D: "~@4 f4@2 eb4 ~@3 eb4@2 eb4@2 ~@2",
})).s("gm_trombone").gain(0.2)

// chords · epiano1 · "Electric Piano"
const epiano1 = note(`<
  A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C D E D E D E F
  G H I H I H I H I H I H I H I H I H I H I H I H I H I H I H I H I H I H I H I H I D E D E D E J G H I H I H I H I D E
  D E D E J G ~@8 A B A C A B A C A B A C A B A C K L K L D E D E D E F G ~ D E D E D E F G
>`.pickRestart({
  A: "[a3,c4,f4]@2 ~@2 [a3,c4,f4]@2 ~@2 c3@4 ~@2 [a3,c4,f4] ~, f2@4 [g3,bb3,eb4]@3 ~, ~@3 c2", // F Eb
  B: "~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~ [g3,bb3,eb4]@2 [g3,bb3,eb4]@2 [g3,bb3,eb4] ~@3, f2@3 c3@3 c2@2", // F Eb
  C: "~@2 [g3,bb3,eb4]@2 ~@2 [g3,bb3,eb4]@2 [g3,bb3,eb4]@2 [g3,bb3,eb4]@2 [g3,bb3,eb4] ~@3, f2@3 c3@3 c2@2", // Eb
  D: "bb1@3 bb1 bb1@4, [d3,ab3,c4]", E: "[eb3,a3,c4] ~@2 [eb3,a3,c4] a1@2 f1@2, f1 c2 ~@2", F: "[g2,g3]!5 ~ [g2,g3] ~",
  G: "[c3,c4]@3 ~@13", H: "~@2 [f3,a3,c4] ~ c3@2 c2@2, f2 [eb3,g3,bb3]",
  I: "~@4 [f3,a3,c4]@2 [eb3,g3,bb3] ~@3 [eb3,g3,bb3]@2 [eb3,g3,bb3]@2 ~@2, f2@3 c3@3 c2@2", J: "[g2,g4]!5 ~ [g2,g4] ~",
  K: "[a3,c4,f4] ~ [a3,c4,f4] ~ c3@2 c2@2, f2 [g3,bb3,eb4]", // F Eb
  L: "[a3,c4,f4]@2 ~@2 [a3,c4,f4]@2 [g3,bb3,eb4] ~@3 [g3,bb3,eb4]@2 [g3,bb3,eb4]@2 ~@2, f2@3 c3@3 c2@2", // F Eb
})).s("gm_epiano1").gain(0.3)

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  ~@4 A B A B A B A B A B A B A B A B A B A B A B A B 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 C D C D E F A
  B A B A B A B A B A B A B A B 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 C D C D E G A B A B A B A B C D C D
  C D E G A B A B 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 C D C D E G ~ C D C D C D E G
>`.pickRestart({
  A: "f1@2 c2 c1", B: "f1@3 c2@3 c1@2", C: "bb1@3 bb1 bb1@4", D: "f1 c2 a1 f1", E: "g1!5 ~ g1 ~", F: "c2@3 ~@9 c2@4",
  G: "c2@3 ~@13",
})).s("gm_electric_bass_finger").gain(0.45)

// drums · kick
const kick = s("bd").struct(`<
  ~@58 A B C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D E D E D E D A B C D C D C D C
  D E D E D E D A B C D C D C D C D C D C D C D C D C D C D C D C D C D C D E D E D E D A B ~ E D E D E D A B
>`.pickRestart({
  A: "x ~ x!2", B: "x", C: "x ~@2 x", D: "x ~@2 x ~@4", E: "x ~@2 x!2 ~@3",
})).gain(0.5)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@8 A B A B A B A B A B A B A B A B A B A B 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 B C B C B ~@111
>`.pickRestart({
  A: "x ~@2 x", B: "x ~@2 x ~@4", C: "x ~@2 x!2 ~@3",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@58 A B C@40 D@6 A B C@8 D@6 A B C@28 D@6 A E ~ D@6 A E>".pickRestart({
  A: "~ x!3", B: "x ~@7 x ~ x!3 ~ x ~", C: "~ x ~@2", D: "~ x ~ x", E: "x",
})).gain(0.5)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@8 [~ x ~@2]!44 [~ x ~ x]!6 ~@111>").gain(0.3)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@61 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~@9 A ~ A ~ A ~ B ~@9 A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~@17
>`.pickRestart({
  A: "~@3 x", B: "~@6 x!2",
})).gain(0.5)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct(`<
  ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~@117
>`.pickRestart({
  A: "~@3 x", B: "~@6 x!2",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@51 A ~@47 A ~@15 A ~@35 A ~@17>".pickRestart({
  A: "~@4 x!2 ~@2",
})).gain(0.5)

// drums · ride
const ride = s("rd").struct(`<
  ~@58 A B C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C E F@6 A B C D C D C D C E F@6 A
  B C D C D C D C D C D C D C D C D C D C D C D C D C D C E F@6 A B ~ F@6 A B
>`.pickRestart({
  A: "x!5 ~ x ~", B: "x", C: "x ~ x ~ x ~ x!2", D: "~ x ~ x!2 ~ x ~", E: "x!2 ~ x ~@4", F: "x!8",
})).gain(0.5)

// drums · ride · soft notes
const ride_soft = s("rd").struct(`<
  ~@8 A B A B A B A B A B A B A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A D E@6 ~@111
>`.pickRestart({
  A: "x ~ x ~ x ~ x!2", B: "~ x ~ x!2 ~ x ~", C: "x!2 ~ x!2 ~ x ~", D: "x!2 ~ x ~@4", E: "x!8",
})).gain(0.3)

stack(
  trumpet, trumpet_soft, trombone, trombone_soft, epiano1, bass, kick, kick_soft, snare, snare_soft, low_tom,
  low_tom_soft, high_tom, ride, ride_soft
)